#include "syschartnavigationmgt.h" #include <QToolBar> #include <QVBoxLayout> #include <QDebug> #include <topcore/topcore.h> #include <topcore/topclasssqlthread.h> #include <topcore/topenummanager.h> #include <toputil/t.h> #include <tdatabaseutil/tsqlconnectionpoolv2.h> #include <tdatabaseutil/tsqlqueryv2.h> #include <tdatabaseutil/tsqlselectorv2.h> #include <tbaseutil/ttheme.h> #include <tbaseutil/tdataparse.h> #include <tbaseutil/tdataresponse.h> #include <tbaseutil/tresource.h> #include <tbaseutil/tenumlist.h> #include <twidget/tmessagebox.h> #include <twidget/tsplitter.h> #include <twidget/ttableviewv2.h> #include <twidget/ttableview.h> #include <twidget/ttreemodel.h> #include <twidget/tpagetool.h> #include <twidget/tuiloader.h> #include <twidget/tsearchentry.h> #include <twidget/tdialog.h> #include <twidget/tcodeedit.h> #include <twidget/twidget.h> #include <tchart/tchartwidget.h> #include <tchart/tchartstore.h> #include <tchart/tchartaxisnumeric.h> #include "syschartnavigation.h" SysChartNavigationMgt::SysChartNavigationMgt(const QString &iModuleName, const QVariantMap &iUrlPars, QWidget *iParent) : TopClassAbs(iParent) { this->setLicenseKey("sys_common"); initModule(iModuleName, iUrlPars); initUi(); // initSpecifiedClass(); parseParams(iUrlPars); refresh(); refreshActionState(); } SysChartNavigationMgt::~SysChartNavigationMgt() { } void SysChartNavigationMgt::refresh(bool iResetPageBol) { if (!this->uid().isEmpty()) { graphOnly(); return; } t::loading(this); TSqlSelectorV2 selector = getSqlSelector(iResetPageBol); QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector)); unloading(); TDataResponse dataRes(data.toMap()); if (dataRes.hasError()) { alertError(dataRes.errText(), "Error"); return; } if (mPageTool != nullptr) { mPageTool->setRowCount(dataRes.dataCount(), true); } QVariantList dataList = dataRes.data().toList(); TopClassHelper::formatTableData(this,&mTableConf,dataList); mTableView->loadData(dataList); mDetail->setUid(""); alertOk(ttr("Load data successful!")); } QVariantList SysChartNavigationMgt::selectedItems() const { return mTableView->selectedPrimaryKeys(); } QVariantList SysChartNavigationMgt::selectedDataMaps() const { return mTableView->selectedRowDataMaps(); } QString SysChartNavigationMgt::specifiedClass() { return mSpecifiedClass; } void SysChartNavigationMgt::onSelectionChanged() { QVariantList selectedItems = mTableView->selectedPrimaryKeys(); QString uid; if (!selectedItems.isEmpty()) { uid = selectedItems.first().toString(); } if (mDetail->uid() != uid) { mDetail->setLastUid(uid); if (!mDetail->isDataModified()) { mDetail->setUid(uid); } } refreshActionState(); } void SysChartNavigationMgt::onDetailChanged() { refreshActionState(); } void SysChartNavigationMgt::onPageChanged() { refresh(false); } void SysChartNavigationMgt::initUi() { mBodyWidget = new QWidget(this); this->setCentralWidget(mBodyWidget); mBodySplitter = new TSplitter(this); mBodySplitter->setOrientation(Qt::Horizontal); mBodyLayout = new QVBoxLayout(mBodyWidget); mBodyLayout->setContentsMargins(0, 0, 0, 0); mBodyLayout->setSpacing(0); mBodyLayout->addWidget(mBodySplitter); mMgtWidget = new QWidget(this); QVBoxLayout *mgtLayout = new QVBoxLayout(mMgtWidget); mgtLayout->setMargin(0); mgtLayout->setSpacing(0); // top toolbar if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("MAIN_TOOLBAR"))) { mgtLayout->insertWidget(0, toolbar); mSearchEntry = qobject_cast<TSearchEntry *>(uim()->getWidget("MAIN_TOOLBAR/SEARCH_ENTRY")); if (mSearchEntry != nullptr) { connect(mSearchEntry, SIGNAL(search(QString,QVariant)), this, SLOT(refresh())); } } // tableview mTableView = new TTableView(this); TopClassHelper::parseTableConf0(this,"view",&mTableConf); mTableView->setDataKeyList(mTableConf.dataKeys); mTableView->setPrimaryKey(mTableConf.primaryKey); QVariantList headerItems = mTableConf.horizontalHeaders; headerItems.prepend(QVariant()); mTableView->setHeaderItem(headerItems); mTableView->horizontalHeader()->setFixedHeight(40); QMenu *popMenu = qobject_cast<QMenu*>(uim()->getWidget("TABLEVIEW_POPUP")); if(popMenu) { mTableView->setContextMenu(popMenu); } if (mSearchEntry != nullptr) { mSearchEntry->setOptionList(TDataParse::headerItem2searchList(mTableView->headerItem())); mSearchEntry->setPlaceholderText(ttr("Search %1")); } mgtLayout->addWidget(mTableView); connect(mTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(onSelectionChanged())); mBodySplitter->addWidget(mMgtWidget); // bottom toolbar if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("BOTTOM_TOOLBAR"))) { mBodyLayout->addWidget(toolbar, 0); mPageTool = qobject_cast<TPageTool *>(uim()->getWidget("BOTTOM_TOOLBAR/PAGE_TOOL")); if (mPageTool != nullptr) { mPageTool->setPageSizeVisible(true); connect(mPageTool, SIGNAL(pageChanged(int,int)), this, SLOT(onPageChanged())); } } // detail mDetail = new SysChartNavigation("sys-chart-navigation"); mBodySplitter->addWidget(mDetail); const QStringList factors = config("view_factors","1:1").toString().split(":"); if(factors.size() == 2) { const float f0 = factors[0].toFloat(); const float f1 = factors[1].toFloat(); const float total = f0 + f1; const int w = width(); mBodySplitter->setSizes(QList<int>() << static_cast<int>(w*f0/total) << static_cast<int>(w*f1/total)); } connect(mDetail, SIGNAL(windowModifyChanged(bool)),this,SLOT(onDetailChanged())); } void SysChartNavigationMgt::initSpecifiedClass() { t::loading(this); TSqlSelectorV2 selector; selector.setTable("pub_conf"); selector.setField("text_data"); selector.setWhere("path", "navigation_specified_class"); QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_VALUE, QVariant::fromValue(selector)); unloading(); TDataResponse dataRes(data.toMap()); if (dataRes.hasError()) { alertError(dataRes.errText(), "Error"); return; } mSpecifiedClass = dataRes.data().toString(); qDebug()<<"Specified Class: "<<mSpecifiedClass; } TSqlSelectorV2 SysChartNavigationMgt::getSqlSelector(bool iResetPageBol) { TSqlSelectorV2 selector; if(mTableConf.dbTableName.isEmpty()) { selector.setTable("pub_chart_navigation"); } else { selector.setTable(mTableConf.dbTableName); } selector.setReturnRowCount(true); selector.setField(mTableConf.queryFields); int pageNumInt = 1; int pageSizeInt = -1; if (mPageTool != nullptr) { if (iResetPageBol) { mPageTool->setCurrentPage(1, true); } pageNumInt = mPageTool->currentPage(); pageSizeInt = mPageTool->pageSize(); } if (!mSpecifiedClass.isEmpty()) { selector.setWhere("class", mSpecifiedClass); } if (mSearchEntry != nullptr) { selector.whereRef().append(mSearchEntry->sqlWhere()); } selector.setOrder("id", Qt::AscendingOrder); if (pageNumInt < 1) { pageNumInt = 1; } if (pageSizeInt < 1) { pageSizeInt = 100; } if (mPageTool != nullptr) { selector.setPage(pageNumInt, pageSizeInt); } return selector; } void SysChartNavigationMgt::graphOnly() { mDetail->setUserData("to_detail_data", this->userData("to_detail_data")); mDetail->setUid(this->uid()); QWidget *wid = mBodySplitter->widget(0); wid->setVisible(false); mDetail->graphOnly(mToolBarMode); } void SysChartNavigationMgt::parseParams(const QVariantMap &iParamMap) { QString name = iParamMap.value("name").toString(); if (!name.isEmpty()) { TSqlSelectorV2 selector; selector.setTable("pub_chart_navigation"); selector.setField("id"); selector.setWhere("name", name); QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_VALUE, QVariant::fromValue(selector)); TDataResponse dataRes(data.toMap()); if (dataRes.hasError()) { alertError(dataRes.errText(), "Error"); return; } QString uid = dataRes.data().toString(); this->setUid(uid); } mToolBarMode = iParamMap.value("toolbar_mode", 0).toInt(); }