ExecPlan.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #ifndef EXECPLAN_H
  2. #define EXECPLAN_H
  3. #include <QWidget>
  4. #include <QStackedWidget>
  5. #include <QPushButton>
  6. #include <QLabel>
  7. #include <QTime>
  8. #include <QList>
  9. #include <QDate>
  10. #include <QRadioButton>
  11. #include <QEventLoop>
  12. #include "spdlog/spdlog.h"
  13. #include "UI/ExecPlan/ExecPlanItem.h"
  14. class Widget;
  15. class AddNormalItem;
  16. class AddSpecialItem;
  17. class ScrollWidget;
  18. class TimeWidget;
  19. class CDate;
  20. class ExecPlan : public QWidget
  21. {
  22. Q_OBJECT
  23. friend AddNormalItem;
  24. friend AddSpecialItem;
  25. public:
  26. explicit ExecPlan(Widget* mainUI = nullptr,QWidget* mask = nullptr,QWidget* parent = nullptr);
  27. ~ExecPlan();
  28. bool judgeTimeRepetition(QList<ExecPlanItem*>& list,const QString& devName,const QTime& time); /* 判断时间是否重复 */
  29. bool judgeTimeRepetition(QList<ExecPlanItem*>& list,ExecPlanItem* item); /* 判断时间是否重复 */
  30. bool judgeTimeRepetition(QList<ExecPlanItem*>& list,ExecPlanItem* item,const QTime& time); /* 判断时间是否重复 */
  31. bool judgeDateTimeRepetition(QList<ExecPlanItem*>& list,const QString& devName,const QDate& date,const QTime& time); /* 判断日期时间是否重复 */
  32. bool judgeDateTimeRepetition(QList<ExecPlanItem*>& list,ExecPlanItem* item,const QTime& time); /* 判断日期时间是否重复 */
  33. bool judgeDateTimeRepetition(QList<ExecPlanItem*>& list,ExecPlanItem* item,const QDate& date); /* 判断日期时间是否重复 */
  34. bool judgeDateTimeRepetition(QList<ExecPlanItem*>& list,ExecPlanItem* item); /* 判断日期时间是否重复 */
  35. char getDefaultPlan(); /* 获取默认计划 */
  36. char getExecMode(); /* 获取执行模式 */
  37. QVector<QList<ExecPlanItem*>*>& vecItem(); /* 获取计划容器 */
  38. QStackedWidget* stackWidget(); /* 获取stackWidget的指针 */
  39. QVector<QLayout*>& layout(); /* 获取显示项的layout */
  40. void SortAndRefreshUI(); /* 根据时间排序,并刷新UI */
  41. void SortAndRefreshUI(int index); /* 根据时间排序,并刷新UI */
  42. void setDefaultPlan(int num); /* 设置默认计划 */
  43. void setTimeOrDay(int num); /* 按时刻还是按天 */
  44. bool checkDataBaseTableName(const QString& tableName);/* 检查数据库中有没有这个表格 */
  45. void clearOnePage(int num); /* 删除一页 */
  46. bool itemIsEmpty(); /* 当前页的项是否为空 */
  47. signals:
  48. void signal_refreshUIAgain();
  49. public slots:
  50. void do_selectDayOfWeeks(); /* 选择周几 */
  51. void do_devChanged(const QString& previous,const QString& now); /* 修改了一个设备 */
  52. private slots:
  53. void do_pBtnAddExecPlan(); /* 点击添加时段按钮 */
  54. void do_addNormalOneItem(QString dev,QString action,QTime time);/* 新增一条正常日期项 */
  55. void do_addSpecialOneItem(QString dev,QString action,QDate date,QTime time);/* 新增一条特殊日期项 */
  56. void do_download(); /* 下载按钮 */
  57. void do_clearExecPlan(); /* 清空计划 */
  58. void do_saveTemplate(); /* 保存模版 */
  59. void do_importTemplate(); /* 导入模板按钮 */
  60. void do_saveTemplateToSQL(QString name); /* 将数据保存到数据库中 */
  61. void do_importTemplateFromSQL(QString name); /* 导入模板 */
  62. void do_deleteTemplateFromSQL(QString name); /* 删除模版 */
  63. void do_deleteOneItem(int num); /* 删除一个项 */
  64. void do_editExecTime(QTime t); /* 修改执行时间 */
  65. void do_editDate(QDate d); /* 修改日期 */
  66. void do_editDev(); /* 修改了设备 */
  67. void do_cfgDevChanged(); /* 配置好的设备改变了 */
  68. void do_devDelete(const QString& devName); /* 删除了一个配置好的设备 */
  69. void do_pBtnGetEQMData(); /* 从EQM获取计划数据 */
  70. protected:
  71. void paintEvent(QPaintEvent *event);
  72. bool eventFilter(QObject *watched, QEvent *event);
  73. private:
  74. void uiSupplement(); /* 补充UI */
  75. void createDataBase(); /* 连接SQLite数据库 */
  76. /* 本地配置转换成发送的结构体 */
  77. void HostToEQMJson(QVector<QList<ExecPlanItem*>*>& cfgVec, QList<ExecPlanItemInfo>& listInfo);
  78. /* 添加从EQM获取到的数据 */
  79. void EQMToHost(QList<ExecPlanItemInfo>& listInfo);
  80. private:
  81. /* UI类 */
  82. std::shared_ptr<spdlog::logger> m_logger = nullptr;
  83. Widget* m_mainUI = nullptr; /* 父窗口指针 */
  84. QWidget* m_mask = nullptr; /* 遮罩页面 */
  85. QWidget* m_leftColumn = nullptr; /* 左边栏 */
  86. QStackedWidget* m_stack = nullptr; /* 内容容器 */
  87. QPushButton* m_pBtnAddItem = nullptr; /* 添加时段按钮 */
  88. QPushButton* m_pBtnClearExecPlan = nullptr; /* 清空时段按钮 */
  89. QPushButton* m_pBtnImportTemplate = nullptr; /* 导入模版 */
  90. QPushButton* m_pBtnSaveTemplate = nullptr; /* 保存为模版 */
  91. QPushButton* m_pBtnGetEQMData = nullptr; /* 从EQM获取计划数据 */
  92. QLabel* m_labelButtomLine = nullptr; /* 底部分割线 */
  93. QPushButton* m_pBtnDownload = nullptr; /* 下载按钮 */
  94. QPushButton* m_pBtnDefault = nullptr; /* 默认计划 */
  95. QRadioButton* m_rBtnDoTime = nullptr; /* 按时刻 */
  96. QRadioButton* m_rBtnDoDay = nullptr; /* 按天 */
  97. QLabel* m_TipText = nullptr; /* 提示文本 */
  98. QLabel* m_labelTip = nullptr; /* 提示的感叹号小图标 */
  99. /* 容器 */
  100. QVector<QPushButton*> m_vecWeeks; /* 保存一周8天的按钮 */
  101. QVector<QList<ExecPlanItem*>*> m_vecItem; /* 存储一周8天的列表指针,每个列表存储着这一天的时间段 */
  102. QVector<QLayout*> m_vecLayout; /* 这个数组里面的widget是真正显示项的Layout,这个Layout会自动出现滚动条 */
  103. QSqlDatabase m_DB;
  104. QVector<ScrollWidget*> m_vecScrollArea; /* 存储QScrollArea */
  105. /* 时间和日历选择相关 */
  106. QEventLoop m_loop; /* 阻塞时间选择器 */
  107. TimeWidget* m_timeEdit = nullptr; /* 时间选择 */
  108. CDate* m_dateEdit = nullptr; /* 日期选择 */
  109. // bool m_first; /* 记录是不是第一次进入这个页面 */
  110. };
  111. #endif /* EXECPLAN_H */