DiagramDesigner/diagramCavas/include/graphicsDataModel/fixedPortsModel.h

176 lines
10 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "graphicsDataModel/baseModel.h"
#include "serializable.h"
#include "powerEntity.h"
#include <QSharedPointer>
#include <QJsonObject>
#include <QTimer>
class BaseDrawingPanel;
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 ProjectIconSetting;
class ElectricBayItem;
class GraphicsNonStandardItem;
class BayProperty;
class BayManagerDlg;
class ModelProperty;
struct itemPageInfo;
class EditBaseItem;
class MonitorPanel;
class FixedPortsModel : public BaseModel, public Serializable
{
Q_OBJECT
public:
FixedPortsModel(PowerEntity*);
~FixedPortsModel();
public:
QMap<QUuid,itemPageInfo> allNodePos() const;
QVector<ModelProperty*> allConnectionProperty();
QMap<QUuid,GraphicsProjectModelItem*>& allItems();
bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*);
QString addNodeItem(QUuid id,QPointF pos,double width = 0,double height = 0,double rotate = 0);
GraphicsProjectModelItem* nodeItem(QUuid uuid);
BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据一个data可对应多个itemid,类型,名称,工程模名)
void loadNodeDataFromDataBase(); //从数据库加载数据
QString 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(BaseDrawingPanel* p) {_widget = p;}
BaseDrawingPanel* getParent(){return _widget;}
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); //插入工程模类型(生成工程模时调用)
void showProjectIconSettingDlg(GraphicsProjectModelItem*); //显示工程模图标设置(设置使用图标)
void updateItemIcon(QString sMeta,QString sModel); //更新指定模型的图标
/********************baseModel相关**********************/
QMap<QUuid,GraphicsBaseModelItem*>& allBaseItems(); //获取所有基模对象
QVector<Connection> allBaseConnections();
QMap<QUuid,QPointF> allBaseNodePos() const;
bool addBaseItem(QUuid uuid,GraphicsBaseModelItem*);
BaseModelProperty* addBaseNodeData(QUuid id,int type,QString name,QString metaName,QString bay = QString()); //添加图元基模数据
void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框
void generateProjectModel(const QString&,QList<GraphicsBaseModelItem*>,QList<GraphicsNonStandardItem*>); //由基模生成工程模
void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*); //从基模item生成工程模item
void onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay); //editor结束生成基模
/*************************间隔*****************************/
void addBayItem(QUuid,ModelFunctionType = ModelFunctionType::ProjectModel);
bool addBayItem(QUuid,ElectricBayItem*,ModelFunctionType = ModelFunctionType::ProjectModel);
void addItemsToBay(QList<GraphicsBaseItem*>,ElectricBayItem*); //将对象添加到间隔
BayProperty* addBayData(QUuid uuid,ModelFunctionType = ModelFunctionType::ProjectModel);
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
void addBayByData(BayProperty*,ModelFunctionType = ModelFunctionType::ProjectModel); //data生成bay
void addTestData(); //生成测试基模
QJsonObject turnListToJson(QList<QUuid> lst,QString sInerTag,QString sOutTag); //将list转换为QJsonObject,<lst,内部标签,外部标签>
QList<QUuid> turnJsonArrToList(QJsonObject obj,QString sInner,QString sOut);
/*************************监控(运行时)**************************/
void generateMonitor(QString,QList<monitorRelationItem>); //生成监控 (监控名,选中的设备列表)
void generateMonitorConfig(MonitorPanel*); //生成监控配置参数结构
void setMonitorPara(QMap<QUuid,QList<monitorItemAttributeInfo>> map){m_monitorPara = map;}
QMap<QUuid,QList<monitorItemAttributeInfo>>& getMonitorPara() {return m_monitorPara;}
void setMonitorRelation(QList<monitorRelationItem> lst){m_lstMonitorRelation = lst;}
QList<monitorRelationItem> getMonitorRelation() {return m_lstMonitorRelation;}
void monitorItemSelected(QUuid); //运行时item选中事件
void monitorItemDetailAttr(QUuid); //显示属性详情
void monitorItemSet(QUuid); //运行时item设置完成
void updateMonitorDisplay(); //更新监控图元显示
QMap<int,QList<QPair<monitorItemState,QString>>>& getMonitorStateMap(){return m_monitorStateMap;}
void setMonitorDisplaySetting(QMap<monitorItemTypeStruct,QMap<monitorItemStateStruct,monitorItemDisplayInfo>> map){m_monitorDisplaySetting = map;}
QMap<monitorItemTypeStruct,QMap<monitorItemStateStruct,monitorItemDisplayInfo>>& getMonitorDisplaySetting(){return m_monitorDisplaySetting;}
Q_SIGNALS:
void activatePage(const QString&); //激活当前model所在page
void updateCurrentItems(QList<monitorRelationItem>,bool); //更新当前组态元件列表 <名称,uid>
void itemSelected(QList<monitorRelationItem>); //发送选中的元件
void monitorCreated(QString,QPair<QString,QUuid>); //监控创建信号 <工程page,<监控page,page_uid>>
void monitorItems(QList<monitorRelationItem>); //发送创建成功的Items
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;} //设置所属顶层容器
DiagramCavas* getCavas() {return _cavas;}
QMap<QUuid,GraphicsProjectModelItem*> getProjectItems(){return _nodeItem;}
QMap<QUuid,GraphicsBaseModelItem*> getBaseModelItems(){return _baseItem;}
QMap<QUuid,ElectricBayItem*> getBaseBayItems(){return _baseBayItem;}
QMap<QUuid,ElectricBayItem*> getProjectBayItems(){return _bayItem;}
public Q_SLOTS:
void onSignal_ifExits(QUuid id,const QString&,int type,GraphicsProjectModelItem*); //判断用户输入的名称是否已存在
void onTimeOut();
void onSignal_GetPointData(QString type,QMap<qint64,double> map);
void onSignal_generateDiagram(const QString&); //生成工程组态信号
void onSignal_openBayManager();
private:
void addPortsToItem_json(PortState,QJsonArray,GraphicsProjectModelItem*); //将json格式的port添加到item
void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item
QString removeSuffix(const QString& str); //移除最后一个下划线后的内容 (处理各种tag后缀)
ModelProperty* getItemByUid(QList<GraphicsBaseItem*>,QUuid); //返回uid对应的data
private:
QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象
QMap<QUuid,GraphicsBaseModelItem*> _baseItem; //基模对象
QMap<QUuid,ElectricBayItem*> _baseBayItem; //基模间隔对象
QMap<QUuid,ElectricBayItem*> _bayItem; //间隔对象
QString _pageName;
DiagramCavas* _cavas;
DesignerScene* _scene;
BaseDrawingPanel* _widget; //顶层widget
HttpInterface* _Interface;
QTimer* _timer;
PowerEntity* _pEntity; //拓扑实体
QMap<QString,QString> _projectModelName; //该图中所有元件对应的工程模类型(todo:扩展为每张图独立的结构体) uuid,工程模名称
QMap<QString,modelStateInfo> _modelStateInfo; //模型结构信息
QMap<QString,modelDataInfo> _modelDataInfo; //模型数据信息
ProjectModelSetting* m_proModelSettingDlg;
ProjectIconSetting* m_projectIconSettingDlg;
BayManagerDlg* m_pBayManager;
QMap<QUuid,QList<monitorItemAttributeInfo>> m_monitorPara; //监控参数
QMap<int,QList<QPair<monitorItemState,QString>>> m_monitorStateMap; //元件状态对照表 <type,<state,状态名>>
QMap<monitorItemTypeStruct,QMap<monitorItemStateStruct,monitorItemDisplayInfo>> m_monitorDisplaySetting; //元件设置
QList<monitorRelationItem> m_lstMonitorRelation; //监控item层级关系
public:
static bool _dataInitialised;
};