// 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 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> 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 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& imageMap); bool saveImageReferences(const QList& imageRefs, const QUuid& hmiId); bool saveCustomImageReferences(const QList& 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 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 m_modifiedPages; // 记录修改过的页面 Q_DECLARE_PUBLIC(DiagramCavas) }; #endif // DIAGRAMCANVAS_P_H