DiagramDesigner/diagramCavas/source/diagramCavas.cpp

484 lines
12 KiB
C++
Raw Normal View History

2026-03-23 11:06:17 +08:00
#include "diagramCavas.h"
2026-04-15 17:54:09 +08:00
#include "diagramCavas_p.h"
2026-04-01 16:39:23 +08:00
2026-03-23 11:06:17 +08:00
DiagramCavas::DiagramCavas(QWidget *parent)
: QMdiArea(parent)
2026-04-15 17:54:09 +08:00
,d_ptr(new DiagramCavasPrivate(this))
2026-03-23 11:06:17 +08:00
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
2026-03-23 11:06:17 +08:00
}
DiagramCavas::~DiagramCavas()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
delete d;
2026-03-23 11:06:17 +08:00
disconnect(); //断开连接避免动态库释放时信号问题
}
MonitorPanel* DiagramCavas::getMonitorPanel(QString sPage)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
if(d->m_mapMonitorPanel.contains(sPage))
return d->m_mapMonitorPanel[sPage].first;
2026-03-23 11:06:17 +08:00
return nullptr;
}
2026-04-15 17:54:09 +08:00
DataAccessor* DiagramCavas::getDataAccessor() const
{
Q_D(const DiagramCavas);
return d->_dataAccessor;
}
2026-03-23 11:06:17 +08:00
void DiagramCavas::updateSubPos()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->updateCornerPos();
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::passRecommmandHttpData(HttpRecommandInfo info)
{
2026-04-15 17:54:09 +08:00
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<QString,PluginTypeInfo> DiagramCavas::getPluginShapeInfo()
{
Q_D(DiagramCavas);
return d->m_pluginInfo;
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::initial()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->initialImpl(); // 调用私有实现
2026-04-08 14:17:47 +08:00
}
void DiagramCavas::setCurMode(int nMode)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->_curMode = nMode;
if(d->_curMode == 1){ //运行模式下
2026-04-08 14:17:47 +08:00
showPropertyDlg();
//setViewMode(QMdiArea::SubWindowView);
}
else{
hidePropertyDlg();
//setViewMode(QMdiArea::TabbedView);
}
}
2026-04-15 17:54:09 +08:00
int DiagramCavas::getCurMode()
2026-04-08 14:17:47 +08:00
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
return d->_curMode;
}
2026-04-08 14:17:47 +08:00
2026-04-15 17:54:09 +08:00
void DiagramCavas::showPropertyDlg()
{
Q_D(DiagramCavas);
d->showPropertyDlgImpl();
2026-04-08 14:17:47 +08:00
}
void DiagramCavas::hidePropertyDlg()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->hidePropertyDlgImpl();
2026-03-23 11:06:17 +08:00
}
2026-04-10 17:43:35 +08:00
void DiagramCavas::setHMIVisiblebyName(const QString& str,bool val)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
2026-04-10 17:43:35 +08:00
PowerEntity* pEntity = TopologyManager::instance().findDiagramByName(str,ModelFunctionType::RuntimeModel);
if(pEntity)
{
if(val) //显示
onSignal_loadMonitor(pEntity);
else{
2026-04-15 17:54:09 +08:00
if(d->m_mapMonitorPanel.contains(str))
d->m_mapMonitorPanel[str].first->hide();
2026-04-10 17:43:35 +08:00
}
}
}
2026-03-23 11:06:17 +08:00
void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode,QString parent)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->addDrawingPanelImpl(pItem, mode, parent);
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onSignal_addGraphicsItem(ModelStateInfo& info)
{
QMdiSubWindow* actWindow = activeSubWindow();
if(!actWindow)
return;
QWidget* pWindow= currentSubWindow()->widget();
/*DrawingPanel* pPanel = dynamic_cast<DrawingPanel*>(pWindow);
if(pPanel)
pPanel->onSignal_addGraphicsItem(info);*/
}
void DiagramCavas::onSignal_addPage()
{
//onSignal_addDrawingPanel(QString("Page_")+QString::number(++_pageIndex));
}
void DiagramCavas::onSignal_savePage()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->savePageImpl();
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onSignal_loadMonitor(PowerEntity* p)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->loadMonitorImpl(p);
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::runPage(const QString sName)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
2026-03-23 11:06:17 +08:00
QString pageName = sName+QString("_run");
2026-04-15 17:54:09 +08:00
if(!d->m_mapMonitorPanel.contains(pageName))
2026-03-23 11:06:17 +08:00
{
//onSignal_addDrawingPanel(pageName,DM_run);
2026-04-15 17:54:09 +08:00
//QJsonObject context = DataBase::GetInstance()->getPageContextByName(sName);
2026-03-23 11:06:17 +08:00
//m_mapDrawPanel[pageName]->loadNodes(context);
}
else //已存在
{
//m_mapDrawPanel[pageName]->show();
}
}
void DiagramCavas::onSignal_runPage()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
runPage(d->_curPage);
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onSignal_deletePage()
{
}
void DiagramCavas::onSignal_activatePage(const QString& name)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->_curPage = name;
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onSignal_panelDelete(const QString& name,int nType)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
2026-03-23 11:06:17 +08:00
if(nType == 2){
2026-04-15 17:54:09 +08:00
MonitorPanel* pPanel = d->m_mapMonitorPanel.take(name).first;
2026-03-23 11:06:17 +08:00
this->removeSubWindow(pPanel);
delete pPanel;
}
2026-04-15 17:54:09 +08:00
d->calculateLauncherVisible();
2026-03-23 11:06:17 +08:00
}
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)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
2026-03-23 11:06:17 +08:00
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:
2026-04-15 17:54:09 +08:00
d->removePanel(pEntity);
2026-03-23 11:06:17 +08:00
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)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
2026-03-23 11:06:17 +08:00
PowerEntity* pEntity = TopologyManager::instance().findDiagram(info.id.toString());
if(pEntity)
{
2026-04-15 17:54:09 +08:00
d->removePanel(pEntity);
2026-03-23 11:06:17 +08:00
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()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->showNewSettingDlg();
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onSignal_openStructDataPreview()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->showStructDataPreviewDlg();
2026-03-23 11:06:17 +08:00
}
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)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->updateCornerPos();
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onTargetSelected(QObject* obj)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->onTargetSelected(obj);
2026-03-23 11:06:17 +08:00
}
/****************************************************/
void DiagramCavas::onSignal_updateTopology(QList<HierarchyItem> 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<MonitorPanel*>(pWindow);
if(pPanel)
{
if(pPanel->getMode() == DM_run)
{
pPanel->getModelController()->onSignal_openBayManager();
}
}*/
}
/*********************monitor**************************/
void DiagramCavas::onCreateHMIClicked()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->onCreateHMI();
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onSignal_createHMIClicked(QString sHMI,QString sStructPage,int modelType)
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->createHMIClickedImpl(sHMI, sStructPage, modelType);
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onSignal_updateCurItems(QList<HierarchyItem> lst,bool refresh)
{
emit prepareUpdateItems(lst,refresh);
}
void DiagramCavas::onSignal_selectedItems(QList<HierarchyItem> lst)
{
emit prepareSelectItems(lst);
}
void DiagramCavas::onSignal_monitorCreated(QString sProj,QPair<QString,QUuid> pair)
{
emit updateMonitorList(sProj,pair);
}
void DiagramCavas::onSignal_monitorItemCreated(QList<HierarchyItem> 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<QPair<QString,QUuid>> lst)
{
2026-04-15 17:54:09 +08:00
//生成monitor相关,GridFrame中处理
/*for(auto &pair:lst){
2026-03-23 11:06:17 +08:00
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());
}
}
2026-04-15 17:54:09 +08:00
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));*/
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::updateMonitorListFromDB(int dest)
{
2026-04-15 17:54:09 +08:00
//加载monitor列表GridFrame中处理
/*if(dest != 0)
2026-03-23 11:06:17 +08:00
_loadMonitorPageDlg->clearItems();
QList<MonitorPageInfo> 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));
}
}
2026-04-15 17:54:09 +08:00
}*/
2026-03-23 11:06:17 +08:00
}
void DiagramCavas::onSignal_updateMonitorTopology(QList<QUuid> lst)
{
emit updateMonitorTopology(lst);
}
void DiagramCavas::updateHMIlstFromDB()
{
2026-04-15 17:54:09 +08:00
Q_D(DiagramCavas);
d->updateHMIFromDB();
2026-03-23 11:06:17 +08:00
}