#ifndef MANAGERPLAN_H #define MANAGERPLAN_H #include #include "PlanData.h" namespace Ui { class ManagerPlan; } enum class Enum_Mode { Mode_Add = 0, /* 添加模式 */ Mode_Modify = 1, /* 修改模式 */ Mode_ModifyTemplate = 2, /* 修改模版模式,去掉了保存为模版的按钮 */ }; /** * @brief 管理计划页面 * */ class ManagerPlan : public QDialog { Q_OBJECT public: explicit ManagerPlan(Enum_Mode mode, QDialog *parent = nullptr); ~ManagerPlan(); /* 获取是否点击了OK */ bool isOK() const { return m_isOK; } /* 获取计划信息 */ QMap>& getPlanInfo() { return m_mapPlanInfo; } /* 设置频率信息 */ void setFrequencyID(ChannelInfo& info); /* 设置计划列表,给修改模版使用 */ void setPlanList(QList& listPlan); signals: /* 发送保存模版信号 */ void signal_saveTemplate(ChannelInfo info); public slots: /* 修改UI样式 */ void do_setUIStyle(); private: /* 设置显示模式,这个需要最先调用 */ void setMode(Enum_Mode mode); /* 设置时间和日期选择Tab */ void setTabWidget(); /* 设置可选择的周几 */ void setWeekDay(); /* 设置可选频率 */ void setSelectFrequency(); /* 查找本地计划列表,这个频率不存在则添加 */ QList& findPlanList(const int chnID); /* 添加计划,同时添加ui的卡片计划和计划列表 */ void addPlanItem(const int chnID, const PlanInfo& info); /* 修改容器中的计划 */ void modifyPlanItem(const int chnID, const PlanInfo& nowInfo, const PlanInfo& newInfo); /* 判断开机和关机时间是否冲突 */ inline bool checkOnAndOffTime(const PlanInfo& info); /* 比较两个时间点的大小 */ inline bool timeIsGerater(const enum_WeekDay weekDay1, const QDateTime& time1, const enum_WeekDay weekDay2, const QDateTime& time2); /* 判断计划时间和列表中的时间是否冲突 */ bool checkPlanTimeConflict(const int chnID, const PlanInfo& info); /* 判断计划时间和列表中的时间是否冲突,添加排除的计划,用于比较修改的计划 */ bool checkPlanTimeConflict(const int chnID, const PlanInfo& newInfo, const PlanInfo& exInfo); /* 设置按钮显示或隐藏 */ inline void setButtonVisible(bool isVisible); private slots: /* 选择了一个频率 */ void do_selectFrequency(int index); /* 点击了添加按钮 */ void do_addPlanItem(); /* 点击修改按钮 */ void do_modifyPlanItem(); /* 点击了删除按钮 */ void do_deletePlanItem(); /* 点击了保存模版按钮 */ void do_saveTemplate(); /* 点击了OK按钮 */ void do_pBtn_ok(); /* 选中了一项,回显到编辑页面 */ void do_tableView_clicked(PlanInfo& info); protected: /* 鼠标点击事件 */ void mousePressEvent(QMouseEvent *event) override; /* 鼠标移动事件 */ void mouseMoveEvent(QMouseEvent *event) override; /* 鼠标释放事件 */ void mouseReleaseEvent(QMouseEvent *event) override; /* 事件过滤器 */ bool eventFilter(QObject *watched, QEvent *event) override; private: Ui::ManagerPlan *ui; QPoint m_lastPos; /* 鼠标点击的位置 */ bool m_isOK = false; /* 是否点击了OK按钮 */ ChannelInfo m_channelInfo; /* 频率信息 */ Enum_Mode m_mode; /* 显示模式 */ /* 存储计划信息,修改过的频率计划,存储的是这个频率完整的计划 */ QMap> m_mapPlanInfo; }; #endif // MANAGERPLAN_H