#ifndef TOPOLOGYMANAGER_H #define TOPOLOGYMANAGER_H /**************************** * 拓扑关系管理类 * *************************/ #include #include #include "powerConnection.h" #include "powerTerminal.h" #include "global.h" class PowerEntity; class BaseProperty; class TopologyManager : public QObject { Q_OBJECT public: static TopologyManager& instance(); // 实体管理 PowerEntity* createEntity(EntityType type,const QString& uuid,const QString& name); PowerEntity* findEntity(const QString& id) const; bool deleteEntity(const QString& id); // 连接管理 PowerConnection* createConnection(const QString& uuid,const QString& fromTerId, const QString& toTerId,const QString& fromId,const QString& toId); QList getConnectionsForTerminal(const QString& terminalId) const; void removeConnection(const QString& connId); bool validateConnection(const QString& fromTermId, const QString& toTermId) const; // 连接查询接口 QList connectionsFrom(const QString& elementId) const; QList connectionsTo(const QString& elementId) const; QList getConnectionsFor(const QString& entityId) const; PowerConnection* connection(const QString& conId) const; PowerConnection* connection(const QString& fromPin,const QString& toPin); QHash getAllConnections(); //void saveToDB(const QString& path); //void loadFromDB(const QString& path); PowerEntity* getEntity(const QString& id) const; QList findEntitiesByName(const QString& name) const; //==========================组态图拓扑相关=================================== PowerEntity* createDiagram(const QString& id,const QString& name); //单独创建组态图 PowerEntity* findDiagram(const QString& id) const; bool deleteDiagram(const QString& id); public: // 接线点管理 PowerTerminal* createTerminal(const QString& parentEntityId, TerminalType type, const QString& name, const QPointF& relPos = QPointF(), const QString& uuid = ""); bool deleteTerminal(const QString& terminalId); PowerTerminal* getTerminal(const QString& terminalId) const; QList getTerminalsForEntity(const QString& entityId) const; PowerEntity* getEntityByTerminal(const QString& terminalId) const; //返回terminal所在的entity实体 PowerConnection* getConnectionContainsTerminal(const QString& terminalId) const; //返回包含terminal的connection signals: void entityCreated(const QString&); void entityDeleted(const QString&); void connectionCreated(const QString&); void connectionRemoved(const QString&); private: explicit TopologyManager(QObject* parent = nullptr); ~TopologyManager(); void clearAllData(); QHash m_entities; // ID到实体映射 QHash m_views; // 组态图视图存储 QHash m_diagrams; // 组态图拓扑结构 // 连接存储 QHash m_connections; QMultiHash m_connectionIndex; // 接线点ID到连接的映射 private: QHash m_allTerminals; // ID到接线点映射 QHash> m_terminalsByEntity; // 实体ID到接线点列表 QHash> m_entityConnections; // > }; #endif