#include "drawingPanel.h" #include "diagramCavas.h" #include "mainwindow.h" #include "dataBase.h" #include "graphicsItem/graphicsBaseItem.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(const QString& sTitile,DiagramMode mode) { DrawingPanel* pPanel = new DrawingPanel(this,mode); _curPage = sTitile; pPanel->setPageName(sTitile); m_mapDrawPanel.insert(sTitile,pPanel); pPanel->setWindowTitle(sTitile); this->addSubWindow(pPanel); 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) { 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(const QString& sName) { if(!m_mapDrawPanel.contains(sName)) { //todo:加载数据 onSignal_addDrawingPanel(sName); QJsonObject context = DataBase::GetInstance()->getPageContextByName(sName); m_mapDrawPanel[sName]->loadNodes(context); } else //已存在 { m_mapDrawPanel[sName]->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); 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; }