transmitterswitch.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #ifndef TRANSMITTERSWITCH_H
  2. #define TRANSMITTERSWITCH_H
  3. #include <QWidget>
  4. #include <QVector>
  5. #include <QPushButton>
  6. #include <QLabel>
  7. #include "flowlayout.h"
  8. #include "TransmitterSwitchInfo.h"
  9. #include "FromMQTT.h"
  10. class WidgetItems;
  11. class FromWebAPI;
  12. class FlowLayout;
  13. class FromSQLite;
  14. struct InitData;
  15. struct OneTemplateInfo;
  16. /* 回调函数 */
  17. using trackCallBack = void(*)(int actionID, QString strMemo);
  18. namespace Ui {
  19. class TransmitterSwitch;
  20. }
  21. class TransmitterSwitch : public QWidget
  22. {
  23. Q_OBJECT
  24. public:
  25. explicit TransmitterSwitch(QWidget *parent = nullptr);
  26. ~TransmitterSwitch();
  27. /* 初始化页面 */
  28. void initTS(const InitData& data);
  29. /* 修改用户权限 */
  30. void setUserPermission(int userPermission);
  31. /* 设置样式表路径,给弹窗页面使用,不需要包含最后的white,black */
  32. void setQSSPath(const QString &qssPath);
  33. /* 设置WebAPI信息 */
  34. void setWebAPIInfo(const QString &url, const QString &serverID, const QString &serverKey);
  35. /* 获取EQM数据库中的计划 */
  36. void getExecPlanFromEQM();
  37. /* 将计划保存到EQM数据库 */
  38. void saveExecPlanToEQM();
  39. /* 亮/暗换肤,0是亮色,1是暗色 */
  40. void setUIStyle(int style);
  41. /* 设置回调函数 */
  42. void setTrackCallBack(trackCallBack cb);
  43. /* 设置WebAPI路径,不获取数据,不创建卡片 */
  44. void setWebAPIInfoOnly(const InitData& data);
  45. /* 设置频率信息,给离线版使用 */
  46. void setFrequencyInfo(const ExecPlanInfo& info, bool useOnlineDB = true);
  47. /* 设置一页的卡片数量 */
  48. void setOnePageCardNum(int horNum, int verNum);
  49. /* 清空内容,用于ESM8C上位机关闭使用EQM数据库的时候调用 */
  50. void clearAll();
  51. /* 获取一个频率的计划数据,只应用于本地数据库,下载到下位机用 */
  52. void getOnePlanData(QList<OnePlanItemInfo>* listPlan, ExecPlanConfig* config, int channelID = 0);
  53. /* 设置计划信息 */
  54. void setOnePlanData(QList<OnePlanItemInfo>& listPlan, ExecPlanConfig& config, int channelID = 0);
  55. private slots:
  56. /* 点击了添加计划按钮 */
  57. void do_pBtnAddExecPlan();
  58. /* 点击了修改按钮 */
  59. void do_pBtnModifyExecPlan();
  60. /* 点击了刷新按钮 */
  61. void do_pBtnRefresh();
  62. /* 点击了“是否开启计划”按钮 */
  63. void do_pBtnIsOpenPlan();
  64. /* 点击了“执行模式”按钮 */
  65. void do_pBtnExecMode();
  66. /* 点击了清空计划按钮 */
  67. void do_pBtnClearPlan();
  68. /* 点击了复制到其他频率按钮 */
  69. void do_pBtnCopyToOther();
  70. /* 导入模板 */
  71. void do_importData();
  72. /* 点击了保存模版按钮 */
  73. void do_exportData();
  74. /* 将模版写入数据库 */
  75. void do_saveTemplateToDB(ChannelInfo info);
  76. /* 删除一个模版 */
  77. void do_deleteTemplate(OneTemplateInfo info);
  78. /* 点击了管理模板按钮 */
  79. void do_pBtnManageTemplate();
  80. /* 保存计划到EQM数据库 */
  81. void do_pBtn_savePlan();
  82. /* 从EQM数据库获取计划 */
  83. void do_pBtn_getPlan();
  84. /* 切换亮色/暗色外观 */
  85. void do_setUIStyle();
  86. /* 选择了一个频率按钮,取消其他的选择 */
  87. void do_selectFrequencyBtn();
  88. /* 调用了回调函数 */
  89. void do_callBack(int actionID);
  90. private:
  91. /* 添加一个频率,包括左侧按钮和右侧卡片 */
  92. void createOneCard(const ChannelInfo& chnInfo);
  93. /* 删除一个频率 */
  94. void deleteOneCard(int channelID);
  95. /* 创建所有频率卡片 */
  96. void createAllCard();
  97. /* 显示某个卡片,隐藏其他卡片 */
  98. void showOneCard(QPushButton *btn);
  99. /* 计算并设置设置卡片大小 */
  100. void setCardSize();
  101. /* 计算并设置提示文本的位置 */
  102. void setTipTextPos();
  103. /* 设置单频率模式 */
  104. void setOneFrequencyMode();
  105. /* 设置使用在线或者使用离线数据库,主要是保存模版 */
  106. void setUseOnlineDB(bool useOnlineDB);
  107. /* 从EQM数据库导入模版 */
  108. void importTemplateFromEQM();
  109. /* 从SQLite导入模版 */
  110. void importTemplateFromSQLite();
  111. /* 将模版数据保存到EQM数据库 */
  112. void saveTemplateToEQM(ChannelInfo info);
  113. /* 保存计划到SQLite数据库 */
  114. void saveTemplateToSQLite(ChannelInfo info);
  115. /* 从EQM数据库中删除一个模版 */
  116. void deleteTemplateFromEQM(OneTemplateInfo info);
  117. /* 从SQLite数据库中删除一个模版 */
  118. void deleteTemplateFromSQLite(OneTemplateInfo info);
  119. /* 管理EQM数据库的模版数据 */
  120. void manageTemplateFromEQM();
  121. /* 管理SQLite数据库的模版数据 */
  122. void manageTemplateFromSQLite();
  123. /* 判断当前频率是否在倒计时 */
  124. bool isFrequencyInCountdown(int channelID);
  125. /* 判断两个时间点是否在十分钟之内 */
  126. bool isInCountdownTime(const QDateTime& nowTime, const enum_WeekDay weekDay, const QDateTime& time);
  127. protected:
  128. /* 事件过滤器 */
  129. bool eventFilter(QObject *watched, QEvent *event) override;
  130. /* 窗口缩放事件 */
  131. void resizeEvent(QResizeEvent *event) override;
  132. /* 显示事件 */
  133. void showEvent(QShowEvent *event) override;
  134. private:
  135. Ui::TransmitterSwitch *ui;
  136. QLabel* m_tipText = nullptr; /* 提示文本 */
  137. QString m_styleSheet; /* 样式表 */
  138. QList<QPushButton*> m_listFrequencyBtn; /* 频率按钮列表 */
  139. FromWebAPI* m_fromWebAPI = nullptr; /* WebAPI操作类 */
  140. FlowLayout* m_flowlayout = nullptr; /* 流式布局 */
  141. FromSQLite* m_fromSQLite = nullptr; /* SQLite操作类 */
  142. trackCallBack m_trackCB = nullptr; /* 回调函数 */
  143. const std::string m_userData_Btn = "custom_BtnData"; /* 按钮的用户数据 */
  144. const int m_cardHorSpacing = 12; /* 卡片间的横向间距 */
  145. const int m_cardVerSpacing = 12; /* 卡片间的纵向间距 */
  146. int m_cardHorNumber = 4; /* 卡片的横向数量 */
  147. int m_cardVerNumber = 2; /* 卡片的纵向数量 */
  148. /* ------------------------------- MQTT相关数据 ------------------------------- */
  149. FromMQTT m_fromMQTT; /* MQTT */
  150. };
  151. #endif // TRANSMITTERSWITCH_H