#ifndef TRANSMITTERSWITCH_H #define TRANSMITTERSWITCH_H #include #include #include #include #include "flowlayout.h" #include "TransmitterSwitchInfo.h" class WidgetItems; class FromWebAPI; class FlowLayout; class FromSQLite; struct InitData; struct OneTemplateInfo; /* 回调函数 */ using trackCallBack = void(*)(int actionID, QString strMemo); namespace Ui { class TransmitterSwitch; } class TransmitterSwitch : public QWidget { Q_OBJECT public: explicit TransmitterSwitch(QWidget *parent = nullptr); ~TransmitterSwitch(); /* 设置样式表路径,给弹窗页面使用,不需要包含最后的white,black */ void setQSSPath(const QString &qssPath); /* 设置WebAPI信息 */ void setWebAPIInfo(const QString &url, const QString &serverID, const QString &serverKey); void setWebAPIInfo(const InitData& data); /* 获取EQM数据库中的计划 */ void getExecPlanFromEQM(); /* 将计划保存到EQM数据库 */ void saveExecPlanToEQM(); /* 亮/暗换肤,0是亮色,1是暗色 */ void setUIStyle(int style); /* 设置回调函数 */ void setTrackCallBack(trackCallBack cb); /* 设置WebAPI路径,不获取数据,不创建卡片 */ void setWebAPIInfoOnly(const InitData& data); /* 设置频率信息,给离线版使用 */ void setFrequencyInfo(const ExecPlanInfo& info, bool useOnlineDB = true); /* 设置一页的卡片数量 */ void setOnePageCardNum(int horNum, int verNum); /* 清空内容,用于ESM8C上位机关闭使用EQM数据库的时候调用 */ void clearAll(); /* 获取一个频率的计划数据,只应用于本地数据库,下载到下位机用 */ void getOnePlanData(QList* listPlan, ExecPlanConfig* config, int channelID = 0); /* 设置计划信息 */ void setOnePlanData(QList& listPlan, ExecPlanConfig& config, int channelID = 0); private slots: /* 点击了添加计划按钮 */ void do_pBtnAddExecPlan(); /* 点击了修改按钮 */ void do_pBtnModifyExecPlan(); /* 点击了刷新按钮 */ void do_pBtnRefresh(); /* 点击了“是否开启计划”按钮 */ void do_pBtnIsOpenPlan(); /* 点击了“执行模式”按钮 */ void do_pBtnExecMode(); /* 点击了清空计划按钮 */ void do_pBtnClearPlan(); /* 点击了复制到其他频率按钮 */ void do_pBtnCopyToOther(); /* 导入模板 */ void do_importData(); /* 点击了保存模版按钮 */ void do_exportData(); /* 将模版写入数据库 */ void do_saveTemplateToDB(ChannelInfo info); /* 删除一个模版 */ void do_deleteTemplate(OneTemplateInfo info); /* 点击了管理模板按钮 */ void do_pBtnManageTemplate(); /* 保存计划到EQM数据库 */ void do_pBtn_savePlan(); /* 从EQM数据库获取计划 */ void do_pBtn_getPlan(); /* 切换亮色/暗色外观 */ void do_setUIStyle(); /* 选择了一个频率按钮,取消其他的选择 */ void do_selectFrequencyBtn(); private: /* 添加一个频率,包括左侧按钮和右侧卡片 */ void createOneCard(const ChannelInfo& chnInfo); /* 删除一个频率 */ void deleteOneCard(int channelID); /* 创建所有频率卡片 */ void createAllCard(); /* 显示某个卡片,隐藏其他卡片 */ void showOneCard(QPushButton *btn); /* 计算并设置设置卡片大小 */ void setCardSize(); /* 计算并设置提示文本的位置 */ void setTipTextPos(); /* 设置单频率模式 */ void setOneFrequencyMode(); /* 设置使用在线或者使用离线数据库,主要是保存模版 */ void setUseOnlineDB(bool useOnlineDB); /* 从EQM数据库导入模版 */ void importTemplateFromEQM(); /* 从SQLite导入模版 */ void importTemplateFromSQLite(); /* 将模版数据保存到EQM数据库 */ void saveTemplateToEQM(ChannelInfo info); /* 保存计划到SQLite数据库 */ void saveTemplateToSQLite(ChannelInfo info); /* 从EQM数据库中删除一个模版 */ void deleteTemplateFromEQM(OneTemplateInfo info); /* 从SQLite数据库中删除一个模版 */ void deleteTemplateFromSQLite(OneTemplateInfo info); /* 管理EQM数据库的模版数据 */ void manageTemplateFromEQM(); /* 管理SQLite数据库的模版数据 */ void manageTemplateFromSQLite(); protected: /* 事件过滤器 */ bool eventFilter(QObject *watched, QEvent *event) override; /* 窗口缩放事件 */ void resizeEvent(QResizeEvent *event) override; /* 显示事件 */ void showEvent(QShowEvent *event) override; private: Ui::TransmitterSwitch *ui; QLabel* m_tipText = nullptr; /* 提示文本 */ QString m_styleSheet; /* 样式表 */ QList m_listFrequencyBtn; /* 频率按钮列表 */ FromWebAPI* m_fromWebAPI = nullptr; /* WebAPI操作类 */ FlowLayout* m_flowlayout = nullptr; /* 流式布局 */ FromSQLite* m_fromSQLite = nullptr; /* SQLite操作类 */ trackCallBack m_trackCB = nullptr; /* 回调函数 */ const std::string m_userData_Btn = "custom_BtnData"; /* 按钮的用户数据 */ const int m_cardHorSpacing = 12; /* 卡片间的横向间距 */ const int m_cardVerSpacing = 12; /* 卡片间的纵向间距 */ int m_cardHorNumber = 4; /* 卡片的横向数量 */ int m_cardVerNumber = 2; /* 卡片的纵向数量 */ }; #endif // TRANSMITTERSWITCH_H