DiagramDesigner/diagramCavas/include/diagramCavas_p.h

119 lines
4.7 KiB
C++

// 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