// 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: */
|