#pragma once #include #include "ui_WindowAppTaskView.h" #include "Common.h" /// /// 用于显示和管理执行任务的视图 /// class WindowAppTaskView : public QWidget { Q_OBJECT public: WindowAppTaskView(const QString& strTitle, QWidget* parent = nullptr); ~WindowAppTaskView(); //// 绑定本视图对应的Task数据结构 // void bindTask(const TASK& newTask); // 根据用户选择的初始化参数构建新的任务,并向TaskManager注册 void addNewTask(const TASK_OPTION& option); // 直接根据Task指针直接生成任务 void addNewTask(TASK* newTask); // 为Task添加对应的Pou void addTaskPous(const QVector& selPous); // 为Task中的Pou添加Tool void addTaskPouTool(const POU* pPou, const TOOL* pTool); // 添加 Task 的内部变量到系统全局变量组 void addTaskVarToSystemGvl(const TASK* pTask); // 从系统全局变量组删除 Task 的内部变量 void delTaskVar(const TASK* pTask); // 2022-3-5增加,Pou界面中删除了Tool的时候,Task需要同步 void onDelPouTool(const POU* pPou, const TOOL* pTool); // 2022-3-5增加,Pou界面中调整了Tool顺序的时候,Task需要同步 void onMovePouTool(const POU* pPou); // 响应刷新界面的各种信号 public slots: // 根据最新的执行结果刷新界面 void updateAllTables(const POU* pRunningPou, const TOOL* pRunningTool); // 刷新Task表格中的对应行 void updateTaskTable(); // 刷新Pou表格 void updatePouTable(const POU* pRunningPou); // 刷新Tool表格 void updateToolTable(const TOOL* pRunningTool); // 单独更新Task状态 void updateTaskStatus(); // 单独更新Pou状态 void updatePouStatus(const POU* pRunningPou); // 单独更新Tool状态 void updateToolStatus(const POU* pPou, const TOOL* pRunningTool); private: Ui::WindowAppTaskView ui; private: // UI元素初始化 void initUI(); // 初始化Pou表格 void initPouTable(); // 初始化工具栏 void initToolBar(); // 初始化Tab页面 void initTab(); // 初始化Tab里的Table QTableWidget* initToolTable(const QString& strPouName); // 添加新的Pou Tab void addNewTab(POU* pPou); // 添加Tool信息到Tab表格 void addNewTabTool(QTableWidget* pTable, const TOOL* pTool); // 删除Tab表格中的Tool信息 void delTabTool(QTableWidget* pTable, const TOOL* pTool); // 交换两行的数据 void swapRows(int selectRow, int targetRow); private slots: // Add Pou void onAddPou(); // Delete Pou void onDelPou(); // Move up void onMoveUp(); // Move Down void onMoveDown(); // Option void onOption(); // Runonce void onRunonce(); // 调整大小的消息中改变表格栏的宽度 virtual void resizeEvent(QResizeEvent* event) override; // 当双击一行的时候跳转到对应的Pou页面 void onDoubleClickedTableRow(int nRow, int nCol); private: // 本Task分组的名称 QString m_strTitle; // 本视图的Task数据结构 TASK* m_pTask; //// 选中的Pou //QVector m_selPous; // Task界面工具栏 QToolBar* m_TaskToolbar; // Pou的Tool执行监控表格 QVector m_TabTables; // 表格中的Pou序号和Tab的序号对应关系 //(因为尚未找到如何调整Tab的标签页顺序所以不得不这样 // 否则Pou表格中Moveup Movedown之后和下面Tab标签index就对应不上了) QMap m_RowIndexs; // 每一个Tool对应的表格指针 QHash> m_toolToTableWidgetItems; // 每一个Pou对应的表格指针 QHash> m_pouToTableWidgetItems; // 每一个Pou对应的Tool Table(用于Pou添加工具时向TaskView中同步) QHash m_pouToTables; //// 表格中的Tool和行数对应关系(用于删除) //QHash m_toolToTableRow; signals: // 刷新Task表格中的对应行 void sigUpdateTaskTable(); // 单独更新Task状态 void sigUpdateTaskStatus(); // 根据最新的执行结果刷新界面 void sigUpdateAllTables(const POU*,const TOOL*); // 刷新Pou表格 void sigUpdatePouTable(const POU* pRunningPou); // 单独更新Pou状态 void sigUpdatePouStatus(const POU* pRunningPou); // 单独更新Tool状态 void sigUpdateToolStatus(const POU* pPou, const TOOL* pRunningTool); };