#include "customHMIGenerateDlg.h" #include "dataBase.h" #include "selectPanel.h" #include "powerEntity.h" #include "diagramCavas.h" #include "customHMIList.h" #include "ui_customHMIGenerateDlg.h" #include "diagramCavas_p.h" #include CustomHMIGenerateDlg::CustomHMIGenerateDlg(QWidget *parent) : QDialog(parent) , ui(new Ui::customHMIGenerateDlg) ,_pOperatePanel(nullptr) ,_pPreviewPanel(nullptr) ,_pPe(nullptr) ,_pOe(nullptr) ,_pItemList(nullptr) { ui->setupUi(this); setWindowModality(Qt::ApplicationModal); _pCanvas = dynamic_cast(parent); this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); initial(); } CustomHMIGenerateDlg::~CustomHMIGenerateDlg() { delete ui; if(_pPe) delete _pPe; if(_pOe) delete _pOe; } void CustomHMIGenerateDlg::initial() { _pItemList = new CustomHMIList(this); connect(ui->btn_return,&QPushButton::clicked,this,&CustomHMIGenerateDlg::onBackClicked); connect(ui->btn_generate,&QPushButton::clicked,this,&CustomHMIGenerateDlg::onGenerateClicked); QVBoxLayout* layOut = new QVBoxLayout(ui->gb_list); layOut->addWidget(_pItemList); _pPe = new ConfigurationDiagram("0","oprerate"); _pOperatePanel = new SelectPanel(_pPe,this,DM_customHMI); _pOe = new ConfigurationDiagram("1","preview"); _pPreviewPanel = new SelectPanel(_pOe,this,DM_customHMI); QVBoxLayout *layOperate = new QVBoxLayout(ui->gb_sys); layOperate->addWidget(_pOperatePanel); _pOperatePanel->getModelController()->setCavas(QPointer(_pCanvas)); QVBoxLayout *layPreview= new QVBoxLayout(ui->gb_preview); layPreview->addWidget(_pPreviewPanel); _pPreviewPanel->getModelController()->setCavas(QPointer(_pCanvas)); connect(_pOperatePanel->getModelController(),&FixedPortsModel::updateCurrentItems,_pItemList,&CustomHMIList::onUpdateItems); connect(_pOperatePanel->getModelController(),&FixedPortsModel::itemSelected,_pItemList,&CustomHMIList::onSelectItems); connect(_pItemList,&CustomHMIList::previewHMI,this,&CustomHMIGenerateDlg::onPreviewHMI); m_timer = new QTimer(this); m_timer->setSingleShot(true); connect(m_timer, &QTimer::timeout, ui->label_info, &QLabel::hide); } void CustomHMIGenerateDlg::showDlg(QString sHmi,QString sSys,int nModel) { show(); ui->le_hmiName->setText(sHmi); DataBase* db = DataBase::GetInstance(); if (!db) { qWarning() << "Database instance is null"; return; } _pOperatePanel->getModelController()->clearCurItems(); //先清空 _pPreviewPanel->getModelController()->clearCurItems(); QJsonObject context = db->getHMIContextByTag(sSys); _pOperatePanel->loadNodes(context); _pOperatePanel->centerOnTopLeft(); } void CustomHMIGenerateDlg::onGenerateClicked() { auto lstHMI = DataBase::GetInstance()->getAllHMI(); QString sName = ui->le_hmiName->text(); if(sName.isEmpty()){ showInfoTip("名称不能为空"); return; } if(_pCavasPtr->m_mapMonitorPanel.contains(sName)){ showInfoTip("名称已存在"); return; } for(auto& info:lstHMI){ if(sName == info.name || sName == info.tag) { showInfoTip("名称已存在"); return ; } } int nWidth = 0; int nHeight = 0; QStringList lstSize = ui->cb_size->currentText().split("*"); if(lstSize.size() == 2){ nWidth = lstSize.first().toInt(); nHeight = lstSize.last().toInt(); } if(_tempLst.size() > 0){ QObject::connect(_pOperatePanel->getModelController(), &FixedPortsModel::updateTopologyItems, _pCanvas,&DiagramCavas::onSignal_updateTopology); _pOperatePanel->getModelController()->customGenerateHMI(ui->le_hmiName->text(),qMakePair(nWidth,nHeight),_tempLst); hide(); } else{ showInfoTip("未选中生成对象"); } } void CustomHMIGenerateDlg::onBackClicked() { emit backCreateHMI(); hide(); } void CustomHMIGenerateDlg::onPreviewHMI(QList lst) { _pPreviewPanel->clearItems(); _pOperatePanel->getModelController()->previewHMI(_pPreviewPanel,lst); _pPreviewPanel->moveItemsAlignment(Qt::AlignHCenter|Qt::AlignVCenter); _tempLst = lst; } void CustomHMIGenerateDlg::showInfoTip(const QString& text,int durationMs) { ui->label_info->setText(text); ui->label_info->show(); // 停止之前的定时器 m_timer->stop(); // 重新启动定时器 m_timer->start(durationMs); }