addperioddialog.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "addperioddialog.h"
  2. #include "ui_addperiodwidget.h"
  3. #include "timewidget.h"
  4. #include "calendardtedit.h"
  5. #include "customcombobox.h"
  6. #include "tipwidget.h"
  7. #include "checkperiodfunc.h"
  8. AddPeriodDialog::AddPeriodDialog(ePeriodType type, QWidget *parent) :
  9. DialogBase(true, parent),
  10. ui(new Ui::AddPeriodWidget), m_type(type)
  11. {
  12. QWidget* contentWidget = new QWidget(this);
  13. ui->setupUi(contentWidget);
  14. /* 设置内容 */
  15. this->setContentWidget(contentWidget);
  16. /* 设置标题 */
  17. setTitle("添加检测周期");
  18. if(type == PERIOD_WEEK)
  19. {
  20. ui->widgetDate->hide();
  21. } else
  22. {
  23. ui->widgetWeek->hide();
  24. }
  25. /* 设置下拉框阴影 */
  26. ui->comboBox->setViewShadowEffect();
  27. /* 设置时间框默认时间 */
  28. ui->timeEdit_start->setTime(QTime(0, 0, 0));
  29. ui->timeEdit_end->setTime(QTime(0, 0, 0));
  30. ui->timeEdit_start->SetMainWindow(this);
  31. ui->timeEdit_end->SetMainWindow(this);
  32. /* 设置日期格式,设置默认日期 */
  33. ui->dateEdit->setDisplayFormat("yyyy-MM-dd");
  34. ui->dateEdit->setDate(QDate::currentDate());
  35. /* 设置图标生效 */
  36. ui->dateEdit->setCalendarPopup(true);
  37. /* 禁用comboBox滚动修改 */
  38. ui->comboBox->setWheelDisabled(true);
  39. /* 给下拉框设置可选项 */
  40. for(auto it = MapWeekTypeToString.begin(); it != MapWeekTypeToString.end(); ++it)
  41. {
  42. if(it.key() == eWeekType::Week_Special)
  43. {
  44. continue; // 跳过特殊日
  45. }
  46. ui->comboBox->addItem(it.value(), QVariant::fromValue(it.key()));
  47. }
  48. /* 设置QSS */
  49. setQSS();
  50. }
  51. AddPeriodDialog::~AddPeriodDialog()
  52. {
  53. delete ui;
  54. }
  55. /* 设置QSS */
  56. void AddPeriodDialog::setQSS()
  57. {
  58. QString qssPath = UIStyle.getQSSPath() + "/addperiodwidget.qss";
  59. QFile file(qssPath);
  60. if(file.open(QFile::ReadOnly))
  61. {
  62. this->setStyleSheet(file.readAll());
  63. file.close();
  64. } else
  65. {
  66. SPDLOG_LOGGER_WARN(m_logger, "打开QSS文件失败: {}", qssPath.toStdString());
  67. }
  68. }
  69. /* 更新计划 */
  70. void AddPeriodDialog::updatePlan()
  71. {
  72. m_plan.weekType = ui->comboBox->currentData().value<eWeekType>();
  73. m_plan.date = ui->dateEdit->date();
  74. m_plan.timeStart = ui->timeEdit_start->getTime();
  75. m_plan.timeEnd = ui->timeEdit_end->getTime();
  76. }
  77. /* 重载点击OK按钮之后的操作 */
  78. bool AddPeriodDialog::isOKClicked()
  79. {
  80. /* 更新计划 */
  81. updatePlan();
  82. /* 先检查时间是否相等,前后冲突 */
  83. if(m_plan.timeStart > m_plan.timeEnd)
  84. {
  85. TipWidget::display(TipWidget::OPERATOR_WARN, "结束时间不能先于开始时间!", this);
  86. return false;
  87. }
  88. if(m_type == ePeriodType::PERIOD_WEEK)
  89. {
  90. if(isWeekPlanDuplicate(m_planList, m_plan))
  91. {
  92. TipWidget::display(TipWidget::OPERATOR_WARN, "计划时间不允许重叠!", this);
  93. return false;
  94. }
  95. } else
  96. {
  97. if(isDatePlanDuplicate(m_planList, m_plan))
  98. {
  99. TipWidget::display(TipWidget::OPERATOR_WARN, "计划时间不允许重叠!", this);
  100. return false;
  101. }
  102. }
  103. return true;
  104. }