59 lines
1.9 KiB
C++
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; // 可配置
|
|
};
|