2026-03-23 11:11:55 +08:00
|
|
|
|
#ifndef EDITPANEL_H
|
|
|
|
|
|
#define EDITPANEL_H
|
|
|
|
|
|
//编辑文本项生成组态图
|
|
|
|
|
|
#include <QWidget>
|
|
|
|
|
|
#include <QPointer>
|
2026-05-06 19:48:33 +08:00
|
|
|
|
#include "dataModel.h"
|
2026-03-23 11:11:55 +08:00
|
|
|
|
#include "common/core_model/diagram.h"
|
|
|
|
|
|
|
|
|
|
|
|
class EditView;
|
|
|
|
|
|
class EditScene;
|
|
|
|
|
|
class QVBoxLayout;
|
|
|
|
|
|
//class QGraphicsGridLayout;
|
|
|
|
|
|
class QGraphicsLinearLayout;
|
|
|
|
|
|
class QPushButton;
|
|
|
|
|
|
class EditMainRect;
|
|
|
|
|
|
class EditRowData;
|
|
|
|
|
|
class EditContainerItem;
|
|
|
|
|
|
class DiagramEditorWizard;
|
|
|
|
|
|
class DiagramEditorBaseBlock;
|
|
|
|
|
|
class EditBaseItem;
|
|
|
|
|
|
class DiagramEditorBayDetailSettingDlg;
|
|
|
|
|
|
class DiagramEditorTransDetailSettingDlg;
|
|
|
|
|
|
class DiagramEditorModel;
|
|
|
|
|
|
class DiagramEditorPreviewDlg;
|
|
|
|
|
|
class ConfirmEditorDlg;
|
|
|
|
|
|
class DiagramCavas;
|
2026-05-06 19:48:33 +08:00
|
|
|
|
struct HierarchyItem;
|
|
|
|
|
|
class LayoutBuilder;
|
|
|
|
|
|
|
|
|
|
|
|
enum class ConnectionType {
|
|
|
|
|
|
Unknown,
|
|
|
|
|
|
BusBaySameContainer, // 母线-间隔同容器
|
|
|
|
|
|
BusBayDiffContainer, // 母线-间隔跨容器
|
|
|
|
|
|
TransBay // 变压器-间隔
|
|
|
|
|
|
};
|
2026-03-23 11:11:55 +08:00
|
|
|
|
|
|
|
|
|
|
class EditPanel : public QWidget
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
|
|
|
|
EditPanel(QWidget *parent = nullptr);
|
|
|
|
|
|
~EditPanel();
|
|
|
|
|
|
|
|
|
|
|
|
void initByWizardInfo();
|
|
|
|
|
|
void initBlockConnection(); //初始化block之间的连接信息
|
|
|
|
|
|
void showPreview(); //展示预览
|
|
|
|
|
|
void showConfirmDlg(); //展示确认对话框 bool:保存后是否生成
|
|
|
|
|
|
void generate();
|
|
|
|
|
|
void showWizard();
|
|
|
|
|
|
|
|
|
|
|
|
DiagramEditorModel* getModel() {return _pModel;}
|
|
|
|
|
|
EditScene* getScene() {return m_pEditScene;}
|
|
|
|
|
|
QList<EditBaseItem*> getBlockItems(EditorItemType typ = EditorItemType::None); //返回block对应的item,如母线,间隔,变压器, none返回所有类型
|
|
|
|
|
|
|
|
|
|
|
|
void setProjectName(const QString& s){_projectName = s;};
|
|
|
|
|
|
QString getProjectName(){return _projectName;}
|
|
|
|
|
|
void setUuid(QUuid uid) {_uid = uid;}
|
|
|
|
|
|
QUuid getUuid() {return _uid;}
|
|
|
|
|
|
void setCavas(QPointer<DiagramCavas> p){_pCavas = p;}
|
|
|
|
|
|
void setTag(const QString& s){_tagName = s;}
|
|
|
|
|
|
QString getTag(){return _tagName;}
|
|
|
|
|
|
QPointer<DiagramCavas> getCavas(){return _pCavas;}
|
|
|
|
|
|
|
|
|
|
|
|
void prepareSaveEditor(); //准备保存
|
|
|
|
|
|
void loadBaseSetting(QUuid);
|
|
|
|
|
|
public slots:
|
|
|
|
|
|
void onWidthChanged(int width);
|
|
|
|
|
|
void onContainerSizeChanged(EditContainerItem*); //容器大小改变时调整内部大小
|
|
|
|
|
|
void onItemDbClicked(QPointer<DiagramEditorBaseBlock>); //item双击事件
|
|
|
|
|
|
private:
|
|
|
|
|
|
void initial();
|
|
|
|
|
|
void calculateContainerWidth(EditContainerItem*); //根据间隔数量计算容器宽度 todo:区分上下间隔
|
|
|
|
|
|
int getContainerBusType(QMap<int,QList<DiagramEditorBaseBlock*>>); //返回容器中母线类型(单双)
|
|
|
|
|
|
EditBaseItem* getItemByName(const QString&); //根据名称获取指定item
|
2026-05-06 19:48:33 +08:00
|
|
|
|
|
|
|
|
|
|
void performCleanup();
|
|
|
|
|
|
void initializeSceneLayout();
|
|
|
|
|
|
void processAllContainerLevels(const ContainerStructMap& containerStruct);
|
|
|
|
|
|
void processNormalContainerLevel(int level, const QList<ContainerDataPtr>& containers,LayoutBuilder& builder);
|
|
|
|
|
|
void processTransformerLevel(const QList<ContainerDataPtr>& containers);
|
|
|
|
|
|
void finalizeConstruction();
|
|
|
|
|
|
void emitTopologySignals();
|
2026-03-23 11:11:55 +08:00
|
|
|
|
signals:
|
|
|
|
|
|
void panelDelete(const QString&,int);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void closeEvent(QCloseEvent *closeEvent);
|
|
|
|
|
|
private:
|
|
|
|
|
|
EditView* m_pEditView;
|
|
|
|
|
|
EditScene* m_pEditScene;
|
|
|
|
|
|
QVBoxLayout* _layout;
|
|
|
|
|
|
EditMainRect* _mainWidget;
|
|
|
|
|
|
DiagramEditorBayDetailSettingDlg* _bayDetailSetting;
|
|
|
|
|
|
DiagramEditorTransDetailSettingDlg* _transDetailSetting;
|
|
|
|
|
|
QGraphicsLinearLayout* _widgetLayout;
|
|
|
|
|
|
QGraphicsProxyWidget* m_addBtnPro;
|
|
|
|
|
|
int _maxWidth;
|
|
|
|
|
|
int _maxHeight;
|
|
|
|
|
|
QList<EditRowData*> _lstData;
|
2026-05-06 19:48:33 +08:00
|
|
|
|
QList<HierarchyItem> _accumulatedBayItems;
|
|
|
|
|
|
QList<HierarchyItem> _accumulatedDeviceItems;
|
2026-03-23 11:11:55 +08:00
|
|
|
|
QMap<int,QMap<int,EditContainerItem*>> _mapStruct;
|
|
|
|
|
|
DiagramEditorModel* _pModel;
|
|
|
|
|
|
DiagramEditorPreviewDlg* _pPreview;
|
|
|
|
|
|
ConfirmEditorDlg* _confirmEditor;
|
|
|
|
|
|
QString _tagName; //显示的名称(load后,新建不用)
|
|
|
|
|
|
QString _projectName;
|
|
|
|
|
|
QUuid _uid;
|
|
|
|
|
|
QString _author;
|
|
|
|
|
|
QString _timeStamp;
|
|
|
|
|
|
DiagramEditorWizard* _pEditorWizard;
|
|
|
|
|
|
QPointer<DiagramCavas> _pCavas; //顶层界面容器
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|