WindowAppTaskView.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #pragma once
  2. #include <QWidget>
  3. #include "ui_WindowAppTaskView.h"
  4. #include "Common.h"
  5. /// <summary>
  6. /// 用于显示和管理执行任务的视图
  7. /// </summary>
  8. class WindowAppTaskView : public QWidget
  9. {
  10. Q_OBJECT
  11. public:
  12. WindowAppTaskView(const QString& strTitle, QWidget* parent = nullptr);
  13. ~WindowAppTaskView();
  14. //// 绑定本视图对应的Task数据结构
  15. // void bindTask(const TASK& newTask);
  16. // 根据用户选择的初始化参数构建新的任务,并向TaskManager注册
  17. void addNewTask(const TASK_OPTION& option);
  18. // 直接根据Task指针直接生成任务
  19. void addNewTask(TASK* newTask);
  20. // 为Task添加对应的Pou
  21. void addTaskPous(const QVector<POU*>& selPous);
  22. // 为Task中的Pou添加Tool
  23. void addTaskPouTool(const POU* pPou, const TOOL* pTool);
  24. // 添加 Task 的内部变量到系统全局变量组
  25. void addTaskVarToSystemGvl(const TASK* pTask);
  26. // 从系统全局变量组删除 Task 的内部变量
  27. void delTaskVar(const TASK* pTask);
  28. // 2022-3-5增加,Pou界面中删除了Tool的时候,Task需要同步
  29. void onDelPouTool(const POU* pPou, const TOOL* pTool);
  30. // 2022-3-5增加,Pou界面中调整了Tool顺序的时候,Task需要同步
  31. void onMovePouTool(const POU* pPou);
  32. // 响应刷新界面的各种信号
  33. public slots:
  34. // 根据最新的执行结果刷新界面
  35. void updateAllTables(const POU* pRunningPou, const TOOL* pRunningTool);
  36. // 刷新Task表格中的对应行
  37. void updateTaskTable();
  38. // 刷新Pou表格
  39. void updatePouTable(const POU* pRunningPou);
  40. // 刷新Tool表格
  41. void updateToolTable(const TOOL* pRunningTool);
  42. // 单独更新Task状态
  43. void updateTaskStatus();
  44. // 单独更新Pou状态
  45. void updatePouStatus(const POU* pRunningPou);
  46. // 单独更新Tool状态
  47. void updateToolStatus(const POU* pPou, const TOOL* pRunningTool);
  48. private:
  49. Ui::WindowAppTaskView ui;
  50. private:
  51. // UI元素初始化
  52. void initUI();
  53. // 初始化Pou表格
  54. void initPouTable();
  55. // 初始化工具栏
  56. void initToolBar();
  57. // 初始化Tab页面
  58. void initTab();
  59. // 初始化Tab里的Table
  60. QTableWidget* initToolTable(const QString& strPouName);
  61. // 添加新的Pou Tab
  62. void addNewTab(POU* pPou);
  63. // 添加Tool信息到Tab表格
  64. void addNewTabTool(QTableWidget* pTable, const TOOL* pTool);
  65. // 删除Tab表格中的Tool信息
  66. void delTabTool(QTableWidget* pTable, const TOOL* pTool);
  67. // 交换两行的数据
  68. void swapRows(int selectRow, int targetRow);
  69. private slots:
  70. // Add Pou
  71. void onAddPou();
  72. // Delete Pou
  73. void onDelPou();
  74. // Move up
  75. void onMoveUp();
  76. // Move Down
  77. void onMoveDown();
  78. // Option
  79. void onOption();
  80. // Runonce
  81. void onRunonce();
  82. // 调整大小的消息中改变表格栏的宽度
  83. virtual void resizeEvent(QResizeEvent* event) override;
  84. // 当双击一行的时候跳转到对应的Pou页面
  85. void onDoubleClickedTableRow(int nRow, int nCol);
  86. private:
  87. // 本Task分组的名称
  88. QString m_strTitle;
  89. // 本视图的Task数据结构
  90. TASK* m_pTask;
  91. //// 选中的Pou
  92. //QVector<PouManager*> m_selPous;
  93. // Task界面工具栏
  94. QToolBar* m_TaskToolbar;
  95. // Pou的Tool执行监控表格
  96. QVector<QTableWidget*> m_TabTables;
  97. // 表格中的Pou序号和Tab的序号对应关系
  98. //(因为尚未找到如何调整Tab的标签页顺序所以不得不这样
  99. // 否则Pou表格中Moveup Movedown之后和下面Tab标签index就对应不上了)
  100. QMap<int, int> m_RowIndexs;
  101. // 每一个Tool对应的表格指针
  102. QHash<const TOOL*, QVector<QTableWidgetItem*>> m_toolToTableWidgetItems;
  103. // 每一个Pou对应的表格指针
  104. QHash<QString, QVector<QTableWidgetItem*>> m_pouToTableWidgetItems;
  105. // 每一个Pou对应的Tool Table(用于Pou添加工具时向TaskView中同步)
  106. QHash<QString, QTableWidget*> m_pouToTables;
  107. //// 表格中的Tool和行数对应关系(用于删除)
  108. //QHash<const TOOL*, int> m_toolToTableRow;
  109. signals:
  110. // 刷新Task表格中的对应行
  111. void sigUpdateTaskTable();
  112. // 单独更新Task状态
  113. void sigUpdateTaskStatus();
  114. // 根据最新的执行结果刷新界面
  115. void sigUpdateAllTables(const POU*,const TOOL*);
  116. // 刷新Pou表格
  117. void sigUpdatePouTable(const POU* pRunningPou);
  118. // 单独更新Pou状态
  119. void sigUpdatePouStatus(const POU* pRunningPou);
  120. // 单独更新Tool状态
  121. void sigUpdateToolStatus(const POU* pPou, const TOOL* pRunningTool);
  122. };