DiagramDesigner/include/topologyView.h

72 lines
3.0 KiB
C++

#ifndef TOPOLOGYVIEW_H
#define TOPOLOGYVIEW_H
#include <QDialog>
#include <QStandardItemModel>
#include "global.h"
QT_BEGIN_NAMESPACE
namespace Ui { class topologyView; }
QT_END_NAMESPACE
class TopologyTree;
class ExtraPropertyManager;
class StructDataSource;
class TopologyView : public QDialog
{
Q_OBJECT
public:
TopologyView(QWidget *parent = nullptr);
~TopologyView();
void initial();
void loadTopologyFromDB(); //加载拓扑关系
signals:
void entityCreate(EntityInfo);
void entityChange(EntityInfo);
void entityDelete(EntityInfo);
void entitySelected(EntityInfo);
public slots:
void onItemChanged(QStandardItem *item);
void onItemClicked(const QModelIndex &index);
void onUpdateTopology(QList<RelationItem> lst,bool refresh,bool bFull);
void onMonitorUpdate(QList<QUuid>); //更新运行时
private:
void clearItems();
QString getLevelType(int index);
void buildTreeStructure(QStandardItemModel* model, const QVector<ExtraProperty>& properties);
QVector<ExtraProperty> getPropertiesForNode(QStandardItem* node);
QString getNodeInfo(QStandardItem* node);
QStandardItem* findBayItem(const QString& voltageLevel, const QString& bayName);
QStandardItem* findOrCreateVoltageLevel(const QString& voltageLevel); // 查找或创建电压层级节点
QStandardItem* createBayItem(const QString& cacheKey, const RelationSturctItem& bayInfo);
void createDeviceItem(QStandardItem* pParent, const RelationSturctItem& deviceInfo); // 创建设备节点
void onUpdateTopologyFull(QList<RelationItem> lst, bool refresh);
void onUpdateTopologySimple(QList<RelationItem> lst, bool refresh);
QStandardItem* findOrCreateTopLevelItem(const QString& name, int level, QHash<QString, QStandardItem*>& cache); //// 查找或创建顶级节点(电网)
QStandardItem* findOrCreateChildItem(QStandardItem* pParent, const QString& name, const QString& cacheKey, int level,QHash<QString, QStandardItem*>& cache);// 查找或创建子节点
QStandardItem* findBayItemInFullTree(const QString& grid, const QString& zone, const QString& station, const QString& voltageLevel, const QString& bayName);// 在完整树中查找间隔节点
private:
Ui::topologyView *ui;
QStandardItemModel* _treeModel;
ExtraPropertyManager* _pExtraProManager;
StructDataSource* m_dataSource;
TopologyTree* _treeView;
// 完整层级结构缓存
QHash<QString, QStandardItem*> m_mapGrids; // 电网节点
QHash<QString, QStandardItem*> m_mapZones; // 区域节点
QHash<QString, QStandardItem*> m_mapStations; // 变电站节点
QHash<QString, QStandardItem*> m_mapVoltageLevels; // 电压层级节点
QHash<QString, QStandardItem*> m_mapBayItems; // 间隔节点
// 原简化层级缓存
QHash<QString, QStandardItem*> m_simpleVoltageLevels; // 只用于简化模式
QHash<QString, QStandardItem*> m_simpleBayItems; // 只用于简化模式
};
#endif