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

#include <QKeyEvent>

#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(1000);
    connect(&showCurrentHumidityTimer, SIGNAL(timeout()), SLOT(showCurrentHumidity()));

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

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

    ui->infoButton->hide();

    updateView();

    start();

    ui->background->setFocus();
}

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

void PreheatPopup::keyReleaseEvent(QKeyEvent *event)
{
    switch (event->key())
    {
    case 0x01000030:    // Turn left
        break;
    case 0x01000031:    // Push
        stop();
        close();
        break;
    case 0x01000032:    // Turn right
        break;
    }
}

void PreheatPopup::updateView()
{
    ui->timeLabel->setText(Stringer::remainingTime(oven->msecs(), 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();
}