|
|
- // SPDX-License-Identifier: GPL-3.0-or-later
- /*
- * Qt mutizone MQTT thermostat
- *
- * Copyright (C) 2020 Richard Genoud
- *
- */
-
- #include <QDialogButtonBox>
- #include <QSpinBox>
- #include <QPushButton>
- #include <QVBoxLayout>
- #include <QHBoxLayout>
- #include <QGridLayout>
- #include <QLocale>
- #include <QLabel>
- #include <QtMath>
- #include <QDateTime>
- #include <QTime>
-
- #include "settings.h"
- #include "edit_dlg.h"
-
- #define SPIN_ARROW_W 75
- #define SPIN_ARROW_H 50
- #define SPIN_FONT_SZ 20
-
- EditDlg::EditDlg(int idx, QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f)
- {
- Settings *s = Settings::getInstance();
- const struct Room r = s->getRoom(idx);
- const struct Program *p = NULL;
- QString sheet;
- QString text;
-
- QLabel *room_name = new QLabel(QString(tr("%1 default target:").arg(r.name)));
-
- set_font(room_name);
-
- m_idx = idx;
- m_progs = r.progs;
- m_default_temperature.setDecimals(1);
- m_default_temperature.setValue(r.default_temperature);
- m_default_temperature.setSingleStep(0.1);
- m_default_temperature.setSuffix(" °C");
-
- set_font(&m_default_temperature);
-
- /*
- * TODO: setting size in pixels sucks
- * We should set size in mm or ratio of the window size
- */
- sheet = QString("QDoubleSpinBox { height: %1px; font-size: %4px }"
- "QDoubleSpinBox::up-button { width: %2px; height: %3px }"
- "QDoubleSpinBox::down-button { width: %2px; height: %3px }")
- .arg(2*SPIN_ARROW_H)
- .arg(SPIN_ARROW_W)
- .arg(SPIN_ARROW_H)
- .arg(SPIN_FONT_SZ);
- m_default_temperature.setStyleSheet(sheet);
-
- QHBoxLayout *upperLayout = new QHBoxLayout;
- upperLayout->addWidget(room_name);
- upperLayout->addWidget(&m_default_temperature);
-
- QPushButton *ok_btn = new QPushButton(tr("Ok"), this);
- QPushButton *cancel_btn = new QPushButton(tr("Cancel"), this);
-
-
- QSizePolicy *szPolicy = new QSizePolicy(QSizePolicy::Minimum,
- QSizePolicy::MinimumExpanding,
- QSizePolicy::PushButton);
-
- set_font(ok_btn);
- set_font(cancel_btn);
-
- ok_btn->setSizePolicy(*szPolicy);
- cancel_btn->setSizePolicy(*szPolicy);
-
- connect(ok_btn, SIGNAL(clicked(void)), this, SLOT(save(void)));
- connect(cancel_btn, SIGNAL(clicked(void)), this, SLOT(reject(void)));
-
- QHBoxLayout *btnLayout = new QHBoxLayout;
-
- btnLayout->addWidget(cancel_btn);
- btnLayout->addWidget(ok_btn);
-
- QVBoxLayout *topLayout = new QVBoxLayout;
-
- topLayout->addLayout(upperLayout);
-
- QGridLayout *progLayout = new QGridLayout;
- for (int i = 0; i < m_progs.count(); i++) {
-
- p = &(m_progs.at(i));
-
- text = QString("");
- if (p->temperature == FORCE_OFF) {
- text += QString("-");
- } else {
- if (p->temperature == FORCE_ON) {
- text += QString("+");
- } else {
- text += QString::number(p->temperature);
- }
- }
- text += QString("°C");
-
- QLabel *prog_temperature = new QLabel(QString(text));
- set_font(prog_temperature);
- progLayout->addWidget(prog_temperature, i, 1, Qt::AlignHCenter);
-
- text = QString("");
- if (p->DoW == 0) {
- text += QString("-");
- } else {
- bool isFirst = true;
- for (int j = 0; j < 7; j++) {
- if (p->DoW & (1 << j)) {
- if (isFirst) {
- isFirst = false;
- } else {
- text += QString("/");
- }
-
- switch (j) {
- case 0: text += QString(tr("Mo")); break;
- case 1: text += QString(tr("Tu")); break;
- case 2: text += QString(tr("We")); break;
- case 3: text += QString(tr("Th")); break;
- case 4: text += QString(tr("Fr")); break;
- case 5: text += QString(tr("Sa")); break;
- case 6: text += QString(tr("Su")); break;
- }
- }
- }
- }
- QLabel *prog_DoW = new QLabel(QString(text));
- set_font(prog_DoW);
- progLayout->addWidget(prog_DoW, i, 2, Qt::AlignHCenter);
-
- text = QString("");
- text += p->start_time.toString(QString(" HH:mm"));
- text += p->end_time.toString(QString("-HH:mm"));
-
- QLabel *prog_time= new QLabel(QString(text));
- set_font(prog_time);
- progLayout->addWidget(prog_time, i, 3, Qt::AlignHCenter);
-
- QPushButton *edit_btn = new QPushButton(tr("Edit"), this);
- QPushButton *delete_btn = new QPushButton(tr("Delete"), this);
-
- set_font(edit_btn);
- set_font(delete_btn);
-
- edit_btn->setSizePolicy(*szPolicy);
- delete_btn->setSizePolicy(*szPolicy);
-
- edit_btn->setProperty("idx", i);
- delete_btn->setProperty("idx", i);
-
- connect(delete_btn, SIGNAL(clicked(void)), this, SLOT(delete_prog_clicked(void)));
-
- progLayout->addWidget(edit_btn, i, 4, Qt::AlignHCenter);
- progLayout->addWidget(delete_btn, i, 5, Qt::AlignHCenter);
-
- topLayout->addLayout(progLayout);
- }
-
- topLayout->addLayout(btnLayout);
-
- this->setLayout(topLayout);
- }
-
- void EditDlg::set_font(QWidget *widget)
- {
- QFont font = widget->font();
- font.setPointSize(12);
- font.setBold(true);
- widget->setFont(font);
-
- QSizePolicy *szQPolicy = new QSizePolicy(QSizePolicy::Minimum,
- QSizePolicy::MinimumExpanding,
- QSizePolicy::PushButton);
- widget->setSizePolicy(*szQPolicy);
- }
-
- void EditDlg::save(void)
- {
- Settings *s = Settings::getInstance();
-
- s->setRoomDefaultTemperature(m_idx, m_default_temperature.value());
- s->setRoomPrograms(m_idx, m_progs);
-
- emit close_edit_dlg();
- }
-
- void EditDlg::reject(void)
- {
- emit close_edit_dlg();
- }
-
- void EditDlg::delete_prog_clicked(void)
- {
- }
-
- EditDlg::~EditDlg()
- {
- }
-
- /* vim: set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab: */
|