optimize canvas structure
This commit is contained in:
parent
87c4d9e380
commit
4e9fd60e6b
|
|
@ -9,6 +9,18 @@ struct HttpRecommandInfo{ //推荐数据服务
|
||||||
QString sInput; //输入的前缀
|
QString sInput; //输入的前缀
|
||||||
int nOffset = 0; //正确位置计数
|
int nOffset = 0; //正确位置计数
|
||||||
QStringList lstRecommand; //推荐列表
|
QStringList lstRecommand; //推荐列表
|
||||||
|
|
||||||
|
QStringList generateCompleteNames() const
|
||||||
|
{
|
||||||
|
QStringList result;
|
||||||
|
for (const QString& str : lstRecommand) {
|
||||||
|
QString sCompleteName = sInput + str;
|
||||||
|
if (!result.contains(sCompleteName)) {
|
||||||
|
result.append(sCompleteName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ set(DIAGRAMCAVAS_HEADER_FILES
|
||||||
include/designerScene.h
|
include/designerScene.h
|
||||||
include/designerView.h
|
include/designerView.h
|
||||||
include/diagramCavas.h
|
include/diagramCavas.h
|
||||||
|
include/diagramCavas_p.h
|
||||||
include/baseDrawingPanel.h
|
include/baseDrawingPanel.h
|
||||||
include/monitorPanel.h
|
include/monitorPanel.h
|
||||||
include/monitorSideBarDlg.h
|
include/monitorSideBarDlg.h
|
||||||
|
|
@ -149,6 +150,7 @@ set(DIAGRAMCAVAS_SOURCE_FILES
|
||||||
source/designerScene.cpp
|
source/designerScene.cpp
|
||||||
source/designerView.cpp
|
source/designerView.cpp
|
||||||
source/diagramCavas.cpp
|
source/diagramCavas.cpp
|
||||||
|
source/diagramCavas_p.cpp
|
||||||
source/baseDrawingPanel.cpp
|
source/baseDrawingPanel.cpp
|
||||||
source/monitorPanel.cpp
|
source/monitorPanel.cpp
|
||||||
source/monitorSideBarDlg.cpp
|
source/monitorSideBarDlg.cpp
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include "common/core_model/topology.h"
|
#include "common/core_model/topology.h"
|
||||||
#include "common/core_model/types.h"
|
#include "common/core_model/types.h"
|
||||||
#include "common/core_model/diagram.h"
|
#include "common/core_model/diagram.h"
|
||||||
|
#include "common/core_model/data_transmission.h"
|
||||||
#include "common/frontend/monitor_item.h"
|
#include "common/frontend/monitor_item.h"
|
||||||
#include "export.hpp"
|
#include "export.hpp"
|
||||||
|
|
||||||
|
|
@ -14,45 +15,39 @@ QT_BEGIN_NAMESPACE
|
||||||
namespace Ui { class diagramCavas; }
|
namespace Ui { class diagramCavas; }
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class DiagramCavasPrivate; // 前向声明私有实现类
|
||||||
|
|
||||||
|
// 只声明在公共接口中使用的类型
|
||||||
class DrawingPanel;
|
class DrawingPanel;
|
||||||
class PowerEntity;
|
class PowerEntity;
|
||||||
class GraphicsBaseModelItem;
|
|
||||||
class EditBaseItem;
|
|
||||||
class MonitorPanel;
|
class MonitorPanel;
|
||||||
class CornerMonitorLauncher;
|
|
||||||
class LoadMonitorPageDlg;
|
|
||||||
class DiagramConnectSetting;
|
class DiagramConnectSetting;
|
||||||
class DataAccessor;
|
class DataAccessor;
|
||||||
struct HttpRecommandInfo;
|
struct HttpRecommandInfo;
|
||||||
class StructDataPreviewDlg;
|
|
||||||
class ExtraPropertyManager;
|
class ExtraPropertyManager;
|
||||||
class DataSourceDlg;
|
|
||||||
class CreateHMIdlg;
|
|
||||||
class PluginManager;
|
class PluginManager;
|
||||||
class PluginItemFactory;
|
class PluginItemFactory;
|
||||||
class QDetailsView;
|
|
||||||
class PropertyDlg;
|
|
||||||
|
|
||||||
class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea
|
class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_DECLARE_PRIVATE(DiagramCavas)
|
||||||
public:
|
public:
|
||||||
DiagramCavas(QWidget *parent = nullptr);
|
DiagramCavas(QWidget *parent = nullptr);
|
||||||
~DiagramCavas();
|
virtual ~DiagramCavas();
|
||||||
|
|
||||||
MonitorPanel* getMonitorPanel(QString);
|
MonitorPanel* getMonitorPanel(QString);
|
||||||
DataAccessor* getDataAccessor() const {return _dataAccessor;}
|
DataAccessor* getDataAccessor() const;
|
||||||
|
|
||||||
void updateSubPos();
|
void updateSubPos();
|
||||||
void passRecommmandHttpData(HttpRecommandInfo); //传递推荐列表数据
|
void passRecommmandHttpData(HttpRecommandInfo); //传递推荐列表数据
|
||||||
DiagramConnectSetting* getConnectSettingDlg() {return _connectSetting;}
|
DiagramConnectSetting* getConnectSettingDlg();
|
||||||
ExtraPropertyManager* getExtraPropertyManager() {return _extraPropertyManager;}
|
ExtraPropertyManager* getExtraPropertyManager();
|
||||||
QMap<QString,PluginTypeInfo> getPluginShapeInfo() {return m_pluginInfo;}
|
QMap<QString,PluginTypeInfo> getPluginShapeInfo();
|
||||||
public:
|
public:
|
||||||
void initial();
|
void initial();
|
||||||
void setCurMode(int nMode);
|
void setCurMode(int nMode);
|
||||||
int getCurMode(){return _curMode;}
|
int getCurMode();
|
||||||
void showPropertyDlg(); //加载运行时属性栏
|
void showPropertyDlg(); //加载运行时属性栏
|
||||||
void hidePropertyDlg();
|
void hidePropertyDlg();
|
||||||
|
|
||||||
|
|
@ -119,37 +114,18 @@ public slots:
|
||||||
|
|
||||||
void updateHMIlstFromDB(); //从数据库更新HMI列表
|
void updateHMIlstFromDB(); //从数据库更新HMI列表
|
||||||
|
|
||||||
QMap<QString,QPair<MonitorPanel*,QMdiSubWindow*>> getMapMonitor() {return m_mapMonitorPanel;}
|
//QMap<QString,QPair<MonitorPanel*,QMdiSubWindow*>> getMapMonitor() {return m_mapMonitorPanel;}
|
||||||
|
|
||||||
void onTargetSelected(QObject*); //选中事件(属性显示)
|
void onTargetSelected(QObject*); //选中事件(属性显示)
|
||||||
protected:
|
protected:
|
||||||
void resizeEvent(QResizeEvent* event) override;
|
void resizeEvent(QResizeEvent* event) override;
|
||||||
private:
|
private:
|
||||||
void removePanel(PowerEntity*);
|
// 将原有私有方法改为公有或保护,因为它们需要被私有类访问
|
||||||
void calculateLauncherVisible();
|
friend class DiagramCavasPrivate;
|
||||||
|
|
||||||
bool loadPluginConfig(const QString&); //载入插件配置文件
|
// 私有实现指针
|
||||||
bool parsePluginConfig(const QJsonObject& root); //解析插件配置文件
|
DiagramCavasPrivate* d_ptr;
|
||||||
|
Q_DISABLE_COPY(DiagramCavas) // 禁止拷贝
|
||||||
void addShortcuts(); //快捷键
|
|
||||||
private:
|
|
||||||
QMap<QString,QPair<MonitorPanel*,QMdiSubWindow*>> m_mapMonitorPanel; //监控时panel
|
|
||||||
int _pageIndex;
|
|
||||||
QString _curPage;
|
|
||||||
CornerMonitorLauncher* _cornerButton; //简略菜单呼出按钮
|
|
||||||
LoadMonitorPageDlg* _loadMonitorPageDlg;
|
|
||||||
DiagramConnectSetting* _connectSetting;
|
|
||||||
DataAccessor* _dataAccessor;
|
|
||||||
StructDataPreviewDlg* _structDataPreviewDlg;
|
|
||||||
ExtraPropertyManager* _extraPropertyManager;
|
|
||||||
CreateHMIdlg* _createHMIDlg;
|
|
||||||
QDetailsView* _pPropertyPage; //属性页
|
|
||||||
PropertyDlg* _pPropertyDlg; //存放属性页dlg
|
|
||||||
|
|
||||||
PluginManager* m_pluginManager; //插件管理类
|
|
||||||
PluginItemFactory* m_itemFactory; //插件图元工厂类
|
|
||||||
QMap<QString,PluginTypeInfo> m_pluginInfo; //插件对照信息
|
|
||||||
int _curMode = 0; //当前运行模式 0编辑1运行
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,118 @@
|
||||||
|
// diagramcanvas_p.h - 私有头文件,不对外公开
|
||||||
|
#ifndef DIAGRAMCANVAS_P_H
|
||||||
|
#define DIAGRAMCANVAS_P_H
|
||||||
|
|
||||||
|
#include "common/backend/project_model.h"
|
||||||
|
#include "common/core_model/topology.h"
|
||||||
|
#include "common/core_model/types.h"
|
||||||
|
#include "common/core_model/diagram.h"
|
||||||
|
#include "common/frontend/monitor_item.h"
|
||||||
|
#include "monitorpanel.h"
|
||||||
|
#include <QMdiSubWindow>
|
||||||
|
|
||||||
|
class CornerMonitorLauncher;
|
||||||
|
class LoadMonitorPageDlg;
|
||||||
|
class DiagramConnectSetting;
|
||||||
|
class DataAccessor;
|
||||||
|
struct HttpRecommandInfo;
|
||||||
|
class StructDataPreviewDlg;
|
||||||
|
class ExtraPropertyManager;
|
||||||
|
class DataSourceDlg;
|
||||||
|
class CreateHMIdlg;
|
||||||
|
class PluginManager;
|
||||||
|
class PluginItemFactory;
|
||||||
|
class QDetailsView;
|
||||||
|
class PropertyDlg;
|
||||||
|
|
||||||
|
class DiagramCavasPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DiagramCavasPrivate(DiagramCavas* q);
|
||||||
|
~DiagramCavasPrivate();
|
||||||
|
|
||||||
|
// 原始私有成员
|
||||||
|
QMap<QString, QPair<MonitorPanel*, QMdiSubWindow*>> m_mapMonitorPanel;
|
||||||
|
int _pageIndex = 0;
|
||||||
|
QString _curPage;
|
||||||
|
CornerMonitorLauncher* _cornerButton = nullptr;
|
||||||
|
LoadMonitorPageDlg* _loadMonitorPageDlg = nullptr;
|
||||||
|
DiagramConnectSetting* _connectSetting = nullptr;
|
||||||
|
DataAccessor* _dataAccessor = nullptr;
|
||||||
|
StructDataPreviewDlg* _structDataPreviewDlg = nullptr;
|
||||||
|
ExtraPropertyManager* _extraPropertyManager = nullptr;
|
||||||
|
CreateHMIdlg* _createHMIDlg = nullptr;
|
||||||
|
QDetailsView* _pPropertyPage = nullptr;
|
||||||
|
PropertyDlg* _pPropertyDlg = nullptr;
|
||||||
|
PluginManager* m_pluginManager = nullptr;
|
||||||
|
PluginItemFactory* m_itemFactory = nullptr;
|
||||||
|
QMap<QString, PluginTypeInfo> m_pluginInfo;
|
||||||
|
int _curMode = 0;
|
||||||
|
|
||||||
|
// 私有方法
|
||||||
|
void initialImpl();
|
||||||
|
void removePanel(PowerEntity* p);
|
||||||
|
void calculateLauncherVisible();
|
||||||
|
bool loadPluginConfig(const QString& path);
|
||||||
|
bool parsePluginConfig(const QJsonObject& root);
|
||||||
|
void addShortcuts();
|
||||||
|
void updateCornerPos(); //更新右上角Button位置
|
||||||
|
void showNewSettingDlg(); //显示网络设置对话框
|
||||||
|
void showStructDataPreviewDlg(); //显示结构化数据预览
|
||||||
|
void processRecommandData(const HttpRecommandInfo&); //处理推荐数据
|
||||||
|
void onTargetSelected(QObject*); //对象选中事件(属性)
|
||||||
|
void onCreateHMI(); //创建HMI
|
||||||
|
void updateHMIFromDB(); //从数据库中更新HMI信息
|
||||||
|
|
||||||
|
//显示属性相关
|
||||||
|
void showPropertyDlgImpl(); // 显示属性页
|
||||||
|
void hidePropertyDlgImpl(); // 隐藏属性页
|
||||||
|
void initPropertyPage(); // 初始化属性页面
|
||||||
|
void centerPropertyDialogOnScreen(); // 居中属性对话框
|
||||||
|
|
||||||
|
//添加pannel相关
|
||||||
|
void addDrawingPanelImpl(PowerEntity* pItem, DiagramMode mode, const QString& parent);
|
||||||
|
void addMonitorPanel(PowerEntity* pItem, const QString& parent);
|
||||||
|
void addEditorPanel(PowerEntity* pItem, const QString& parent);
|
||||||
|
void connectMonitorPanelSignals(MonitorPanel* panel, FixedPortsModel* model);
|
||||||
|
void updateCurrentPage(const QString& pageName);
|
||||||
|
bool hasPanel(const QString& name) const;
|
||||||
|
MonitorPanel* getPanel(const QString& name) const;
|
||||||
|
QMdiSubWindow* getSubWindow(const QString& name) const;
|
||||||
|
|
||||||
|
//保存相关
|
||||||
|
void savePageImpl();
|
||||||
|
bool saveMonitorPanel(MonitorPanel* monitorPanel);
|
||||||
|
bool saveHMIImages(QMap<QByteArray, HMIImageInfo>& imageMap);
|
||||||
|
bool saveImageReferences(const QList<HMIImageRef>& imageRefs, const QUuid& hmiId);
|
||||||
|
bool saveCustomImageReferences(const QList<HMICustomImageRef>& customImageRefs, const QUuid& hmiId);
|
||||||
|
bool saveOrUpdateHMI(PowerEntity* entity, QJsonObject diagramInfo);
|
||||||
|
MonitorPanel* getCurrentMonitorPanel() const;
|
||||||
|
BaseDrawingPanel* getCurrentDrawingPanel() const;
|
||||||
|
// 批量保存
|
||||||
|
bool saveAllPages();
|
||||||
|
bool savePage(const QString& pageName);
|
||||||
|
int saveModifiedPages();
|
||||||
|
// 修改状态跟踪
|
||||||
|
void markPageModified(const QString& pageName, bool modified = true);
|
||||||
|
bool isPageModified(const QString& pageName) const;
|
||||||
|
QList<QString> getModifiedPages() const;
|
||||||
|
|
||||||
|
//加载相关
|
||||||
|
void loadMonitorImpl(PowerEntity* p);
|
||||||
|
bool createAndLoadMonitor(PowerEntity* p, const QJsonObject& context);
|
||||||
|
bool loadExistingMonitor(const QString& name);
|
||||||
|
QJsonObject loadHMIContext(const QString& hmiName);
|
||||||
|
void applyPageGeometry(MonitorPanel* panel, QMdiSubWindow* subWindow,const QJsonObject& pageAttr);
|
||||||
|
void activateAndSelectMonitor(const QString& name);
|
||||||
|
|
||||||
|
// 创建HMI面板相关
|
||||||
|
void createHMIClickedImpl(const QString& sHMI, const QString& sStructPage, int modelType);
|
||||||
|
bool createHMIDiagram(const QString& sHMI, int modelType, QUuid& outId, PowerEntity*& outEntity);
|
||||||
|
bool loadStructureToPanel(const QString& panelName, const QString& sStructPage);
|
||||||
|
private:
|
||||||
|
DiagramCavas* q_ptr; // 指向公共接口的指针
|
||||||
|
QSet<QString> m_modifiedPages; // 记录修改过的页面
|
||||||
|
Q_DECLARE_PUBLIC(DiagramCavas)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DIAGRAMCANVAS_P_H
|
||||||
|
|
@ -151,7 +151,6 @@ public:
|
||||||
void setPageName(QString s) {_pageName = s;} //设置表名称
|
void setPageName(QString s) {_pageName = s;} //设置表名称
|
||||||
QString pageName() const {return _pageName;}
|
QString pageName() const {return _pageName;}
|
||||||
void activateModel() {Q_EMIT activatePage(_pageName);} //发送激活信号(点击)
|
void activateModel() {Q_EMIT activatePage(_pageName);} //发送激活信号(点击)
|
||||||
void startHttpRequest(); //开始请求数据(运行时)
|
|
||||||
void setCavas(QPointer<DiagramCavas> p) {_cavas = p;} //设置所属顶层容器
|
void setCavas(QPointer<DiagramCavas> p) {_cavas = p;} //设置所属顶层容器
|
||||||
DiagramCavas* getCavas();
|
DiagramCavas* getCavas();
|
||||||
int getCurMode(); //获取当前模式
|
int getCurMode(); //获取当前模式
|
||||||
|
|
@ -192,7 +191,6 @@ private:
|
||||||
DesignerScene* _scene;
|
DesignerScene* _scene;
|
||||||
BaseDrawingPanel* _widget; //顶层widget
|
BaseDrawingPanel* _widget; //顶层widget
|
||||||
HttpInterface* _Interface;
|
HttpInterface* _Interface;
|
||||||
QTimer* _timer;
|
|
||||||
PowerEntity* _pEntity; //拓扑实体
|
PowerEntity* _pEntity; //拓扑实体
|
||||||
QMap<QString,QString> _projectModelName; //该图中所有元件对应的工程模类型(todo:扩展为每张图独立的结构体) uuid,工程模名称
|
QMap<QString,QString> _projectModelName; //该图中所有元件对应的工程模类型(todo:扩展为每张图独立的结构体) uuid,工程模名称
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,191 +1,75 @@
|
||||||
#include <QMdiSubWindow>
|
|
||||||
#include <QMessageBox>
|
|
||||||
#include <QJsonObject>
|
|
||||||
#include <QStandardItem>
|
|
||||||
#include <QLibrary>
|
|
||||||
#include <QMetaMethod>
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QShortcut>
|
|
||||||
#include "monitorPanel.h"
|
|
||||||
#include "diagramCavas.h"
|
#include "diagramCavas.h"
|
||||||
#include "dataBase.h"
|
#include "diagramCavas_p.h"
|
||||||
#include "graphicsItem/graphicsBaseItem.h"
|
|
||||||
#include "projectModelManager.h"
|
|
||||||
#include "topologyManager.h"
|
|
||||||
#include "powerEntity.h"
|
|
||||||
#include "cornerMonitorLauncher.h"
|
|
||||||
#include "loadMonitorPageDlg.h"
|
|
||||||
#include "diagramConnectSetting.h"
|
|
||||||
#include "diagramCommunication/include/communicationManager.h"
|
|
||||||
#include "diagramCommunication/include/configManager.h"
|
|
||||||
#include "instance/dataAccessor.h"
|
|
||||||
#include "uiCommunicationBus.h"
|
|
||||||
#include "itemPropertyDlg.h"
|
|
||||||
#include "monitorConfigDlg.h"
|
|
||||||
#include "structDataPreviewDlg.h"
|
|
||||||
#include "extraPropertyManager.h"
|
|
||||||
#include "createHMIdlg.h"
|
|
||||||
#include "pluginManager.h"
|
|
||||||
#include "graphicsItem/pluginItemFactory.h"
|
|
||||||
|
|
||||||
#include "QQuickDetailsViewMananger.h"
|
|
||||||
#include "propertyType/propertyTypeCustomization_DataSourceType.h"
|
|
||||||
#include "propertyType/propertyTypeCustomization_ConfigEventData.h"
|
|
||||||
#include "propertyType/dataSourceType.h"
|
|
||||||
|
|
||||||
#include "basePannelPropertyProxy.h"
|
|
||||||
#include "QDetailsView.h"
|
|
||||||
#include "propertyDialog.h"
|
|
||||||
|
|
||||||
DiagramCavas::DiagramCavas(QWidget *parent)
|
DiagramCavas::DiagramCavas(QWidget *parent)
|
||||||
: QMdiArea(parent)
|
: QMdiArea(parent)
|
||||||
,_cornerButton(nullptr)
|
,d_ptr(new DiagramCavasPrivate(this))
|
||||||
,_loadMonitorPageDlg(nullptr)
|
|
||||||
,_connectSetting(nullptr)
|
|
||||||
,_dataAccessor(nullptr)
|
|
||||||
,_structDataPreviewDlg(nullptr)
|
|
||||||
,_extraPropertyManager(nullptr)
|
|
||||||
,_createHMIDlg(nullptr)
|
|
||||||
,m_pluginManager(nullptr)
|
|
||||||
,m_itemFactory(nullptr)
|
|
||||||
,_pPropertyPage(nullptr)
|
|
||||||
,_pPropertyDlg(nullptr)
|
|
||||||
{
|
{
|
||||||
_pageIndex = 0;
|
Q_D(DiagramCavas);
|
||||||
}
|
}
|
||||||
|
|
||||||
DiagramCavas::~DiagramCavas()
|
DiagramCavas::~DiagramCavas()
|
||||||
{
|
{
|
||||||
|
Q_D(DiagramCavas);
|
||||||
|
delete d;
|
||||||
disconnect(); //断开连接避免动态库释放时信号问题
|
disconnect(); //断开连接避免动态库释放时信号问题
|
||||||
}
|
}
|
||||||
|
|
||||||
MonitorPanel* DiagramCavas::getMonitorPanel(QString sPage)
|
MonitorPanel* DiagramCavas::getMonitorPanel(QString sPage)
|
||||||
{
|
{
|
||||||
if(m_mapMonitorPanel.contains(sPage))
|
Q_D(DiagramCavas);
|
||||||
return m_mapMonitorPanel[sPage].first;
|
if(d->m_mapMonitorPanel.contains(sPage))
|
||||||
|
return d->m_mapMonitorPanel[sPage].first;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DataAccessor* DiagramCavas::getDataAccessor() const
|
||||||
|
{
|
||||||
|
Q_D(const DiagramCavas);
|
||||||
|
return d->_dataAccessor;
|
||||||
|
}
|
||||||
|
|
||||||
void DiagramCavas::updateSubPos()
|
void DiagramCavas::updateSubPos()
|
||||||
{
|
{
|
||||||
if(_cornerButton)
|
Q_D(DiagramCavas);
|
||||||
_cornerButton->positionAtCorner();
|
d->updateCornerPos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::passRecommmandHttpData(HttpRecommandInfo info)
|
void DiagramCavas::passRecommmandHttpData(HttpRecommandInfo info)
|
||||||
{
|
{
|
||||||
if(_structDataPreviewDlg){ //数据预览dlg
|
Q_D(DiagramCavas);
|
||||||
QStringList lst;
|
d->processRecommandData(info);
|
||||||
for(auto &str:info.lstRecommand){
|
|
||||||
QString sCompleteName = info.sInput+str;
|
|
||||||
if(!lst.contains(sCompleteName))
|
|
||||||
lst.append(sCompleteName);
|
|
||||||
}
|
}
|
||||||
_structDataPreviewDlg->updateRecommandLst(lst);
|
|
||||||
}
|
DiagramConnectSetting* DiagramCavas::getConnectSettingDlg()
|
||||||
//===============================================
|
|
||||||
QMdiSubWindow* pSub = currentSubWindow();
|
|
||||||
if(!pSub)
|
|
||||||
return;
|
|
||||||
QWidget* pWindow= pSub->widget();
|
|
||||||
BaseDrawingPanel* pPanel = dynamic_cast<BaseDrawingPanel*>(pWindow);
|
|
||||||
if(pPanel)
|
|
||||||
{
|
{
|
||||||
if(pPanel->getMode() == DM_run)
|
Q_D(DiagramCavas);
|
||||||
|
return d->_connectSetting;
|
||||||
|
}
|
||||||
|
|
||||||
|
ExtraPropertyManager* DiagramCavas::getExtraPropertyManager()
|
||||||
{
|
{
|
||||||
auto pMonitor = dynamic_cast<MonitorPanel*>(pPanel);
|
Q_D(DiagramCavas);
|
||||||
if(pMonitor){
|
return d->_extraPropertyManager;
|
||||||
QStringList lst;
|
|
||||||
for(auto &str:info.lstRecommand){
|
|
||||||
QString sCompleteName = info.sInput+str;
|
|
||||||
if(!lst.contains(sCompleteName))
|
|
||||||
lst.append(sCompleteName);
|
|
||||||
}
|
|
||||||
//todo:推荐列表的使用
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QMap<QString,PluginTypeInfo> DiagramCavas::getPluginShapeInfo()
|
||||||
|
{
|
||||||
|
Q_D(DiagramCavas);
|
||||||
|
return d->m_pluginInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::initial()
|
void DiagramCavas::initial()
|
||||||
{
|
{
|
||||||
//todo:读取数据并初始化
|
Q_D(DiagramCavas);
|
||||||
QList<PageInfo> lst = DataBase::GetInstance()->getAllPage();
|
d->initialImpl(); // 调用私有实现
|
||||||
for(auto &info:lst)
|
|
||||||
{
|
|
||||||
TopologyManager::instance().createDiagram(QString::number(info.id),info.name);
|
|
||||||
}
|
|
||||||
_cornerButton = new CornerMonitorLauncher(this);
|
|
||||||
_cornerButton->showDlg();
|
|
||||||
_loadMonitorPageDlg = new LoadMonitorPageDlg(this);
|
|
||||||
connect(_cornerButton,&CornerMonitorLauncher::openLoadMonitorDlg,this,[&](){
|
|
||||||
if(_loadMonitorPageDlg){
|
|
||||||
updateMonitorListFromDB(1);
|
|
||||||
_loadMonitorPageDlg->show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
connect(_loadMonitorPageDlg,&LoadMonitorPageDlg::monitorSelected,this,&DiagramCavas::onSignal_monitorSelected);
|
|
||||||
_connectSetting = new DiagramConnectSetting(this);
|
|
||||||
|
|
||||||
// 初始化通信管理器
|
|
||||||
CommunicationManager* comm = CommunicationManager::instance();
|
|
||||||
comm->initialize();
|
|
||||||
|
|
||||||
// 加载配置
|
|
||||||
ConfigManager* config = ConfigManager::instance();
|
|
||||||
config->loadConfig("config.json");
|
|
||||||
|
|
||||||
_extraPropertyManager = new ExtraPropertyManager(this);
|
|
||||||
_extraPropertyManager->initial();
|
|
||||||
|
|
||||||
// 应用配置
|
|
||||||
comm->updateHttpConfig(config->getHttpConfig());
|
|
||||||
comm->updateWebSocketConfig(config->getWebSocketConfig());
|
|
||||||
|
|
||||||
_dataAccessor = new DataAccessor(this);
|
|
||||||
_dataAccessor->setParent(this);
|
|
||||||
connect(UiCommunicationBus::instance(),
|
|
||||||
SIGNAL(httpDataProcessed(QString,QVariant)),
|
|
||||||
_dataAccessor,
|
|
||||||
SLOT(onReceiveHttpData(QString,QVariant)),
|
|
||||||
Qt::AutoConnection);
|
|
||||||
connect(UiCommunicationBus::instance(),
|
|
||||||
SIGNAL(websocketDataProcessed(QVariant)),
|
|
||||||
_dataAccessor,
|
|
||||||
SLOT(onReceiveWebsocketData(QVariant)),
|
|
||||||
Qt::AutoConnection);
|
|
||||||
_structDataPreviewDlg = new StructDataPreviewDlg(this);
|
|
||||||
_structDataPreviewDlg->setExtraPropertyManager(_extraPropertyManager);
|
|
||||||
_structDataPreviewDlg->loadData();
|
|
||||||
|
|
||||||
QQuickDetailsViewManager::Get()->registerPropertyTypeCustomization<DataSourceType, PropertyTypeCustomization_DataSourceType>();
|
|
||||||
QQuickDetailsViewManager::Get()->registerPropertyTypeCustomization<EventList, PropertyTypeCustomization_ConfigEventData>();
|
|
||||||
|
|
||||||
_createHMIDlg = new CreateHMIdlg(this);
|
|
||||||
connect(_createHMIDlg,&CreateHMIdlg::createHMI,this,&DiagramCavas::onSignal_createHMIClicked);
|
|
||||||
updateHMIlstFromDB();
|
|
||||||
|
|
||||||
loadPluginConfig(QCoreApplication::applicationDirPath()+"/pluginConfig.json"); //加载plugin关联信息
|
|
||||||
|
|
||||||
m_pluginManager = PluginManager::instance();
|
|
||||||
//创建Canvas项工厂
|
|
||||||
m_itemFactory = PluginItemFactory::instance();
|
|
||||||
m_itemFactory->setPluginManager(m_pluginManager);
|
|
||||||
//加载插件
|
|
||||||
QString pluginsDir = QApplication::applicationDirPath() + "/plugins";
|
|
||||||
m_pluginManager->addPluginDirectory(pluginsDir);
|
|
||||||
m_pluginManager->loadAllPlugins(pluginsDir);
|
|
||||||
|
|
||||||
_pPropertyDlg = new PropertyDlg(parentWidget());
|
|
||||||
_pPropertyDlg->hide();
|
|
||||||
addShortcuts();
|
|
||||||
//setViewMode(QMdiArea::TabbedView);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::setCurMode(int nMode)
|
void DiagramCavas::setCurMode(int nMode)
|
||||||
{
|
{
|
||||||
_curMode = nMode;
|
Q_D(DiagramCavas);
|
||||||
if(_curMode == 1){ //运行模式下
|
d->_curMode = nMode;
|
||||||
|
if(d->_curMode == 1){ //运行模式下
|
||||||
showPropertyDlg();
|
showPropertyDlg();
|
||||||
//setViewMode(QMdiArea::SubWindowView);
|
//setViewMode(QMdiArea::SubWindowView);
|
||||||
}
|
}
|
||||||
|
|
@ -195,74 +79,43 @@ void DiagramCavas::setCurMode(int nMode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DiagramCavas::getCurMode()
|
||||||
|
{
|
||||||
|
Q_D(DiagramCavas);
|
||||||
|
return d->_curMode;
|
||||||
|
}
|
||||||
|
|
||||||
void DiagramCavas::showPropertyDlg()
|
void DiagramCavas::showPropertyDlg()
|
||||||
{
|
{
|
||||||
if(_pPropertyPage == nullptr){ //未被初始化
|
Q_D(DiagramCavas);
|
||||||
_pPropertyPage = new QDetailsView();
|
d->showPropertyDlgImpl();
|
||||||
_pPropertyPage->setObject(new QObject(this));
|
|
||||||
}
|
|
||||||
_pPropertyDlg->setContent(_pPropertyPage);
|
|
||||||
_pPropertyDlg->show();
|
|
||||||
|
|
||||||
QScreen *screen = QGuiApplication::screenAt(parentWidget()->geometry().center());
|
|
||||||
if (!screen) {
|
|
||||||
screen = QGuiApplication::primaryScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
QRect screenGeometry = screen->geometry();
|
|
||||||
QRect dialogRect = _pPropertyDlg->geometry();
|
|
||||||
|
|
||||||
// 计算位置:水平靠右,垂直居中
|
|
||||||
int x = screenGeometry.right() - dialogRect.width() - 10; // 留10像素边距
|
|
||||||
int y = screenGeometry.center().y() - dialogRect.height() / 2;
|
|
||||||
|
|
||||||
_pPropertyDlg->move(x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::hidePropertyDlg()
|
void DiagramCavas::hidePropertyDlg()
|
||||||
{
|
{
|
||||||
_pPropertyDlg->removeContent(_pPropertyPage);
|
Q_D(DiagramCavas);
|
||||||
_pPropertyDlg->hide();
|
d->hidePropertyDlgImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::setHMIVisiblebyName(const QString& str,bool val)
|
void DiagramCavas::setHMIVisiblebyName(const QString& str,bool val)
|
||||||
{
|
{
|
||||||
|
Q_D(DiagramCavas);
|
||||||
PowerEntity* pEntity = TopologyManager::instance().findDiagramByName(str,ModelFunctionType::RuntimeModel);
|
PowerEntity* pEntity = TopologyManager::instance().findDiagramByName(str,ModelFunctionType::RuntimeModel);
|
||||||
if(pEntity)
|
if(pEntity)
|
||||||
{
|
{
|
||||||
if(val) //显示
|
if(val) //显示
|
||||||
onSignal_loadMonitor(pEntity);
|
onSignal_loadMonitor(pEntity);
|
||||||
else{
|
else{
|
||||||
if(m_mapMonitorPanel.contains(str))
|
if(d->m_mapMonitorPanel.contains(str))
|
||||||
m_mapMonitorPanel[str].first->hide();
|
d->m_mapMonitorPanel[str].first->hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode,QString parent)
|
void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode,QString parent)
|
||||||
{
|
{
|
||||||
if(mode == DM_run){
|
Q_D(DiagramCavas);
|
||||||
MonitorPanel* pPanel = new MonitorPanel(pItem,this,mode);
|
d->addDrawingPanelImpl(pItem, mode, parent);
|
||||||
_curPage = pItem->name();
|
|
||||||
pPanel->setPageName(_curPage);
|
|
||||||
pPanel->setWindowTitle(_curPage);
|
|
||||||
pPanel->setParentPage(parent);
|
|
||||||
QMdiSubWindow* pSub = this->addSubWindow(pPanel);
|
|
||||||
m_mapMonitorPanel.insert(_curPage,qMakePair(pPanel,pSub));
|
|
||||||
pPanel->show();
|
|
||||||
|
|
||||||
FixedPortsModel* pModel = pPanel->getModelController();
|
|
||||||
pModel->setCavas(QPointer<DiagramCavas>(this));
|
|
||||||
connect(pModel,&FixedPortsModel::activatePage,this,&DiagramCavas::onSignal_activatePage);
|
|
||||||
connect(pPanel,&MonitorPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete);
|
|
||||||
connect(pModel,&FixedPortsModel::monitorCreated,this,&DiagramCavas::onSignal_monitorCreated);
|
|
||||||
connect(pModel,&FixedPortsModel::monitorItems,this,&DiagramCavas::onSignal_monitorItemCreated);
|
|
||||||
//connect(pModel,&FixedPortsModel::notifyUpdateMonitorTopology,this,&DiagramCavas::onSignal_updateMonitorTopology); ***使用属性构建拓扑层级,暂不使用260317 by
|
|
||||||
connect(pModel,&FixedPortsModel::updateTopologyItems,this,&DiagramCavas::onSignal_updateTopology);
|
|
||||||
|
|
||||||
connect(pModel,&FixedPortsModel::HMIUpdated,this,&DiagramCavas::onSignal_updateHMI);
|
|
||||||
}
|
|
||||||
calculateLauncherVisible();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_addGraphicsItem(ModelStateInfo& info)
|
void DiagramCavas::onSignal_addGraphicsItem(ModelStateInfo& info)
|
||||||
|
|
@ -284,81 +137,24 @@ void DiagramCavas::onSignal_addPage()
|
||||||
|
|
||||||
void DiagramCavas::onSignal_savePage()
|
void DiagramCavas::onSignal_savePage()
|
||||||
{
|
{
|
||||||
QWidget* pWindow= currentSubWindow()->widget();
|
Q_D(DiagramCavas);
|
||||||
BaseDrawingPanel* pPanel = dynamic_cast<BaseDrawingPanel*>(pWindow);
|
d->savePageImpl();
|
||||||
if(pPanel)
|
|
||||||
{
|
|
||||||
if(pPanel->getMode() == DM_run)
|
|
||||||
{
|
|
||||||
auto pMonitor = dynamic_cast<MonitorPanel*>(pPanel);
|
|
||||||
if(pMonitor){
|
|
||||||
auto pEntity = pMonitor->getEntity();
|
|
||||||
if(pEntity){
|
|
||||||
QMap<QByteArray,HMIImageInfo>& mapResource = ProjectModelManager::instance().getHMIimageMap();
|
|
||||||
DataBase::GetInstance()->insertHMIimagesWithCheck(mapResource.values()); //智能查重插入HMIsource
|
|
||||||
|
|
||||||
QList<HMIImageRef>& imgRefLst = pMonitor->getModelController()->getHMIimageRef(); //获取当前HMI所有img引用
|
|
||||||
if(imgRefLst.size()){
|
|
||||||
auto lstRef = DataBase::GetInstance()->getHMIRefAll(imgRefLst.first().hmiId); //检测HMI是否存储过,删除旧img引用
|
|
||||||
if(lstRef.size())
|
|
||||||
DataBase::GetInstance()->removeHMIRefAll(imgRefLst.first().hmiId);
|
|
||||||
DataBase::GetInstance()->insertHMIimageRefBatch(imgRefLst); //全部重新插入
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<HMICustomImageRef>& imgCustomRefLst = pMonitor->getModelController()->getHMICustomImageRef(); //获取当前HMI所有custom引用
|
|
||||||
if(imgCustomRefLst.size()){
|
|
||||||
auto lstRef = DataBase::GetInstance()->getHMICustomRefAll(imgCustomRefLst.first().hmiId);
|
|
||||||
if(lstRef.size())
|
|
||||||
DataBase::GetInstance()->removeHMICustomRefAll(imgCustomRefLst.first().hmiId);
|
|
||||||
DataBase::GetInstance()->insertHMICustomRefBatch(imgCustomRefLst);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(DataBase::GetInstance()->getHMIdByName(pEntity->name()).isNull()) //不存在,创建
|
|
||||||
DataBase::GetInstance()->insertHMI(QUuid(pEntity->id()),pEntity->name(),pEntity->name(),pMonitor->getDiagramInfo());
|
|
||||||
else
|
|
||||||
DataBase::GetInstance()->updateHMI(pEntity->name(),pMonitor->getDiagramInfo());
|
|
||||||
auto pControl = pMonitor->getModelController();
|
|
||||||
if(pControl)
|
|
||||||
emit pControl->HMIUpdated(pEntity->name(),QUuid(pEntity->id()),1,QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm"));
|
|
||||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_loadMonitor(PowerEntity* p)
|
void DiagramCavas::onSignal_loadMonitor(PowerEntity* p)
|
||||||
{
|
{
|
||||||
if(!m_mapMonitorPanel.contains(p->name()))
|
Q_D(DiagramCavas);
|
||||||
{
|
d->loadMonitorImpl(p);
|
||||||
onSignal_addDrawingPanel(p,DiagramMode::DM_run);
|
|
||||||
QJsonObject context = DataBase::GetInstance()->getHMIContextByTag(p->name());
|
|
||||||
m_mapMonitorPanel[p->name()].first->loadNodes(context);
|
|
||||||
|
|
||||||
QJsonObject pageObj = context["pageAttr"].toObject();
|
|
||||||
int x = pageObj["x"].toInt();
|
|
||||||
int y = pageObj["y"].toInt();
|
|
||||||
int nWidth = pageObj["width"].toInt();
|
|
||||||
int nHeight = pageObj["height"].toInt();
|
|
||||||
if(nWidth && nHeight){
|
|
||||||
m_mapMonitorPanel[p->name()].second->setGeometry(x,y,nWidth,nHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else //已存在
|
|
||||||
{
|
|
||||||
m_mapMonitorPanel[p->name()].first->show();
|
|
||||||
setActiveSubWindow(m_mapMonitorPanel[p->name()].second);
|
|
||||||
}
|
|
||||||
onTargetSelected(m_mapMonitorPanel[p->name()].first->getPropertyProxy());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::runPage(const QString sName)
|
void DiagramCavas::runPage(const QString sName)
|
||||||
{
|
{
|
||||||
|
Q_D(DiagramCavas);
|
||||||
QString pageName = sName+QString("_run");
|
QString pageName = sName+QString("_run");
|
||||||
if(!m_mapMonitorPanel.contains(pageName))
|
if(!d->m_mapMonitorPanel.contains(pageName))
|
||||||
{
|
{
|
||||||
//onSignal_addDrawingPanel(pageName,DM_run);
|
//onSignal_addDrawingPanel(pageName,DM_run);
|
||||||
QJsonObject context = DataBase::GetInstance()->getPageContextByName(sName);
|
//QJsonObject context = DataBase::GetInstance()->getPageContextByName(sName);
|
||||||
//m_mapDrawPanel[pageName]->loadNodes(context);
|
//m_mapDrawPanel[pageName]->loadNodes(context);
|
||||||
}
|
}
|
||||||
else //已存在
|
else //已存在
|
||||||
|
|
@ -369,7 +165,8 @@ void DiagramCavas::runPage(const QString sName)
|
||||||
|
|
||||||
void DiagramCavas::onSignal_runPage()
|
void DiagramCavas::onSignal_runPage()
|
||||||
{
|
{
|
||||||
runPage(_curPage);
|
Q_D(DiagramCavas);
|
||||||
|
runPage(d->_curPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_deletePage()
|
void DiagramCavas::onSignal_deletePage()
|
||||||
|
|
@ -379,17 +176,19 @@ void DiagramCavas::onSignal_deletePage()
|
||||||
|
|
||||||
void DiagramCavas::onSignal_activatePage(const QString& name)
|
void DiagramCavas::onSignal_activatePage(const QString& name)
|
||||||
{
|
{
|
||||||
_curPage = name;
|
Q_D(DiagramCavas);
|
||||||
|
d->_curPage = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_panelDelete(const QString& name,int nType)
|
void DiagramCavas::onSignal_panelDelete(const QString& name,int nType)
|
||||||
{
|
{
|
||||||
|
Q_D(DiagramCavas);
|
||||||
if(nType == 2){
|
if(nType == 2){
|
||||||
MonitorPanel* pPanel = m_mapMonitorPanel.take(name).first;
|
MonitorPanel* pPanel = d->m_mapMonitorPanel.take(name).first;
|
||||||
this->removeSubWindow(pPanel);
|
this->removeSubWindow(pPanel);
|
||||||
delete pPanel;
|
delete pPanel;
|
||||||
}
|
}
|
||||||
calculateLauncherVisible();
|
d->calculateLauncherVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_createEntity(EntityInfo info)
|
void DiagramCavas::onSignal_createEntity(EntityInfo info)
|
||||||
|
|
@ -427,6 +226,7 @@ void DiagramCavas::onSignal_changeEntity(EntityInfo info)
|
||||||
|
|
||||||
void DiagramCavas::onSignal_deleteEntity(EntityInfo info)
|
void DiagramCavas::onSignal_deleteEntity(EntityInfo info)
|
||||||
{
|
{
|
||||||
|
Q_D(DiagramCavas);
|
||||||
PowerEntity* pEntity = TopologyManager::instance().findEntity(info.sUuid);
|
PowerEntity* pEntity = TopologyManager::instance().findEntity(info.sUuid);
|
||||||
if(pEntity)
|
if(pEntity)
|
||||||
{
|
{
|
||||||
|
|
@ -437,7 +237,7 @@ void DiagramCavas::onSignal_deleteEntity(EntityInfo info)
|
||||||
TopologyManager::instance().deleteEntity(info.sUuid);
|
TopologyManager::instance().deleteEntity(info.sUuid);
|
||||||
break;
|
break;
|
||||||
case EntityType::ConfigurationDiagram:
|
case EntityType::ConfigurationDiagram:
|
||||||
removePanel(pEntity);
|
d->removePanel(pEntity);
|
||||||
TopologyManager::instance().deleteEntity(info.sUuid);
|
TopologyManager::instance().deleteEntity(info.sUuid);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -495,10 +295,11 @@ void DiagramCavas::onSignal_changeDiagram(DiagramInfo info)
|
||||||
|
|
||||||
void DiagramCavas::onSignal_deleteDiagram(DiagramInfo info)
|
void DiagramCavas::onSignal_deleteDiagram(DiagramInfo info)
|
||||||
{
|
{
|
||||||
|
Q_D(DiagramCavas);
|
||||||
PowerEntity* pEntity = TopologyManager::instance().findDiagram(info.id.toString());
|
PowerEntity* pEntity = TopologyManager::instance().findDiagram(info.id.toString());
|
||||||
if(pEntity)
|
if(pEntity)
|
||||||
{
|
{
|
||||||
removePanel(pEntity);
|
d->removePanel(pEntity);
|
||||||
TopologyManager::instance().deleteEntity(info.id.toString());
|
TopologyManager::instance().deleteEntity(info.id.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -518,15 +319,14 @@ void DiagramCavas::onSignal_selectDiagram(DiagramInfo info)
|
||||||
|
|
||||||
void DiagramCavas::onSignal_openNetSetting()
|
void DiagramCavas::onSignal_openNetSetting()
|
||||||
{
|
{
|
||||||
if(_connectSetting){
|
Q_D(DiagramCavas);
|
||||||
_connectSetting->showDlg();
|
d->showNewSettingDlg();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_openStructDataPreview()
|
void DiagramCavas::onSignal_openStructDataPreview()
|
||||||
{
|
{
|
||||||
if(_structDataPreviewDlg)
|
Q_D(DiagramCavas);
|
||||||
_structDataPreviewDlg->showDlg();
|
d->showStructDataPreviewDlg();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_createHMI(QString sName,QUuid id)
|
void DiagramCavas::onSignal_createHMI(QString sName,QUuid id)
|
||||||
|
|
@ -539,111 +339,16 @@ void DiagramCavas::onSignal_updateHMI(QString sName,QUuid id,int nState,QString
|
||||||
emit updateHMI(sName,id,nState,sTime);
|
emit updateHMI(sName,id,nState,sTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::removePanel(PowerEntity* pEntity)
|
|
||||||
{
|
|
||||||
QMap<QString,QPair<MonitorPanel*,QMdiSubWindow*>>::Iterator iter;
|
|
||||||
for(iter = m_mapMonitorPanel.begin(); iter != m_mapMonitorPanel.end();++iter)
|
|
||||||
{
|
|
||||||
if(pEntity->name() == iter.value().first->pageName())
|
|
||||||
{
|
|
||||||
MonitorPanel* pPanel = m_mapMonitorPanel.take(iter.key()).first;
|
|
||||||
|
|
||||||
QWidget* pWindow = static_cast<QWidget*>(pPanel);
|
|
||||||
setActiveSubWindow(iter->second);
|
|
||||||
closeActiveSubWindow();
|
|
||||||
//removeSubWindow(pPanel);
|
|
||||||
//todo:记录删除组态图,从数据库中删除
|
|
||||||
delete pPanel;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiagramCavas::calculateLauncherVisible()
|
|
||||||
{
|
|
||||||
if(_cornerButton){
|
|
||||||
if (m_mapMonitorPanel.isEmpty()) {
|
|
||||||
_cornerButton->setVisible(true);
|
|
||||||
} else {
|
|
||||||
_cornerButton->setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DiagramCavas::loadPluginConfig(const QString& configPath)
|
|
||||||
{
|
|
||||||
QFile file(configPath);
|
|
||||||
if (!file.open(QIODevice::ReadOnly)) {
|
|
||||||
qWarning() << "Cannot open config file:" << configPath;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
|
|
||||||
if (doc.isNull() || !doc.isObject()) {
|
|
||||||
qWarning() << "Invalid JSON config";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return parsePluginConfig(doc.object());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DiagramCavas::parsePluginConfig(const QJsonObject& root)
|
|
||||||
{
|
|
||||||
if (!root.contains("shapes")) {
|
|
||||||
qWarning() << "Missing 'shapes' key";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QJsonArray items = root["shapes"].toArray();
|
|
||||||
|
|
||||||
for (const QJsonValue& itemVal : items) {
|
|
||||||
QJsonObject itemObj = itemVal.toObject();
|
|
||||||
|
|
||||||
int type = itemObj["type"].toInt();
|
|
||||||
QString shapeName = itemObj["shapeName"].toString();
|
|
||||||
QString modelName = itemObj["modelName"].toString();
|
|
||||||
|
|
||||||
// 解析枚举类型
|
|
||||||
PluginTypeInfo info;
|
|
||||||
info.baseType = type;
|
|
||||||
info.shapeName = shapeName;
|
|
||||||
info.modelName = modelName;
|
|
||||||
m_pluginInfo[shapeName] = info;
|
|
||||||
}
|
|
||||||
|
|
||||||
qDebug() << "Loaded" << m_pluginInfo.size() << "shapes types from config";
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiagramCavas::addShortcuts()
|
|
||||||
{
|
|
||||||
QShortcut* toggleProp = new QShortcut(QKeySequence("Ctrl+P"), this);
|
|
||||||
connect(toggleProp, &QShortcut::activated, [this]() {
|
|
||||||
if(_pPropertyDlg->isVisible()){
|
|
||||||
hidePropertyDlg();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if(_curMode == 1)
|
|
||||||
showPropertyDlg();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiagramCavas::resizeEvent(QResizeEvent* event)
|
void DiagramCavas::resizeEvent(QResizeEvent* event)
|
||||||
{
|
{
|
||||||
if(_cornerButton)
|
Q_D(DiagramCavas);
|
||||||
_cornerButton->positionAtCorner();
|
d->updateCornerPos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onTargetSelected(QObject* obj)
|
void DiagramCavas::onTargetSelected(QObject* obj)
|
||||||
{
|
{
|
||||||
if(obj){
|
Q_D(DiagramCavas);
|
||||||
if(_curMode == 0)
|
d->onTargetSelected(obj);
|
||||||
emit selectTarget(obj);
|
|
||||||
else
|
|
||||||
_pPropertyPage->setObject(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
/****************************************************/
|
/****************************************************/
|
||||||
|
|
||||||
|
|
@ -672,19 +377,14 @@ void DiagramCavas::onSignl_openCurrentBay()
|
||||||
|
|
||||||
void DiagramCavas::onCreateHMIClicked()
|
void DiagramCavas::onCreateHMIClicked()
|
||||||
{
|
{
|
||||||
if(_createHMIDlg)
|
Q_D(DiagramCavas);
|
||||||
_createHMIDlg->showDlg();
|
d->onCreateHMI();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_createHMIClicked(QString sHMI,QString sStructPage,int modelType)
|
void DiagramCavas::onSignal_createHMIClicked(QString sHMI,QString sStructPage,int modelType)
|
||||||
{
|
{
|
||||||
QUuid id = QUuid::createUuid();
|
Q_D(DiagramCavas);
|
||||||
auto *pEntity = TopologyManager::instance().createDiagram(id.toString(),sHMI,ModelFunctionType::RuntimeModel);
|
d->createHMIClickedImpl(sHMI, sStructPage, modelType);
|
||||||
onSignal_addDrawingPanel(pEntity,DiagramMode::DM_run);
|
|
||||||
QJsonObject context = DataBase::GetInstance()->getMonitorContextByTag(sStructPage);
|
|
||||||
m_mapMonitorPanel[sHMI].first->loadNodes(context); //加载系统图结构
|
|
||||||
onSignal_createHMI(sHMI,id);
|
|
||||||
onTargetSelected(m_mapMonitorPanel[sHMI].first->getPropertyProxy());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_updateCurItems(QList<HierarchyItem> lst,bool refresh)
|
void DiagramCavas::onSignal_updateCurItems(QList<HierarchyItem> lst,bool refresh)
|
||||||
|
|
@ -718,7 +418,9 @@ void DiagramCavas::onSignal_monitorSelected(DiagramInfo info)
|
||||||
|
|
||||||
void DiagramCavas::onSignal_saveMonitor(QList<QPair<QString,QUuid>> lst)
|
void DiagramCavas::onSignal_saveMonitor(QList<QPair<QString,QUuid>> lst)
|
||||||
{
|
{
|
||||||
for(auto &pair:lst){
|
//生成monitor相关,GridFrame中处理
|
||||||
|
|
||||||
|
/*for(auto &pair:lst){
|
||||||
auto pMonitor = m_mapMonitorPanel.value(pair.first).first;
|
auto pMonitor = m_mapMonitorPanel.value(pair.first).first;
|
||||||
if(pMonitor){
|
if(pMonitor){
|
||||||
if(DataBase::GetInstance()->getPageIdByName(pMonitor->getParentPage()) == -1){
|
if(DataBase::GetInstance()->getPageIdByName(pMonitor->getParentPage()) == -1){
|
||||||
|
|
@ -737,12 +439,14 @@ void DiagramCavas::onSignal_saveMonitor(QList<QPair<QString,QUuid>> lst)
|
||||||
DataBase::GetInstance()->updateMonitor(pair.first,pMonitor->getDiagramInfo());
|
DataBase::GetInstance()->updateMonitor(pair.first,pMonitor->getDiagramInfo());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));
|
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::updateMonitorListFromDB(int dest)
|
void DiagramCavas::updateMonitorListFromDB(int dest)
|
||||||
{
|
{
|
||||||
if(dest != 0)
|
//加载monitor列表,GridFrame中处理
|
||||||
|
|
||||||
|
/*if(dest != 0)
|
||||||
_loadMonitorPageDlg->clearItems();
|
_loadMonitorPageDlg->clearItems();
|
||||||
|
|
||||||
QList<MonitorPageInfo> lstMonitor = DataBase::GetInstance()->getAllMonitor();
|
QList<MonitorPageInfo> lstMonitor = DataBase::GetInstance()->getAllMonitor();
|
||||||
|
|
@ -764,7 +468,7 @@ void DiagramCavas::updateMonitorListFromDB(int dest)
|
||||||
_loadMonitorPageDlg->updateItems(info.parent,qMakePair(info.name,info.uid));
|
_loadMonitorPageDlg->updateItems(info.parent,qMakePair(info.name,info.uid));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramCavas::onSignal_updateMonitorTopology(QList<QUuid> lst)
|
void DiagramCavas::onSignal_updateMonitorTopology(QList<QUuid> lst)
|
||||||
|
|
@ -774,12 +478,6 @@ void DiagramCavas::onSignal_updateMonitorTopology(QList<QUuid> lst)
|
||||||
|
|
||||||
void DiagramCavas::updateHMIlstFromDB()
|
void DiagramCavas::updateHMIlstFromDB()
|
||||||
{
|
{
|
||||||
QList<HMIPageInfo> lstMonitor = DataBase::GetInstance()->getAllHMI();
|
Q_D(DiagramCavas);
|
||||||
for(auto &info:lstMonitor)
|
d->updateHMIFromDB();
|
||||||
{
|
|
||||||
auto p = TopologyManager::instance().findDiagram(info.uid.toString(),ModelFunctionType::RuntimeModel);
|
|
||||||
if(!p){
|
|
||||||
TopologyManager::instance().createDiagram(info.uid.toString(),info.name,ModelFunctionType::RuntimeModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -74,13 +74,11 @@ FixedPortsModel::FixedPortsModel(PowerEntity* pEntity)
|
||||||
loadNodeDataFromDataBase();
|
loadNodeDataFromDataBase();
|
||||||
ProjectModelManager::instance().initialHMISourcr();
|
ProjectModelManager::instance().initialHMISourcr();
|
||||||
_Interface = new HttpInterface(this);
|
_Interface = new HttpInterface(this);
|
||||||
_timer = new QTimer(this);
|
|
||||||
m_dataTimer = new QTimer(this);
|
m_dataTimer = new QTimer(this);
|
||||||
|
|
||||||
_modelStateInfo = DataManager::instance().modelState();
|
_modelStateInfo = DataManager::instance().modelState();
|
||||||
_modelDataInfo = DataManager::instance().modelData();
|
_modelDataInfo = DataManager::instance().modelData();
|
||||||
initialPropertyDlg();
|
initialPropertyDlg();
|
||||||
connect(_timer,SIGNAL(timeout()),this,SLOT(onTimeOut()));
|
|
||||||
connect(m_dataTimer,&QTimer::timeout,this,&FixedPortsModel::onDataTimerOut);
|
connect(m_dataTimer,&QTimer::timeout,this,&FixedPortsModel::onDataTimerOut);
|
||||||
m_dataTimer->setInterval(2000);
|
m_dataTimer->setInterval(2000);
|
||||||
connect(_Interface,&HttpInterface::sendPointData,this,&FixedPortsModel::onSignal_GetPointData);
|
connect(_Interface,&HttpInterface::sendPointData,this,&FixedPortsModel::onSignal_GetPointData);
|
||||||
|
|
@ -1817,15 +1815,6 @@ void FixedPortsModel::onScriptExec(QString script)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FixedPortsModel::startHttpRequest()
|
|
||||||
{
|
|
||||||
if(_timer)
|
|
||||||
{
|
|
||||||
_timer->setInterval(1000);
|
|
||||||
_timer->start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DiagramCavas* FixedPortsModel::getCavas()
|
DiagramCavas* FixedPortsModel::getCavas()
|
||||||
{
|
{
|
||||||
if(_cavas)
|
if(_cavas)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue