mainwindow.cpp 5.87 KB
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtDebug>
#include <QKeyEvent>

#include "soundplayer.h"
#include "manualcookwindow.h"
#include "autocookselectionwindow.h"
#include "primewindow.h"
#include "programmingwindow.h"
#include "washwindow.h"
#include "configwindow.h"
#include "ovenstatics.h"
#include "notipopupdlg.h"
#include "multicookwindow.h"
#include "manualviewerdlg.h"

MainWindow *MainWindow::instance = NULL;

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

#if MODEL_GRADE > 0
    ui->logo->hide();
#else
    ui->multiButton->hide();
    ui->programmingButton->hide();
#endif

    instance = this;
    child = NULL;

    setFocus();

    QList<QPushButton *> buttons = findChildren<QPushButton *>();
    foreach (QPushButton *button, buttons)
    {
        connect(button, &QPushButton::pressed, SoundPlayer::playClick);
        connect(button, SIGNAL(clicked()), SLOT(setFocus()));
    }

    QTimer::singleShot(0, this, SLOT(checkPrevWash()));
}

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

void MainWindow::jump(QMainWindow *newChild)
{
    if (instance->child)
        instance->child->deleteLater();

    instance->newChild(newChild);
}

void MainWindow::killChild()
{
    if (instance->child){
        instance->child->deleteLater();
    }
}

bool MainWindow::killChildCook()
{
    if (instance->child && !instance->child->inherits("ConfigWindow"))
    {
        qDebug() << "kill child";
        instance->child->hide();
        instance->child->deleteLater();
        return true;
    }
    else
        return false;
}

EngineerMenuWindow *MainWindow::getEngineerMenuWindow()
{
    return instance->findChild<EngineerMenuWindow *>();
}

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

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

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

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

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

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

void MainWindow::checkPrevWash()
{
    if (OvenStatistics::getInstance()->loadWashState())
    {
        NotiPopupDlg *d = new NotiPopupDlg(this, tr("세척이 정상적으로 종료되지 않아\n반드시 세척통을 자동 세척해야 합니다.\n내부를 비워주세요"));
        d->setWindowModality(Qt::WindowModal);
        d->show();

        connect(d, SIGNAL(accepted()), SLOT(on_washButton_clicked()));
    }
}

void MainWindow::showManualCookWindow(Define::Mode mode)
{
    ManualCookWindow *w = new ManualCookWindow(this, mode);
    w->setWindowModality(Qt::WindowModal);
    w->showFullScreen();
    w->raise();

    newChild(w);
}

void MainWindow::showAutoCookSelectionWindow(Define::CookType type)
{
    AutoCookSelectionWindow *w = new AutoCookSelectionWindow(this, type);
    w->setWindowModality(Qt::WindowModal);
    w->showFullScreen();
    w->raise();

    newChild(w);
}

void MainWindow::newChild(QMainWindow *newChild)
{
    child = newChild;
    connect(newChild, SIGNAL(destroyed(QObject*)), this, SLOT(onChildDestroyed(QObject*)));
}

void MainWindow::onChildDestroyed(QObject *destroyed)
{
    if (destroyed == child)
        child = NULL;
}

void MainWindow::on_steamButton_clicked()
{
    showManualCookWindow(Define::SteamMode);
}

void MainWindow::on_combiButton_clicked()
{
    showManualCookWindow(Define::CombiMode);
}

void MainWindow::on_dryheatButton_clicked()
{
    showManualCookWindow(Define::DryMode);
}

void MainWindow::on_poultryButton_clicked()
{
    showAutoCookSelectionWindow(Define::Poultry);
}

void MainWindow::on_meatButton_clicked()
{
    showAutoCookSelectionWindow(Define::Meat);
}

void MainWindow::on_fishButton_clicked()
{
    showAutoCookSelectionWindow(Define::Fish);
}

void MainWindow::on_dessertButton_clicked()
{
    showAutoCookSelectionWindow(Define::Desert);
}

void MainWindow::on_grainButton_clicked()
{
    showAutoCookSelectionWindow(Define::Vegetable);
}

void MainWindow::on_breadButton_clicked()
{
    showAutoCookSelectionWindow(Define::Bread);
}

void MainWindow::on_etcButton_clicked()
{
    showAutoCookSelectionWindow(Define::Etc);
}

void MainWindow::on_primeButton_clicked()
{
    PrimeWindow *w = new PrimeWindow(this);
    w->setWindowModality(Qt::WindowModal);
    w->showFullScreen();
    w->raise();

    newChild(w);
}

void MainWindow::on_multiButton_clicked()
{
    MultiCookWindow *w = new MultiCookWindow(this);
    w->setWindowModality(Qt::WindowModal);
    w->showFullScreen();
    w->raise();

    newChild(w);
}

void MainWindow::on_programmingButton_clicked()
{
    ProgrammingWindow *w = new ProgrammingWindow(this);
    w->setWindowModality(Qt::WindowModal);
    w->showFullScreen();
    w->raise();

    newChild(w);
}

void MainWindow::on_washButton_clicked()
{
    WashWindow *w = new WashWindow(this);
    w->setWindowModality(Qt::WindowModal);
    w->showFullScreen();
    w->raise();

    newChild(w);
}

void MainWindow::on_configButton_clicked()
{
    ConfigWindow *w = new ConfigWindow(this);
    w->setWindowModality(Qt::WindowModal);
    w->showFullScreen();
    w->raise();

    newChild(w);
}

void MainWindow::on_helpButton_clicked()
{
    ManualViewerDlg* dlg = new ManualViewerDlg(this);
    dlg->showFullScreen();
    dlg->raise();
}