123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586 |
- #pragma once
- #include <QRect>
- //============================================================
- //
- // Enum
- //
- //============================================================
- /// <summary>
- /// 自定义控件的类型名称
- /// </summary>
- #define CLASS_NAME_BUTTON "VButton"
- #define CLASS_NAME_LABEL "VLabel"
- #define CLASS_NAME_CHECKBOX "VCheckBox"
- #define CLASS_NAME_RADIOBOX "VRadioBox"
- #define CLASS_NAME_GROUPBOX "VGroupBox"
- #define CLASS_NAME_IMAGECONTROL "VImageControl"
- #define CLASS_NAME_LINEDIT "VLineEdit"
- #define CLASS_NAME_COMBOBOX "VComboBox"
- #define CLASS_NAME_LISTBOX "VListBox"
- #define CLASS_NAME_VALUECONTROL "ValueControl"
- #define CLASS_NAME_PIECHART "VPieChart"
- #define CLASS_NAME_CUSTOMPLOT "VCustomPlot"
- #define CLASS_NAME_TABLECONTROL "VTableControl"
- #define CLASS_NAME_RESULT "VResult"
- //============================================================
- //
- // Task、Event
- //
- //============================================================
- // 几个系统内置的任务执行模式
- #define TASK_MODE_LOOP "1.Sys.Task.Loop"
- #define TASK_MODE_EVENT_RUN "2.Sys.Task.Run"
- #define TASK_MODE_EVENT_STOP "3.Sys.Task.Stop"
- #define TASK_MODE_EVENT_EXIT "4.Sys.App.Exit"
- #define TASK_MODE_EVENT_DOCLOADED "5.Sys.Doc.Loaded"
- #define TASK_MODE_EVENT_TIME_100MS "6.Sys.Time.100ms"
- #define TASK_MODE_EVENT_TIME_500MS "7.Sys.Time.500ms"
- #define TASK_MODE_EVENT_TIME_1S "8.Sys.Time.1s"
- #define TASK_MODE_EVENT_TIME_5S "9.Sys.Time.5s"
- // 几个内置变量命名的后缀
- #define EXEC_COUNT_POSTFIX ".ExecCount"
- #define ERROR_COUNT_POSTFIX ".ErrorCount"
- /// <summary>
- /// Task的任务类型
- /// </summary>
- enum class TASK_MODE_TYPE : short
- {
- MODE_SYS, // 系统内置
- MODE_HDW, // 硬件组态
- MODE_VAL, // 变量触发
- MODE_COUNT // 任务类型的数量
- };
- /// <summary>
- /// 存储Task相关信息
- /// </summary>
- class POU;
- class TASK
- {
- public:
- TASK(QString strName = "")
- {
- this->nIndex = 0;
- this->strName = strName;
- this->modeType = TASK_MODE_TYPE::MODE_SYS;
- this->strModeName = TASK_MODE_LOOP;
- //pActivator = new TaskActivator();
- this->timeOut = ULONG_MAX;
- // eventID = QEvent::None;
- this->pEvent = nullptr;
- }
- TASK(const TASK& task)
- {
- this->nIndex = task.nIndex;
- this->strName = task.strName;
- this->execParams = task.execParams;
- this->modeType = task.modeType;
- this->strModeName = task.strModeName;
- // this->pActivator = task.pActivator;
- // this->eventID = task.eventID;
- this->timeOut = task.timeOut;
- this->pEvent = task.pEvent;
- }
- ~TASK()
- {
- //if (pActivator != nullptr)
- //{
- // delete pActivator;
- // pActivator = nullptr;
- //}
- }
- // 根据Mode类型绑定对应的Event,返回旧的EventType
- QEvent::Type bindEventByMode();
- // 任务是否执行中(处于Busy和Wait状态)
- bool isRunning() const;
- // 序列化
- friend QDataStream& operator<<(QDataStream& out, const TASK& task);
- // 反序列化
- friend QDataStream& operator>>(QDataStream& in, TASK& task);
- public:
- int nIndex; // 任务序号
- QString strName; // 任务名称
- TASK_PARAMS execParams; // 执行参数
- TASK_MODE_TYPE modeType; // 任务模式的分类
- QString strModeName; // 任务模式的名称
- // event相关
- QMutex mutex; // Task与Event对应的互斥量
- quint32 timeOut; // 超时时间
- TaskActivator activator; // TaskManager中用于触发Task的事件(如果需要)
- // EVENT_ID eventID; // dll中事件的ID号
- ToolEvent* pEvent; // Task绑定的触发Event
- QVector<POU*> pous; // 本Task中的Pou
- };
- using TASK_OPTION = TASK;
- //============================================================
- //
- // Designer、DataLink
- //
- //============================================================
- /// <summary>
- /// 定义和注册Designer中的DataLink属性类型
- /// </summary>
- class DataLink
- {
- public:
- DataLink()
- {
- bForce = false;
- defaultValue = nullptr;
- linkValue = nullptr;
- };
- DataLink(const QString linkString)
- {
- fromString(linkString);
- }
- ~DataLink()
- {
- //if (defaultValue != nullptr)
- //{
- // delete defaultValue;
- // defaultValue = nullptr;
- //}
- };
- // 重载!=
- bool operator!= (const DataLink& dl) const;
- // 重载=
- DataLink& operator =(const DataLink& dl);
- // 转换成字符串类型
- QString toString() const;
- // 从字符串解析
- void fromString(const QString& linkString);
- // 是否有效
- bool isValid() const;
- // 序列化
- friend QDataStream& operator<<(QDataStream& out, const DataLink& datalink);
- // 反序列化
- friend QDataStream& operator>>(QDataStream& in, DataLink& datalink);
- public:
- QString title; // 属性项的名称
- QStringList value; // 用户选择的数值,包括(数据分组、数据的子分类、数值,以|分隔)
- const VARIABLE* defaultValue; // 默认值(不允许更改)
- VARIABLE* linkValue; // 数据连接中的值
- bool bForce; // 是否强制要求赋值
- };
- // 注册此类型
- Q_DECLARE_METATYPE(DataLink)
- ///// <summary>
- ///// 属性中的数据链接属性项
- ///// </summary>
- //#define DEFAULT_DATALINK_VALUE_0 "0"
- //#define DEFAULT_DATALINK_VALUE_1 "1"
- //#define DEFAULT_DATALINK_VALUE_MSG "msg"
- //typedef struct _tagPropertyDataLink
- //{
- // QString title; // 属性项的名称
- // // DataLink value; // 数据链接的内容
- //
- // // QStringList valueList; // 用户选择的数值,包括(数据分组、数据的子分类、数值,以|分隔)
- //
- // // QString defaultValue; // 默认值
- //
- // VARIABLE* defaultValue; // 默认值
- // VARIABLE* linkValue; // 数据连接中的值
- //
- // bool bForce; // 是否强制要求赋值
- //
- // // bool bRefeshIndex; // 是否是触发刷新的主索引
- //
- // _tagPropertyDataLink()
- // {
- // bForce = true;
- //
- // defaultValue = nullptr;
- // linkValue = nullptr;
- //
- // // bRefeshIndex = false;
- // }
- //
- // // 序列化
- // friend QDataStream& operator<<(QDataStream& out, const _tagPropertyDataLink& proplink);
- // // 反序列化
- // friend QDataStream& operator>>(QDataStream& in, _tagPropertyDataLink& proplink);
- //
- //} PROPERTY_DATALINK;
- /// <summary>
- /// 自定义控件属性
- /// </summary>
- #include <QColor>
- #include <QFont>
- class CONTROL_PROPERTY
- {
- public:
- CONTROL_PROPERTY()
- {
- this->m_clrBorder = QColor(255, 0, 0);
- this->m_clrText = QColor(255, 255, 255);
- this->m_bEnable = true;
- this->m_nColCount = 0;
- this->m_nRowCount = 0;
- this->m_nSliceCount = 0;
- this->m_nHObjectCount = 0;
- this->m_nHTupleCount = 0;
- this->m_nDisplayCount = 0;
- this->m_nStringCount = 0;
- this->m_nInteractions = 0;
- this->m_nTickCountX = 15;
- this->m_nTickCountY = 10;
- this->m_nDrawingMode = 0;
- this->m_RangeX = QSize(0, 100);
- this->m_RangeY = QSize(0, 100);
- }
- // 序列化
- friend QDataStream& operator<<(QDataStream& out, const CONTROL_PROPERTY& prop);
- // 反序列化
- friend QDataStream& operator>>(QDataStream& in, CONTROL_PROPERTY& prop);
- public:
-
- QString m_strText; // 控件文字
- QString m_strTip; // 控件提示信息
- // QRect m_geometry; // 位置和尺寸信息
- QColor m_clrText; // 文字颜色
- QColor m_clrBg; // 背景色
- QFont m_Font; // 控件字体
- bool m_bEnable; // 是否启用控件
- DataLink m_DataLink; // 数据链接
- // 仅Table(行和列)
- int m_nRowCount;
- int m_nColCount;
- // 仅Pie
- int m_nSliceCount; // 分块的数量
- QColor m_clrBorder; // 控件边框颜色
- // 仅Image
- int m_nHObjectCount;
- int m_nHTupleCount;
- int m_nDisplayCount;
- int m_nStringCount;
- // 仅曲线
- int m_nInteractions; // 交互模式
- int m_nDrawingMode; // 绘图模式
- int m_nTickCountX; // X轴格子数量
- int m_nTickCountY; // Y轴格子数量
- QSize m_RangeX; // 暂时用QSize 替代。实际应使用自定义结构体
- QSize m_RangeY; // 暂时用QSize 替代。实际应使用自定义结构体
-
- };
- /// <summary>
- /// 控件的扩展子属性字段
- /// </summary>
- typedef struct _tagPropertyExSubGroup
- {
- // 子分组名字
- QString strTitle;
- // 数据链接(扩展到多个)
- QVector<DataLink> dataLinks;
- // 数值(一般是分块名称、列名等)
- QString strValueName;
- QString strValue;
- // 颜色(本分组的颜色)
- QString strColorName;
- QColor color;
- // Image用
-
- // 组1
- //// 透明度
- //QString strTranspName;
- //double fTransparency;
- // 线宽
- QString strLineWidthName;
- int nLineWidth;
- // 组2
- // 坐标
- QString strPtName;;
- QPoint pt;
- //// 改为数据链接
- //DataLink dataLinkPoint;
- // 尺寸
- QString strSize;
- int nSize;
- // 组3
- // 启用存图
- QString strSaveImage;
- bool bEnSaveImage;
- // 启用转储
- QString strDumpWindow;
- bool bEnDumpWindow;
- // 启用状态判断
- QString strExecuteState;
- bool bEnExecuteState;
- // 存储模式
- QString strSaveMode;
- int nSaveMode;
-
- // 缓存大小
- QString strBufferSize;
- int nBufferSize;
- // 空闲时间
- QString strFreeTime;
- int nFreeTime;
- // 序列化
- friend QDataStream& operator<<(QDataStream& out, const _tagPropertyExSubGroup& subgroup);
- // 反序列化
- friend QDataStream& operator>>(QDataStream& in, _tagPropertyExSubGroup& subgroup);
- _tagPropertyExSubGroup()
- {
- this->nLineWidth = 0;
- this->nSize = 0;
- this->nFreeTime = 0;
- this->nSaveMode = 0;
- this->nBufferSize = 0;
- this->bEnSaveImage = false;
- this->bEnExecuteState = false;
- this->bEnDumpWindow = false;
- }
- } PROPERTY_EX_SUBGROUP;
- /// <summary>
- /// 控件的所有扩展属性子分组信息(每个控件对应多个子属性组)
- /// </summary>
- using PROPERTY_EX_SUBGROUPS = QVector<PROPERTY_EX_SUBGROUP>;
- typedef struct _tagPropertyExGroup
- {
- // 本子属性组在属性表里关联Key的名称,这个Key决定了本子属性组有多少个
- QString strRelationKey;
- QString strTitle;
- // 本组属性下所有的子属性
- PROPERTY_EX_SUBGROUPS subGroups;
-
- } PROPERTY_EX_GROUP;
- /// <summary>
- /// 控件的扩展属性
- /// </summary>
- using PROPERTY_EX_GROUPS = QVector<PROPERTY_EX_GROUP>;
- using PROPERTY_DATALINKS = QVector<DataLink>;
- class CONTROL_PROPERTY_EX
- {
- public:
- //// 检查属性是否有效
- //bool checkValid();
- public:
- CONTROL_PROPERTY_EX()
- {
- }
- QString m_strTitle; // 扩展属性的总名称
- DataLink m_refreshLink; // 刷新链接(有且只有一个)
- PROPERTY_DATALINKS m_mainDataLinks; // 主数据链接(2022-1-14修改为多个)
-
- PROPERTY_EX_GROUPS m_groups; // 所有扩展属性组(2022-1-8修改为了多个,因为有的控件有多个子属性组)
- // CONTROL_PROPERTY_EX 序列化
- friend QDataStream& operator<<(QDataStream& out, const CONTROL_PROPERTY_EX& propEx);
- // CONTROL_PROPERTY_EX 反序列化
- friend QDataStream& operator>>(QDataStream& in, CONTROL_PROPERTY_EX& propEx);
- };
- // 注册此类型
- Q_DECLARE_METATYPE(CONTROL_PROPERTY_EX)
- /// <summary>
- /// 用于复杂控件的Runtime刷新时,每一个刷新单元包含的多个数值
- /// </summary>
- typedef struct _tagRUNTIME_SYNC_VAR
- {
- QString strPropertyName;
- const VARIABLE* pVariable;
- _tagRUNTIME_SYNC_VAR(const QString& strName, const VARIABLE* pVar)
- {
- strPropertyName = strName;
- pVariable = pVar;
- }
- } RUNTIME_SYNC_VAR;
- using RUNTIME_SYNC_VARS = QVector<RUNTIME_SYNC_VAR>;
- //============================================================
- //
- // SystemCommand
- //
- //============================================================
- // 系统指令
- #define SYS_CMD_GROUP_NAME "System Command"
- #define SYS_CMD_TASK_RUN "Sys.Task.Run"
- #define SYS_CMD_TASK_RUNONCE "Sys.Task.RunOnce"
- #define SYS_CMD_TASK_STOP "Sys.Task.Stop"
- #define SYS_CMD_UI_SWITCH "Sys.UI.Switch"
- /// <summary>
- /// 定义Designer用到的系统指令
- /// </summary>
- class SystemCommand
- {
- public:
- // 获取所有的可用指令
- static QStringList getAllCmd();
- //// 执行指令
- //static bool runCmd(const QString& strCmd, const QString& strParam = "");
- };
- //============================================================
- //
- // Other
- //
- //============================================================
- /// <summary>
- /// Debug信息类型定义
- /// </summary>
- typedef struct _tagDebugMsg
- {
- int msgType;
- QString strMsg;
- _tagDebugMsg()
- {
- msgType = 0;
- }
- } DEBUGMSG;
- /// <summary>
- /// WindowApp中的各个子界面
- /// </summary>
- enum class SUBVIEW_TYPE : short
- {
- SUBVIEW_GVL, // 全局变量窗口
- SUBVIEW_POU, // POU窗口
- SUBVIEW_TASK, // Task 窗口
- SUBVIEW_UI, // UI设计窗口
- SUBVIEW_USER, // 用户管理窗口
- SUBVIEW_COUNT = 5, // 视图的分类总数(有部分视图是属于一类的)
- SUBVIEW_TASKMONITOR, // Task Monitor窗口
- SUBVIEW_LOG, // LOG 窗口
- SUBVIEW_HDW // 硬件组态 窗口
- };
- /// <summary>
- /// 各个全局子窗体
- /// </summary>
- enum class WND_TYPE : short
- {
- WND_HOME, // 首页
- // WND_HDW, // 硬件组态
- WND_APP, // 程序
- // WND_OUTPUT, // 输出
- WND_RUNTIME, // 运行
- WND_COUNT
- };
|