// 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 <QLocale>
|
|
#include <QLabel>
|
|
#include <QtMath>
|
|
#include <QDateTime>
|
|
|
|
#include "settings.h"
|
|
#include "boost_dlg.h"
|
|
|
|
#define SPIN_ARROW_W 75
|
|
#define SPIN_ARROW_H 50
|
|
#define SPIN_FONT_SZ 20
|
|
|
|
BoostDlg::BoostDlg(int idx, const QString &zoneName, double temperature,
|
|
QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f)
|
|
{
|
|
QString sheet;
|
|
QLabel *room_name = new QLabel(QString(tr("Force %1 temperature:").arg(zoneName)));
|
|
room_name->setStyleSheet(QString("font-size: %1px;").arg(SPIN_FONT_SZ));
|
|
|
|
temperature = qFloor(temperature * 2) / 2.0;
|
|
m_idx = idx;
|
|
m_boost_temperature.setDecimals(1);
|
|
m_boost_temperature.setValue(temperature);
|
|
m_boost_temperature.setSingleStep(0.5);
|
|
m_boost_temperature.setSuffix(" °C");
|
|
|
|
/*
|
|
* 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_boost_temperature.setStyleSheet(sheet);
|
|
|
|
m_boost_duration.setRange(0, 99);
|
|
m_boost_duration.setValue(1);
|
|
m_boost_duration.setSuffix(" H");
|
|
sheet = sheet.replace("QDoubleSpinBox", "QSpinBox");
|
|
m_boost_duration.setStyleSheet(sheet);
|
|
|
|
QHBoxLayout *spinLayout = new QHBoxLayout;
|
|
spinLayout->addWidget(&m_boost_temperature);
|
|
spinLayout->addWidget(&m_boost_duration);
|
|
|
|
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
|
|
connect(buttonBox, SIGNAL(accepted(void)), this, SLOT(send_result(void)));
|
|
connect(buttonBox, SIGNAL(rejected(void)), this, SLOT(reject(void)));
|
|
|
|
QVBoxLayout *topLayout = new QVBoxLayout;
|
|
|
|
topLayout->addWidget(room_name);
|
|
topLayout->addLayout(spinLayout);
|
|
topLayout->addWidget(buttonBox);
|
|
|
|
this->setLayout(topLayout);
|
|
}
|
|
|
|
void BoostDlg::send_result(void)
|
|
{
|
|
struct boost_data data;
|
|
QDateTime now = QDateTime::currentDateTime();
|
|
|
|
data.temperature = m_boost_temperature.value();
|
|
data.end_date = now.addSecs(m_boost_duration.value() * 3600);
|
|
|
|
emit boost_changed(m_idx, data);
|
|
}
|
|
|
|
void BoostDlg::reject(void)
|
|
{
|
|
struct boost_data data;
|
|
|
|
emit boost_changed(-1, data);
|
|
}
|
|
|
|
BoostDlg::~BoostDlg()
|
|
{
|
|
}
|
|
|
|
/* vim: set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab: */
|
|
|