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

686 lines
20 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/**
* @file ModuleGraphicsItem.h
* @brief
* @date 2011-8-17
*/
#ifndef PAI_FRAME_WORKFLOWWIDGET_MODULEGRAPHICSITEM_H
#define PAI_FRAME_WORKFLOWWIDGET_MODULEGRAPHICSITEM_H
#include <QGraphicsObject>
#include "ModulePortGraphicsItem.h"
class QGraphicsView;
class QMimeData;
class QUuid;
namespace pai
{
namespace workflow
{
class CModuleInformation;
}
namespace objectmodel
{
class PaiObject;
class PaiWorkflowDataModel;
}
}
namespace pai
{
namespace gui
{
class PaiJobParameterItem;
class PaiLineEdit;
}
}
namespace pai
{
namespace graphics2d
{
class PaiModuleStyle;
class ModuleGraphicsItem;
class ModuleToolBarGraphicsItem;
class GeneralWorkflowScene;
class ModuleMonitorGraphicsItem;
}
}
namespace pai
{
namespace graphics2d
{
/**
* @class ModuleGraphicsItemEventAgent
* @brief
*/
class PAI_WORKFLOWWIDGET_EXPORT ModuleGraphicsItemEventAgent : public QObject
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pItem
* @param[in] selected true
* false
*/
void ModulePortSelectionChanged(pai::graphics2d::ModuleGraphicsItem *pItem, bool selected);
/**
* @brief
* @param[in] pItem
*/
void ItemNeedCenterOn(pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief
* @param[in] pScene
* @param[in] pItem
*/
void ItemNeedBeDelete(pai::graphics2d::GeneralWorkflowScene *pScene,
pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief
* @param[in] pInfo
* @param[in] readOnly
*/
void DoubleClickModule(pai::workflow::CModuleInformation *pInfo, bool readOnly);
/**
* @brief
* @param[in] pModule模块信息
* @param[in] readOnly
*/
void ClickModule(pai::workflow::CModuleInformation *pModule, bool readOnly);
/**
* @brief 使
* @param[in] pItem
* @param[in] enabled 使
*/
void ItemSetEnabled(pai::graphics2d::ModuleGraphicsItem *pItem, bool enabled);
/**
* @brief
* @param[in] pItem
*/
void ItemSetName(pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief
* @param[in] pItem
*/
void UpdataModule(pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief 线hovering的消息
* @param[in] pItem
* @param[in] hovering hover状态
*/
void ModulePortHoveringChanged(pai::graphics2d::ModuleGraphicsItem *pItem, bool hovering);
/**
* @brief
* @param[in] pModule
*/
void ClickSelectedModule(pai::workflow::CModuleInformation *pModule);
/**
* @brief
* @param[in] pItem
* @param[in] monitor
*/
void SetMonitoring(pai::graphics2d::ModuleGraphicsItem *pItem, bool monitor);
/**
* @brief
* @param[in] pMonitor
*/
void ShowColorEditor(ModuleMonitorGraphicsItem *pMonitor);
/**
* @brief
* @param[in] color
*/
void UpdateMonitorColor(const QString& color);
signals:
/**
* @brief
* @param[in] pModule模块信息
* @param[in] readOnly
*/
void ModuleClicked(pai::workflow::CModuleInformation *pItem, bool readOnly);
/**
* @brief
* @param[in] pItem
* @param[in] selected true
* false
*/
void PortSelectionChanged(pai::graphics2d::ModuleGraphicsItem *pItem, bool selected);
/**
* @brief 线hovering的信号
* @param[in] pItem
* @param[in] hovering hover状态
*/
void PortHoveringChanged(pai::graphics2d::ModuleGraphicsItem *pItem, bool hovering);
/**
* @brief
* @param[in] pItem
*/
void ModuleCenterOn(QGraphicsItem *pItem);
/**
* @brief
* @param[in] pScene
* @param[in] pItem
*/
void DeleteModule(pai::graphics2d::GeneralWorkflowScene *pScene,
pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief
* @param[in] pInfo
* @param[in] readOnly
*/
void DoubleClick(pai::workflow::CModuleInformation *pInfo, bool readOnly);
/**
* @brief 使
* @param[in] pItem
* @param[in] enable
*/
void SetEnalbed(pai::graphics2d::ModuleGraphicsItem *pItem, bool enabled);
/**
* @brief
* @param[in] pItem
*/
void SetName(pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief
* @param[in] pItem
*/
void UpdateItem(pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief
* @param[in] pModule
*/
void ClickSelectedItem(pai::workflow::CModuleInformation *pModule);
/**
* @brief
*/
void EditingFinished();
/**
* @brief
* @param[in] pItem
* @param[in] monitor
*/
void SetModuleMonitoring(pai::graphics2d::ModuleGraphicsItem *pItem, bool monitor);
/**
* @brief
* @param[in] pMonitor
*/
void ShowMonitorColorEditor(pai::graphics2d::ModuleMonitorGraphicsItem *pMonitor);
/**
* @brief
* @param[in] color
*/
void ChangeMonitorColor(const QString& color);
};
/**
* @class ModuleGraphicsItem
* @brief
*/
class PAI_WORKFLOWWIDGET_EXPORT ModuleGraphicsItem : public QGraphicsItem
{
public:
friend class ModuleToolBarGraphicsItem;
/**
* @brief
*/
enum
{
Type = UserType + 1000 ///< 模块item类型
};
/**
* @brief
* @param[in] pParent
*/
ModuleGraphicsItem(QGraphicsItem *pParent = NULL);
/**
* @brief
* @param[in] pModule
* @param[in] pStyle
* @param[in] job
* @param[in] pParent
*/
ModuleGraphicsItem(pai::workflow::CModuleInformation *pModule,
pai::graphics2d::PaiModuleStyle *pStyle,
bool job = false,
QGraphicsItem *pParent = NULL);
/**
* @brief
*/
virtual ~ModuleGraphicsItem();
/**
* @brief
* @return
*/
virtual int type() const;
/**
* @brief
* @param[in] pStyle
*/
void SetStyle(pai::graphics2d::PaiModuleStyle *pStyle);
/**
* @brief SetStyle
* @param[in] pModule
*/
void SetModule(pai::workflow::CModuleInformation *pModule);
/**
* @brief 使
* @param[in] isDisable true 使
* false 使
*/
void SetDisable(bool isDisable);
/**
* @brief 使
* @return 使
*/
bool IsDisable() const;
/**
* @brief
* @param[in] pToolBarItem
*/
void SetToolBarItem(pai::graphics2d::ModuleToolBarGraphicsItem *pToolBarItem);
/**
* @brief
* @return
*/
pai::workflow::CModuleInformation* GetModule() const;
/**
* @brief
* @return
*/
pai::graphics2d::PaiModuleStyle* GetModuleStyle() const;
/**
* @brief
* @return
*/
pai::graphics2d::ModuleToolBarGraphicsItem* GetToolBar() const;
/**
* @brief
* @param[in] portDirection
* @param[in] portIndex
* @return
*/
QPointF GetPortPostion(PortDirection portDirection, int portIndex) const;
/**
* @brief
* @param[in] portDirection
* @param[in] portIndex
* @return
*/
QRectF GetPortBoundingRect(PortDirection portDirection, int portIndex) const;
/**
* @brief
* @return
*/
QSizeF GetSize() const;
/**
* @brief
* @return
*/
int GetInputPortCount() const;
/**
* @brief
* @return
*/
int GetOutputPortCount() const;
/**
* @brief
* @param[out] portDirection
* @param[out] portIndex
*/
void GetSelectedPort(PortDirection& portDirection, int& portIndex);
/**
* @brief Hovering状态的模块端口信息
* @param[out] portDirection
* @param[out] portIndex
*/
void GetHoveringPort(PortDirection& portDirection, int& portIndex);
/**
* @brief
* @return true
* false
*/
bool HasPortSelected() const;
/**
* @brief
*/
void CancelPortSelect();
/**
* @brief
* @param[in] pEvent
* @return true
* false
*/
bool PortHit(QGraphicsSceneMouseEvent *pEvent);
/**
* @brief
* @param[in] portDirection
* @param[in] light true false
*/
void HilightPorts(PortDirection portDirection, bool light);
/**
* @brief
* @return true
* false
*/
bool GetInitialValidated() const;
/**
* @brief
* @param[in] validated
*/
void SetInitialValidated(bool validated);
/**
* @brief
* @param[in] error
*/
void SetErrorString(QString error);
/**
* @brief
* @param[in] pWorkflow
*/
void SetWorkflow(pai::objectmodel::PaiWorkflowDataModel *pWorkflow);
/**
* @brief
* @param[in] jobType true
* false
*/
void SetJobType(bool jobType);
/**
* @brief
* @param[in] moduleNameList
*/
void SetModuleNamePopup(const QList<QString> &moduleNameList);
/**
* @brief
*/
void HideModuleNameEditor();
/**
* @brief
*/
void HideNonBlankModuleEditor();
/**
* @brief
* @return true正处于编辑状态false处于未编辑状态
*/
bool IsEditingModuleName();
/**
* @brief
* @return
*/
QString GetModuleNameEditorText() const;
/**
* @brief
*/
void ShowModuleNameEditor();
/**
* @brief
* @return false
* true
*/
bool IsModuleReadOnly() const;
/**
* @brief 线
* @param[in] portIndex输入端口索引
* @return true 线false 线
*/
bool InPortHasBeenLined(int portIndex) const;
/**
* @brief 线
* @return 线
*/
int GetFreeInPortIndex() const;
/**
* @breif
* @param[in] monitor
*/
void SetMonitoring(bool monitor);
/**
* @brief
* @return true
* false
*/
bool GetMonitoring() const;
/**
* @brief
* @param[in] pMonitor item
*/
void SetMonitorItem(pai::graphics2d::ModuleMonitorGraphicsItem *pMonitor);
/**
* @brief
* @return
*/
pai::graphics2d::ModuleMonitorGraphicsItem* GetMonitorItem() const;
protected:
/**
* @brief
* @param[in] pEvent hoverEnter事件
*/
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *pEvent);
/**
* @brief
* @param[in] pEvent hoverMove事件
*/
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *pEvent);
/**
* @brief
* @param[in] pEvent hoverLeave事件
*/
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *pEvent);
/**
* @brief
* @param[in] pEvent mousePress事件
*/
virtual void mousePressEvent(QGraphicsSceneMouseEvent *pEvent);
/**
* @brief
* @param[in] pEvent mouseRelease事件
*/
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *pEvent);
/**
* @brief
* @return
*/
virtual QRectF boundingRect() const;
/**
* @brief
* @param[in] pPainter
* @param[in] pOption
* @param[in] pWidget
*/
virtual void paint(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption, QWidget *pWidget = NULL);
/**
* @brief
* @param[in] pEvent mouseMove事件
*/
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *pEvent);
/**
* @brief
* @param[in] change
* @param[in] value
* @return
*/
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
/**
* @brief
* @param[in] pEvent mouseDoubleClick事件
*/
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void dropEvent(QGraphicsSceneDragDropEvent *pEvent);
private:
/**
* @brief
* @return
*/
QGraphicsView* GetView() const;
/**
* @brief
* @param[in] isInput
* @param[in] index
*/
void SetPortToolTip(bool isInput, unsigned int index);
/**
* @brief
*/
void UpdateView();
/**
*@brief
*/
void InitModuleNameEdit();
/**
* @brief
*/
void InitDropType();
/**
* @brief
* @param[in] pMimeData
* @return true,false,
*/
bool IsDropTypeValid(const QMimeData *pMimeData);
/**
* @brief
* @param[in] pObject
* @return true
*/
bool AddFileToModuleParameter(pai::objectmodel::PaiObject* pObject);
public:
static ModuleGraphicsItemEventAgent m_EventAgent; ///< 模块事件代理对象
private:
pai::workflow::CModuleInformation *m_pModule; ///< 模块的数据信息
pai::graphics2d::PaiModuleStyle *m_pStyle; ///< 模块的绘图信息
pai::graphics2d::ModuleToolBarGraphicsItem *m_pToolBarItem; ///< 模块图元的工具条
pai::graphics2d::ModuleMonitorGraphicsItem *m_pMonitorItem; ///< 模块监控图元
pai::objectmodel::PaiWorkflowDataModel *m_pWorkflow; ///< 模块所属工作流
QSizeF m_size; ///< 模块图元大小
QList<ModulePortGraphicsItem> m_InputPorts; ///< 模块输入端口
QList<ModulePortGraphicsItem> m_OutputPorts; ///< 模块的输出端口
bool m_OnMoving; ///< 模块正在被移动
bool m_OnHovering; ///< 鼠标正在模块上
bool m_InitialValidated; ///< 模块是否做过初始验证
bool m_PressedOnPort; ///< 选中端口
bool m_monitoring; ///< 模块监控状态
QString m_error; ///< 错误提示信息
bool m_job; ///< false,工作流场景中的模块true作业或者日志场景中的模块
pai::gui::PaiJobParameterItem *m_pCJobParameterItem; ///< 日志界面的模块参数显示item
bool m_JobType; ///< 作业日志类型true:日志 false:作业
pai::gui::PaiLineEdit *m_pEdit; ///< 模块名称编辑框
QList<QUuid> m_SupportedDropType; ///< 被支持的拖拽类型
};
}
}
/**
* @brief 线
* @param[in] drawing 线
*/
extern PAI_WORKFLOWWIDGET_EXPORT void SetSceneLineDrawing(bool drawing);
/**
* @brief 线
* @return true 线
* false 线
*/
extern PAI_WORKFLOWWIDGET_EXPORT bool GetSceneLineDrawing();
#endif ///< PAI_FRAME_WORKFLOWWIDGET_MODULEGRAPHICSITEM_H