DiagramDesigner/diagramCavas/source/customHMIGenerateDlg.cpp

147 lines
4.5 KiB
C++

#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 <QVBoxLayout>
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<DiagramCavas*>(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<DiagramCavas>(_pCanvas));
QVBoxLayout *layPreview= new QVBoxLayout(ui->gb_preview);
layPreview->addWidget(_pPreviewPanel);
_pPreviewPanel->getModelController()->setCavas(QPointer<DiagramCavas>(_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<HierarchyItem> 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);
}