DiagramDesigner/diagramCavas/source/diagramCavas.cpp

484 lines
12 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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<QString,PluginTypeInfo> 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<DrawingPanel*>(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<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()
{
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<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)
{
//生成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<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));
}
}
}*/
}
void DiagramCavas::onSignal_updateMonitorTopology(QList<QUuid> lst)
{
emit updateMonitorTopology(lst);
}
void DiagramCavas::updateHMIlstFromDB()
{
Q_D(DiagramCavas);
d->updateHMIFromDB();
}