From ea536cd1d3cecfd2e9eccbc225b305b838b9d9eb Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 7 Jun 2017 17:03:44 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=81=EC=9E=AC=20/=20=EC=A1=B0=EB=A6=AC=20?= =?UTF-8?q?=EC=A4=91=20=EB=AC=B8=20=EC=97=B4=EB=A6=BC=20=EC=8B=9C=EA=B0=84?= =?UTF-8?q?=20=EB=AA=A8=EB=8B=88=ED=84=B0=EB=A7=81=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/gui/oven_control/autocookwindow.cpp | 142 ++++++++++++++++++++++++++++++ app/gui/oven_control/autocookwindow.h | 22 +++++ app/gui/oven_control/manualcookwindow.cpp | 79 ++++++++++++++++- app/gui/oven_control/manualcookwindow.h | 11 +++ 4 files changed, 251 insertions(+), 3 deletions(-) diff --git a/app/gui/oven_control/autocookwindow.cpp b/app/gui/oven_control/autocookwindow.cpp index b640075..26e626f 100644 --- a/app/gui/oven_control/autocookwindow.cpp +++ b/app/gui/oven_control/autocookwindow.cpp @@ -10,6 +10,8 @@ #include "configwindow.h" #include "washwindow.h" #include "mainwindow.h" +#include "config.h" +#include "errorpopupdlg.h" AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : QMainWindow(parent), @@ -27,6 +29,36 @@ AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : autocook = AutoCook(this->cook); processSelected = false; + config_item item = Config::getInstance()->getConfigValue(Define::config_loading_door_monitoring); + if (item.d8.d8_0 > 0 && item.d8.d8_0 < 4) + { + loadingMonitorLevel = item.d8.d8_0; + loadingMonitor1 = item.d8.d8_1 * 1000; + loadingMonitor2 = item.d8.d8_2 * 1000; + loadingMonitor3 = item.d8.d8_3 * 1000; + currentLoadingMonitorLevel = 0; + } + else + loadingMonitorLevel = 0; + + item = Config::getInstance()->getConfigValue(Define::config_cooking_door_monitoring); + if (item.d8.d8_0 > 0 && item.d8.d8_0 < 4) + { + cookingMonitorLevel = item.d8.d8_0; + cookingMonitor1 = item.d8.d8_1 * 1000; + cookingMonitor2 = item.d8.d8_2 * 1000; + cookingMonitor3 = item.d8.d8_3 * 1000; + currentCookingMonitorLevel = 0; + } + else + cookingMonitorLevel = 0; + + if (loadingMonitorLevel > 0 || cookingMonitorLevel > 0) + { + connect(&monitorTimer, SIGNAL(timeout()), SLOT(monitor())); + monitorTimer.start(100); + } + setupUi(); Oven *oven = Oven::getInstance(); @@ -70,6 +102,8 @@ AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : AutoCookWindow::~AutoCookWindow() { + Oven::getInstance()->stop(); + delete ui; } @@ -704,6 +738,114 @@ void AutoCookWindow::jumpWash() MainWindow::jump(w); } +void AutoCookWindow::monitor() +{ + Define::StepClass step = Define::classify(autocook.cook.steps[autocook.currentStepIndex].type); + + if (step == Define::PreheatClass || step == Define::CookClass) + { + if (Oven::getInstance()->door()) + { + switch (currentCookingMonitorLevel) + { + case 0: + cookingMonitorTime1.start(); + currentCookingMonitorLevel = 1; + break; + case 1: + if (cookingMonitorLevel >= 1 && cookingMonitorTime1.elapsed() > cookingMonitor1) + { + SoundPlayer::playError2(); + + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "조리 중 문 열림 시간 모니터링 1단계"); + d->showFullScreen(); + + cookingMonitorTime2.start(); + currentCookingMonitorLevel = 2; + } + break; + case 2: + if (cookingMonitorLevel >= 2 && cookingMonitorTime2.elapsed() > cookingMonitor2) + { + SoundPlayer::playError2(); + + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "조리 중 문 열림 시간 모니터링 2단계"); + d->showFullScreen(); + + cookingMonitorTime3.start(); + currentCookingMonitorLevel = 3; + } + break; + case 3: + if (cookingMonitorLevel >= 3 && cookingMonitorTime3.elapsed() > cookingMonitor3) + { + SoundPlayer::playError2(); + + ErrorPopupDlg *d = new ErrorPopupDlg(MainWindow::getInstance(), "문이 오래 열려있어 조리가 취소되었습니다", "조리 중 문 열림 시간 모니터링 3단계"); + d->showFullScreen(); + + MainWindow::killChild(); + } + } + } + else if (currentCookingMonitorLevel > 0) + { + currentCookingMonitorLevel = 0; + } + } + else if (step == Define::DoorClass) + { + if (Oven::getInstance()->door()) + { + switch (currentLoadingMonitorLevel) + { + case 0: + loadingMonitorTime1.start(); + currentLoadingMonitorLevel = 1; + break; + case 1: + if (loadingMonitorLevel >= 1 && loadingMonitorTime1.elapsed() > loadingMonitor1) + { + SoundPlayer::playError2(); + + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "적재 중 문 열림 시간 모니터링 1단계"); + d->showFullScreen(); + + loadingMonitorTime2.start(); + currentLoadingMonitorLevel = 2; + } + break; + case 2: + if (loadingMonitorLevel >= 2 && loadingMonitorTime2.elapsed() > loadingMonitor2) + { + SoundPlayer::playError2(); + + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "적재 중 문 열림 시간 모니터링 2단계"); + d->showFullScreen(); + + loadingMonitorTime3.start(); + currentLoadingMonitorLevel = 3; + } + break; + case 3: + if (loadingMonitorLevel >= 3 && loadingMonitorTime3.elapsed() > loadingMonitor3) + { + SoundPlayer::playError2(); + + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "적재 중 문 열림 시간 모니터링 3단계"); + d->showFullScreen(); + + MainWindow::killChild(); + } + } + } + else if (currentLoadingMonitorLevel > 0) + { + currentLoadingMonitorLevel = 0; + } + } +} + void AutoCookWindow::on_selectCookButton_clicked() { diff --git a/app/gui/oven_control/autocookwindow.h b/app/gui/oven_control/autocookwindow.h index d599990..899f927 100644 --- a/app/gui/oven_control/autocookwindow.h +++ b/app/gui/oven_control/autocookwindow.h @@ -55,6 +55,26 @@ private: QTimer updateViewTimer; + int loadingMonitorLevel; + int loadingMonitor1; + int loadingMonitor2; + int loadingMonitor3; + QTime loadingMonitorTime1; + QTime loadingMonitorTime2; + QTime loadingMonitorTime3; + int currentLoadingMonitorLevel; + + int cookingMonitorLevel; + int cookingMonitor1; + int cookingMonitor2; + int cookingMonitor3; + QTime cookingMonitorTime1; + QTime cookingMonitorTime2; + QTime cookingMonitorTime3; + int currentCookingMonitorLevel; + + QTimer monitorTimer; + void setupUi(); private slots: @@ -71,6 +91,8 @@ private slots: void jumpConfig(); void jumpWash(); + void monitor(); + void on_selectCookButton_clicked(); void on_homeButton_clicked(); void on_configCookButton_clicked(); diff --git a/app/gui/oven_control/manualcookwindow.cpp b/app/gui/oven_control/manualcookwindow.cpp index 1debfc8..b4f6a02 100644 --- a/app/gui/oven_control/manualcookwindow.cpp +++ b/app/gui/oven_control/manualcookwindow.cpp @@ -20,6 +20,7 @@ #include "configwindow.h" #include "primewindow.h" #include "washwindow.h" +#include "errorpopupdlg.h" #include @@ -47,6 +48,25 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) : lastViewHumidification = false; lastViewFan = -1; + Config *config = Config::getInstance(); + config_item item = config->getConfigValue(Define::config_cooking_door_monitoring); + + monitorLevel = item.d8.d8_0; + if (monitorLevel > 0 && monitorLevel < 4) + { + monitor1.setSingleShot(true); + monitor2.setSingleShot(true); + monitor3.setSingleShot(true); + monitor1.setInterval(item.d8.d8_1 * 1000); + monitor2.setInterval(item.d8.d8_2 * 1000); + monitor3.setInterval(item.d8.d8_3 * 1000); + connect(&monitor1, SIGNAL(timeout()), SLOT(onMonitor1Timeout())); + connect(&monitor2, SIGNAL(timeout()), SLOT(onMonitor2Timeout())); + connect(&monitor3, SIGNAL(timeout()), SLOT(onMonitor3Timeout())); + } + else + monitorLevel = 0; + connect(oven, SIGNAL(changed(Oven*)), this, SLOT(onOvenUpdated(Oven*))); connect(ui->humiditySlider, SIGNAL(valueChanged(int)), oven, SLOT(setHumidity(int))); @@ -101,6 +121,8 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, ManualCookSetting setting) ManualCookWindow::~ManualCookWindow() { + stop(); + delete ui; } @@ -364,9 +386,7 @@ void ManualCookWindow::onOvenUpdated(Oven *oven) updateView(); if (oven->interTempEnabled() && oven->currentInterTemp() >= oven->interTemp()) - { - oven->stopCooking(); - } + stop(); if (repeat && !oven->cooking()) { @@ -383,6 +403,23 @@ QPushButton:pressed { background-image: url(:/images/manual_button/repeat_ov.png oven->setInterTempEnabled(repeatSetting.coreTempEnabled); oven->setInterTemp(repeatSetting.coreTemp); } + + if (oven->paused() && oven->door()) + { + if (monitorLevel > 0 && !monitorTriggered) + { + monitorTriggered = true; + monitor1.start(); + } + } + + if (monitorTriggered && !oven->door()) + { + monitorTriggered = false; + monitor1.stop(); + monitor2.stop(); + monitor3.stop(); + } } void ManualCookWindow::setOvenDefault(Define::Mode mode) @@ -416,6 +453,14 @@ void ManualCookWindow::start() s.coreTemp = oven->interTemp(); CookHistory::record(s); + + if (monitorLevel > 0 && oven->door()) + { + monitorTriggered = true; + monitor1.start(); + } + else + monitorTriggered = false; } } @@ -480,6 +525,34 @@ void ManualCookWindow::jumpWash() MainWindow::jump(w); } +void ManualCookWindow::onMonitor1Timeout() +{ + SoundPlayer::playError1(); + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "조리 중 문 열림 시간 모니터링 1단계"); + d->showFullScreen(); + + if (monitorLevel > 1) + monitor2.start(); +} + +void ManualCookWindow::onMonitor2Timeout() +{ + SoundPlayer::playError1(); + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "조리 중 문 열림 시간 모니터링 2단계"); + d->showFullScreen(); + + if (monitorLevel > 2) + monitor3.start(); +} + +void ManualCookWindow::onMonitor3Timeout() +{ + SoundPlayer::playError1(); + ErrorPopupDlg *d = new ErrorPopupDlg(MainWindow::getInstance(), "문이 오래 열려있어 조리가 취소되었습니다", "조리 중 문 열림 시간 모니터링 3단계"); + d->showFullScreen(); + close(); +} + void ManualCookWindow::on_steamButton_clicked() { setOvenDefault(Define::SteamMode); diff --git a/app/gui/oven_control/manualcookwindow.h b/app/gui/oven_control/manualcookwindow.h index e8ac6bb..2271e58 100644 --- a/app/gui/oven_control/manualcookwindow.h +++ b/app/gui/oven_control/manualcookwindow.h @@ -43,6 +43,10 @@ private slots: void jumpFavorites(); void jumpWash(); + void onMonitor1Timeout(); + void onMonitor2Timeout(); + void onMonitor3Timeout(); + void on_steamButton_clicked(); void on_combiButton_clicked(); void on_dryheatButton_clicked(); @@ -99,6 +103,13 @@ private: bool lastViewHumidification; int lastViewFan; + int monitorLevel; + QTimer monitor1; + QTimer monitor2; + QTimer monitor3; + bool monitorTriggered; + + ManualCookSetting repeatSetting; bool repeat; }; -- 2.1.4