DiagramDesigner/diagramCavas/include/graphicsDataModel/fixedPortsModel.h

162 lines
9.0 KiB
C
Raw Normal View History

2025-02-06 16:36:50 +08:00
#pragma once
#include "graphicsDataModel/baseModel.h"
#include "serializable.h"
2025-04-30 16:29:17 +08:00
#include "powerEntity.h"
2025-02-06 16:36:50 +08:00
#include <QSharedPointer>
#include <QJsonObject>
#include <QTimer>
2025-11-14 19:31:09 +08:00
class BaseDrawingPanel;
2025-02-06 16:36:50 +08:00
class DrawingPanel;
class GraphicsBaseItem;
class GraphicsProjectModelItem;
class GraphicsBaseModelItem;
2025-02-06 16:36:50 +08:00
class BaseProperty;
class BaseModelProperty;
2025-02-06 16:36:50 +08:00
class DesignerScene;
class HttpInterface;
2025-06-20 18:09:41 +08:00
class DiagramCavas;
2025-02-06 16:36:50 +08:00
struct Connection;
2025-04-30 16:29:17 +08:00
class PowerEntity;
class ElectricConnectLineItem;
2025-06-20 18:09:41 +08:00
class ProjectModelSetting;
2025-10-17 18:14:44 +08:00
class ProjectIconSetting;
2025-07-11 18:13:54 +08:00
class ElectricBayItem;
class GraphicsNonStandardItem;
class BayProperty;
class BayManagerDlg;
class ModelProperty;
2025-10-11 18:51:33 +08:00
struct itemPageInfo;
2025-10-21 18:46:51 +08:00
class EditBaseItem;
2025-11-21 19:22:41 +08:00
class MonitorPanel;
2025-04-30 16:29:17 +08:00
2025-02-06 16:36:50 +08:00
class FixedPortsModel : public BaseModel, public Serializable
{
Q_OBJECT
public:
2025-04-30 16:29:17 +08:00
FixedPortsModel(PowerEntity*);
2025-02-06 16:36:50 +08:00
~FixedPortsModel();
public:
2025-10-11 18:51:33 +08:00
QMap<QUuid,itemPageInfo> allNodePos() const;
2025-07-11 18:13:54 +08:00
QVector<ModelProperty*> allConnectionProperty();
QMap<QUuid,GraphicsProjectModelItem*>& allItems();
bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*);
2025-11-14 19:31:09 +08:00
QString addNodeItem(QUuid id,QPointF pos,double width = 0,double height = 0,double rotate = 0);
2025-07-04 18:47:49 +08:00
GraphicsProjectModelItem* nodeItem(QUuid uuid);
BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据一个data可对应多个itemid,类型,名称,工程模名)
2025-02-06 16:36:50 +08:00
void loadNodeDataFromDataBase(); //从数据库加载数据
2025-11-14 19:31:09 +08:00
QString addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUuid srcPort,QUuid destPort);
void deleteNodeItem(GraphicsProjectModelItem*);
2025-05-16 19:20:46 +08:00
//QJsonObject saveNode(QUuid const) const;
2025-02-06 16:36:50 +08:00
void saveNode(int nPageId);
void setScene(DesignerScene* p){_scene = p;}
2025-06-27 19:17:04 +08:00
DesignerScene* getScene() {return _scene;}
2025-11-14 19:31:09 +08:00
void setTopWidget(BaseDrawingPanel* p) {_widget = p;}
2025-11-21 19:22:41 +08:00
BaseDrawingPanel* getParent(){return _widget;}
2025-02-06 16:36:50 +08:00
QWidget* getTopWidget();
2025-04-30 16:29:17 +08:00
QPointF getTerminalPos(const QString& sTerminalId); //获取拓扑接线点在当前diagram中的位置
ElectricConnectLineItem* getLineItemById(const QString& terminalId);
void showModelDlg(const QString&,QUuid,GraphicsProjectModelItem*); //点击时显示指定模型的dlg、指定item的数据(模型名对象Uuid,触发事件的item)
void initialPropertyDlg(); //初始化属性设置dlg每个模型拥各自的dlg
void generatePropertyDlg(const QString&);
2025-04-30 16:29:17 +08:00
ConfigurationDiagram* getTopologyDiagram(); //返回当前组态图的拓扑实体
2025-06-20 18:09:41 +08:00
void createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过componet数据创建port接线点(加载)
bool isItemValid(GraphicsProjectModelItem*); //判断item是否可以连接
void insertProjectModelName(QString,QString); //插入工程模类型(生成工程模时调用)
2025-10-17 18:14:44 +08:00
void showProjectIconSettingDlg(GraphicsProjectModelItem*); //显示工程模图标设置(设置使用图标)
void updateItemIcon(QString sMeta,QString sModel); //更新指定模型的图标
/********************baseModel相关**********************/
QMap<QUuid,GraphicsBaseModelItem*>& allBaseItems(); //获取所有基模对象
QVector<Connection> allBaseConnections();
QMap<QUuid,QPointF> allBaseNodePos() const;
2025-06-20 18:09:41 +08:00
bool addBaseItem(QUuid uuid,GraphicsBaseModelItem*);
2025-09-26 18:50:21 +08:00
BaseModelProperty* addBaseNodeData(QUuid id,int type,QString name,QString metaName,QString bay = QString()); //添加图元基模数据
2025-06-20 18:09:41 +08:00
void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框
2025-07-11 18:13:54 +08:00
void generateProjectModel(const QString&,QList<GraphicsBaseModelItem*>,QList<GraphicsNonStandardItem*>); //由基模生成工程模
2025-06-27 19:17:04 +08:00
void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*); //从基模item生成工程模item
2025-10-21 18:46:51 +08:00
void onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay); //editor结束生成基模
2025-07-11 18:13:54 +08:00
/*************************间隔*****************************/
2025-10-21 18:46:51 +08:00
void addBayItem(QUuid,ModelFunctionType = ModelFunctionType::ProjectModel);
bool addBayItem(QUuid,ElectricBayItem*,ModelFunctionType = ModelFunctionType::ProjectModel);
2025-07-11 18:13:54 +08:00
void addItemsToBay(QList<GraphicsBaseItem*>,ElectricBayItem*); //将对象添加到间隔
2025-10-21 18:46:51 +08:00
BayProperty* addBayData(QUuid uuid,ModelFunctionType = ModelFunctionType::ProjectModel);
2025-07-11 18:13:54 +08:00
QMap<QUuid,ElectricBayItem*>& allBayItem(); //返回所有间隔对象
BayProperty* generateBayData(BayProperty*,QList<BaseProperty*>); //生成新间隔数据(间隔数据结构相同)<baseBay,projectData>
QList<QUuid> getCorrespondId(QList<QUuid>,QList<BaseProperty*>); //获取基模id对应的工程模id
QRectF calculateItemsBoundingRect(QList<GraphicsBaseItem*> items); //返回包含所有item的rect
2025-10-21 18:46:51 +08:00
void addBayByData(BayProperty*,ModelFunctionType = ModelFunctionType::ProjectModel); //data生成bay
2025-07-11 18:13:54 +08:00
2025-06-20 18:09:41 +08:00
void addTestData(); //生成测试基模
2025-07-18 18:26:13 +08:00
QJsonObject turnListToJson(QList<QUuid> lst,QString sInerTag,QString sOutTag); //将list转换为QJsonObject,<lst,内部标签,外部标签>
QList<QUuid> turnJsonArrToList(QJsonObject obj,QString sInner,QString sOut);
2025-11-14 19:31:09 +08:00
/*************************监控(运行时)**************************/
2025-11-21 19:22:41 +08:00
void generateMonitor(QString,QList<monitorRelationItem>); //生成监控 (监控名,选中的设备列表)
void generateMonitorConfig(MonitorPanel*); //生成监控配置参数结构
QMap<QUuid,QList<monitorItemAttributeInfo>>& getMonitorPara() {return m_monitorPara;}
2025-11-25 20:29:32 +08:00
void monitorItemSelected(QUuid); //运行时item选中事件
void monitorItemDetailAttr(QUuid); //显示属性详情
2025-02-06 16:36:50 +08:00
Q_SIGNALS:
void activatePage(const QString&); //激活当前model所在page
2025-11-14 19:31:09 +08:00
void updateCurrentItems(QList<monitorRelationItem>,bool); //更新当前组态元件列表 <名称,uid>
2025-11-21 19:22:41 +08:00
void itemSelected(QList<monitorRelationItem>); //发送选中的元件
2025-11-14 19:31:09 +08:00
void monitorCreated(QString,QPair<QString,QUuid>); //监控创建信号 <工程page,<监控page,page_uid>>
2025-11-21 19:22:41 +08:00
void monitorItems(QList<monitorRelationItem>); //发送创建成功的Items
2025-02-06 16:36:50 +08:00
public:
void setPageName(QString s) {_pageName = s;} //设置表名称
QString pageName() const {return _pageName;}
void activateModel() {Q_EMIT activatePage(_pageName);} //发送激活信号(点击)
void startHttpRequest(); //开始请求数据(运行时)
2025-06-20 18:09:41 +08:00
void setCavas(DiagramCavas* p) {_cavas = p;} //设置所属顶层容器
2025-11-21 19:22:41 +08:00
QMap<QUuid,GraphicsProjectModelItem*> getProjectItems(){return _nodeItem;}
QMap<QUuid,GraphicsBaseModelItem*> getBaseModelItems(){return _baseItem;}
QMap<QUuid,ElectricBayItem*> getBaseBayItems(){return _baseBayItem;}
QMap<QUuid,ElectricBayItem*> getProjectBayItems(){return _bayItem;}
2025-02-06 16:36:50 +08:00
public Q_SLOTS:
void onSignal_ifExits(QUuid id,const QString&,int type,GraphicsProjectModelItem*); //判断用户输入的名称是否已存在
2025-02-06 16:36:50 +08:00
void onTimeOut();
void onSignal_GetPointData(QString type,QMap<qint64,double> map);
2025-07-04 18:47:49 +08:00
void onSignal_generateDiagram(const QString&); //生成工程组态信号
2025-07-11 18:13:54 +08:00
void onSignal_openBayManager();
2025-02-06 16:36:50 +08:00
private:
2025-10-11 18:51:33 +08:00
void addPortsToItem_json(PortState,QJsonArray,GraphicsProjectModelItem*); //将json格式的port添加到item
2025-10-21 18:46:51 +08:00
void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item
QString removeSuffix(const QString& str); //移除最后一个下划线后的内容 (处理各种tag后缀)
2025-11-14 19:31:09 +08:00
ModelProperty* getItemByUid(QList<GraphicsBaseItem*>,QUuid); //返回uid对应的data
2025-10-11 18:51:33 +08:00
private:
2025-02-06 16:36:50 +08:00
QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象
QMap<QUuid,GraphicsBaseModelItem*> _baseItem; //基模对象
2025-10-21 18:46:51 +08:00
QMap<QUuid,ElectricBayItem*> _baseBayItem; //基模间隔对象
2025-07-11 18:13:54 +08:00
QMap<QUuid,ElectricBayItem*> _bayItem; //间隔对象
2025-02-06 16:36:50 +08:00
QString _pageName;
2025-06-20 18:09:41 +08:00
DiagramCavas* _cavas;
2025-02-06 16:36:50 +08:00
DesignerScene* _scene;
2025-11-14 19:31:09 +08:00
BaseDrawingPanel* _widget; //顶层widget
2025-02-06 16:36:50 +08:00
HttpInterface* _Interface;
QTimer* _timer;
2025-04-30 16:29:17 +08:00
PowerEntity* _pEntity; //拓扑实体
QMap<QString,QString> _projectModelName; //该图中所有元件对应的工程模类型(todo:扩展为每张图独立的结构体) uuid,工程模名称
QMap<QString,modelStateInfo> _modelStateInfo; //模型结构信息
2025-04-09 16:20:34 +08:00
QMap<QString,modelDataInfo> _modelDataInfo; //模型数据信息
2025-06-20 18:09:41 +08:00
ProjectModelSetting* m_proModelSettingDlg;
2025-10-17 18:14:44 +08:00
ProjectIconSetting* m_projectIconSettingDlg;
2025-07-11 18:13:54 +08:00
BayManagerDlg* m_pBayManager;
2025-11-21 19:22:41 +08:00
QMap<QUuid,QList<monitorItemAttributeInfo>> m_monitorPara; //监控参数
2025-02-06 16:36:50 +08:00
public:
static bool _dataInitialised;
};