logplus/ModuleConsole/command/include/LayoutModuleCmd.h

168 lines
6.1 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/*
* @file LayoutModuleCmd.h
* @brief LayoutModuleCmd是对工作流编辑界面模块进行排列的命令
* @date: 2012-10-10
* @author: limengzhuo
*/
#ifndef PAI_FRAME_WORKFLOWVIEW_LAYOUTMODULECMD_H
#define PAI_FRAME_WORKFLOWVIEW_LAYOUTMODULECMD_H
#include <QGraphicsItem>
#include <QMap>
#include <QUndoCommand>
#include "ModuleConnection.h"
namespace pai
{
namespace objectmodel
{
class PaiWorkflowDataModel;
}
namespace graphics2d
{
class ModuleGraphicsItem;
class WorkflowSceneManager;
}
/**
* @class LayoutModuleCmd
* @brief LayoutModuleCmd是对工作流编辑界面模块进行排列的命令
*/
class LayoutModuleCmd :public QUndoCommand
{
public:
LayoutModuleCmd(pai::graphics2d::WorkflowSceneManager *pSceneManager,
pai::objectmodel::PaiWorkflowDataModel *pWorkflow, QList<QGraphicsItem*> list, QUndoCommand *parent = 0);
virtual ~LayoutModuleCmd();
/**
* @brief undo
*/
void undo();
/**
* @brief redo
*/
void redo();
private:
/**
* @brief
*/
void recoveryLayout();
/**
* @brief 线
*/
void updateConnectionLine();
/**
* @brief
*/
void PrintMap();
/**
* @brief
*/
void GetModuleRelationMap(QList<int> &stepIdList);
/**
* @brief StepId列表从工作流场景获取模块图元列表
* @param stepIdList StepId列表
*/
QList<pai::graphics2d::ModuleGraphicsItem*> GetModuleGraphicsItems(QList<int> stepIdList);
/**
* @brief StepId列表
* @param moduleList
*/
QList<int> GetModuleStepIdList(QList<pai::graphics2d::ModuleGraphicsItem*> moduleList);
/**
* @brief StepId为stepId的图元的所有直接输出图元的StepId
* @param stepId StepId
* @param stepIdList StepId列表
*/
QList<int> GetDestModules(int stepId, QList<int> stepIdList);
/**
* @brief StepId为stepId的图元的最大深度的所有输出图元的StepId
* @param stepId StepId
* @param stepIdListAdjusted StepId列表
* @param stepIdList StepId列表
*/
void GetDestModulesRecursive(int stepId, QList<int> &stepIdListAdjusted, QList<int> stepIdList);
/**
* @brief StepId为destStepId的图元的所有直接输入图元的StepId列表
* @param destStepId StepId
* @param stepIdListSameLevel StepId列表
*/
QList<int> GetSourceModules(int destStepId, QList<int> stepIdListSameLevel);
/**
* @brief StepId为stepId的图元在一个层上的所有图元的StepId列表 Destination
* @param sameDestList StepId列表
* @param stepIdList StepId列表
*/
void FindModulesWithSameDest(int stepId, QList<int> &sameDestList, QList<int> stepIdList);
/**
* @brief StepId为stepId的图元在一个层上的所有图元的StepId列表 Source
* @param sameSourceList StepId列表
* @param stepIdList StepId列表
*/
void FindModulesWithSameSource(int stepId, QList<int> &sameSourceList, QList<int> stepIdList);
/**
* @brief
* @param stepId StepId
* @param itemList
*/
pai::graphics2d::ModuleGraphicsItem* FindModule(int stepId, QList<pai::graphics2d::ModuleGraphicsItem*> itemList);
/**
* @brief StepId列表获取模块图元列表
* @param stepIdList StepId列表
*/
QList<pai::graphics2d::ModuleGraphicsItem*> GetModuleGraphicsItemsFromStepId(QList<int> stepIdList);
/**
* @brief
*/
int GetMaxWidth();
/**
* @brief分类存储module2线
*/
void CategorizedModule();
/**
* @brief item的stepID
* @return item的step
*/
QList<int> GetRootModule();
/**
* @brief map
* @param[in] topID item的stepID链表
*/
void SetRelationMap(QList<int> topID);
/**
* @brief item
*/
void LayoutModule();
/**
* @brief
*/
void LayoutWorkflow();
public:
static const int nDefaultIntervalY = 28; //模块间的高度距离
static const int nDefaultIntervalX = 10; //模块间的宽度距离
private:
QList<QGraphicsItem*> m_list;//被选图元指针列表
QList<int> m_stepIdList; //被选模块的StepId
QList<pai::graphics2d::ModuleGraphicsItem*> m_moduleList;//被选模块列表
QList<workflow::CModuleConnection*> m_connectionList;//被选模块连线列表
pai::graphics2d::WorkflowSceneManager *m_pSceneManager;//工作流场景
pai::objectmodel::PaiWorkflowDataModel* m_pWorkflow;//工作流模型
QList<QPointF> m_ModuleItemPosList;//存放所有module item在layout之前的坐标
QMap<int, QList<int> > m_moduleRelationMap;//模块的分层信息表
qreal m_moduleSceneRectHeight;//模块的高度
qreal m_moduleSceneRectWidth;//模块的宽度
int m_maxWidth; //同一层上模块的最大个数
};
}
#endif /* PAI_FRAME_WORKFLOWVIEW_LAYOUTMODULECMD_H */