DiagramDesigner/diagramCavas/include/topologyManager.h

82 lines
3.1 KiB
C++

#ifndef TOPOLOGYMANAGER_H
#define TOPOLOGYMANAGER_H
/****************************
* 拓扑关系管理类
* *************************/
#include <QObject>
#include <QList>
#include "powerConnection.h"
#include "powerTerminal.h"
#include "global.h"
class PowerEntity;
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);
// 序列化
QJsonObject serialize() const;
void deserialize(const QJsonObject& json);
// 连接管理
PowerConnection* createConnection(const QString& uuid,const QString& fromId, const QString& toId);
QList<PowerConnection*> getConnectionsForTerminal(const QString& terminalId) const;
void removeConnection(const QString& connId);
bool validateConnection(const QString& fromTermId, const QString& toTermId) const;
// 连接查询接口
QList<PowerConnection*> connectionsFrom(const QString& elementId) const;
QList<PowerConnection*> connectionsTo(const QString& elementId) const;
QList<PowerConnection*> getConnectionsFor(const QString& entityId) const;
PowerConnection* connection(const QString& conId) const;
void saveToDB(const QString& path);
void loadFromDB(const QString& path);
PowerEntity* getEntity(const QString& id) const;
QList<PowerEntity*> findEntitiesByName(const QString& name) const;
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<PowerTerminal*> 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<QString, PowerEntity*> m_entities; // ID到实体映射
QHash<QString, DiagramView*> m_views; // 组态图视图存储
// 连接存储
QHash<QString,PowerConnection*> m_connections;
QMultiHash<QString,PowerConnection*> m_connectionIndex; // 接线点ID到连接的映射
private:
QHash<QString, PowerTerminal*> m_allTerminals; // ID到接线点映射
QHash<QString, QList<PowerTerminal*>> m_terminalsByEntity; // 实体ID到接线点列表
QHash<QString, QSet<QString>> m_entityConnections; // <entityId, Set<connectionId>>
};
#endif