preheatpopup.cpp 2.95 KB
#include "preheatpopup.h"
#include "ui_preheatpopup.h"

#include "stringer.h"

PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) :
    QWidget(parent),
    ui(new Ui::PreheatPopup),
    oven(oven),
    showingCurrentHumidity(false),
    showingCurrentTemp(false)
{
    ui->setupUi(this);

    setAttribute(Qt::WA_DeleteOnClose);

    connect(oven, SIGNAL(changed(Oven*)), SLOT(onOvenChanged()));

    showCurrentHumidityTimer.setSingleShot(true);
    showCurrentHumidityTimer.setInterval(3000);
    connect(&showCurrentHumidityTimer, SIGNAL(timeout()), SLOT(showCurrentHumidity()));

    showCurrentTempTimer.setSingleShot(true);
    showCurrentTempTimer.setInterval(3000);
    connect(&showCurrentTempTimer, SIGNAL(timeout()), SLOT(showCurrentTemp()));

    ui->preheatGauge->setMaximum(oven->temp());
    ui->preheatGauge->setMinimum(oven->currentTemp());
    ui->preheatGauge->setValue(oven->currentTemp());

    start();
}

PreheatPopup::~PreheatPopup()
{
    delete ui;
}

void PreheatPopup::updateView()
{
    ui->timeLabel->setText(Stringer::remainingTime(oven->time(), Stringer::fontSize14));

    int curInterTemp = oven->currentInterTemp();
    if (oven->interTempEnabled())
        ui->interTempLabel->setText(Stringer::temperature(curInterTemp, oven->interTemp(), Stringer::fontSize14));
    else
        ui->interTempLabel->setText(Stringer::temperature(curInterTemp, Stringer::fontSize14));

    int humidity;
    if (showingCurrentHumidity)
        humidity = oven->currentHumidity();
    else
        humidity = oven->humidity();

    int temp;
    if (showingCurrentTemp)
        temp = oven->currentTemp();
    else
        temp = oven->temp();

    ui->humidityLabel->setText(QString().sprintf("%d%%", humidity));
    ui->humidityGauge->setValue(humidity);
    ui->heatLabel->setText(Stringer::temperature(temp));
    ui->heatGauge->setValue(temp);

    ui->preheatGauge->setValue(oven->currentTemp());
}

void PreheatPopup::start()
{
    oven->startPreheating();
}

void PreheatPopup::stop()
{
    oven->stopPreheating();
}

void PreheatPopup::showCurrentHumidity()
{
    showingCurrentHumidity = true;

    updateView();
}

void PreheatPopup::showCurrentTemp()
{
    showingCurrentTemp = true;

    updateView();
}

void PreheatPopup::onOvenChanged()
{
    if (oven->currentTemp() >= oven->temp())
    {
        stop();
        close();
    }
    else
        updateView();
}

void PreheatPopup::on_closeButton_clicked()
{
    stop();
    close();
}

void PreheatPopup::on_closeButton_2_clicked()
{
    stop();
    close();
}

void PreheatPopup::on_humidityGaugeButton_pressed()
{
    showCurrentHumidityTimer.start();
}

void PreheatPopup::on_humidityGaugeButton_released()
{
    showCurrentHumidityTimer.stop();
    showingCurrentHumidity = false;

    updateView();
}

void PreheatPopup::on_heatGaugeButton_pressed()
{
    showCurrentTempTimer.start();
}

void PreheatPopup::on_heatGaugeButton_released()
{
    showCurrentTempTimer.stop();
    showingCurrentTemp = false;

    updateView();
}