GridFrame/diagramCavas/include/diagramEditor/layoutBuilder.h

62 lines
1.8 KiB
C++

// LayoutBuilder.h
#pragma once
#include <QGraphicsLinearLayout>
#include "editContainerItem.h"
#include "dataModel.h"
#include "common/core_model/topology.h"
class EditPanel;
class EditBaseItem;
class LayoutBuilder {
public:
struct BuildResult {
EditContainerItem* container = nullptr;
QList<HierarchyItem> bayItems;
QList<HierarchyItem> deviceItems;
};
explicit LayoutBuilder(EditPanel* panel);
virtual ~LayoutBuilder() = default;
// 构建一个容器
virtual BuildResult buildContainer(const BlockMap& blockMap);
// 构建行布局
static QGraphicsLinearLayout* createRowLayout();
// 构建垂直布局
static QGraphicsLinearLayout* createVerticalLayout();
// 构建水平布局
static QGraphicsLinearLayout* createHorizontalLayout();
// 添加间隔占位符
static EditBaseItem* createSpacerItem();
// 为垂直布局添加拉伸
static void addStretchToVerticalLayout(QGraphicsLinearLayout* layout);
protected:
EditPanel* m_panel = nullptr;
// 处理一个Block
virtual EditBaseItem* processBlock(BlockDataPtr block,
QList<HierarchyItem>& bayItems,
QList<HierarchyItem>& deviceItems);
// 处理一个层的所有Blocks
void processLayer(const QList<BlockDataPtr>& blocks,
QGraphicsLinearLayout* layerLayout,
QList<HierarchyItem>& bayItems,
QList<HierarchyItem>& deviceItems);
// 连接信号
void connectSignals(EditBaseItem* item);
void connectContainerSignals(EditContainerItem* container);
protected:
static constexpr int TOTAL_LAYERS = 4; // 总共4层
static constexpr int MIN_CONTAINER_WIDTH = 100; // 最小容器宽度
};