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

151 lines
3.8 KiB
C++

/**
* @file ModuleToolBarGraphicsItem.h
* @brief 模块工具栏
* @date 2011-09-22
*/
#ifndef PAI_FRAME_WORKFLOWWIDGET_MODULETOOLBARGRAPHICSITEM_H
#define PAI_FRAME_WORKFLOWWIDGET_MODULETOOLBARGRAPHICSITEM_H
#include <QGraphicsItem>
#include <QList>
#include <QPixmap>
#include <QGraphicsOpacityEffect>
#include "Turtle.h"
namespace pai
{
namespace graphics2d
{
class ModuleGraphicsItem;
}
}
namespace pai
{
namespace graphics2d
{
/**
* @class ModuleToolBarGraphicsItem
* @brief 模块工具栏
*/
class PAI_WORKFLOWWIDGET_EXPORT ModuleToolBarGraphicsItem : public QGraphicsItem
{
public:
/**
* @brief 模块工具栏类型
*/
enum
{
Type = UserType + 1010 ///< 当前工具栏item类型
};
/**
* @brief 构造函数
*/
ModuleToolBarGraphicsItem();
/**
* @brief 析构函数
*/
virtual ~ModuleToolBarGraphicsItem();
/**
* @brief 获取当前item类型
* @return item类型
*/
virtual int type() const;
/**
* @brief 当鼠标落在模块图元上时调用该函数建立关联
* @param[in] pModuleItem 模块图元
*/
void AttachModuleItem(ModuleGraphicsItem *pModuleItem);
/**
* @brief 当鼠标移开模块图元上时调用该函数移除关联
*/
void DetachModuleItem();
/**
* @brief 实现该虚函数,返回模块图元的包围矩形
* @return item外围矩形
*/
virtual QRectF boundingRect() const;
/**
* @brief 设置hover的状态
* @param[in] hovering 正在hover
*/
void SetHovering(bool hovering);
/**
* @brief 得到hover的状态
* @return hover状态
*/
bool GetHovering() const;
/**
* @brief 设置透明度使能
* @param[in] enabled 使能标志
*/
void SetOpacityEffect(bool enabled);
/**
* @brief 设置模块工具栏是否处于只读场景,如果是只读场景,本控件不应该显示出来
* @param[in] readonly只读
*/
void SetScenceReadOnly(bool readyonly);
/**
* @brief 设置是否显示
* @param[in] visible 显示标志
*/
void SetToolBarVisible(bool visible);
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 鼠标mouseRelease事件
*/
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *pEvent);
/**
* @brief 实现该虚函数,绘制模块工具栏
* @param[in] pPainter 画笔
* @param[in] pOption 模块风格参数
* @param[in] pWidget 画布
*/
virtual void paint(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption, QWidget *pWidget = NULL);
private:
QList<QPixmap> m_pixmaps; ///< 图片
QList<QRectF> m_ButtonRects; ///< 按钮区域
QGraphicsOpacityEffect m_OpacityEffect; ///< 透明效果
int m_HoverButtonIndex; ///< hover按钮的索引
ModuleGraphicsItem *m_pModuleItem; ///< 模块
bool m_hovering; ///< hover标志
bool m_ScenceReadOnly; ///< 所处场景是否只读
};
}
}
#endif ///< PAI_FRAME_WORKFLOWWIDGET_MODULETOOLBARGRAPHICSITEM_H