#include "wpageattr.h" #include "ui_wpageattr.h" #include "wpagelist.h" #include "wpageitem.h" #include "wpageitemwidget.h" #include wPageAttr::wPageAttr(wPageItem *page, QWidget *parent) : QWidget(parent), ui(new Ui::wPageAttr), m_list(page->listWidget()) { setAttribute(Qt::WA_DeleteOnClose); ui->setupUi(this); setProperty("ssBackground", "dark"); connect(ui->wValidDate, SIGNAL(toggled(bool)), ui->wDateStart, SLOT(setEnabled(bool))); connect(ui->wValidDate, SIGNAL(toggled(bool)), ui->wDateEnd, SLOT(setEnabled(bool))); connect(ui->wValidDate, SIGNAL(toggled(bool)), ui->bnDateStart, SLOT(setEnabled(bool))); connect(ui->wValidDate, SIGNAL(toggled(bool)), ui->bnDateEnd, SLOT(setEnabled(bool))); connect(ui->bnDateStart, SIGNAL(sDateSelected(const QDate &)), ui->wDateStart, SLOT(setDate(const QDate &))); connect(ui->bnDateEnd, SIGNAL(sDateSelected(const QDate &)), ui->wDateEnd, SLOT(setDate(const QDate &))); connect(ui->bnAddPlan, SIGNAL(clicked(bool)), ui->wPlans, SLOT(onAddPlan())); connect(ui->bnClearPlan, SIGNAL(clicked(bool)), ui->wPlans, SLOT(clear())); QJsonDocument jRoot = page->jRoot(); ui->wPageName ->setText(jRoot["name"].toString()); ui->wPlayTimes->setValue(jRoot["repeat"].toInt()); bool bDateVaile=jRoot["validDate"]["isValid"].toBool(); ui->wValidDate->setChecked(bDateVaile); if(bDateVaile) { ui->wDateStart->setEnabled(true); ui->wDateEnd->setEnabled(true); ui->bnDateStart->setEnabled(true); ui->bnDateEnd->setEnabled(true); } else { ui->wDateStart->setEnabled(false); ui->wDateEnd->setEnabled(false); ui->bnDateStart->setEnabled(false); ui->bnDateEnd->setEnabled(false); } QString strStartDate=jRoot["validDate"]["start"].toString(); QString strEndDate=jRoot["validDate"]["end"].toString(); ui->wDateStart->setDate(QDate::fromString(strStartDate, "yyyy-MM-dd")); ui->wDateEnd ->setDate(QDate::fromString(strEndDate, "yyyy-MM-dd")); ui->wPlans ->onRestorePlan(jRoot["plans"].toArray()); wPageItemWidget *w = page->wPage(false); connect(ui->wPageName, SIGNAL(textEdited(const QString&)), this, SLOT(onNameChanged(const QString&))); connect(ui->wPlayTimes, SIGNAL(valueChanged(int)), this, SLOT(updateJson())); connect(ui->wValidDate, SIGNAL(toggled(bool)), this, SLOT(updateJson())); connect(ui->wDateStart, SIGNAL(dateChanged(const QDate&)), this, SLOT(onDateStartChanged(const QDate&))); connect(ui->wDateEnd, SIGNAL(dateChanged(const QDate&)), this, SLOT(onDateEndChanged(const QDate&))); connect(ui->wPlans, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(updateJson())); connect(ui->wPlayTimes, SIGNAL(valueChanged(int)), w, SLOT(onRepeatChanged(int))); connect(this, SIGNAL(sigAttrUpdated(const QJsonObject &)), page, SLOT(onAttrUpdated(const QJsonObject &))); } wPageAttr::~wPageAttr() { delete ui; } void wPageAttr::onNameChanged(const QString &name) { bool isDuplicate = isNameDuplicate(name); if(isDuplicate) { //ui->wPageName->setText(tr("New") + QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz")); ui->wPageName->setText(tr("New") + QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz")); } updateJson(); } void wPageAttr::onDateStartChanged(const QDate &date) { QDate date0 = date; QDate dateN = ui->wDateEnd->date(); if(!date0.isValid() || date0 > dateN) { ui->wDateStart->setDate(QDate(date)); X_UIMsgBoxOk *dlg=new X_UIMsgBoxOk(tr("The end time can not be earlier than the start time"),tr("The end time can not be earlier than the start time"),this,0); dlg->exec(); //QMessageBox::warning(this, "Title", "The end time can not be earlier than the start time"); } updateJson(); } void wPageAttr::onDateEndChanged(const QDate &date) { QDate date0 = ui->wDateStart->date(); QDate dateN = date; if(!dateN.isValid() || date0 > dateN) { X_UIMsgBoxOk *dlg=new X_UIMsgBoxOk(tr("The end time can not be earlier than the start time"),tr("The end time can not be earlier than the start time"),this,0); dlg->exec(); } updateJson(); } void wPageAttr::updateJson() { QJsonObject obj_root; QJsonObject obj_date; obj_date["isValid"] = QJsonValue(ui->wValidDate->isChecked()); obj_date["start"] = QJsonValue(ui->wDateStart->date().toString("yyyy-MM-dd")); obj_date["end"] = QJsonValue(ui->wDateEnd->date().toString("yyyy-MM-dd")); obj_root["name"] = QJsonValue(ui->wPageName->text()); obj_root["repeat"] = QJsonValue(ui->wPlayTimes->value()); obj_root["validDate"] = obj_date; obj_root["plans"] = ui->wPlans->plansJson(); emit sigAttrUpdated(obj_root); } bool wPageAttr::isNameDuplicate(const QString &name) { bool res = false; QListWidget *list = m_list; if(nullptr != list) { int n = list->count(); for(int i=0; i(list->item(i)); if(name == item->name()) { res = true; break; } } } else { res = true; } return res; }