169 lines
4.9 KiB
C++
169 lines
4.9 KiB
C++
|
|
#include "drawingPanel.h"
|
||
|
|
#include "diagramCavas.h"
|
||
|
|
#include "mainwindow.h"
|
||
|
|
#include "dataBase.h"
|
||
|
|
#include "graphicsItem/graphicsBaseItem.h"
|
||
|
|
#include <QMdiSubWindow>
|
||
|
|
#include <QMessageBox>
|
||
|
|
#include <QJsonObject>
|
||
|
|
|
||
|
|
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(GraphicsItemType& type)
|
||
|
|
{
|
||
|
|
QWidget* pWindow= currentSubWindow()->widget();
|
||
|
|
DrawingPanel* pPanel = dynamic_cast<DrawingPanel*>(pWindow);
|
||
|
|
|
||
|
|
if(pPanel)
|
||
|
|
pPanel->onSignal_addGraphicsItem(type);
|
||
|
|
}
|
||
|
|
|
||
|
|
void DiagramCavas::onSignal_addPage()
|
||
|
|
{
|
||
|
|
onSignal_addDrawingPanel(QString("Page_")+QString::number(++_pageIndex));
|
||
|
|
}
|
||
|
|
|
||
|
|
void DiagramCavas::onSignal_savePage()
|
||
|
|
{
|
||
|
|
QWidget* pWindow= currentSubWindow()->widget();
|
||
|
|
DrawingPanel* pPanel = dynamic_cast<DrawingPanel*>(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<QUuid,GraphicsBaseItem*> 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;
|
||
|
|
}
|