#include "sysenumlistmgt.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "sysenumlist.h" #include "sysenumlistmgtthread.h" SysEnumListMgt::SysEnumListMgt(const QString &iModuleNameStr, const QVariantMap &iUrlPars, QWidget *iParent) : TopClassAbs(iParent) { this->appendLanguage("sys-enum-list"); this->setLicenseKey(""); this->initModule(iModuleNameStr, iUrlPars); mModeStr = iUrlPars.value("mode").toString(); mUserClassLst = iUrlPars.value("class_list").toString().split("|"); mBodySplitter = new TSplitter(this); this->setCentralWidget(mBodySplitter); mBodyWidget = new QWidget(this); QVBoxLayout *vboxlayout = new QVBoxLayout(mBodyWidget); vboxlayout->setMargin(0); vboxlayout->setSpacing(0); initTableView(); if (QToolBar *toolbar = qobject_cast(uim()->getWidget("MAIN_TOOLBAR"))) { toolbar->setWindowTitle(ttr("ToolBar")); vboxlayout->addWidget(toolbar, 0); mSearchEntry = qobject_cast(uim()->getWidget("MAIN_TOOLBAR/SEARCH_ENTRY")); } if (QMenu *table_popup = qobject_cast(uim()->getWidget("MAINMENU_POPUP"))) { mTableView->setContextMenu(table_popup); } vboxlayout->addWidget(mTableView, 1); mBodySplitter->addWidget(mBodyWidget); mDetailView = new SysEnumList("sys-enum-list", QVariantMap(), this); if (mModeStr == QStringLiteral("USER")) { mDetailView->setCanCreate(false); mDetailView->refreshActionState(); } connect(mDetailView, SIGNAL(dataSaved(QVariant)), this, SLOT(onDetailSaved(QVariant))); connect(mDetailView, SIGNAL(windowModifyChanged(bool)), SLOT(onDetailChanged())); mBodySplitter->addWidget(mDetailView); if (mSearchEntry != nullptr) { mSearchEntry->setOptionList(TDataParse::headerItem2searchList(mTableView->headerItem())); mSearchEntry->setPlaceholderText(ttr("Search %1")); connect(mSearchEntry, SIGNAL(search(QString,QVariant)), this, SLOT(refresh())); this->setFocusProxy(mSearchEntry); } connect(mTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(onSelectionChanged())); if (QAction *openAct = this->getAction("open")) { connect(mTableView, SIGNAL(activated(QModelIndex)), openAct, SLOT(trigger())); } mDetailView->resize(TTHEME_DP(config("detail.perfect_size.width", mDetailView->perfectSize().width()).toInt()), mDetailView->height()); mBodySplitter->setStretchFactor(0, 1); restoreSizeState(); restoreObjectState(mTableView); refreshActionState(); QTimer::singleShot(0, this, SLOT(refresh())); } SysEnumListMgt::~SysEnumListMgt() { saveSizeState(); saveObjectState(mTableView); } void SysEnumListMgt::refresh() { t::loading(this); TSqlSelectorV2 selector = getSqlSelector(); QVariant data = doThreadWork(new TopClassSqlThread(this),TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector)); unloading(); TDataResponse dataRes(data.toMap()); if (dataRes.hasError()) { alertError(ttr("Load data failed!")); } else { fillTableData(dataRes.data().toList()); alertOk(ttr("Data loaded")); searchEnumList(); } } void SysEnumListMgt::deleteItem(const QVariantList &iIdLst) { QVariant data = doThreadWork(new SysEnumListMgtThread(this), "DELETE_ENUM", iIdLst); TDataResponse dataRes(data.toMap()); if (dataRes.hasError()) { alertError(ttr("Delete data failed!"), dataRes.errText()); } else { refresh(); } } QVariantList SysEnumListMgt::selectItems() { return mSelectedKeyLst; } TopClassAbs *SysEnumListMgt::openItem(const QString &iEnumStr) { SysEnumList *detail = qobject_cast(APP->openModule("sys-enum-list")); if (detail != nullptr) { connect(detail, SIGNAL(dataSaved(QVariant)), this, SLOT(onDetailSaved(QVariant))); connect(this, SIGNAL(destroyed()), detail, SLOT(close())); detail->setUid(iEnumStr); } return detail; } void SysEnumListMgt::newItem() { mBodySplitter->cacheSizes(); mDetailView->create(); mDetailView->refreshActionState(); } bool SysEnumListMgt::canModify() { return !mDetailView->isDataModified(); } bool SysEnumListMgt::canCreate() { return (mModeStr != "USER"); } void SysEnumListMgt::refreshDetail() { if (mTableView != nullptr) { mSelectedKeyLst = mTableView->selectedPrimaryKeys(); QString curId; if (!mSelectedKeyLst.isEmpty()) { curId = mSelectedKeyLst.value(0).toString(); } mDetailView->setUid(curId); refreshActionState(); } } void SysEnumListMgt::onSelectionChanged() { if (mTableView != nullptr) { mSelectedKeyLst = mTableView->selectedPrimaryKeys(); QString curId; if (!mSelectedKeyLst.isEmpty()) { curId = mSelectedKeyLst.value(0).toString(); } if (mDetailView->uid() != curId) { mDetailView->setLastUid(curId); if (!mDetailView->isDataModified()) { mDetailView->setUid(curId); } } refreshActionState(); } } void SysEnumListMgt::onDetailSaved(const QVariant &iUidStr) { this->refresh(); mTableView->selectRow(iUidStr); } void SysEnumListMgt::searchEnumList(const QString &iSearchStr, const QVariant &iOptions) { QString searchText = iSearchStr; if (searchText.isEmpty()) { searchText = mSearchEntry->text(); } QRegExp rx(searchText); rx.setPatternSyntax(QRegExp::Wildcard); rx.setCaseSensitivity(Qt::CaseInsensitive); QStringList searchlist = iOptions.toStringList(); if (searchlist.isEmpty()) { searchlist = QStringList() << "label.text" << "name"; } mTableView->findRows(rx, searchlist, 1); } void SysEnumListMgt::onDetailChanged() { bool isModified = mDetailView->isDataModified(); mTableView->setEnabled(!isModified); if (isModified) { this->showMaskFrame(mBodyWidget); } else { if (mBodySplitter->sizes().value(0) < 20) { mBodySplitter->setWidgetSize(0, mBodySplitter->getCacheSize(0), true); } this->hideMaskFrame(); } refreshActionState(); } void SysEnumListMgt::initTableView() { mTableView = new TTableView(this); connect(mTableView->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), this, SLOT(refresh())); mTableView->setDataKeyList(QStringList() << "enum_name"); mTableView->setPrimaryKey("enum_name"); QVariantList hItems; hItems << QVariant(); hItems << TDataParse::variantList2Map( QVariantList() << "name" << "enum_name" << "display" << ttr("Name") << "resizeMode" << "Interactive" << "displayRole" << "$enum_name" << "search" << "string"); mTableView->setHeaderItem(hItems); } TSqlSelectorV2 SysEnumListMgt::getSqlSelector() { TSqlSelectorV2 selector; selector.setTable("sys_setting_enum"); selector.setReturnRowCount(false); selector.fieldRef() << "enum_name"; selector.whereRef().append("product_category", APP->productCategory()); selector.whereRef().append("version = (SELECT max(version) FROM sys_setting_enum)"); if (mModeStr == QStringLiteral("USER")) { selector.whereRef().append("enum_name", mUserClassLst); } if (mSearchEntry != nullptr) { selector.whereRef().append(mSearchEntry->sqlWhere()); } selector.setOrder("enum_name", Qt::AscendingOrder); QHeaderView *headerView = mTableView->horizontalHeader(); if (headerView != nullptr) { QString orderField = mTableView->columnName(headerView->sortIndicatorSection()); if (!orderField.isEmpty()) { selector.setOrder(orderField, headerView->sortIndicatorOrder()); } } return selector; } void SysEnumListMgt::fillTableData(const QVariantList &iDataLst) { mTableView->loadData(iDataLst); }