logplus/Workflow/WFEngine/Component/WorkflowWidget/include/GeneralWorkflowScene.h
2026-01-16 17:18:41 +08:00

306 lines
10 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file GeneralWorkflowScene.h
* @brief 工作流展示场景
* @date 2014-08-11
*/
#ifndef PAI_FRAME_WORKFLOWWIDGET_GENERALWORKFLOWSCENE_H
#define PAI_FRAME_WORKFLOWWIDGET_GENERALWORKFLOWSCENE_H
#include "Turtle.h"
#include <QMap>
#include <QGraphicsScene>
namespace pai
{
namespace workflow
{
class CModuleInformation;
class CModuleConnection;
}
namespace gui
{
class PaiJobErrorInfoItem;
class PaiJobSummaryItem;
}
namespace objectmodel
{
class PaiObject;
class PaiWorkflowDataModel;
class PaiJob;
}
namespace graphics2d
{
class ModuleGraphicsItem;
class PaiModuleStyle;
class ModuleToolBarGraphicsItem;
class ModulePortInfoGraphicsItem;
class ModuleConnectGraphicsItem;
class WorkflowWidget;
class ModuleMonitorGraphicsItem;
}
}
namespace pai
{
namespace graphics2d
{
/**
* @class GeneralWorkflowScene
* @brief 工作流展示的场景,负责工作流展示
*/
class PAI_WORKFLOWWIDGET_EXPORT GeneralWorkflowScene : public QGraphicsScene
{
Q_OBJECT
public:
/**
* @brief 场景构造函数
* @param[in] x 场景左上角x轴开始坐标
* @param[in] y 场景左上角y轴开始坐标
* @param[in] width 场景宽度
* @param[in] height 场景高度
*/
GeneralWorkflowScene(qreal x, qreal y, qreal width, qreal height, QObject *pParant = NULL);
/**
* @brief 场景析构函数
*/
virtual ~GeneralWorkflowScene();
/**
* @brief 添加一个工作流到绘图场景区域
* @param[in] pWorkflow 工作流对象
* @param[in] jobRelated true 只读工作流
* false 可编辑工作流
*/
virtual void AddWorkflow(pai::objectmodel::PaiWorkflowDataModel *pWorkflow, bool jobRelated = false);
/**
* @brief 显示每个模块的作业进度信息
* @param[in] pJob作业对象
* @param[in] jobType true 表示日志上的工作流
* false 表示作业上的工作流
*/
void AddJob(pai::objectmodel::PaiJob *pJob, bool jobType);
/**
* @brief 根据指定ID找到对应的模块
* @param[in] stepID 模块ID
* @return 模块指针
*/
pai::graphics2d::ModuleGraphicsItem* FindModule(int stepID);
/**
* @brief 设置模块详细进度信息
*/
void SetJobPrgsInfo();
/**
* @brief 清除场景中的连线和模块
*/
virtual void Clear();
/**
* @brief 更新场景大小
*/
void ExpandSceneRect();
/**
* @brief 设置场景只读,只读时不显示模块的操作菜单。
* @param[in] readyOnly 只读
*/
void SetScenceReadOnly(bool readyOnly);
/**
* @brief 根据给定位置和扩展距离,自动扩展场景
* @param[in] point 给定的点
* @param[in] xExtra 基于point横向要扩大的值
* @param[in] yExtra 基于point纵向要扩大的值
*/
void ExpandSceneRectIfNeeded(const QPointF &point, qreal xExtra, qreal yExtra);
/**
* @brief 根据某个模块的位置和大小来决定是否需要扩展场景
* @param[in] stepID 模块的stepID
*/
void ExpandSceneRectIfNeeded(int stepID);
/**
*@brief 设置场景视口
*@param[in] pWorkflowWidget 视口指针
*/
void SetWorkflowWidget(WorkflowWidget *pWorkflowWidget);
/**
*@brief 设置给定视口是否可以框选
*@param[in] pWorkflowView 视口
*@param[in] enable 是否可框选
*/
virtual void EnableMultiSelect(QGraphicsView *pWorkflowView, bool enable);
/**
* @brief 设置A1区“Error Info条”显示使能
* @param[in] flag true显示false不显示
*/
void EnableErrorInfoItem(bool flag);
/**
* @brief 把焦点设置到视口
*/
void SetFocusViewport();
/**
* @brief 对指定模块以外的其他模块的相反方向端口进行高亮或者取消高亮
* @param[in] stepID 通常是第一个选中端口的模块图元的stepID
* @param[in] light 真代表进行端口高亮,假代表取消端口高亮
*/
void HilightOtherItems(int stepID, bool light);
/**
* @brief 显示错误页签当前错误信息
* @param[in] pJob 出错的Job
*/
void ShowCurrentErrorInfo(pai::objectmodel::PaiJob *pJob);
protected:
/**
* @brief 重写鼠标按压事件
*/
virtual void mousePressEvent(QGraphicsSceneMouseEvent *pEvent);
/**
* @brief 根据指定链接找到对应的连接图元
* @param[in] pConnection 指定链接
* @return 连线item
*/
QGraphicsItem* FindConnection(pai::workflow::CModuleConnection *pConnection);
/**
* @brief 添加一个Module到绘图场景区域
* @param[in] pModule 模块的参数信息
* @param[in] pStyle 模块图元的绘图信息
* @param[in] jobRelated 是否作业对应的工作流
* @return 被添加模块
*/
virtual pai::graphics2d::ModuleGraphicsItem* AddModule(pai::workflow::CModuleInformation *pModule,
pai::graphics2d::PaiModuleStyle *pStyle,
bool jobRelated = false);
/**
* @brief 添加一个Monitor Module到绘图场景区域
* @param[in] pModule 模块的参数信息
* @param[in] pStyle 模块图元的绘图信息
* @param[in] jobRelated 是否作业对应的工作流
* @return 被添加模块
*/
virtual ModuleMonitorGraphicsItem* AddMonitorModule(pai::workflow::CModuleInformation *pModule,
PaiModuleStyle *pStyle,
bool jobRelated = false);
/**
* @brief 添加一个连线到绘图场景区域
* @param[in] pConnect 模块连线的参数信息
*/
virtual void AddConnection(pai::workflow::CModuleConnection *pConnect);
/**
* @brief 对指定模块以外的其他模块的相反方向端口进行高亮或者取消高亮
* @param[in] pStartItem 通常是第一个选中端口的模块图元
* @param[in] light 真代表进行端口高亮,假代表取消端口高亮
*/
void HilightOtherItems(ModuleGraphicsItem *pStartItem, bool light);
/**
* @brief 获取唯一被选中的模块
* @return 场景中唯一被选中的模块
*/
pai::graphics2d::ModuleGraphicsItem* GetSingleSelectedItem() const;
/**
* @brief 获取非使能模块
* @return 所有非使能模块
*/
QList< QGraphicsItem* > GetDisabledItems() const;
/**
* @brief 设置工作流
* @param[in] pWorkflow 当前工作流
*/
void SetWorkflow(pai::objectmodel::PaiWorkflowDataModel *pWorkflow);
/**
* @brief 获取当前场景的工作流
* @return 工作流对象
*/
pai::objectmodel::PaiWorkflowDataModel* GetWorkflow() const;
/**
* @brief 获取模块工具栏
* @return 模块工具栏对象指针
*/
ModuleToolBarGraphicsItem* GetModuleToolBar() const;
/**
* @brief 是否只读
* @return true 只读
* false 可编辑
*/
bool IsReadOnly() const;
protected slots:
/**
* @brief 响应changed信号更新所有连线的位置。
* @param[in] region 场景中有改变的区域
*/
void UpdateScene(const QList< QRectF > & region);
/**
* @brief 响应UpdateSceneRect信号调整工作流场景大小。
*/
void SceneRectAutoAdaptive();
/**
* @brief 响应SetPosition信号调整模块的位置。
* @param[in] point 模块中心点的位置。
* @param[in] pItem 被调整的模块。
*/
void SetModulePosition(const QPointF& point, pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief 设置作业错误信息
* @param[in] pJob 出错的Job
* @param[in] error 错误信息
*/
void SetJobErrorInfo(pai::objectmodel::PaiJob *pJob, const QString& error);
protected:
pai::objectmodel::PaiWorkflowDataModel *m_pWorkflow; ///< 当前场景展示的工作流
bool m_ScenceReadOnly; ///< 当前工作流是否处于只读状态private:
ModuleToolBarGraphicsItem *m_pModuleToolBarItem; ///< 模块右侧工具栏
QRectF m_OriginalSceneRect; ///< 工作流场景的原始大小
pai::gui::PaiJobErrorInfoItem *m_pJobErrorInfoItem; ///< 日志场景错误Item
pai::objectmodel::PaiJob *m_pJob; ///< 但钱工作流对应作业指针
pai::gui::PaiJobSummaryItem *m_pSummaryItem; ///< 日志界面summary item
WorkflowWidget *m_pWorkflowWidget; ///< 展示场景的widget
QMultiMap< pai::objectmodel::PaiJob *, QString > m_MultiMapErrorInfo; ///< 作业指针, 错误信息
bool m_IsChangeTableWidget; ///< 判断是否切换了table 页签
bool m_IsAddErrorInfo; ///< 判断是否已经添加过错误信息
bool m_ErrorInfoItem; ///< A1区“Error Info条”显示使能标志
bool m_JobType; ///< true:日志类型false: 作业
signals:
/**
* @brief 鼠标点击场景时,发送的信息
* param[in] pModule 模块信息
*/
void ClickScene(pai::workflow::CModuleInformation *pModule);
/**
* @brief 当场景中的模块被删除或添加时候发送此消息
*/
void UpdateSceneRect();
};
}
}
#endif ///< PAI_FRAME_WORKFLOWWIDGET_GENERALWORKFLOWSCENE_H