managerplan.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #ifndef MANAGERPLAN_H
  2. #define MANAGERPLAN_H
  3. #include <QDialog>
  4. #include "PlanData.h"
  5. class FromWebAPI;
  6. class FromSQLite;
  7. namespace Ui {
  8. class ManagerPlan;
  9. }
  10. enum class Enum_Mode
  11. {
  12. Mode_Add = 0, /* 添加模式 */
  13. Mode_Modify = 1, /* 修改模式 */
  14. Mode_ModifyTemplate = 2, /* 修改模版模式,去掉了保存为模版的按钮 */
  15. };
  16. /**
  17. * @brief 即将要执行的计划时间点
  18. *
  19. */
  20. struct NearExecutionPlan
  21. {
  22. bool isExist = false; /* 是否存在 */
  23. enum_WeekDay weekDay = enum_WeekDay::WeekDay_Special; /* 周几 */
  24. QDateTime time; /* 时间 */
  25. };
  26. /**
  27. * @brief 管理计划页面
  28. *
  29. */
  30. class ManagerPlan : public QDialog
  31. {
  32. Q_OBJECT
  33. public:
  34. explicit ManagerPlan(Enum_Mode mode, QDialog *parent = nullptr);
  35. ~ManagerPlan();
  36. /* 获取是否点击了OK */
  37. bool isOK() const { return m_isOK; }
  38. /* 获取计划信息 */
  39. QMap<int, QList<PlanInfo>>& getPlanInfo() { return m_mapPlanInfo; }
  40. /* 设置频率信息 */
  41. void setFrequencyID(ChannelInfo& info);
  42. /* 设置计划列表,给修改模版使用 */
  43. void setPlanList(QList<OnePlanItemInfo>& listPlan);
  44. /* 设置FromWebAPI地址,复用主窗口的WebAPI */
  45. void setFromWebAPI(FromWebAPI* fromWebAPI);
  46. /* 设置FromSQLite地址,复用主窗口的SQLite */
  47. void setFromSQLite(FromSQLite* fromSQLite);
  48. signals:
  49. /* 发送调用回调函数的信号 */
  50. void signal_callBack(int actionID);
  51. public slots:
  52. /* 修改UI样式 */
  53. void do_setUIStyle();
  54. private:
  55. /* 设置显示模式,这个需要最先调用 */
  56. void setMode(Enum_Mode mode);
  57. /* 设置时间和日期选择Tab */
  58. void setTabWidget();
  59. /* 设置可选择的周几 */
  60. void setWeekDay();
  61. /* 设置可选频率 */
  62. void setSelectFrequency();
  63. /* 查找本地计划列表,这个频率不存在则添加 */
  64. QList<PlanInfo>& findPlanList(const int chnID);
  65. /* 查找全局计划列表,没有被修改过的计划列表 */
  66. void findGlobalPlanList(const int chnID, QList<PlanInfo>& list);
  67. /* 添加计划,同时添加ui的卡片计划和计划列表 */
  68. void addPlanItem(const int chnID, const PlanInfo& info);
  69. /* 修改容器中的计划 */
  70. void modifyPlanItem(const int chnID, const PlanInfo& nowInfo, const PlanInfo& newInfo);
  71. /* 判断开机和关机时间是否冲突 */
  72. inline bool checkOnAndOffTime(const PlanInfo& info);
  73. /* 比较两个时间点的大小 */
  74. inline bool timeIsGerater(const enum_WeekDay weekDay1, const QDateTime& time1,
  75. const enum_WeekDay weekDay2, const QDateTime& time2);
  76. /* 判断计划时间和列表中的时间是否冲突 */
  77. bool checkPlanTimeConflict(const int chnID, const PlanInfo& info);
  78. /* 判断计划时间和列表中的时间是否冲突,添加排除的计划,用于比较修改的计划 */
  79. bool checkPlanTimeConflict(const int chnID, const PlanInfo& newInfo, const PlanInfo& exInfo);
  80. /* 判断新添加的计划是否在即将要执行的计划附近 */
  81. bool checkNewPlanNear(const int chnID, const PlanInfo& newInfo);
  82. /* 判断修改的计划是否对即将要执行的计划有影响 */
  83. bool checkModifyPlanNear(const int chnID, const PlanInfo& oldInfo, const PlanInfo& newInfo);
  84. /* 判断这个时间点附近有没有即将要执行的计划 */
  85. bool findNearPlan(const int chnID, const QDateTime& nowTime);
  86. bool findNearPlan(const int chnID, const QDateTime& nowTime, enum_WeekDay& weekDay, QDateTime& time);
  87. /* 判断两个时间点是否在十分钟之内 */
  88. bool isNearTime(const QDateTime& nowTime, const enum_WeekDay weekDay, const QDateTime& time);
  89. /* 设置按钮显示或隐藏 */
  90. inline void setButtonVisible(bool isVisible);
  91. /* 保存模版 */
  92. void saveTemplateToEQM();
  93. private slots:
  94. /* 选择了一个频率 */
  95. void do_selectFrequency(int index);
  96. /* 点击了添加按钮 */
  97. void do_addPlanItem();
  98. /* 点击修改按钮 */
  99. void do_modifyPlanItem();
  100. /* 点击了删除按钮 */
  101. void do_deletePlanItem();
  102. /* 点击了保存模版按钮 */
  103. void do_saveTemplate();
  104. /* 点击了OK按钮 */
  105. void do_pBtn_ok();
  106. /* 选中了一项,回显到编辑页面 */
  107. void do_tableView_clicked(PlanInfo& info);
  108. protected:
  109. /* 鼠标点击事件 */
  110. void mousePressEvent(QMouseEvent *event) override;
  111. /* 鼠标移动事件 */
  112. void mouseMoveEvent(QMouseEvent *event) override;
  113. /* 鼠标释放事件 */
  114. void mouseReleaseEvent(QMouseEvent *event) override;
  115. /* 事件过滤器 */
  116. bool eventFilter(QObject *watched, QEvent *event) override;
  117. private:
  118. Ui::ManagerPlan *ui;
  119. QPoint m_lastPos; /* 鼠标点击的位置 */
  120. bool m_isOK = false; /* 是否点击了OK按钮 */
  121. ChannelInfo m_channelInfo; /* 频率信息 */
  122. Enum_Mode m_mode; /* 显示模式 */
  123. /* 存储计划信息,修改过的频率计划,存储的是这个频率完整的计划 */
  124. QMap<int, QList<PlanInfo>> m_mapPlanInfo;
  125. NearExecutionPlan m_nearExecPlan; /* 最近要执行的计划 */
  126. FromWebAPI* m_fromWebAPI = nullptr; /* 网络API接口,用于获取和保存数据 */
  127. FromSQLite* m_fromSQLite = nullptr; /* SQLite数据库操作类 */
  128. };
  129. #endif // MANAGERPLAN_H