DiagramDesigner/diagramCavas/include/graphicsDataModel/fixedPortsModel.h

108 lines
5.2 KiB
C++
Raw 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 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 FixedPortsModel : public BaseModel, public Serializable
{
Q_OBJECT
public:
FixedPortsModel(PowerEntity*);
~FixedPortsModel();
public:
QMap<QUuid,QPointF> allNodePos() const;
QVector<Connection> allConnections();
QMap<QUuid,GraphicsProjectModelItem*>& 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可对应多个itemid,类型,名称,工程模名)
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);
template<typename TypeLine> void establishConnection(GraphicsBaseItem*,GraphicsBaseItem*,TypeLine*); //在两个item之间建立连接
QPointF calculateBusPortPos(GraphicsBaseItem* pBus,GraphicsBaseItem* item); //计算母线上接线点位置
void showModelDlg(const QString&,QUuid,GraphicsProjectModelItem*); //点击时显示指定模型的dlg、指定item的数据(模型名对象Uuid,触发事件的item)
void initialPropertyDlg(); //初始化属性设置dlg每个模型拥各自的dlg
void generatePropertyDlg(const QString&);
ConfigurationDiagram* getTopologyDiagram(); //返回当前组态图的拓扑实体
void createTopoTerminalsByItem(GraphicsBaseItem*,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过图形对象创建port接线点(新建)
void createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过componet数据创建port接线点(加载)
bool isItemValid(GraphicsProjectModelItem*); //判断item是否可以连接
void insertProjectModelName(QString,QString); //插入工程模类型(生成工程模时调用)
/********************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); //添加图元基模数据
void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框
void generateProjectModel(const QString&,QList<BaseModelProperty*>); //由基模生成工程模
void addTestData(); //生成测试基模
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<qint64,double> map);
private:
QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象
QMap<QUuid,GraphicsBaseModelItem*> _baseItem; //基模对象
QString _pageName;
DiagramCavas* _cavas;
DesignerScene* _scene;
DrawingPanel* _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;
public:
static bool _dataInitialised;
};