#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; struct Connection; class PowerEntity; class ElectricConnectLineItem; class FixedPortsModel : public BaseModel, public Serializable { Q_OBJECT public: FixedPortsModel(PowerEntity*); ~FixedPortsModel(); public: QMap allNodePos() const; QVector allConnections(); QMap& allItems(); bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*); void addNodeItem(QUuid id,/*int type,*/QPointF pos); QVariant nodeData(QUuid nodeId, NodeRole role) const; BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据,一个data可对应多个item(id,类型,名称,工程模名) void loadNodeDataFromDataBase(); //从数据库加载数据 void addConnectLline(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;} 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 createTopoTerminalsByItem(GraphicsBaseItem*); //通过图形对象创建port接线点(新建) void createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon); //通过componet数据创建port接线点(加载) bool isItemValid(GraphicsProjectModelItem*); //判断item是否可以连接 void insertProjectModelName(QString,QString); //插入工程模类型(生成工程模时调用) /********************baseModel相关**********************/ QMap& allBaseItems(); //获取所有基模对象 QVector allBaseConnections(); QMap allBaseNodePos() const; BaseModelProperty* addBaseNodeData(QUuid id,int type,QString name,QString metaName); //添加图元基模数据 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(); //开始请求数据(运行时) public Q_SLOTS: void onSignal_ifExits(QUuid id,const QString&,int type,GraphicsProjectModelItem*); //判断用户输入的名称是否已存在 void onTimeOut(); void onSignal_GetPointData(QString type,QMap map); private: QMap _nodeItem; //工程模对象 QMap _baseItem; //基模对象 QString _pageName; DesignerScene* _scene; DrawingPanel* _widget; //顶层widget HttpInterface* _Interface; QTimer* _timer; PowerEntity* _pEntity; //拓扑实体 QMap _projectModelName; //该图中所有元件对应的工程模类型(todo:扩展为每张图独立的结构体) uuid,工程模名称 QMap _modelStateInfo; //模型结构信息 QMap _modelDataInfo; //模型数据信息 public: static bool _dataInitialised; };