#include "drawingPanel.h" #include "diagramCavas.h" #include "mainwindow.h" #include "dataBase.h" #include "graphicsItem/graphicsBaseItem.h" #include "topologyManager.h" #include "powerEntity.h" #include #include #include DiagramCavas::DiagramCavas(QWidget *parent) : QMdiArea(parent) { _pageIndex = 0; } DiagramCavas::~DiagramCavas() { } void DiagramCavas::initial() { //todo:读取数据并初始化 //onSignal_addDrawingPanel(QString("electricElements")); } void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode) { DrawingPanel* pPanel = new DrawingPanel(pItem,this,mode); _curPage = pItem->name(); pPanel->setPageName(_curPage); pPanel->setWindowTitle(_curPage); //->setAttribute(Qt::WA_DeleteOnClose); QMdiSubWindow* pSub = this->addSubWindow(pPanel); m_mapDrawPanel.insert(_curPage,qMakePair(pPanel,pSub)); pPanel->show(); FixedPortsModel* pModel = pPanel->getModel(); connect(pModel,&FixedPortsModel::activatePage,this,&DiagramCavas::onSignal_activatePage); connect(pPanel,&DrawingPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete); } 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() { QWidget* pWindow= currentSubWindow()->widget(); DrawingPanel* pPanel = dynamic_cast(pWindow); if(pPanel) { if(pPanel->getMode() == DM_run) { QMessageBox::about(NULL,QString::fromWCharArray(L"提示"), QString::fromWCharArray(L"运行中无法保存!")); } else if(pPanel->getMode() == DM_edit) { _curPage = pPanel->pageName(); QMessageBox msgBox; msgBox.setText(QString::fromWCharArray(L"提示")); msgBox.setInformativeText(QString::fromWCharArray(L"内容已修改,是否保存?")); msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Save); int ret = msgBox.exec(); switch (ret) { case QMessageBox::Save: //todo:已存在更新 { QMap map = pPanel->getModel()->allItems(); for(auto pItem:map) { if(pItem->itemChanged()) { pItem->updateConnectData(); //更新连接状态 pItem->setItemChanged(false); } } if(DataBase::GetInstance()->getPageIdByName(_curPage) == -1) //不存在,创建 DataBase::GetInstance()->insertPage(_curPage,_curPage,1,QJsonObject(),pPanel->getDiagramInfo(),QString("page"),1); else DataBase::GetInstance()->updatePage(_curPage,_curPage,pPanel->getDiagramInfo()); int pageId = DataBase::GetInstance()->getPageIdByName(_curPage); pPanel->saveNodes(pageId); } break; case QMessageBox::Cancel: // Cancel was clicked break; default: // should never be reached break; } } } } void DiagramCavas::onSignal_loadPage(PowerEntity* p) { if(!m_mapDrawPanel.contains(p->name())) { //todo:加载数据 onSignal_addDrawingPanel(p); QJsonObject context = DataBase::GetInstance()->getPageContextByName(p->name()); m_mapDrawPanel[p->name()].first->loadNodes(context); } else //已存在 { m_mapDrawPanel[p->name()].first->show(); } } void DiagramCavas::runPage(const QString sName) { QString pageName = sName+QString("_run"); if(!m_mapDrawPanel.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() { runPage(_curPage); } void DiagramCavas::onSignal_deletePage() { } void DiagramCavas::onSignal_activatePage(const QString& name) { _curPage = name; } void DiagramCavas::onSignal_panelDelete(const QString& name) { DrawingPanel* pPanel = m_mapDrawPanel.take(name).first; if(m_mapDrawPanel.isEmpty()) { /*for(auto it = FixedPortsModel::_nodeData.begin();it!=FixedPortsModel::_nodeData.end();) { it = FixedPortsModel::_nodeData.erase(it); }*/ qDeleteAll(FixedPortsModel::_nodeData); FixedPortsModel::_nodeData.clear(); FixedPortsModel::_dataInitialised = false; } this->removeSubWindow(pPanel); delete pPanel; } 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) { 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: 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) { if(info.eType == EntityType::ConfigurationDiagram) { PowerEntity* pEntity = TopologyManager::instance().findEntity(info.sUuid); if(pEntity) { switch (info.eType){ case EntityType::Grid: case EntityType::Zone: case EntityType::Station: break; case EntityType::ConfigurationDiagram: onSignal_loadPage(pEntity); break; default: break; } } } } } void DiagramCavas::removePanel(PowerEntity* pEntity) { QMap>::Iterator iter; for(iter = m_mapDrawPanel.begin(); iter != m_mapDrawPanel.end();++iter) { if(pEntity->name() == iter.value().first->pageName()) { DrawingPanel* pPanel = m_mapDrawPanel.take(iter.key()).first; QWidget* pWindow = static_cast(pPanel); setActiveSubWindow(iter->second); closeActiveSubWindow(); //removeSubWindow(pPanel); //todo:记录删除组态图,从数据库中删除 delete pPanel; break; } } }