DiagramDesigner/common/backend/project_model.h

284 lines
8.0 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.

#ifndef PROJECT_MODEL_H
#define PROJECT_MODEL_H
#include <QWidget>
#include <QString>
#include <QJsonObject>
#include <QMap>
#include <QStandardItemModel>
#include "tools.h"
struct ProjectManagerStruct {
int id = 0;
QString name; // 工程模表名
QString tag; // 工程模名称
QString metaModel; // 元模名
QString groupName; // 属性组名
int linkType; // 图元链接类型
QJsonObject checkState; // 属性选择状态
};
struct ProjectModelSettingStruct //工程模设定类,如图标
{
QString modelName; //工程模名
QMap<QString,QByteArray> mapSvg; //存放选择的svg图片
QMap<QString,QByteArray> mapUsedSvg; //存放使用的svg
};
struct PropertyState {
bool checkState = false;
QString dataType;
bool editable = true;
};
struct PropertyPage {
QMap<QString, PropertyState> checkState;
bool isPublic = false;
};
struct FormerName //曾用名,记录修改前名称
{
QString sName;
bool bChanged = false; //是否改变过
};
typedef QMap<QString, PropertyPage> MapProperty;
struct PropertyModel {
MapProperty mapProperty;
int nType = 0; //工程模类型,选择图标后确定
QStandardItemModel* pBase = nullptr; //基础属性
QStandardItemModel* pSelect = nullptr; //已选择属性
FormerName formerMeta; //曾用元模名
FormerName formerProject; //曾用工程模名
QMap<QString,ProjectManagerStruct> dataInfo; //存放数据库内容
ProjectModelSettingStruct modelSetting;
PropertyModel deepCopy() //深拷贝
{
PropertyModel copy;
copy.mapProperty = mapProperty;
copy.nType = nType;
copy.pBase = deepCloneModel(pBase);
copy.pSelect = deepCloneModel(pSelect);
copy.formerMeta = formerMeta;
copy.formerProject = formerProject;
copy.dataInfo = dataInfo;
copy.modelSetting = modelSetting;
return copy;
}
void release()
{
delete pBase;
delete pSelect;
pBase = nullptr;
pSelect = nullptr;
}
};
typedef QMap<QString,PropertyModel> MapProject; //str为工程名PropertyModel为工程属性
typedef QMap<QString,MapProject> MapMeta; //str为元模名,PropertyModel为工程模集
struct PropertyStateInfo {
QString name; // 属性名
QString tagName; // 别名
QString type; // 属性类型
QVariant defaultValue; // 默认值
int lengthPrecision = 999; // 长度限制
int isVisible = 1; // 是否可见0不可见,1可见,2特殊项
bool lock = false; // 值手动改变时置true下次保存时恢复
};
Q_DECLARE_METATYPE(PropertyStateInfo)
// 属性值信息映射
typedef QMap<QString, PropertyStateInfo> PropertyValueInfo;
// 属性组状态信息
struct GroupStateInfo {
QString groupName; // 组名
QString tableName; // 表名
bool isPublic = false; // 是否公共
PropertyValueInfo info; // 属性信息
};
// 属性组实时数据
struct GroupStateValue {
QString groupName; // 组名
QString tableName; // 表名
QMap<QUuid, PropertyValueInfo> mapInfo; // 实时信息映射
};
struct ModelStateInfo //模型结构信息
{
QString modelName;
int modelType;
QWidget* _PropertyDlg = NULL; //属性设置界面,每个模型维护一种界面
QMap<QString,GroupStateInfo> groupInfo; //属性组信息
void release()
{
if(_PropertyDlg){
delete _PropertyDlg;
_PropertyDlg = nullptr;
}
}
};
struct ModelDataInfo //模型数据信息
{
QString modelName;
int modelType;
QMap<QString,GroupStateValue> groupInfo; //属性组实时信息
};
struct PropertyGroupState {
QString groupName; // 属性组名称
QString tableName; // 属性组表名
QJsonObject propertyState; // 属性状态信息
};
struct MeasureAttributeType //量测可用属性类型(从基模获取的占位符变量)
{
QString tag;
QString name;
};
// 属性内容信息
struct PropertyContentInfo {
QString proTag; // 属性标签
QString proName; // 属性名称
QString proType; // 属性类型
QWidget* proEditor = nullptr; // 编辑窗口对象
bool isValid() const {
return !proTag.isEmpty() && !proName.isEmpty();
}
};
struct PtExtraInfo
{
int index = 0;
QString scope; //变比标签
QString accuracy; //精度等级标签
QString volume; //二次负载容量标签
QString star; //线圈接法
double ratio; //变比
int polarity = 1; //极性
};
struct CtExtraInfo
{
int index = 0;
QString scope; //变比标签
QString accuracy; //精度等级标签
QString volume; //二次负载容量标签
double ratio; //变比
int polarity = 1; //极性
};
struct MeasurementInfo //量测
{
QString tag; //量测tag
QString name; //量测名称
int type; //量测类型 0:遥测 1:遥信 2:遥控
int size; //量测size
QUuid bayUuid; //所属间隔
QUuid componentUuid; //所属设备
//通讯
int nSource; //数据来源 1:cl3611 2:104
QString sStation; //子站名称
QString sDevice; //设备名称
QString sChannel; //通道名(cl3611) 遥测TMx(1-8); P; Q; S; PF; F; deltaF; UAB; UBC; UCA; 遥信: TSxx(01-10); 遥控: TCx;
int nPacket; //包号(104)
int nOffset; //偏移量(104)
//事件
bool bEnable = false; //"enable"开启标志
QMap<QString,double> mapTE; //遥测"cause" key:upup,up,down,downdown可选val:0-100
QString sEdge; //遥信"cause:edge" raising, falling 字符串单选
QString sCommand; //"action:command" info, warning, error, critical, exception 字符串单选
QStringList lstParameter; //"action:parameters" 字符串数组
QString sWindType; //绕组类型 ctpt
int nRatio; //变比
int nPolarity; //极性
int nIndex; //对应绕组序号
QString sSymmetry; //对称量测的name
};
// 定义比较键的结构
struct MeasurementKey {
int nSource;
QString sStation;
QString sDevice;
QString sChannel;
int nPacket;
int nOffset;
MeasurementKey(const MeasurementInfo& info)
: nSource(info.nSource)
, sStation(info.sStation)
, sDevice(info.sDevice)
, sChannel(info.sChannel)
, nPacket(info.nPacket)
, nOffset(info.nOffset) {}
// 用于QMap排序
bool operator<(const MeasurementKey& other) const {
if (nSource != other.nSource) return nSource < other.nSource;
if (sStation != other.sStation) return sStation < other.sStation;
if (sDevice != other.sDevice) return sDevice < other.sDevice;
if (sChannel != other.sChannel) return sChannel < other.sChannel;
if (nPacket != other.nPacket) return nPacket < other.nPacket;
return nOffset < other.nOffset;
}
};
struct ComponentInfo //工程模图元数据
{
QUuid uuid;
QString modelName;
QString nspath;
QString tag;
QString name;
QString description;
QString grid;
QString zone;
QString station;
int type = 0;
bool inService = true;
int state = 0;
QJsonObject connected_bus;
QJsonObject label;
QJsonObject context;
int op = 0;
};
struct ComponentTypeInfo //元件类型
{
int id = 0;
QString type;
QString name;
QJsonObject config;
};
struct PageInfo
{
int id = -1;
QString tag;
QString name;
QJsonObject label;
QJsonObject context;
QString description;
int op;
};
// 页面中保存的项信息
struct ItemPageInfo {
QPointF pos;
double dWidth = 0.0;
double dHeight = 0.0;
double dRotate = 0.0;
};
#endif