valvetestwindow.cpp 4.16 KB
#include "valvetestwindow.h"
#include "ui_valvetestwindow.h"

#include <QKeyEvent>

#include "soundplayer.h"

ValveTestWindow::ValveTestWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ValveTestWindow)
{
    ui->setupUi(this);

    ui->clockContainer->setParent(ui->upperStack);
    setAttribute(Qt::WA_DeleteOnClose);

    foreach (QPushButton *button, findChildren<QPushButton *>())
        connect(button, &QPushButton::pressed, SoundPlayer::playClick);

    udp = UdpHandler::getInstance();
    connect(udp, SIGNAL(changed()), this, SLOT(onDataChanged()));

    udp->set(TG_OVEN_MODE, 4);
    udp->turnOn(TG_MANUAL_RELAY);

    onDataChanged();
}

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

void ValveTestWindow::keyPressEvent(QKeyEvent *event)
{
    switch (event->key())
    {
    case 0x01000030:    // Turn left
        onEncoderLeft();
        break;
    case 0x01000031:    // Push
        pushed = focusWidget();
        break;
    case 0x01000032:    // Turn right
        onEncoderRight();
        break;
    }
}

void ValveTestWindow::keyReleaseEvent(QKeyEvent *event)
{
    switch (event->key())
    {
    case 0x01000030:    // Turn left
        onEncoderLeft();
        break;
    case 0x01000031:    // Push
        if (focusWidget() == pushed)
            onEncoderClicked(pushed);

        pushed = NULL;
        break;
    case 0x01000032:    // Turn right
        onEncoderRight();
        break;
    }
}

void ValveTestWindow::onDataChanged()
{
    if (udp->ssv())
        ui->steamValveButton->setText("STOP");
    else
        ui->steamValveButton->setText("START");

    if (udp->dp())
        ui->steamPumpButton->setText("STOP");
    else
        ui->steamPumpButton->setText("START");

    if (udp->qnv())
        ui->quenchingValveButton->setText("STOP");
    else
        ui->quenchingValveButton->setText("START");

    if (udp->snv())
        ui->sideValveButton->setText("STOP");
    else
        ui->sideValveButton->setText("START");

    if (udp->sgnv())
        ui->cleanValveButton->setText("STOP");
    else
        ui->cleanValveButton->setText("START");

    oven_state_t oven;
    udp->fillData(oven);

    QString buf;
    ui->c2->setText(buf.sprintf("%d℃", oven.sensor2));
}

void ValveTestWindow::on_steamValveButton_clicked()
{
    if (udp->ssv())
        steamValveClose();
    else
        steamValveOpen();
}

void ValveTestWindow::on_steamPumpButton_clicked()
{
    if (udp->dp())
        steamPumpOff();
    else
        steamPumpOn();
}

void ValveTestWindow::on_quenchingValveButton_clicked()
{
    if (udp->qnv())
        quenchingValveClose();
    else
        quenchingValveOpen();
}

void ValveTestWindow::on_sideValveButton_clicked()
{
    if (udp->snv())
        sideValveClose();
    else
        sideValveOpen();
}

void ValveTestWindow::on_cleanValveButton_clicked()
{
    if (udp->sgnv())
        cleanValveClose();
    else
        cleanValveOpen();
}

void ValveTestWindow::on_backButton_clicked()
{
    steamValveClose();
    steamPumpOff();
    quenchingValveClose();
    sideValveClose();

    udp->turnOff(TG_SSV);
    udp->turnOff(TG_DP);
    udp->turnOff(TG_QNV);
    udp->turnOff(TG_SNV);
    udp->turnOff(TG_SGNV);
    udp->turnOff(TG_MANUAL_RELAY);

    close();
}

void ValveTestWindow::onEncoderLeft()
{
    focusPreviousChild();
}

void ValveTestWindow::onEncoderRight()
{
    focusNextChild();
}

void ValveTestWindow::onEncoderClicked(QWidget *clicked)
{
    QPushButton *b = qobject_cast<QPushButton *>(clicked);
    if (b)
        b->click();
}

void ValveTestWindow::steamValveOpen()
{
    udp->turnOn(TG_SSV);
}

void ValveTestWindow::steamValveClose()
{
    udp->turnOff(TG_SSV);
}

void ValveTestWindow::steamPumpOn()
{
    udp->turnOn(TG_DP);
}

void ValveTestWindow::steamPumpOff()
{
    udp->turnOff(TG_DP);
}

void ValveTestWindow::quenchingValveOpen()
{
    udp->turnOn(TG_QNV);
}

void ValveTestWindow::quenchingValveClose()
{
    udp->turnOff(TG_QNV);
}

void ValveTestWindow::sideValveOpen()
{
    udp->turnOn(TG_SNV);
}

void ValveTestWindow::sideValveClose()
{
    udp->turnOff(TG_SNV);
}

void ValveTestWindow::cleanValveOpen()
{
    udp->turnOn(TG_SGNV);
}

void ValveTestWindow::cleanValveClose()
{
    udp->turnOff(TG_SGNV);
}