284 lines
8.0 KiB
C
284 lines
8.0 KiB
C
#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
|