205 lines
10 KiB
C++
205 lines
10 KiB
C++
#include "etable.h"
|
|
#include "gutil/qgui.h"
|
|
#include "main.h"
|
|
#include <QSpinBox>
|
|
#include <QLineEdit>
|
|
#include <QPainter>
|
|
#include "xlsxcellrange.h"
|
|
#include "xlsxchart.h"
|
|
#include "xlsxchartsheet.h"
|
|
#include "xlsxdocument.h"
|
|
#include "xlsxrichstring.h"
|
|
#include "xlsxworkbook.h"
|
|
#include "xlsxworksheet.h"
|
|
|
|
ETable::ETable(EBase *multiWin) : EBase(multiWin) {
|
|
mType = EBase::Table;
|
|
dlg.setWindowFlag(Qt::WindowContextHelpButtonHint, 0);
|
|
dlg.resize(600, 600);
|
|
dlg.setWindowTitle(tr("Table Editor"));
|
|
auto vBox = new VBox(&dlg);
|
|
vBox->setContentsMargins(6, 0, 6, 0);
|
|
|
|
auto hBox = new HBox(vBox);
|
|
hBox = new HBox(vBox);
|
|
table = new TableWidget(8, 3);
|
|
auto pal = table->palette();
|
|
pal.setBrush(QPalette::Active, QPalette::WindowText, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::WindowText, QBrush({157,157,157,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::WindowText, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Button, QBrush({60,60,60,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Button, QBrush({60,60,60,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Button, QBrush({60,60,60,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Light, QBrush({120,120,120,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Light, QBrush({120,120,120,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Light, QBrush({120,120,120,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Midlight, QBrush({90,90,90,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Midlight, QBrush({90,90,90,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Midlight, QBrush({90,90,90,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Dark, QBrush({30,30,30,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Dark, QBrush({30,30,30,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Dark, QBrush({30,30,30,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Mid, QBrush({40,40,40,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Mid, QBrush({40,40,40,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Mid, QBrush({40,40,40,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Text, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Text, QBrush({157,157,157,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Text, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::BrightText, QBrush({95,255,165,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::BrightText, QBrush({95,255,165,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::BrightText, QBrush({95,255,165,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::ButtonText, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::ButtonText, QBrush({157,157,157,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::ButtonText, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Base, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Base, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Base, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Window, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Window, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Window, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Shadow, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Shadow, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Shadow, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Highlight, QBrush({0,204,106,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Highlight, QBrush({0,204,106,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Highlight, QBrush({30,30,30,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::HighlightedText, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::HighlightedText, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::HighlightedText, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::Link, QBrush({0,204,106,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::Link, QBrush({48,140,198,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::Link, QBrush({0,204,106,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::LinkVisited, QBrush({0,63,19,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::LinkVisited, QBrush({255,0,255,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::LinkVisited, QBrush({0,63,19,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::AlternateBase, QBrush({0,63,19,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::AlternateBase, QBrush({52,52,52,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::AlternateBase, QBrush({0,63,19,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::NoRole, QBrush({0,0,0,255}, Qt::NoBrush));
|
|
pal.setBrush(QPalette::Disabled, QPalette::NoRole, QBrush({0,0,0,255}, Qt::NoBrush));
|
|
pal.setBrush(QPalette::Inactive, QPalette::NoRole, QBrush({0,0,0,255}, Qt::NoBrush));
|
|
pal.setBrush(QPalette::Active, QPalette::ToolTipBase, QBrush({60,60,60,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::ToolTipBase, QBrush({255,255,220,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::ToolTipBase, QBrush({60,60,60,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::ToolTipText, QBrush({212,212,212,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::ToolTipText, QBrush({0,0,0,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::ToolTipText, QBrush({212,212,212,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::PlaceholderText, QBrush({255,255,255,128}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::PlaceholderText, QBrush({255,255,255,128}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Inactive, QPalette::PlaceholderText, QBrush({255,255,255,128}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Active, QPalette::NColorRoles, QBrush({157,157,157,255}, Qt::SolidPattern));
|
|
pal.setBrush(QPalette::Disabled, QPalette::NColorRoles, QBrush({255,255,255,255}, Qt::SolidPattern));
|
|
|
|
pal.setBrush(QPalette::Inactive, QPalette::Highlight, pal.brush(QPalette::Active, QPalette::Highlight));
|
|
table->setPalette(pal);
|
|
auto ft = table->font();
|
|
ft.setStyleStrategy(QFont::NoAntialias);
|
|
table->setFont(ft);
|
|
table->setShowGrid(false);
|
|
table->setStyleSheet("QTableView::item { border: 1px solid red;}");
|
|
vBox->addWidget(table);
|
|
|
|
read();
|
|
}
|
|
ETable::ETable(const JObj &json, EBase *multiWin) : EBase(multiWin) {
|
|
mType = EBase::Table;
|
|
setBaseAttr(json);
|
|
url = json["url"].toString();
|
|
read();
|
|
}
|
|
int ETable::read() {
|
|
QXlsx::Document xlsxDoc("d:/aaa.xlsx");
|
|
if(! xlsxDoc.isLoadPackage()) {
|
|
qCritical() << "Failed to load xlsx";
|
|
return -1;
|
|
}
|
|
auto currentSheet = xlsxDoc.currentWorksheet();
|
|
if(currentSheet == 0) {
|
|
qCritical() << "Failed to load Worksheet";
|
|
return -1;
|
|
}
|
|
int maxRow = -1, maxCol = -1;
|
|
auto cells = currentSheet->getFullCells(&maxRow, &maxCol);
|
|
for(auto &cell : cells) {
|
|
auto value = cell.cell->value();
|
|
auto fmt = cell.cell->format();
|
|
fmt.font();
|
|
qDebug()<<cell.row<<cell.col<<cell.cell->cellType()<<fmt.font()<<fmt.fontColor()<<fmt.patternBackgroundColor()<<value;
|
|
}
|
|
}
|
|
|
|
void ETable::paint(QPainter *painter, const QStyleOptionGraphicsItem *a, QWidget *b) {
|
|
auto inner = innerRect();
|
|
painter->setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);
|
|
painter->drawPixmap(inner.left(), inner.top(), img);
|
|
EBase::paint(painter, a, b);
|
|
}
|
|
void ETable::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) {
|
|
dlg.exec();
|
|
img = table->grab();
|
|
auto twidth = table->width();
|
|
if(twidth != img.width()) {
|
|
img = img.scaledToWidth(twidth, Qt::SmoothTransformation);
|
|
qDebug()<<"scaledToWidth"<<twidth;
|
|
}
|
|
}
|
|
QWidget* ETable::attrWgt() {
|
|
auto wgtAttr = new QWidget;
|
|
auto vBox = new VBox(wgtAttr);
|
|
vBox->setContentsMargins(6, 0, 6, 0);
|
|
if(mMultiWin) vBox->setSpacing(3);
|
|
|
|
addBaseAttrWgt(vBox);
|
|
|
|
auto hBox = new HBox(vBox);
|
|
hBox->addLabel(translate("","Basic Properties"));
|
|
|
|
auto line = new QFrame;
|
|
line->setFrameShape(QFrame::HLine);
|
|
line->setFrameShadow(QFrame::Sunken);
|
|
hBox->addWidget(line, 1);
|
|
|
|
hBox = new HBox(vBox);
|
|
hBox->addSpacing(6);
|
|
hBox->addLabel("URL:");
|
|
|
|
auto url_fd = new QLineEdit(url);
|
|
hBox->addWidget(url_fd);
|
|
connect(url_fd, &QLineEdit::textChanged, this, [this](const QString &text) {
|
|
url = text;
|
|
});
|
|
|
|
hBox = new HBox(vBox);
|
|
auto lb = hBox->addLabel(tr("Refresh every")+":");
|
|
lb->setMinimumWidth(70);
|
|
lb->setAlignment(Qt::AlignVCenter|Qt::AlignRight);
|
|
|
|
auto edRefresh = new QSpinBox;
|
|
edRefresh->setRange(0, 99999);
|
|
edRefresh->setValue(refresh);
|
|
connect(edRefresh, &QSpinBox::valueChanged, this, [=](int value) {
|
|
refresh = value;
|
|
});
|
|
hBox->addWidget(edRefresh);
|
|
hBox->addSpacing(-3);
|
|
hBox->addLabel("s");
|
|
hBox->addStretch();
|
|
|
|
vBox->addStretch();
|
|
return wgtAttr;
|
|
}
|
|
|
|
JObj ETable::attrJson() const {
|
|
JObj obj;
|
|
addBaseAttr(obj);
|
|
obj["elementType"] = "Table";
|
|
obj["url"] = url;
|
|
obj["zoom"] = zoom;
|
|
obj["refreshSec"] = refresh;
|
|
obj["offX"] = _x;
|
|
obj["offY"] = _y;
|
|
obj["scaleX"] = scaleX;
|
|
obj["scaleY"] = scaleY;
|
|
return obj;
|
|
}
|