#include "diagramCavas.h" #include "diagramCavas_p.h" DiagramCavas::DiagramCavas(QWidget *parent) : QMdiArea(parent) ,d_ptr(new DiagramCavasPrivate(this)) { Q_D(DiagramCavas); } DiagramCavas::~DiagramCavas() { Q_D(DiagramCavas); delete d; disconnect(); //断开连接避免动态库释放时信号问题 } MonitorPanel* DiagramCavas::getMonitorPanel(QString sPage) { Q_D(DiagramCavas); if(d->m_mapMonitorPanel.contains(sPage)) return d->m_mapMonitorPanel[sPage].first; return nullptr; } DataAccessor* DiagramCavas::getDataAccessor() const { Q_D(const DiagramCavas); return d->_dataAccessor; } void DiagramCavas::updateSubPos() { Q_D(DiagramCavas); d->updateCornerPos(); } void DiagramCavas::passRecommmandHttpData(HttpRecommandInfo info) { Q_D(DiagramCavas); d->processRecommandData(info); } DiagramConnectSetting* DiagramCavas::getConnectSettingDlg() { Q_D(DiagramCavas); return d->_connectSetting; } ExtraPropertyManager* DiagramCavas::getExtraPropertyManager() { Q_D(DiagramCavas); return d->_extraPropertyManager; } QMap DiagramCavas::getPluginShapeInfo() { Q_D(DiagramCavas); return d->m_pluginInfo; } void DiagramCavas::initial() { Q_D(DiagramCavas); d->initialImpl(); // 调用私有实现 } void DiagramCavas::setCurMode(int nMode) { Q_D(DiagramCavas); d->_curMode = nMode; if(d->_curMode == 1){ //运行模式下 showPropertyDlg(); //setViewMode(QMdiArea::SubWindowView); } else{ hidePropertyDlg(); //setViewMode(QMdiArea::TabbedView); } } int DiagramCavas::getCurMode() { Q_D(DiagramCavas); return d->_curMode; } void DiagramCavas::showPropertyDlg() { Q_D(DiagramCavas); d->showPropertyDlgImpl(); } void DiagramCavas::hidePropertyDlg() { Q_D(DiagramCavas); d->hidePropertyDlgImpl(); } void DiagramCavas::setHMIVisiblebyName(const QString& str,bool val) { Q_D(DiagramCavas); PowerEntity* pEntity = TopologyManager::instance().findDiagramByName(str,ModelFunctionType::RuntimeModel); if(pEntity) { if(val) //显示 onSignal_loadMonitor(pEntity); else{ if(d->m_mapMonitorPanel.contains(str)) d->m_mapMonitorPanel[str].first->hide(); } } } void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode,QString parent) { Q_D(DiagramCavas); d->addDrawingPanelImpl(pItem, mode, parent); } void DiagramCavas::onSignal_addGraphicsItem(ModelStateInfo& info) { QMdiSubWindow* actWindow = activeSubWindow(); if(!actWindow) return; QWidget* pWindow= currentSubWindow()->widget(); /*DrawingPanel* pPanel = dynamic_cast(pWindow); if(pPanel) pPanel->onSignal_addGraphicsItem(info);*/ } void DiagramCavas::onSignal_addPage() { //onSignal_addDrawingPanel(QString("Page_")+QString::number(++_pageIndex)); } void DiagramCavas::onSignal_savePage() { Q_D(DiagramCavas); d->savePageImpl(); } void DiagramCavas::onSignal_loadMonitor(PowerEntity* p) { Q_D(DiagramCavas); d->loadMonitorImpl(p); } void DiagramCavas::runPage(const QString sName) { Q_D(DiagramCavas); QString pageName = sName+QString("_run"); if(!d->m_mapMonitorPanel.contains(pageName)) { //onSignal_addDrawingPanel(pageName,DM_run); //QJsonObject context = DataBase::GetInstance()->getPageContextByName(sName); //m_mapDrawPanel[pageName]->loadNodes(context); } else //已存在 { //m_mapDrawPanel[pageName]->show(); } } void DiagramCavas::onSignal_runPage() { Q_D(DiagramCavas); runPage(d->_curPage); } void DiagramCavas::onSignal_deletePage() { } void DiagramCavas::onSignal_activatePage(const QString& name) { Q_D(DiagramCavas); d->_curPage = name; } void DiagramCavas::onSignal_panelDelete(const QString& name,int nType) { Q_D(DiagramCavas); if(nType == 2){ MonitorPanel* pPanel = d->m_mapMonitorPanel.take(name).first; this->removeSubWindow(pPanel); delete pPanel; } d->calculateLauncherVisible(); } void DiagramCavas::onSignal_createEntity(EntityInfo info) { PowerEntity* pEntity; pEntity = TopologyManager::instance().findEntity(info.sUuid); if(!pEntity) //不存在创建 { pEntity = TopologyManager::instance().createEntity(info.eType,info.sUuid,info.sName); PowerEntity* pParent = TopologyManager::instance().findEntity(info.sParentId); if(pParent) //构建父子关系 { pParent->addChild(pEntity); } switch (info.eType){ case EntityType::Grid: case EntityType::Zone: case EntityType::Station: break; case EntityType::ConfigurationDiagram: onSignal_addDrawingPanel(pEntity); break; default: break; } } } void DiagramCavas::onSignal_changeEntity(EntityInfo info) { } void DiagramCavas::onSignal_deleteEntity(EntityInfo info) { Q_D(DiagramCavas); PowerEntity* pEntity = TopologyManager::instance().findEntity(info.sUuid); if(pEntity) { switch (info.eType){ case EntityType::Grid: case EntityType::Zone: case EntityType::Station: TopologyManager::instance().deleteEntity(info.sUuid); break; case EntityType::ConfigurationDiagram: d->removePanel(pEntity); TopologyManager::instance().deleteEntity(info.sUuid); break; default: break; } } } void DiagramCavas::onSignal_selectEntity(EntityInfo info) { PowerEntity* pEntity = TopologyManager::instance().findEntity(info.sUuid); if(pEntity) { switch (info.eType){ case EntityType::Grid: case EntityType::Zone: case EntityType::Station: break; default: break; } } else //不存在,从数据库中load { } } void DiagramCavas::onSignal_createDiagram(DiagramInfo info,DiagramMode mode) { PowerEntity* pEntity; ModelFunctionType type; if(mode == DM_run) type = ModelFunctionType::RuntimeModel; else if(mode == DM_edit) type = ModelFunctionType::ProjectModel; pEntity = TopologyManager::instance().findDiagram(info.id.toString(),type); if(!pEntity) //不存在创建 { pEntity = TopologyManager::instance().createDiagram(info.id.toString(),info.sName,type); /*PowerEntity* pParent = TopologyManager::instance().findDiagram(info.parentId.toString()); if(pParent) //构建父子关系 { pParent->addChild(pEntity); }*/ onSignal_addDrawingPanel(pEntity,mode); } } void DiagramCavas::onSignal_changeDiagram(DiagramInfo info) { } void DiagramCavas::onSignal_deleteDiagram(DiagramInfo info) { Q_D(DiagramCavas); PowerEntity* pEntity = TopologyManager::instance().findDiagram(info.id.toString()); if(pEntity) { d->removePanel(pEntity); TopologyManager::instance().deleteEntity(info.id.toString()); } } void DiagramCavas::onSignal_selectDiagram(DiagramInfo info) { PowerEntity* pEntity = TopologyManager::instance().findDiagram(QString::number(info.id.toInt())); if(pEntity) { //onSignal_loadPage(pEntity); } else //不存在,从数据库中load { } } void DiagramCavas::onSignal_openNetSetting() { Q_D(DiagramCavas); d->showNewSettingDlg(); } void DiagramCavas::onSignal_openStructDataPreview() { Q_D(DiagramCavas); d->showStructDataPreviewDlg(); } void DiagramCavas::onSignal_createHMI(QString sName,QUuid id) { emit createHMI(sName,id); } void DiagramCavas::onSignal_updateHMI(QString sName,QUuid id,int nState,QString sTime) { emit updateHMI(sName,id,nState,sTime); } void DiagramCavas::resizeEvent(QResizeEvent* event) { Q_D(DiagramCavas); d->updateCornerPos(); } void DiagramCavas::onTargetSelected(QObject* obj) { Q_D(DiagramCavas); d->onTargetSelected(obj); } /****************************************************/ void DiagramCavas::onSignal_updateTopology(QList lst,bool refresh,bool showFull) { emit prepareUpdateTopology(lst,refresh,showFull); } /*******************bay************************/ void DiagramCavas::onSignl_openCurrentBay() { /*QWidget* pWindow= currentSubWindow()->widget(); if(pWindow == nullptr){ QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"当前无打开的工程模")); } MonitorPanel* pPanel = dynamic_cast(pWindow); if(pPanel) { if(pPanel->getMode() == DM_run) { pPanel->getModelController()->onSignal_openBayManager(); } }*/ } /*********************monitor**************************/ void DiagramCavas::onCreateHMIClicked() { Q_D(DiagramCavas); d->onCreateHMI(); } void DiagramCavas::onSignal_createHMIClicked(QString sHMI,QString sStructPage,int modelType) { Q_D(DiagramCavas); d->createHMIClickedImpl(sHMI, sStructPage, modelType); } void DiagramCavas::onSignal_updateCurItems(QList lst,bool refresh) { emit prepareUpdateItems(lst,refresh); } void DiagramCavas::onSignal_selectedItems(QList lst) { emit prepareSelectItems(lst); } void DiagramCavas::onSignal_monitorCreated(QString sProj,QPair pair) { emit updateMonitorList(sProj,pair); } void DiagramCavas::onSignal_monitorItemCreated(QList lst) { emit createdMonitorItems(lst); } void DiagramCavas::onSignal_monitorSelected(DiagramInfo info) { PowerEntity* pEntity = TopologyManager::instance().findDiagram(info.id.toString(),ModelFunctionType::RuntimeModel); if(pEntity) { onSignal_loadMonitor(pEntity); } } void DiagramCavas::onSignal_saveMonitor(QList> lst) { //生成monitor相关,GridFrame中处理 /*for(auto &pair:lst){ auto pMonitor = m_mapMonitorPanel.value(pair.first).first; if(pMonitor){ if(DataBase::GetInstance()->getPageIdByName(pMonitor->getParentPage()) == -1){ QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"请先保存工程模型")); return; } } } for(auto& pair:lst){ auto pMonitor = m_mapMonitorPanel.value(pair.first).first; if(pMonitor){ if(DataBase::GetInstance()->getMonitorIdByName(pair.first).isNull()) //不存在,创建 DataBase::GetInstance()->insertMonitor(pair.second,pair.first,pair.first,pMonitor->getParentPage(),pMonitor->getDiagramInfo()); else DataBase::GetInstance()->updateMonitor(pair.first,pMonitor->getDiagramInfo()); } } QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));*/ } void DiagramCavas::updateMonitorListFromDB(int dest) { //加载monitor列表,GridFrame中处理 /*if(dest != 0) _loadMonitorPageDlg->clearItems(); QList lstMonitor = DataBase::GetInstance()->getAllMonitor(); for(auto &info:lstMonitor) { auto p = TopologyManager::instance().findDiagram(info.uid.toString(),ModelFunctionType::RuntimeModel); if(!p){ TopologyManager::instance().createDiagram(info.uid.toString(),info.name,ModelFunctionType::RuntimeModel); if(dest == 0) emit updateMonitorList(info.parent,qMakePair(info.name,info.uid)); else{ _loadMonitorPageDlg->updateItems(info.parent,qMakePair(info.name,info.uid)); } } else{ //存在直接发送 if(dest == 0) emit updateMonitorList(info.parent,qMakePair(info.name,info.uid)); else{ _loadMonitorPageDlg->updateItems(info.parent,qMakePair(info.name,info.uid)); } } }*/ } void DiagramCavas::onSignal_updateMonitorTopology(QList lst) { emit updateMonitorTopology(lst); } void DiagramCavas::updateHMIlstFromDB() { Q_D(DiagramCavas); d->updateHMIFromDB(); }