#pragma once #include "graphicsDataModel/baseModel.h" #include "serializable.h" #include "powerEntity.h" #include #include #include class DrawingPanel; class GraphicsBaseItem; class GraphicsProjectModelItem; class GraphicsBaseModelItem; class BaseProperty; class BaseModelProperty; class DesignerScene; class HttpInterface; class DiagramCavas; struct Connection; class PowerEntity; class ElectricConnectLineItem; class ProjectModelSetting; class ElectricBayItem; class GraphicsNonStandardItem; class BayProperty; class BayManagerDlg; class ModelProperty; class FixedPortsModel : public BaseModel, public Serializable { Q_OBJECT public: FixedPortsModel(PowerEntity*); ~FixedPortsModel(); public: QMap allNodePos() const; QVector allConnectionProperty(); QMap& allItems(); bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*); void addNodeItem(QUuid id,QPointF pos); GraphicsProjectModelItem* nodeItem(QUuid uuid); BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据,一个data可对应多个item(id,类型,名称,工程模名) void loadNodeDataFromDataBase(); //从数据库加载数据 void addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUuid srcPort,QUuid destPort); void deleteNodeItem(GraphicsProjectModelItem*); //QJsonObject saveNode(QUuid const) const; void saveNode(int nPageId); void setScene(DesignerScene* p){_scene = p;} DesignerScene* getScene() {return _scene;} void setTopWidget(DrawingPanel* p) {_widget = p;} QWidget* getTopWidget(); 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&); ConfigurationDiagram* getTopologyDiagram(); //返回当前组态图的拓扑实体 void createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过componet数据创建port接线点(加载) bool isItemValid(GraphicsProjectModelItem*); //判断item是否可以连接 void insertProjectModelName(QString,QString); //插入工程模类型(生成工程模时调用) /********************baseModel相关**********************/ QMap& allBaseItems(); //获取所有基模对象 QVector allBaseConnections(); QMap allBaseNodePos() const; bool addBaseItem(QUuid uuid,GraphicsBaseModelItem*); BaseModelProperty* addBaseNodeData(QUuid id,int type,QString name,QString metaName); //添加图元基模数据 void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框 void generateProjectModel(const QString&,QList,QList); //由基模生成工程模 void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*); //从基模item生成工程模item /*************************间隔*****************************/ void addBayItem(QUuid); bool addBayItem(QUuid,ElectricBayItem*); void addItemsToBay(QList,ElectricBayItem*); //将对象添加到间隔 BayProperty* addBayData(QUuid uuid); QMap& allBayItem(); //返回所有间隔对象 BayProperty* generateBayData(BayProperty*,QList); //生成新间隔数据(间隔数据结构相同) QList getCorrespondId(QList,QList); //获取基模id对应的工程模id QRectF calculateItemsBoundingRect(QList items); //返回包含所有item的rect void addBayByData(BayProperty*); //基模bay生成工程模bay void addTestData(); //生成测试基模 QJsonObject turnListToJson(QList lst,QString sInerTag,QString sOutTag); //将list转换为QJsonObject, QList turnJsonArrToList(QJsonObject obj,QString sInner,QString sOut); Q_SIGNALS: void activatePage(const QString&); //激活当前model所在page public: void setPageName(QString s) {_pageName = s;} //设置表名称 QString pageName() const {return _pageName;} void activateModel() {Q_EMIT activatePage(_pageName);} //发送激活信号(点击) void startHttpRequest(); //开始请求数据(运行时) void setCavas(DiagramCavas* p) {_cavas = p;} //设置所属顶层容器 public Q_SLOTS: void onSignal_ifExits(QUuid id,const QString&,int type,GraphicsProjectModelItem*); //判断用户输入的名称是否已存在 void onTimeOut(); void onSignal_GetPointData(QString type,QMap map); void onSignal_generateDiagram(const QString&); //生成工程组态信号 void onSignal_openBayManager(); private: QMap _nodeItem; //工程模对象 QMap _baseItem; //基模对象 QMap _bayItem; //间隔对象 QString _pageName; DiagramCavas* _cavas; DesignerScene* _scene; DrawingPanel* _widget; //顶层widget HttpInterface* _Interface; QTimer* _timer; PowerEntity* _pEntity; //拓扑实体 QMap _projectModelName; //该图中所有元件对应的工程模类型(todo:扩展为每张图独立的结构体) uuid,工程模名称 QMap _modelStateInfo; //模型结构信息 QMap _modelDataInfo; //模型数据信息 ProjectModelSetting* m_proModelSettingDlg; BayManagerDlg* m_pBayManager; public: static bool _dataInitialised; };