logplus/ModuleConsole/include/WorkflowSceneManager.h

652 lines
18 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/*
* @file WorkflowSceneManager.h
* @author haidong
* @date: 2011-8-17
* @brief 线
*/
#ifndef PAI_FRAME_WORKFLOWVIEW_WORKFLOWSCENEMANAGER_H
#define PAI_FRAME_WORKFLOWVIEW_WORKFLOWSCENEMANAGER_H
#include <QGraphicsScene>
#include <QMap>
#include <QVector>
#include <QUuid>
// #include <QThreadPool>
#include <QMenu>
#include "Turtle_globle.h"
// #include "Job.h"
// #include "PaiUndoStack.h"
#include "WorkflowSpecialTypes.h"
// #include "WorkflowJob.h"
#include "GeneralWorkflowScene.h"
// #include "ModuleInformation.h"
namespace pai
{
namespace module
{
class CModuleCheckResult;
}
}
namespace pai
{
class CPaiWorkflowPlugin;
class ToolBarService;
namespace objectmodel
{
class PaiObject;
class PaiWorkflowDataModel;
}
namespace graphics2d
{
class ModuleGraphicsItem;
class PaiModuleStyle;
class CParameterEditor;
}
}
namespace pai
{
namespace graphics2d
{
/**
* @class WorkflowSceneManager
* @brief 线
*/
class PAI_WORKFLOWVIEW_EXPORT WorkflowSceneManager : public GeneralWorkflowScene
{
Q_OBJECT
public:
/**
* @brief
* @param[in] x x轴开始坐标
* @param[in] y y轴开始坐标
* @param[in] width
* @param[in] height
* @param[in] bUnitTest UT标志
*/
WorkflowSceneManager(qreal x, qreal y, qreal width, qreal height, QObject *pParent = NULL);
/**
* @brief
*/
virtual ~WorkflowSceneManager();
/**
* @brief
* @param[in] pWorkflow
* @param[in] bJobRelated JobMananger Tab
*/
virtual void AddWorkflow(pai::objectmodel::PaiWorkflowDataModel* pWorkflow, bool bJobRelated = false);
/**
* @brief
* @param[in] stepID stepID
*/
void SelectModuleItem(int stepID);
/**
* @brief 线
*/
virtual void Clear();
void ClearItems();
/**
* @brief copy,paste等菜单
* @param[in] connect true根据情况设置可用false解除信号关联
*/
void RestoreActions(bool bConnectAction);
/**
* @brief copy,paste等
*/
void UpdateActions();
/*
* @brief Submit验证线程的个数
*/
int GetSubmitThreadCount();
/*
* @brief UndoStack
* @return
*/
// PaiUndoStack* GetUndoStack();
/*
* @brief
* @param[in] bSubmit提交按钮状态
*/
void SetSubmitting(bool bSubmit);
/*
* @brief 便
* param[in] name
*/
void SetSubToolBarName(const QString &name);
/**
*@brief
*@param[in] pParamEditor参数面板指针
*/
void SetParameterEditor(CParameterEditor *pParamEditor);
/**
*@brief
*@param[in] pWorkflowView
*@param[in]
*/
virtual void EnableMultiSelect(QGraphicsView *pWorkflowView, bool enable);
/**
* @brief
* @return
*/
int GetZoomCount();
/**
* @brief
* @param zoomCount
*/
void SetZoomCount(int zoomCount);
/**
* @brief
* @param[in] pModuleInfo
*/
void OpenModuleParam(pai::workflow::CModuleInformation *pModuleInfo);
/**
* @brief Module到绘图场景区域
* @param[in] pModule
* @param[in] pStyle
* @param[in] bJobRelated
* @return
*/
virtual pai::graphics2d::ModuleGraphicsItem* AddModule(pai::workflow::CModuleInformation* pModule,
pai::graphics2d::PaiModuleStyle* pStyle, bool bJobRelated = false);
/**
* @brief 线
* @param[in] pConnect 线
*/
virtual void AddConnection(pai::workflow::CModuleConnection* pConnect);
/**
* @brief
* @param[in] setpID stepID
*/
virtual void DeleteModule(int setpID);
/**
* @brief 线
* @param[in] pConnection 线
*/
virtual void DeleteConnection(pai::workflow::CModuleConnection *pConnection);
/**
* @brief
* @param[in] pModuleItem
* @return
*/
QList<pai::graphics2d::ModuleGraphicsItem*> GetOutputModules(pai::graphics2d::ModuleGraphicsItem *pModuleItem);
/**
* @brief 线
* @param[in] pBeginModule
* @param[in] pEndModule
* @return true 线false 线
*/
bool CheckConnection(pai::graphics2d::ModuleGraphicsItem *pBeginModule, pai::graphics2d::ModuleGraphicsItem *pEndModule);
/**
* @brief 线线
*/
void WaitThreadForDone();
/**
* @brief Submit线程
*/
void StartSubmitValidateThread();
void DeleteAll();
workflow::CModuleInformation * GetSingleSelectedModule( );
bool& getSingleMethodFlag(){return m_bIsSingleMethod;};
protected:
/**
* @brief
*/
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *pEvent);
/**
* @brief
*/
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *pEvent);
/**
* @brief
*/
virtual void dropEvent(QGraphicsSceneDragDropEvent *pEvent);
/**
* @brief
*/
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * mouseEvent);
/**
* @brief
*/
virtual void keyReleaseEvent(QKeyEvent * keyEvent);
/**
* @brief
* @param keyEvent:
*/
virtual void keyPressEvent(QKeyEvent * keyEvent);
/**
* @brief
*/
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent);
/**
* @brief
*/
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * mouseEvent);
/**
* @brief
*/
virtual void mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent);
/**
* @brief响应右键菜单事件
*/
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent * contextMenuEvent);
/*
* @brief
*/
QMenu *WorkflowSenceMenu(QGraphicsSceneContextMenuEvent *pContextMenuEvent);
/*
* @brief
*/
QMenu *WorkflowModuleMenu(pai::workflow::CModuleInformation *moduleInfo);
/*
* @brief 线
*/
QMenu *WorkflowConnectLineMenu(QGraphicsSceneContextMenuEvent * contextMenuEvent);
/*
* @brief
*/
QMenu *WorkflowPortMenu(QGraphicsSceneContextMenuEvent * contextMenuEvent);
/*
* @brief 线
*/
void ClearDashLine();
/*
* @brief 线
* @param pEndItem
* @param portIndex
*/
bool PortHasBeenLined(ModuleGraphicsItem *pEndItem, int portIndex);
public slots:
/**
* @brief
*/
void slotPaste();
/*
* @brief slot for copy items
*/
void slotCopy();
/*
* @brief: cut item slot (added by Pangshiming 2012.9.9)
*/
void slotCutItem();
/**
*@brief
*@param pObject
*/
void slotApplyTemplate(pai::objectmodel::PaiObject* pObject);
/*
* @brief add module by module information
*/
void slotAddModule(const QString&);
private slots:
/**
* @biref
* @param[in] pItem
*/
void slotUpdateModule(pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief
*/
void slotOnSetName(pai::graphics2d::ModuleGraphicsItem *pItem);
/**
* @brief
*/
void slotOnDisableOrEnable(pai::graphics2d::ModuleGraphicsItem *, bool enable);
/**
* @brief 线
*/
void slotOnSelectionChanged();
/**
* @brief
* @param pItem
* @param bSelected
*/
void slotOnPortSelectionChanged(pai::graphics2d::ModuleGraphicsItem* pItem, bool bSelected);
/**
* @brief 线
* @param pItem
* @param bHovering
*/
void slotOnPortHoveringChanged(pai::graphics2d::ModuleGraphicsItem* pItem, bool bHovering);
/**
* @brief
*/
void slotOnObjectAddChildren(pai::objectmodel::PaiObject* pWorkflow,
QList< pai::objectmodel::PaiObject* > & children);
/**
* @brief
*/
void slotOnObjectRemoveChild(pai::objectmodel::PaiObject* pObject, pai::objectmodel::PaiObject* pChild);
/**
* @brief
*/
void slotOnParameterValidated();
/**
* @brief
* @param pModuleItem
*/
void slotDeleteModule(pai::graphics2d::GeneralWorkflowScene *pScene,
pai::graphics2d::ModuleGraphicsItem* pModuleItem);
/*
* @brief Action(delete)
*/
void slotDeleteModule();
/**
* @brief
*/
void slotPasteHere();
/**
* @brief
*/
void slotOnModuleParameterError(pai::workflow::CModuleInformation * pModuleInfo,bool checkresult,
const pai::module::CModuleCheckResult& errorInfo, ValidateEventSource eventSource);
/**
* @brief
*/
void slotOnModuleParamDataChanged();
/**
* @brief workflow command undo.
*/
void slotUndo();
/**
* @brief workflow command redo.
*/
void slotRedo();
/*
* @brief align the selected items (added by Pangshiming 2012.5.31)
*/
void slotAlign();
/*
* @brief SubmitValidateThread线程finish信号Submit按钮的状态
*/
void slotOnCanSubmitThreadFinished();
/*
* @brief signalSelectModule信号m_pSelectedItem
*/
void slotSelectModule(pai::workflow::CModuleInformation*pInfo);
/*
* @brief select all items slot (added by Pangshiming 2012.6.11)
*/
void slotSelectAll();
/*
* @brief copy all items slot (added by Pangshiming 2012.6.11)
*/
void slotCopyAll();
/**
* @brief zoom in items
*/
void slotZoomin();
/**
* @brief zoom out items
*/
void slotZoomout();
/*
* @brief delete connection slot (added by Pangshiming 2012.9.6)
*/
void slotDeleteConnection();
/*
* @brief :add modules connection line slot (added by Pangshiming 2012.9.10)
*/
void slotAddLine();
/*
* @brief : break modules connection line slot (added by Pangshiming 2012.9.10)
*/
void slotBreakLine();
/*
* @brief: slot for module tree menu item clicked(added by Pangshiming 2012.9.9)
*/
void slotOnModuleMenuClick(const QString&, const QString&);
/*
* @brief: slot for toolbar enable button clicked (added by Pangshiming 2012.9.10)
*/
void slotToolBarEnable();
/*
* @brief: slot for toolbar edit button clicked(added by Pangshiming 2012.9.10)
*/
void slotToolBarEdit();
/*
* @brief: slot for parameter button clicked(added by Pangshiming 2012.9.12)
*/
void slotModuleParameter();
/**
* @brief: disable的模块
*/
void slotDeleteDisabledItems();
/**
*@brief
*/
// void slotSetSelectedModuleName();
signals:
/**
* @brief
* @param[in] pInfo
*/
void signalSelectModule(pai::workflow::CModuleInformation* pInfo);
/**
* @brief
* @param[in] selected true false
*/
void moduleSelectedSignal(bool selected);
/**
* @brief
* @param[in] pInfo
*/
void signalOpenModuleParam(pai::workflow::CModuleInformation* pInfo);
/**
* @brief
* @param[in] pInfo
* @param[in] IsModuleReadOnly
*/
void doubleClickModule(pai::workflow::CModuleInformation* pInfo, bool IsModuleReadOnly);
private:
/**
* @brief (selectAll,Zoom,copyAll Action使能条件)
* @return true:false:
*/
bool IsModuleExisting();
/**
* @brief 使
* @return true:false:
*/
bool DeleteModuleCondition();
/**
*@brief
*/
// void HideAllModuleNameEdit();
/**
* @brief ModuleNameList
*/
void InitModuleNameList();
/**
* @brief
* @return true正处于编辑状态false处于未编辑状态
*/
// bool IsEditingModuleName();
/**
* @线
* @return true,false
*/
bool CheckConnection();
/**
* @brief
*/
void HandleOnObjectAddOrRemove(pai::objectmodel::PaiObject* pChild, bool add);
/**
* @brief
*/
void ValidateModulesAcceptDropData(QUuid typeID, QString logicFileName);
/**
* @brief
*/
void RemoveModulesInBackup();
/**
* @brief
*/
// CPaiWorkflowPlugin * GetWorkflowPlugin();
/**
* @brief Active的
*/
bool IsActiveWorkflow(pai::objectmodel::PaiWorkflowDataModel* pWorkflow);
/**
* @brief
*/
pai::ToolBarService* GetStyleToolBarService() const;
/**
* @brief 线
*/
bool AddLineCondition();
/**
* @brief 线
*/
bool BreakLineCondition();
/**
* @brief Disable and Eidt icon
*/
bool DisableAndEditCondition();
/**
* @brief
* @param[in] moduleName
* @param[in] isBefore truefalse
*/
void addBeforeOrAfter(const QString& moduleName, bool isBefore);
/*
* @brief ThreadPool
*/
void ReleaseThreadPool();
/**
* @brief B2区的info页签的信号
*/
void UpdateHelpDoc();
private:
ModuleGraphicsItem* m_pStartItem; //添加连线开始模块
ModuleGraphicsItem* m_pEndItem; //添加连线结束模块
QGraphicsLineItem *m_pTmpLine; //端口连接时绘制的虚线
QString m_strSubToolBarName; //工具栏名称
QMap< QString, QString > m_pMouduleNameList; // 模块名称,类名称
bool m_bModuleMoved; //记录模块是否被移动过。
bool m_bLeftButtonDown; //记录鼠标左键是否按下,用来区分鼠标滑动和拖到。
bool m_bKeyPressed; //记录键盘是否按下。
QPointF m_bMousePressPoint; //鼠标按下坐标
int m_SubmitThreadCount; //记录场景中的验证线程的个数在SaveAs的情况下可能不只有过一个工作流
// PaiUndoStack *m_pUndoStack; //命令栈
// QThreadPool *m_pThreadPool; //线程池
int m_zoomCount; //场景视图放大或缩小的次数
QPointF m_rubberBandPoint; //框选时鼠标按下点
QPoint m_PastePoint; //复制模块的位置
CParameterEditor *m_pParameterEditor; //参数面板指针
bool m_bEnableMultiSelect; //判断是否可以多选操作
bool m_bIsSingleMethod; //判断当前是否单方法模式
};
}
}
#endif