cooldownpopup.cpp 4.79 KB
#include "cooldownpopup.h"
#include "ui_cooldownpopup.h"

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

    setAttribute(Qt::WA_DeleteOnClose);

    ui->openDoorAnimation->load(":/images/animation/door_big_01.png");
    ui->openDoorAnimation->load(":/images/animation/door_big_02.png");
    ui->openDoorAnimation->load(":/images/animation/door_big_03.png");
    ui->openDoorAnimation->load(":/images/animation/door_big_04.png");
    ui->openDoorAnimation->load(":/images/animation/door_big_05.png");
    ui->openDoorAnimation->load(":/images/animation/door_big_06.png");
    ui->openDoorAnimation->load(":/images/animation/door_big_07.png");
    ui->openDoorAnimation->load(":/images/animation/door_big_08.png");
    ui->openDoorAnimation->load(":/images/animation/door_big_09.png");
    ui->openDoorAnimation->start(300);

    cookingFanLevel = oven->fan();
    expectingFanLevel = oven->maxFan();
    started = false;
    opened = false;

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

    cooldownStartTimer.setSingleShot(true);
    cooldownStartTimer.setInterval(2000);
    connect(&cooldownStartTimer, SIGNAL(timeout()), SLOT(start()));

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

    checkOvenTimer.setInterval(100);
    connect(&checkOvenTimer, SIGNAL(timeout()), SLOT(checkOven()));

    connect(ui->tempSlider, SIGNAL(valueChanged(int)), SLOT(updateView()));

    updateView();

    cooldownStartTimer.start();
}

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

void CooldownPopup::start()
{
    started = true;
    opened = false;

    checkOvenTimer.start();

    updateView();
}

void CooldownPopup::stop()
{
    started = false;

    oven->stopCooldown();
    oven->setFan(cookingFanLevel);

    close();
}

void CooldownPopup::showCurrentTemp()
{
    showingCurrentTemp = true;
    updateView();
}

void CooldownPopup::updateView()
{
    int temp;
    if (showingCurrentTemp)
        temp = oven->currentTemp();
    else
        temp = ui->tempSlider->value();

    ui->tempCurrentLabel->setText(QString("%1<span style=\"font-size:11pt;\">℃</span>").arg(temp));

    switch (expectingFanLevel)
    {
    case 1:
        ui->fanButton->setStyleSheet("background-image: url(:/images/cooldown/fan1.png);");
        break;
    case 2:
        ui->fanButton->setStyleSheet("background-image: url(:/images/cooldown/fan2.png);");
        break;
    case 3:
        ui->fanButton->setStyleSheet("background-image: url(:/images/cooldown/fan3.png);");
        break;
    case 4:
        ui->fanButton->setStyleSheet("background-image: url(:/images/cooldown/fan4.png);");
        break;
    case 5:
        ui->fanButton->setStyleSheet("background-image: url(:/images/cooldown/fan5.png);");
        break;
    }

    if (oven->humidification())
        ui->humidificationButton->setStyleSheet("background-image: url(:/images/cooldown/side_nozzle_ov.png);");
    else
        ui->humidificationButton->setStyleSheet("background-image: url(:/images/cooldown/side_nozzle.png);");

    if (started && !oven->door())
        ui->openDoorWidget->show();
    else
        ui->openDoorWidget->hide();
}

void CooldownPopup::checkOven()
{
    updateView();

    if (!started)
        return;

    if (!opened)
    {
        if (oven->door())
        {
            opened = true;
            oven->setFan(expectingFanLevel);
            oven->startCooldown();
        }
    }
    else
    {
        if (oven->currentTemp() <= ui->tempSlider->value())
        {
            stop();
        }
    }
}

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

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

void CooldownPopup::on_tempButton_pressed()
{
    showCurrentTempTimer.start();
}

void CooldownPopup::on_tempButton_released()
{
    if (showCurrentTempTimer.isActive())
        showCurrentTempTimer.stop();

    if (showingCurrentTemp)
    {
        showingCurrentTemp = false;
        updateView();
    }
}

void CooldownPopup::on_runButton_clicked()
{
    if (cooldownStartTimer.isActive())
    {
        cooldownStartTimer.stop();
        start();
    }
}

void CooldownPopup::on_fanButton_clicked()
{
    expectingFanLevel--;
    if (expectingFanLevel < oven->minFan())
        expectingFanLevel = oven->maxFan();

    if (oven->cooldown())
        oven->setFan(expectingFanLevel);
    else
        updateView();

    if (cooldownStartTimer.isActive())
        cooldownStartTimer.start();
}

void CooldownPopup::on_humidificationButton_clicked()
{
    if (oven->humidification())
        oven->stopHumidification();
    else
        oven->startHumidification();
}