GridFrame/diagramCavas/include/diagramEditor/editorDiagramLayoutEngine.h

59 lines
1.9 KiB
C++

#include "common/core_model/diagram.h"
#include "diagramEditor/editorLayoutConfig.h"
#include <QStandardItem>
// layout_engine.h
/********editor布局生成核心类**********/
class DiagramLayoutEngine {
public:
struct LayoutResult {
QRectF boundingRect;
bool success = true;
QString errorMessage;
};
LayoutResult layoutRoutes(QMap<QString, DiagramEditorRouteInfo>& routes,
QMap<QString, DiagramEditorComponentInfo>& components,
const LayoutConfig& config,
int nSource,
bool saveToModel);
private:
// 主线布局
void layoutMainRoute(DiagramEditorRouteInfo& route,
const LayoutConfig& config,
bool saveToModel,
int nSource);
// 支线布局
void layoutBranchRoute(DiagramEditorRouteInfo& route,
const LayoutConfig& config,
bool saveToModel,
int nSource);
// 更新元件信息
void updateComponentInfo(DiagramEditorComponentInfo& compo,
Direction dir,
const QPoint& delta,
int rotate,
bool saveToModel,
int nSource);
// 拆分支线
void splitBranchRoute(DiagramEditorRouteInfo& route,
bool saveToModel,
int nSource);
// 计算边界
QRectF calculateBoundingRect(const QMap<QString, DiagramEditorComponentInfo>& components);
// 辅助方法
QString findMainRoute(const QMap<QString, DiagramEditorRouteInfo>& routes);
QStandardItem* getNameItem(const QString& name, int nSource);
private:
QMap<QString, QStandardItem*> m_itemCache;
int m_compoWidth = 50; // 可配置
int m_compoHeight = 30; // 可配置
};