#ifndef GLOBAL_H #define GLOBAL_H #include #include #include #include #include #include const double g_dGriaphicsScene_Width = 800; const double g_dGriaphicsScene_Height = 600; //Q_NAMESPACE enum GraphicsItemType { GIT_base = QGraphicsItem::UserType + 1, GIT_line = QGraphicsItem::UserType + 2, GIT_rect = QGraphicsItem::UserType + 3, GIT_roundRect = QGraphicsItem::UserType + 4, GIT_ellipse = QGraphicsItem::UserType + 5, GIT_polygon = QGraphicsItem::UserType + 6, //====================================== GIT_bus = QGraphicsItem::UserType + 50, GIT_itemRect = QGraphicsItem::UserType + 51, GIT_itemTri = QGraphicsItem::UserType + 52, GIT_link= QGraphicsItem::UserType + 53 }; enum AbstractItemType //工程模关联的对象类型 { AIT_bus = 1, AIT_motor }; class corresbondItem //类型关联函数 { public: static QMap linkType; }; enum DiagramMode //组态图模式 { DM_edit = 0, DM_run }; enum Attribute //元模属性字段对照 { Id = Qt::UserRole + 1, Attribute = Qt::UserRole + 2, AttributeName = Qt::UserRole + 3, DataType = Qt::UserRole + 4, LengthPrecision = Qt::UserRole + 5, Scale = Qt::UserRole + 6, IsNotNull = Qt::UserRole + 7, DefaultValue = Qt::UserRole + 8, ValueRange = Qt::UserRole + 9, }; struct attributeGroup //属性组(元模) { int id = 0; QString groupType; QString groupName; int isPublic = -1; QString remark; }; struct dataType //数据类型(元模) { int id = 0; QString dataType; QString databaseType; }; struct modelType //模型类型 { int id = 0; QString modelType; QString modelName; QString remark; }; struct modelGroup { int id = 0; qint64 modelTypeId = 0; qint64 attributeGroupId = 0; }; struct attribute //属性表(元模属性字段) { int id = 0; QString attribute; //属性名 QString attributeName; //别名(中文名) qint64 dataTypeId = 0; //数据类型id int lengthPrecision=0; //长度限制(varchar) int scale=0; //小数点位数 int isNotNull=0; //是否非空 QString defaultValue; //默认值 QString valueRange; //数值范围 }; struct modelAttribute //模型属性表(所有模型属性的索引) { int id = 0; qint64 modelTypeId = 0; qint64 attributeGroupId = 0; qint64 attributeId = 0; }; struct modelConnectivity //模型连接性表(元模是否可以连接) { int id = 0; QString fromModel; //属性名 QString toModel; int connectivity=0; //是否可连 }; //===================================== struct projectManager //工程模管理类 { int id = 0; QString name; //工程模表名 QString tag; //工程模名称 QString metaModel; //元模名 QString groupName; //属性组名 int linkType; //图元链接类型 QJsonObject checkState; //属性选择状态 }; //===================================== struct propertyGroupState //模型属性组信息 { QString groupName; //属性组名称 QString tableName; //属性组表名 QJsonObject propertyState; //属性状态信息 }; //================工程模使用====================== struct propertyStateInfo //属性 { QString name; //属性名 QString tagName; //别名 QString type; //属性类型 QString defaultValue; //默认值 }; typedef QMap PropertyValueInfo; struct groupStateInfo //属性组(结构信息) { QString groupName; //组名 QString tableName; //表名 PropertyValueInfo info; //属性信息 }; struct groupStateValue //属性组(实时数据) { QString groupName; //组名 QString tableName; //表名 QMap mapInfo; }; struct modelStateInfo //模型结构信息 { QString modelName; int modelType; QMap groupInfo; //属性组信息 }; struct modelDataInfo //模型数据信息 { QString modelName; int modelType; QMap groupInfo; //属性组实时信息 }; //================================================== struct componentInfo { int id = 0; 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 page_id = 0; int op = 0; }; struct busStability { int componentId = 0; double resistance = 0; bool anchor_v = false; double uv_alarm = 0; double ov_alarm = 0; bool anchor_i = false; double ui_alarm = 0; double oi_alarm = 0; }; //Q_ENUM_NS(GraphicsItemType) /** * Constants used for fetching QVariant data from GraphModel. */ enum class NodeRole { Type = 0, ///< Type of the current node, usually a string. Position = 1, ///< `QPointF` positon of the node on the scene. Size = 2, ///< `QSize` for resizable nodes. CaptionVisible = 3, ///< `bool` for caption visibility. Caption = 4, ///< `QString` for node caption. Style = 5, ///< Custom NodeStyle as QJsonDocument InternalData = 6, ///< Node-stecific user data as QJsonObject InPortCount = 7, ///< `unsigned int` OutPortCount = 9, ///< `unsigned int` Widget = 10, ///< Optional `QWidget*` or `nullptr` }; //Q_ENUM_NS(NodeRole) /** * Specific flags regulating node features and appeaarence. */ enum NodeFlag { NoFlags = 0x0, ///< Default NodeFlag Resizable = 0x1, ///< Lets the node be resizable Locked = 0x2 }; Q_DECLARE_FLAGS(NodeFlags, NodeFlag) //Q_FLAG_NS(NodeFlags) Q_DECLARE_OPERATORS_FOR_FLAGS(NodeFlags) /** * Constants for fetching port-related information from the GraphModel. */ enum class PortRole { Data = 0, ///< `std::shared_ptr`. DataType = 1, ///< `QString` describing the port data type. ConnectionPolicyRole = 2, ///< `enum` ConnectionPolicyRole CaptionVisible = 3, ///< `bool` for caption visibility. Caption = 4, ///< `QString` for port caption. }; //Q_ENUM_NS(PortRole) /** * Defines how many connections are possible to attach to ports. The * values are fetched using PortRole::ConnectionPolicy. */ enum class ConnectionPolicy { One, ///< Just one connection for each port. Many, ///< Any number of connections possible for the port. }; //Q_ENUM_NS(ConnectionPolicy) /** * Used for distinguishing input and output node ports. */ enum class PortType { In = 0, ///< Input node port (from the left). Out = 1, ///< Output node port (from the right). None = 2 }; //Q_ENUM_NS(PortType) enum PortState { P_const = 0, //固定端口 p_movable, //移动端口 }; using PortCount = int; /// ports are consecutively numbered starting from zero. using PortIndex = int; const PortIndex InvalidPortIndex = -1; /// Unique Id associated with each node in the GraphModel. using NodeId = int; const NodeId InvalidNodeId = -1; /** * A unique connection identificator that stores * out `NodeId`, out `PortIndex`, in `NodeId`, in `PortIndex` */ struct ConnectionId { int conId; NodeId outNodeId; PortIndex outPortIndex; NodeId inNodeId; PortIndex inPortIndex; }; inline uint qHash(const ConnectionId &data, uint seed){ return data.conId; } inline bool operator<(ConnectionId const &a, ConnectionId const &b) { return a.conId