62 lines
1.8 KiB
C++
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; // 最小容器宽度
|
|
};
|