logplus/Workflow/WFEngine/Component/WorkflowWidget/include/GeneralWorkflowScene.h

306 lines
10 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/**
* @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