|
@@ -207,12 +207,13 @@ bool DbTreeViewManager::hasPrivilege(const int &UserGrade, const int &userPrivil
|
|
|
|
|
|
void DbTreeViewManager::initializeTree(QString name, const int &userPrivilege)
|
|
|
{
|
|
|
- //DelMemoryWnd(m_pProgrammPage);
|
|
|
- //DelMemoryWnd(m_pDiagnosisPage);
|
|
|
- //m_thirdLevelFieldWnd = nullptr; //TODO: 释放为啥不为空?
|
|
|
+ DelMemoryWnd(m_pProgrammPage);
|
|
|
+ DelMemoryWnd(m_pDiagnosisPage);
|
|
|
+ DelMemoryWnd(m_thirdLevelFieldWnd);
|
|
|
+
|
|
|
|
|
|
+ PromptSaveChanges();
|
|
|
|
|
|
- promptSaveChanges();
|
|
|
QString strLog = "Initializing tree with configId:";
|
|
|
strLog += name;
|
|
|
strLog += "and userPrivilege:";
|
|
@@ -241,26 +242,7 @@ void DbTreeViewManager::initializeTree(QString name, const int &userPrivilege)
|
|
|
// **Home 界面逻辑**
|
|
|
if (name == "Home")
|
|
|
{
|
|
|
- // 隐藏目录树和分隔线
|
|
|
- m_pTreeViewDown->hide();
|
|
|
- for (auto separator : m_mapFirstLevelSeparators)
|
|
|
- {
|
|
|
- if (separator)
|
|
|
- {
|
|
|
- separator->hide();
|
|
|
- }
|
|
|
- }
|
|
|
- // 隐藏导航栏
|
|
|
- m_pNavigationWidget->hide();
|
|
|
-
|
|
|
- // 隐藏按钮
|
|
|
- updateButtonsVisibility(); // 将按钮隐藏
|
|
|
-
|
|
|
- // 隐藏特定的分隔线 lineFrame1
|
|
|
- if (m_pLineFrame1)
|
|
|
- {
|
|
|
- m_pLineFrame1->hide();
|
|
|
- }
|
|
|
+ CustomizeWndCall(nullptr, false);
|
|
|
|
|
|
// 从 BondHead 和 Buttons 表中加载 DirectoryId = 1 的数据
|
|
|
QList<ST_TABLE_CONTROL_DATA> tableControlDatas;
|
|
@@ -277,124 +259,26 @@ void DbTreeViewManager::initializeTree(QString name, const int &userPrivilege)
|
|
|
st.multiTableName = "HomeProduct";
|
|
|
|
|
|
m_backStack.append(st);
|
|
|
- if (m_backStack.size() >= 2) {
|
|
|
+ if (m_backStack.size() >= 2)
|
|
|
+ {
|
|
|
buttonLeft->setIcon(QIcon(":/images/home_left.png"));
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else if (name == "Programme")
|
|
|
{
|
|
|
- // 隐藏目录树和分隔线
|
|
|
- m_pTreeViewDown->hide();
|
|
|
- for (auto separator : m_mapFirstLevelSeparators)
|
|
|
- {
|
|
|
- if (separator)
|
|
|
- {
|
|
|
- separator->hide();
|
|
|
- }
|
|
|
- }
|
|
|
- // 隐藏导航栏
|
|
|
- m_pNavigationWidget->hide();
|
|
|
-
|
|
|
- // 隐藏按钮
|
|
|
- updateButtonsVisibility(); // 将按钮隐藏
|
|
|
-
|
|
|
- // 隐藏特定的分隔线 lineFrame1
|
|
|
- if (m_pLineFrame1)
|
|
|
- {
|
|
|
- m_pLineFrame1->hide();
|
|
|
- }
|
|
|
- // 若已有第三层窗口,先关闭并释放
|
|
|
- if (m_thirdLevelFieldWnd)
|
|
|
- {
|
|
|
- m_thirdLevelFieldWnd->close();
|
|
|
- m_thirdLevelFieldWnd->deleteLater();
|
|
|
- m_thirdLevelFieldWnd = nullptr;
|
|
|
- }
|
|
|
-
|
|
|
- // 清理之前的控件列表
|
|
|
- m_fieldWidgets.clear();
|
|
|
-
|
|
|
- // 创建新的 "字段展示" 窗口,并赋值给 m_thirdLevelFieldWnd
|
|
|
- m_thirdLevelFieldWnd = new QWidget(m_pOriginalWndMenuPage);
|
|
|
- m_thirdLevelFieldWnd->setAttribute(Qt::WA_DeleteOnClose);
|
|
|
- m_thirdLevelFieldWnd->setWindowTitle("字段展示");
|
|
|
- m_thirdLevelFieldWnd->setStyleSheet("background-color: transparent;");
|
|
|
-
|
|
|
- // 填满 widget2
|
|
|
- m_thirdLevelFieldWnd->setGeometry(0, 0, m_pOriginalWndMenuPage->width(), m_pOriginalWndMenuPage->height());
|
|
|
-
|
|
|
m_pProgrammPage = new ProgrammPage();
|
|
|
-
|
|
|
- QVBoxLayout* mainLayout = new QVBoxLayout(m_thirdLevelFieldWnd);
|
|
|
- mainLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
- mainLayout->addWidget(m_pProgrammPage);
|
|
|
-
|
|
|
- m_thirdLevelFieldWnd->setLayout(mainLayout);
|
|
|
-
|
|
|
- m_thirdLevelFieldWnd->show();
|
|
|
+ CustomizeWndCall(m_pProgrammPage);
|
|
|
|
|
|
}
|
|
|
- //else if (name == "Diagnosis")
|
|
|
- //{
|
|
|
- // // 不沿用下面的页面,自己管理一个页面
|
|
|
- // // 隐藏目录树和分隔线
|
|
|
- // for (auto separator : m_mapFirstLevelSeparators)
|
|
|
- // {
|
|
|
- // if (separator)
|
|
|
- // {
|
|
|
- // separator->hide();
|
|
|
- // }
|
|
|
- // }
|
|
|
- // // 隐藏导航栏
|
|
|
- // m_pNavigationWidget->hide();
|
|
|
-
|
|
|
- // // 隐藏按钮
|
|
|
- // updateButtonsVisibility(); // 将按钮隐藏
|
|
|
-
|
|
|
- // // 隐藏特定的分隔线 lineFrame1
|
|
|
- // if (m_pLineFrame1)
|
|
|
- // {
|
|
|
- // m_pLineFrame1->hide();
|
|
|
- // }
|
|
|
- // // 若已有第三层窗口,先关闭并释放
|
|
|
- // if (m_thirdLevelFieldWnd)
|
|
|
- // {
|
|
|
- // m_thirdLevelFieldWnd->close();
|
|
|
- // m_thirdLevelFieldWnd->deleteLater();
|
|
|
- // m_thirdLevelFieldWnd = nullptr;
|
|
|
- // }
|
|
|
-
|
|
|
- // // 清理之前的控件列表
|
|
|
- // m_fieldWidgets.clear();
|
|
|
-
|
|
|
- // // 创建新的 "字段展示" 窗口,并赋值给 m_thirdLevelFieldWnd
|
|
|
- // m_thirdLevelFieldWnd = new QWidget(m_pOriginalWndMenuPage);
|
|
|
- // m_thirdLevelFieldWnd->setWindowTitle("字段展示");
|
|
|
- // m_thirdLevelFieldWnd->setAttribute(Qt::WA_DeleteOnClose);
|
|
|
- // m_thirdLevelFieldWnd->setStyleSheet("background-color: transparent;");
|
|
|
-
|
|
|
- // // 填满 widget2
|
|
|
- // m_thirdLevelFieldWnd->setGeometry(0, 0, m_pOriginalWndMenuPage->width(), m_pOriginalWndMenuPage->height());
|
|
|
- // m_pDiagnosisPage = new DiagnosisPage(m_thirdLevelFieldWnd);
|
|
|
-
|
|
|
- // QVBoxLayout* mainLayout = new QVBoxLayout(m_thirdLevelFieldWnd);
|
|
|
- // mainLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
- // mainLayout->addWidget(m_pDiagnosisPage);
|
|
|
-
|
|
|
- // m_thirdLevelFieldWnd->setLayout(mainLayout);
|
|
|
-
|
|
|
- // m_thirdLevelFieldWnd->show();
|
|
|
- //}
|
|
|
+ else if (name == "Diagnosis")
|
|
|
+ {
|
|
|
+ m_pDiagnosisPage = new DiagnosisPage();
|
|
|
+ CustomizeWndCall(m_pDiagnosisPage);
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
- // 若已有第三层窗口,先关闭并释放
|
|
|
- if (m_thirdLevelFieldWnd)
|
|
|
- {
|
|
|
- DelMemoryWnd(m_thirdLevelFieldWnd);
|
|
|
- }
|
|
|
-
|
|
|
- // **其他配置逻辑**
|
|
|
+ // **其他配置逻辑** TODO:后面在封装
|
|
|
// 设置 treeViewDown 的几何位置
|
|
|
m_pTreeViewDown->setGeometry(16, 106, m_pOriginalWndMenuPage->width() - 16, m_pOriginalWndMenuPage->height() - 106);
|
|
|
// 显示目录树和分隔线
|
|
@@ -571,6 +455,51 @@ void DbTreeViewManager::initializeTree(QString name, const int &userPrivilege)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void DbTreeViewManager::CustomizeWndCall(QWidget* pWnd, bool isAdd /*= true*/)
|
|
|
+{
|
|
|
+ // 隐藏目录树和分隔线
|
|
|
+ m_pTreeViewDown->hide();
|
|
|
+ for (auto separator : m_mapFirstLevelSeparators)
|
|
|
+ {
|
|
|
+ if (separator)
|
|
|
+ {
|
|
|
+ separator->hide();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 隐藏导航栏
|
|
|
+ m_pNavigationWidget->hide();
|
|
|
+
|
|
|
+ // 隐藏按钮
|
|
|
+ updateButtonsVisibility();
|
|
|
+
|
|
|
+ // 隐藏特定的分隔线 lineFrame1
|
|
|
+ if (m_pLineFrame1)
|
|
|
+ {
|
|
|
+ m_pLineFrame1->hide();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isAdd)
|
|
|
+ {
|
|
|
+ // 清理之前的控件列表
|
|
|
+ m_fieldWidgets.clear();
|
|
|
+
|
|
|
+ m_thirdLevelFieldWnd = new QWidget(m_pOriginalWndMenuPage);
|
|
|
+ m_thirdLevelFieldWnd->setAttribute(Qt::WA_DeleteOnClose);
|
|
|
+ m_thirdLevelFieldWnd->setWindowTitle(m_strShowName);
|
|
|
+ m_thirdLevelFieldWnd->setStyleSheet("background-color: transparent;");
|
|
|
+
|
|
|
+ m_thirdLevelFieldWnd->setGeometry(0, 0, m_pOriginalWndMenuPage->width(), m_pOriginalWndMenuPage->height());
|
|
|
+
|
|
|
+ QVBoxLayout* mainLayout = new QVBoxLayout(m_thirdLevelFieldWnd);
|
|
|
+ mainLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
+ mainLayout->addWidget(pWnd);
|
|
|
+
|
|
|
+ m_thirdLevelFieldWnd->setLayout(mainLayout);
|
|
|
+
|
|
|
+ m_thirdLevelFieldWnd->show();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// 从数据库加载目录 包含权限判断
|
|
|
void DbTreeViewManager::loadDirectories(int configId, const int &userPrivilege)
|
|
|
{
|
|
@@ -1449,8 +1378,10 @@ void DbTreeViewManager::clearAllSeparators()
|
|
|
{
|
|
|
// 遍历 m_mapFirstLevelSeparators 中所有 QFrame,
|
|
|
// 隐藏后调用 deleteLater()
|
|
|
- for (auto separator : m_mapFirstLevelSeparators.values()) {
|
|
|
- if(separator) {
|
|
|
+ for (auto separator : m_mapFirstLevelSeparators.values())
|
|
|
+ {
|
|
|
+ if(separator)
|
|
|
+ {
|
|
|
separator->hide();
|
|
|
separator->deleteLater();
|
|
|
}
|
|
@@ -1459,41 +1390,52 @@ void DbTreeViewManager::clearAllSeparators()
|
|
|
m_mapFirstLevelSeparators.clear();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
void DbTreeViewManager::updateSeparatorLine()
|
|
|
{
|
|
|
// 如果目录树被隐藏,就把分割线都藏起来
|
|
|
- if (!m_pTreeViewDown->isVisible()) {
|
|
|
- for (auto it = m_mapFirstLevelSeparators.begin(); it != m_mapFirstLevelSeparators.end(); ++it) {
|
|
|
+ if (!m_pTreeViewDown->isVisible())
|
|
|
+ {
|
|
|
+ for (auto it = m_mapFirstLevelSeparators.begin(); it != m_mapFirstLevelSeparators.end(); ++it)
|
|
|
+ {
|
|
|
QFrame *sep = it.value();
|
|
|
- if (sep) sep->hide();
|
|
|
+ if (sep)
|
|
|
+ {
|
|
|
+ sep->hide();
|
|
|
+ }
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 遍历所有“一级目录”与其分隔线
|
|
|
- for (auto it = m_mapFirstLevelSeparators.begin(); it != m_mapFirstLevelSeparators.end(); ++it) {
|
|
|
+ for (auto it = m_mapFirstLevelSeparators.begin(); it != m_mapFirstLevelSeparators.end(); ++it)
|
|
|
+ {
|
|
|
QStandardItem *firstLevelItem = it.key();
|
|
|
QFrame *separator = it.value();
|
|
|
- if (!firstLevelItem || !separator) continue;
|
|
|
+ if (!firstLevelItem || !separator)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
// 拿到可视区域
|
|
|
QModelIndex firstLevelIndex = m_pCModel->indexFromItem(firstLevelItem);
|
|
|
QRect firstLevelRect = m_pTreeViewDown->visualRect(firstLevelIndex);
|
|
|
|
|
|
// 如果这个一级目录滚动到看不见了,就把分割线也藏起来
|
|
|
- if (!firstLevelRect.isValid()) {
|
|
|
+ if (!firstLevelRect.isValid())
|
|
|
+ {
|
|
|
separator->hide();
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
// 如果展开并且它有子节点,就找“最后一个可见子项”
|
|
|
- if (m_pTreeViewDown->isExpanded(firstLevelIndex) && firstLevelItem->hasChildren()) {
|
|
|
+ if (m_pTreeViewDown->isExpanded(firstLevelIndex) && firstLevelItem->hasChildren())
|
|
|
+ {
|
|
|
QModelIndex lastVisibleChild = findLastVisibleChild(firstLevelIndex);
|
|
|
- if (lastVisibleChild.isValid()) {
|
|
|
+ if (lastVisibleChild.isValid())
|
|
|
+ {
|
|
|
QRect lastChildRect = m_pTreeViewDown->visualRect(lastVisibleChild);
|
|
|
- if (lastChildRect.isValid()) {
|
|
|
+ if (lastChildRect.isValid())
|
|
|
+ {
|
|
|
// 将分割线放在最后一个子项下面
|
|
|
separator->setGeometry(16,lastChildRect.bottom() + 115, m_pOriginalWndMenuPage->width() - 40,1);
|
|
|
separator->show();
|
|
@@ -3112,7 +3054,7 @@ void DbTreeViewManager::updateParentCheckState(QStandardItem *item)
|
|
|
|
|
|
void DbTreeViewManager::onButtonBackClicked()
|
|
|
{
|
|
|
- promptSaveChanges();
|
|
|
+ PromptSaveChanges();
|
|
|
if (m_thirdLevelFieldWnd) {
|
|
|
// 当前在第三层目录,返回到上一层目录
|
|
|
//qDebug() << "当前在第三层目录,准备返回上一层。";
|
|
@@ -3340,7 +3282,7 @@ QList<QStandardItem*> DbTreeViewManager::collectAllThirdLevelItems()
|
|
|
|
|
|
void DbTreeViewManager::onButtonDownClicked()
|
|
|
{
|
|
|
- promptSaveChanges();
|
|
|
+ PromptSaveChanges();
|
|
|
// 1) 收集所有 第三层 节点
|
|
|
QList<QStandardItem*> thirdLevelList = collectAllThirdLevelItems();
|
|
|
if (thirdLevelList.isEmpty()) {
|
|
@@ -3424,7 +3366,7 @@ void DbTreeViewManager::onButtonDownClicked()
|
|
|
|
|
|
void DbTreeViewManager::onButtonUpClicked()
|
|
|
{
|
|
|
- promptSaveChanges();
|
|
|
+ PromptSaveChanges();
|
|
|
// 1) 收集所有 第三层 节点
|
|
|
QList<QStandardItem*> thirdLevelList = collectAllThirdLevelItems();
|
|
|
if (thirdLevelList.isEmpty()) {
|
|
@@ -3504,7 +3446,7 @@ void DbTreeViewManager::onButtonUpClicked()
|
|
|
|
|
|
void DbTreeViewManager::onButtonRightClicked()
|
|
|
{
|
|
|
- promptSaveChanges();
|
|
|
+ PromptSaveChanges();
|
|
|
if (m_forwardStack.isEmpty()) {
|
|
|
//qDebug() << "[Forward] 已经没有可以前进的页面";
|
|
|
buttonRight->setIcon(QIcon(":/images/home_right.png"));
|
|
@@ -3527,7 +3469,7 @@ void DbTreeViewManager::onButtonRightClicked()
|
|
|
|
|
|
void DbTreeViewManager::onButtonLeftClicked()
|
|
|
{
|
|
|
- promptSaveChanges();
|
|
|
+ PromptSaveChanges();
|
|
|
if (m_backStack.size() < 2) {
|
|
|
//qDebug() << "[Back] 已经无法再后退";
|
|
|
buttonLeft->setIcon(QIcon(":/images/home_left_hide.png"));
|
|
@@ -4185,7 +4127,7 @@ void DbTreeViewManager::DelMemoryWnd(QWidget* pWid)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void DbTreeViewManager::promptSaveChanges()
|
|
|
+void DbTreeViewManager::PromptSaveChanges()
|
|
|
{
|
|
|
if (!modifiedLabels.isEmpty())
|
|
|
{
|