#ifndef EXECPLAN_H #define EXECPLAN_H #include #include #include #include #include #include #include #include #include #include "spdlog/spdlog.h" #include "UI/ExecPlan/ExecPlanItem.h" class Widget; class AddNormalItem; class AddSpecialItem; class ScrollWidget; class TimeWidget; class CDate; class ExecPlan : public QWidget { Q_OBJECT friend AddNormalItem; friend AddSpecialItem; public: explicit ExecPlan(Widget* mainUI = nullptr,QWidget* mask = nullptr,QWidget* parent = nullptr); ~ExecPlan(); bool judgeTimeRepetition(QList& list,const QString& devName,const QTime& time); /* 判断时间是否重复 */ bool judgeTimeRepetition(QList& list,ExecPlanItem* item); /* 判断时间是否重复 */ bool judgeTimeRepetition(QList& list,ExecPlanItem* item,const QTime& time); /* 判断时间是否重复 */ bool judgeDateTimeRepetition(QList& list,const QString& devName,const QDate& date,const QTime& time); /* 判断日期时间是否重复 */ bool judgeDateTimeRepetition(QList& list,ExecPlanItem* item,const QTime& time); /* 判断日期时间是否重复 */ bool judgeDateTimeRepetition(QList& list,ExecPlanItem* item,const QDate& date); /* 判断日期时间是否重复 */ bool judgeDateTimeRepetition(QList& list,ExecPlanItem* item); /* 判断日期时间是否重复 */ char getDefaultPlan(); /* 获取默认计划 */ char getExecMode(); /* 获取执行模式 */ QVector*>& vecItem(); /* 获取计划容器 */ QStackedWidget* stackWidget(); /* 获取stackWidget的指针 */ QVector& layout(); /* 获取显示项的layout */ void SortAndRefreshUI(); /* 根据时间排序,并刷新UI */ void SortAndRefreshUI(int index); /* 根据时间排序,并刷新UI */ void setDefaultPlan(int num); /* 设置默认计划 */ void setTimeOrDay(int num); /* 按时刻还是按天 */ bool checkDataBaseTableName(const QString& tableName);/* 检查数据库中有没有这个表格 */ void clearOnePage(int num); /* 删除一页 */ bool itemIsEmpty(); /* 当前页的项是否为空 */ signals: void signal_refreshUIAgain(); public slots: void do_selectDayOfWeeks(); /* 选择周几 */ void do_devChanged(const QString& previous,const QString& now); /* 修改了一个设备 */ private slots: void do_pBtnAddExecPlan(); /* 点击添加时段按钮 */ void do_addNormalOneItem(QString dev,QString action,QTime time);/* 新增一条正常日期项 */ void do_addSpecialOneItem(QString dev,QString action,QDate date,QTime time);/* 新增一条特殊日期项 */ void do_download(); /* 下载按钮 */ void do_clearExecPlan(); /* 清空计划 */ void do_saveTemplate(); /* 保存模版 */ void do_importTemplate(); /* 导入模板按钮 */ void do_saveTemplateToSQL(QString name); /* 将数据保存到数据库中 */ void do_importTemplateFromSQL(QString name); /* 导入模板 */ void do_deleteTemplateFromSQL(QString name); /* 删除模版 */ void do_deleteOneItem(int num); /* 删除一个项 */ void do_editExecTime(QTime t); /* 修改执行时间 */ void do_editDate(QDate d); /* 修改日期 */ void do_editDev(); /* 修改了设备 */ void do_cfgDevChanged(); /* 配置好的设备改变了 */ void do_devDelete(const QString& devName); /* 删除了一个配置好的设备 */ void do_pBtnGetEQMData(); /* 从EQM获取计划数据 */ protected: void paintEvent(QPaintEvent *event); bool eventFilter(QObject *watched, QEvent *event); private: void uiSupplement(); /* 补充UI */ void createDataBase(); /* 连接SQLite数据库 */ /* 本地配置转换成发送的结构体 */ void HostToEQMJson(QVector*>& cfgVec, QList& listInfo); /* 添加从EQM获取到的数据 */ void EQMToHost(QList& listInfo); private: /* UI类 */ std::shared_ptr m_logger = nullptr; Widget* m_mainUI = nullptr; /* 父窗口指针 */ QWidget* m_mask = nullptr; /* 遮罩页面 */ QWidget* m_leftColumn = nullptr; /* 左边栏 */ QStackedWidget* m_stack = nullptr; /* 内容容器 */ QPushButton* m_pBtnAddItem = nullptr; /* 添加时段按钮 */ QPushButton* m_pBtnClearExecPlan = nullptr; /* 清空时段按钮 */ QPushButton* m_pBtnImportTemplate = nullptr; /* 导入模版 */ QPushButton* m_pBtnSaveTemplate = nullptr; /* 保存为模版 */ QPushButton* m_pBtnGetEQMData = nullptr; /* 从EQM获取计划数据 */ QLabel* m_labelButtomLine = nullptr; /* 底部分割线 */ QPushButton* m_pBtnDownload = nullptr; /* 下载按钮 */ QPushButton* m_pBtnDefault = nullptr; /* 默认计划 */ QRadioButton* m_rBtnDoTime = nullptr; /* 按时刻 */ QRadioButton* m_rBtnDoDay = nullptr; /* 按天 */ QLabel* m_TipText = nullptr; /* 提示文本 */ QLabel* m_labelTip = nullptr; /* 提示的感叹号小图标 */ /* 容器 */ QVector m_vecWeeks; /* 保存一周8天的按钮 */ QVector*> m_vecItem; /* 存储一周8天的列表指针,每个列表存储着这一天的时间段 */ QVector m_vecLayout; /* 这个数组里面的widget是真正显示项的Layout,这个Layout会自动出现滚动条 */ QSqlDatabase m_DB; QVector m_vecScrollArea; /* 存储QScrollArea */ /* 时间和日历选择相关 */ QEventLoop m_loop; /* 阻塞时间选择器 */ TimeWidget* m_timeEdit = nullptr; /* 时间选择 */ CDate* m_dateEdit = nullptr; /* 日期选择 */ // bool m_first; /* 记录是不是第一次进入这个页面 */ }; #endif /* EXECPLAN_H */