diff --git a/dataPanel/dpConfigurationDialog.cpp b/dataPanel/dpConfigurationDialog.cpp index 0b6ae7e..d0618df 100644 --- a/dataPanel/dpConfigurationDialog.cpp +++ b/dataPanel/dpConfigurationDialog.cpp @@ -1,6 +1,7 @@ #include "dpConfigurationDialog.h" #include "ui_dpConfigurationDialog.h" #include "dataPanel.h" +#include "global.h" #include dpConfigurationDialog::dpConfigurationDialog(QWidget *parent) @@ -10,6 +11,8 @@ dpConfigurationDialog::dpConfigurationDialog(QWidget *parent) , m_pDataPanel(nullptr) , m_pModel_typeSource(nullptr) , m_pModel_typeSelected(nullptr) + , m_pModel_dataSource(nullptr) + , m_pModel_dataSelected(nullptr) { ui->setupUi(this); setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus); @@ -23,6 +26,23 @@ dpConfigurationDialog::~dpConfigurationDialog() delete ui; } +void dpConfigurationDialog::showEvent(QShowEvent* event) +{ + ui->stackedWidget->setCurrentIndex(0); + if(m_pModel_typeSelected && m_pModel_typeSelected->rowCount() == 0) + { + ui->errorTip->setVisible(true); + ui->errorTip->setToolTip(QString::fromStdWString(L"要至少选择一个数据类型")); + ui->btnConfirm->setEnabled(false); + } + else + { + ui->errorTip->setVisible(false); + //ui->errorTip->setToolTip(QString::fromStdWString(L"要至少选择一个数据类型")); + ui->btnConfirm->setEnabled(true); + } +} + void dpConfigurationDialog::initialize() { ui->tabDataType->setProperty("index", 0); @@ -42,7 +62,9 @@ void dpConfigurationDialog::initialize() connect(ui->btnReomve_source, SIGNAL(clicked()), this, SLOT(onBtnClicked_remove_source())); connect(ui->typeSourceList, SIGNAL(clicked(const QModelIndex&)), this, SLOT(onItemClicked_typeSource(const QModelIndex&))); + connect(ui->dataSourceList, SIGNAL(clicked(const QModelIndex&)), this, SLOT(onItemClicked_dataSource(const QModelIndex&))); + ///数据类型 //typeSourceList m_pModel_typeSource = new QStandardItemModel(this); ui->typeSourceList->setModel(m_pModel_typeSource); @@ -58,6 +80,15 @@ void dpConfigurationDialog::initialize() ui->typeSelectedList->setSelectionBehavior(QAbstractItemView::SelectRows); m_pModel_typeSelected = new QStandardItemModel(this); ui->typeSelectedList->setModel(m_pModel_typeSelected); + ///数据源 + //dataSourceList + m_pModel_dataSource = new QStandardItemModel(this); + ui->dataSourceList->setModel(m_pModel_dataSource); + createDataSourceList(); + //sourceSelectedList + ui->dataSelectedList->setSelectionBehavior(QAbstractItemView::SelectRows); + m_pModel_dataSelected = new QStandardItemModel(this); + ui->dataSelectedList->setModel(m_pModel_dataSelected); } void dpConfigurationDialog::copyModelData(QStandardItemModel* sourceModel, QStandardItemModel* destModel) @@ -92,10 +123,40 @@ void dpConfigurationDialog::copyModelData(QStandardItemModel* sourceModel, QStan } } +void dpConfigurationDialog::createDataSourceList() +{ + //demo先临时写死,后续改为接口动态创建 + QStandardItem* rootItem = m_pModel_dataSource->invisibleRootItem(); + QStandardItem* stationItem = new QStandardItem("测试站"); + stationItem->setEditable(false); + stationItem->setData("station", Qt::UserRole + itemRole_tag); + rootItem->appendRow(stationItem); + QStandardItem* componentItem = new QStandardItem("异步电机"); + componentItem->setEditable(false); + componentItem->setData("component", Qt::UserRole + itemRole_tag); + stationItem->appendRow(componentItem); + QStandardItem* currentItem = new QStandardItem("电流"); + currentItem->setEditable(false); + currentItem->setData("point", Qt::UserRole + itemRole_tag); + currentItem->setData(0, Qt::UserRole + itemRole_stationID); + currentItem->setData(0, Qt::UserRole + itemRole_componentID); + currentItem->setData(0, Qt::UserRole + itemRole_pointID); + componentItem->appendRow(currentItem); + QStandardItem* voltageItem = new QStandardItem("电压"); + voltageItem->setEditable(false); + voltageItem->setData("point", Qt::UserRole + itemRole_tag); + voltageItem->setData(0, Qt::UserRole + itemRole_stationID); + voltageItem->setData(0, Qt::UserRole + itemRole_componentID); + voltageItem->setData(1, Qt::UserRole + itemRole_pointID); + componentItem->appendRow(voltageItem); + ui->dataSourceList->expandAll(); +} + void dpConfigurationDialog::setPanel(DataPanel* pPanel) { m_pDataPanel = pPanel; copyModelData(pPanel->m_cofigurationResults.m_pModel_dataType, m_pModel_typeSelected); + copyModelData(pPanel->m_cofigurationResults.m_pModel_dataSource, m_pModel_dataSelected); // m_pModel_typeSelected = pPanel->m_cofigurationResults.m_pModel_dataType; // if(m_pModel_typeSelected) // ui->typeSelectedList->setModel(m_pModel_typeSelected); @@ -157,6 +218,8 @@ void dpConfigurationDialog::onBtnClicked_confirm() //m_pDataPanel->m_cofigurationResults.m_pModel_dataType = m_pModel_typeSelected; copyModelData(m_pModel_typeSelected, m_pDataPanel->m_cofigurationResults.m_pModel_dataType); m_pDataPanel->configurationComplete(); + copyModelData(m_pModel_dataSelected, m_pDataPanel->m_cofigurationResults.m_pModel_dataSource); + m_pDataPanel->configurationComplete(); } } @@ -185,12 +248,18 @@ void dpConfigurationDialog::onItemClicked_typeSource(const QModelIndex& index) if(!bIsHad && m_pModel_typeSelected) { QStandardItem* newItem = new QStandardItem(item->text()); + newItem->setEditable(false); m_pModel_typeSelected->appendRow(newItem); ui->typeSelectedList->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + + if(ui->errorTip->isVisible()) + { + ui->errorTip->setVisible(false); + ui->btnConfirm->setEnabled(true); + } } } } - void dpConfigurationDialog::onBtnClicked_remove_type() { QItemSelectionModel* selectionModel = ui->typeSelectedList->selectionModel(); @@ -200,8 +269,84 @@ void dpConfigurationDialog::onBtnClicked_remove_type() QList items = m_pModel_typeSelected->takeRow(nCurrentRow); for(QStandardItem* item: items) delete item; + + if(m_pModel_typeSelected->rowCount() == 0) + { + ui->errorTip->setVisible(true); + ui->errorTip->setToolTip(QString::fromStdWString(L"要至少选择一个数据类型")); + ui->btnConfirm->setEnabled(false); + } } } +void dpConfigurationDialog::onItemClicked_dataSource(const QModelIndex& index) +{ + QStandardItem* item = m_pModel_dataSource->itemFromIndex(index); + if(item) + { + QString strTag = item->data(Qt::UserRole + itemRole_tag).toString(); + if(strTag != "point") + return; + + QString strText = ""; + QStandardItem* compontItme = item->parent(); + if(compontItme && compontItme->data(Qt::UserRole + itemRole_tag).toString() == "component") + { + QStandardItem* stationItme = compontItme->parent(); + if(stationItme && stationItme->data(Qt::UserRole + itemRole_tag).toString() == "station") + strText = stationItme->text() + "." + compontItme->text(); + else + strText = compontItme->text(); + } + if(strText.isEmpty()) + strText = item->text(); + else + strText = strText + "." + item->text(); + + bool bIsHad = false; + for(int i = 0; i< m_pModel_dataSelected->rowCount(); i++) + { + QString itemText = m_pModel_dataSelected->item(i, 0)->text(); + if(itemText == strText) + { + bIsHad = true; + break; + } + } + + if(!bIsHad && m_pModel_dataSelected) + { + QStandardItem* newItem = new QStandardItem(strText); + newItem->setEditable(false); + newItem->setData(item->data(Qt::UserRole + itemRole_stationID), Qt::UserRole + itemRole_stationID); + newItem->setData(item->data(Qt::UserRole + itemRole_componentID), Qt::UserRole + itemRole_componentID); + newItem->setData(item->data(Qt::UserRole + itemRole_pointID), Qt::UserRole + itemRole_pointID); + m_pModel_dataSelected->appendRow(newItem); + QColor color = g_globlaColor.value(newItem->row() % g_globlaColor.size()); + newItem->setData(color, Qt::DecorationRole); + ui->dataSelectedList->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + } + } +} void dpConfigurationDialog::onBtnClicked_remove_source() -{} +{ + QItemSelectionModel* selectionModel = ui->dataSelectedList->selectionModel(); + if(selectionModel && m_pModel_dataSelected) + { + int nCurrentRow = selectionModel->currentIndex().row(); + QList items = m_pModel_dataSelected->takeRow(nCurrentRow); + for(QStandardItem* item: items) + delete item; + + //更新颜色-从当前删除项往后的所有项 + for(int row = nCurrentRow; row < m_pModel_dataSelected->rowCount(); row++) + { + QStandardItem* item = m_pModel_dataSelected->item(row, 0); + if(item) + { + QColor color = g_globlaColor.value(item->row() % g_globlaColor.size()); + item->setData(color, Qt::DecorationRole); + } + } + } +} diff --git a/dataPanel/dpConfigurationDialog.h b/dataPanel/dpConfigurationDialog.h index 0a6545a..14b2af7 100644 --- a/dataPanel/dpConfigurationDialog.h +++ b/dataPanel/dpConfigurationDialog.h @@ -11,6 +11,7 @@ QT_END_NAMESPACE class DataPanel; class QStandardItemModel; +class QStandardItem; class dpConfigurationDialog : public QDialog { @@ -33,19 +34,28 @@ public slots: void onBtnClicked_remove_source(); void onItemClicked_typeSource(const QModelIndex&); + void onItemClicked_dataSource(const QModelIndex&); + +protected: + void showEvent(QShowEvent*); private: void initialize(); void copyModelData(QStandardItemModel*, QStandardItemModel*); + void createDataSourceList(); Ui::dpConfigurationDialog* ui; QPushButton* m_curActiveTab; DataPanel* m_pDataPanel; - //Models + ///Models + //dataType QStandardItemModel* m_pModel_typeSource; QStandardItemModel* m_pModel_typeSelected; + //dataSource + QStandardItemModel* m_pModel_dataSource; + QStandardItemModel* m_pModel_dataSelected; }; diff --git a/dataPanel/dpGlobals.h b/dataPanel/dpGlobals.h index d595382..6eae477 100644 --- a/dataPanel/dpGlobals.h +++ b/dataPanel/dpGlobals.h @@ -33,4 +33,9 @@ struct configurationResults } }; +#define itemRole_tag 1 +#define itemRole_stationID 2 +#define itemRole_componentID 3 +#define itemRole_pointID 4 + #endif diff --git a/include/global.h b/include/global.h index 2bf4444..cfe248d 100644 --- a/include/global.h +++ b/include/global.h @@ -3,6 +3,7 @@ #include #include +#include enum MessageDialogType { @@ -47,6 +48,7 @@ enum TimeUnit }; extern MessageDialogBtn g_msgDlgBtn; +extern QHash g_globlaColor; extern QHash g_timeUnit; void initializeGlobalVariable(); diff --git a/resource/PowerMaster.qrc b/resource/PowerMaster.qrc index 51b7772..24f9b9a 100644 --- a/resource/PowerMaster.qrc +++ b/resource/PowerMaster.qrc @@ -1,5 +1,8 @@ + images/icon_error.png + images/icon_arrow_down.png + images/icon_arrow_right.png images/btn_remove_default.png images/btn_remove_hover.png images/icon_double-left.png diff --git a/resource/images/icon_arrow_down.png b/resource/images/icon_arrow_down.png new file mode 100644 index 0000000..13d769d Binary files /dev/null and b/resource/images/icon_arrow_down.png differ diff --git a/resource/images/icon_arrow_right.png b/resource/images/icon_arrow_right.png new file mode 100644 index 0000000..a717b44 Binary files /dev/null and b/resource/images/icon_arrow_right.png differ diff --git a/resource/images/icon_error.png b/resource/images/icon_error.png new file mode 100644 index 0000000..968f0ee Binary files /dev/null and b/resource/images/icon_error.png differ diff --git a/source/global.cpp b/source/global.cpp index 317f51a..51897c8 100644 --- a/source/global.cpp +++ b/source/global.cpp @@ -2,10 +2,25 @@ MessageDialogBtn g_msgDlgBtn = btn_Null; +QHash g_globlaColor; QHash g_timeUnit; void initializeGlobalVariable() { + //颜色 + g_globlaColor.insert(0, QColor(153, 50, 204)); //深兰花紫 + g_globlaColor.insert(1, QColor(127, 255, 170)); //绿玉\碧绿色 + g_globlaColor.insert(2, QColor(0, 206, 209)); //深绿宝石 + g_globlaColor.insert(3, QColor(46, 139, 87)); //海洋绿 + g_globlaColor.insert(4, QColor(225, 215, 0)); //金色 + g_globlaColor.insert(5, QColor(255, 165, 0)); //橙色 + g_globlaColor.insert(6, QColor(144, 238, 144)); //浅绿色 + g_globlaColor.insert(7, QColor(218, 112, 214)); //兰花的紫色 + g_globlaColor.insert(8, QColor(70, 130, 180)); //钢蓝 + g_globlaColor.insert(9, QColor(218, 165, 32)); //秋麒麟 + g_globlaColor.insert(10, QColor(240, 128, 128)); //淡珊瑚色 + g_globlaColor.insert(11, QColor(70, 130, 180)); //钢蓝 + //时间单位 g_timeUnit.insert(TU_Year, QString::fromWCharArray(L"365d")); g_timeUnit.insert(TU_Month, QString::fromWCharArray(L"30d")); g_timeUnit.insert(TU_Day, QString::fromWCharArray(L"1d")); diff --git a/ui/dpConfigurationDialog.ui b/ui/dpConfigurationDialog.ui index 71e488d..cfa8806 100644 --- a/ui/dpConfigurationDialog.ui +++ b/ui/dpConfigurationDialog.ui @@ -72,22 +72,25 @@ QTreeView::item { height:25px; } +QTreeView::item:disabled { +color: rgb(50, 50, 50); +} QTreeView::item:selected { color: rgb(250, 250, 250); -background-color: transparent; +background-color: rgba(67,160,249, 15); border:0px; } QTreeView::item:hover { -background-color: rgba(67,160,249, 30); +background-color: rgba(67,160,249, 15); border:0px; } QTreeView::branch:has-children:!has-siblings:closed, QTreeView::branch:closed:has-children:has-siblings { - +image: url(:/images/icon_arrow_right.png); } QTreeView::branch:open:has-children:!has-siblings, QTreeView::branch:open:has-children:has-siblings { - +image: url(:/images/icon_arrow_down.png); } QTableView @@ -281,7 +284,7 @@ QPushButton:pressed - 0 + 1 @@ -407,6 +410,9 @@ background-color:transparent; Qt::FocusPolicy::NoFocus + + false + @@ -426,8 +432,11 @@ background-color:transparent; false + + false + - 200 + 100 false @@ -517,9 +526,12 @@ background-color:rgb(24,32,38); + + true + - 380 + 385 460 71 26 @@ -541,6 +553,10 @@ background-color:rgb(55,131,204); QPushButton:pressed { background-color:rgb(67,160,249); +} +QPushButton:disabled +{ +background-color: rgb(60, 60, 60); } @@ -550,6 +566,26 @@ background-color:rgb(67,160,249); false + + + + 350 + 461 + 24 + 24 + + + + QLabel +{ +border-image: url(:/images/icon_error.png); +} + + + + + +