From 7c415d2f715f2268cdb5ec668830751818121122 Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 7 Jun 2017 12:49:57 +0900 Subject: [PATCH] =?UTF-8?q?=ED=98=84=EC=9E=AC=20=EC=8A=B5=EB=8F=84/?= =?UTF-8?q?=EC=98=A8=EB=8F=84=20=EA=B0=92=EC=9D=84=20=EB=B3=BC=20=EB=95=8C?= =?UTF-8?q?=20=EC=8A=AC=EB=9D=BC=EC=9D=B4=EB=8D=94=EB=8F=84=20=EA=B0=99?= =?UTF-8?q?=EC=9D=B4=20=EC=9B=80=EC=A7=81=EC=9D=B4=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/gui/oven_control/manualcookwindow.cpp | 376 +++++++++++++++++------------- app/gui/oven_control/manualcookwindow.h | 15 +- 2 files changed, 223 insertions(+), 168 deletions(-) diff --git a/app/gui/oven_control/manualcookwindow.cpp b/app/gui/oven_control/manualcookwindow.cpp index 7e46fb7..1debfc8 100644 --- a/app/gui/oven_control/manualcookwindow.cpp +++ b/app/gui/oven_control/manualcookwindow.cpp @@ -34,20 +34,32 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) : ui->closeDoorWidget->setParent(ui->upperStack); setAttribute(Qt::WA_DeleteOnClose); + oven = Oven::getInstance(); + + lastViewHumidity = -1; + lastViewTemp = -1; + lastViewTime = -1; + lastViewInterTemp = -1; + lastViewInterTempEnabled = !oven->interTempEnabled(); + lastViewCooking = false; + lastViewDamper = false; + lastViewHumidification = false; + lastViewFan = -1; + connect(oven, SIGNAL(changed(Oven*)), this, SLOT(onOvenUpdated(Oven*))); connect(ui->humiditySlider, SIGNAL(valueChanged(int)), oven, SLOT(setHumidity(int))); connect(ui->tempSlider, SIGNAL(valueChanged(int)), oven, SLOT(setTemp(int))); connect(ui->timeSlider, SIGNAL(valueChanged(int)), oven, SLOT(setTime(int))); connect(ui->timeSlider, SIGNAL(valueChanged(int)), &startCookingTimer, SLOT(start())); - connect(ui->timeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateLabels())); + connect(ui->timeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateView())); connect(ui->interTempSlider, SIGNAL(valueChanged(int)), oven, SLOT(setInterTemp(int))); - connect(ui->humiditySlider, SIGNAL(sliderMoved(int)), this, SLOT(updateLabels())); - connect(ui->tempSlider, SIGNAL(sliderMoved(int)), this, SLOT(updateLabels())); - connect(ui->timeSlider, SIGNAL(sliderMoved(int)), this, SLOT(updateLabels())); - connect(ui->interTempSlider, SIGNAL(sliderMoved(int)), this, SLOT(updateLabels())); + connect(ui->humiditySlider, SIGNAL(sliderMoved(int)), this, SLOT(updateView())); + connect(ui->tempSlider, SIGNAL(sliderMoved(int)), this, SLOT(updateView())); + connect(ui->timeSlider, SIGNAL(sliderMoved(int)), this, SLOT(updateView())); + connect(ui->interTempSlider, SIGNAL(sliderMoved(int)), this, SLOT(updateView())); startCookingTimer.setSingleShot(true); startCookingTimer.setInterval(2000); @@ -63,9 +75,8 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) : oven->setDefault(mode); - checkTimeTimer.setInterval(100); - connect(&checkTimeTimer, SIGNAL(timeout()), SLOT(checkTime())); - checkTimeTimer.start(); + connect(&updateViewTimer, SIGNAL(timeout()), SLOT(updateView())); + updateViewTimer.start(100); foreach (QPushButton *button, findChildren()) connect(button, &QPushButton::pressed, SoundPlayer::playClick); @@ -107,66 +118,25 @@ void ManualCookWindow::setupAnimation() ui->openDoorAnimation->start(300); } -void ManualCookWindow::checkTime() +void ManualCookWindow::updateView() { - if (!ui->timeSlider->isSliderDown()) - { - bool old = ui->timeSlider->blockSignals(true); - ui->timeSlider->setSliderPosition(oven->time()); - ui->timeSlider->blockSignals(old); - - updateLabels(); - } - - if (oven->interTempEnabled() && oven->currentInterTemp() >= oven->interTemp()) - { - oven->stopCooking(); - } - - if (repeat && !oven->cooking()) + switch (oven->mode()) { - repeat = false; - - ui->repeatButton->setStyleSheet("\ -QPushButton { background-image: url(:/images/manual_button/repeat.png); }\ -QPushButton:pressed { background-image: url(:/images/manual_button/repeat_ov.png); }"); - - oven->setMode(repeatSetting.mode); - oven->setHumidity(repeatSetting.humidity); - oven->setTemp(repeatSetting.temp); - oven->setTime(repeatSetting.time); - oven->setInterTempEnabled(repeatSetting.coreTempEnabled); - oven->setInterTemp(repeatSetting.coreTemp); + case Define::DryMode: + if (!ui->dryheatButton->isChecked()) + ui->dryheatButton->setChecked(true); + break; + case Define::SteamMode: + if (!ui->steamButton->isChecked()) + ui->steamButton->setChecked(true); + break; + case Define::CombiMode: + if (!ui->combiButton->isChecked()) + ui->combiButton->setChecked(true); + break; + default: + break; } -} - -void ManualCookWindow::showCurrentHumidity() -{ - showCurrentHumidity_ = true; - updateLabels(); -} - -void ManualCookWindow::hideCurrentHumidity() -{ - showCurrentHumidity_ = false; - updateLabels(); -} - -void ManualCookWindow::showCurrentTemp() -{ - showCurrentTemp_ = true; - updateLabels(); -} - -void ManualCookWindow::hideCurrentTemp() -{ - showCurrentTemp_ = false; - updateLabels(); -} - -void ManualCookWindow::updateLabels() -{ - QString buf; int humidity; if (showCurrentHumidity_) @@ -176,7 +146,18 @@ void ManualCookWindow::updateLabels() else humidity = oven->humidity(); - ui->humidityLabel->setText(buf.sprintf("%d%%", humidity)); + if (humidity != lastViewHumidity) + { + lastViewHumidity = humidity; + + bool old = ui->humiditySlider->blockSignals(true); + if (ui->humiditySlider->sliderPosition() != humidity) + ui->humiditySlider->setValue(humidity); + ui->humiditySlider->setEnabled(oven->mode() == Define::CombiMode); + ui->humiditySlider->blockSignals(old); + + ui->humidityLabel->setText(QString("%1%").arg(humidity)); + } int temp; if (showCurrentTemp_) @@ -186,7 +167,18 @@ void ManualCookWindow::updateLabels() else temp = oven->temp(); - ui->tempLabel->setText(Stringer::temperature(temp, Stringer::fontSize14)); + if (temp != lastViewTemp) + { + lastViewTemp = temp; + + bool old = ui->tempSlider->blockSignals(true); + ui->tempSlider->setRange(oven->minTemp(), oven->maxTemp()); + if (ui->tempSlider->sliderPosition() != temp) + ui->tempSlider->setValue(temp); + ui->tempSlider->blockSignals(old); + + ui->tempLabel->setText(Stringer::temperature(temp, Stringer::fontSize14)); + } int msecs; if (ui->timeSlider->isSliderDown()) @@ -194,128 +186,133 @@ void ManualCookWindow::updateLabels() else msecs = oven->msecs(); - ui->timeLabel->setText(Stringer::remainingTime(msecs, Stringer::fontSize14)); - - if (oven->interTempEnabled()) + if (msecs != lastViewTime) { - int interTemp; - if (ui->interTempSlider->isSliderDown()) - interTemp = ui->interTempSlider->sliderPosition(); - else - interTemp = oven->interTemp(); + lastViewTime = msecs; - ui->interTempLabel->setText(Stringer::temperature(interTemp, Stringer::fontSize14)); - } - else - ui->interTempLabel->setText(Stringer::unusedTemperature(Stringer::fontSize14)); -} + bool old = ui->timeSlider->blockSignals(true); + ui->timeSlider->setSliderPosition(msecs / 1000); + ui->timeSlider->blockSignals(old); -void ManualCookWindow::onOvenUpdated(Oven *oven) -{ - switch (oven->mode()) - { - case Define::DryMode: - ui->dryheatButton->setChecked(true); - break; - case Define::SteamMode: - ui->steamButton->setChecked(true); - break; - case Define::CombiMode: - ui->combiButton->setChecked(true); - break; - default: - break; + ui->timeLabel->setText(Stringer::remainingTime(msecs, Stringer::fontSize14)); } - bool old; - old = ui->humiditySlider->blockSignals(true); - ui->humiditySlider->setValue(oven->humidity()); - ui->humiditySlider->setEnabled(oven->mode() == Define::CombiMode); - ui->humiditySlider->blockSignals(old); - - old = ui->tempSlider->blockSignals(true); - ui->tempSlider->setRange(oven->minTemp(), oven->maxTemp()); - ui->tempSlider->setValue(oven->temp()); - ui->tempSlider->blockSignals(old); + int interTemp; + if (ui->interTempSlider->isSliderDown()) + interTemp = ui->interTempSlider->sliderPosition(); + else + interTemp = oven->interTemp(); - if (!ui->timeSlider->isSliderDown()) + bool interTempEnabled = oven->interTempEnabled(); + if (interTempEnabled != lastViewInterTempEnabled || interTemp != lastViewInterTemp) { - old = ui->timeSlider->blockSignals(true); - ui->timeSlider->setValue(oven->time()); - ui->timeSlider->blockSignals(old); - } + if (interTempEnabled != lastViewInterTempEnabled) + { + lastViewInterTempEnabled = oven->interTempEnabled(); -// ui->interTempButton->setChecked(oven->interTempEnabled()); - if (oven->interTempEnabled()) - ui->interTempButton->setStyleSheet("\ + if (interTempEnabled) + ui->interTempButton->setStyleSheet("\ QPushButton {\ image: url(:/images/slider_icon/core_temp_enabled.png);\ }\ QPushButton:pressed {\ image: url(:/images/slider_icon/core_temp_ov.png);\ }"); - else - ui->interTempButton->setStyleSheet("\ + else + ui->interTempButton->setStyleSheet("\ QPushButton {\ image: url(:/images/slider_icon/core_temp.png);\ }\ QPushButton:pressed {\ image: url(:/images/slider_icon/core_temp_ov.png);\ }"); + } - old = ui->interTempSlider->blockSignals(true); - ui->interTempSlider->setEnabled(oven->interTempEnabled()); - ui->interTempSlider->setRange(oven->minInterTemp(), oven->maxInterTemp()); - ui->interTempSlider->setValue(oven->interTemp()); - ui->interTempSlider->blockSignals(old); + lastViewInterTemp = interTemp; - if (oven->cooking()) - ui->runStopButton->setStyleSheet( - "border-image: url(:/images/manual_button/stop.png)"); - else - ui->runStopButton->setStyleSheet( - "border-image: url(:/images/manual_button/run.png)"); + bool old = ui->interTempSlider->blockSignals(true); + ui->interTempSlider->setEnabled(interTempEnabled); + ui->interTempSlider->setRange(oven->minInterTemp(), oven->maxInterTemp()); + ui->interTempSlider->setValue(interTemp); + ui->interTempSlider->blockSignals(old); - if (oven->damper()) - ui->damperButton->setStyleSheet( - "background-image: url(:/images/manual_button/damper_open.png)"); - else - ui->damperButton->setStyleSheet( - "background-image: url(:/images/manual_button/damper_close.png)"); + if (interTempEnabled) + ui->interTempLabel->setText(Stringer::temperature(interTemp, Stringer::fontSize14)); + else + ui->interTempLabel->setText(Stringer::unusedTemperature(Stringer::fontSize14)); + } - if (oven->humidification()) - ui->humidificationButton->setStyleSheet( - "background-image: url(:/images/manual_button/side_nozzle_open.png)"); - else - ui->humidificationButton->setStyleSheet( - "background-image: url(:/images/manual_button/side_nozzle_close.png)"); + bool cooking = oven->cooking(); + if (cooking != lastViewCooking) + { + lastViewCooking = cooking; + + if (cooking) + ui->runStopButton->setStyleSheet( + "border-image: url(:/images/manual_button/stop.png)"); + else + ui->runStopButton->setStyleSheet( + "border-image: url(:/images/manual_button/run.png)"); + } - switch (oven->fan()) + bool damper = oven->damper(); + if (damper != lastViewDamper) { - case 1: - ui->fanButton->setStyleSheet( - "background-image: url(:/images/manual_button/fan_1.png)"); - break; - case 2: - ui->fanButton->setStyleSheet( - "background-image: url(:/images/manual_button/fan_2.png)"); - break; - case 3: - ui->fanButton->setStyleSheet( - "background-image: url(:/images/manual_button/fan_3.png)"); - break; - case 4: - ui->fanButton->setStyleSheet( - "background-image: url(:/images/manual_button/fan_4.png)"); - break; - case 5: - ui->fanButton->setStyleSheet( - "background-image: url(:/images/manual_button/fan_5.png)"); - break; - default: - ui->fanButton->setStyleSheet( - "background-image: url(:/images/manual_button/fan_1.png)"); - break; + lastViewDamper = damper; + + if (damper) + ui->damperButton->setStyleSheet( + "background-image: url(:/images/manual_button/damper_open.png)"); + else + ui->damperButton->setStyleSheet( + "background-image: url(:/images/manual_button/damper_close.png)"); + } + + bool humidification = oven->humidification(); + if (humidification != lastViewHumidification) + { + lastViewHumidification = humidification; + + if (humidification) + ui->humidificationButton->setStyleSheet( + "background-image: url(:/images/manual_button/side_nozzle_open.png)"); + else + ui->humidificationButton->setStyleSheet( + "background-image: url(:/images/manual_button/side_nozzle_close.png)"); + } + + int fan = oven->fan(); + if (fan != lastViewFan) + { + lastViewFan = fan; + + switch (fan) + { + case 1: + ui->fanButton->setStyleSheet( + "background-image: url(:/images/manual_button/fan_1.png)"); + break; + case 2: + ui->fanButton->setStyleSheet( + "background-image: url(:/images/manual_button/fan_2.png)"); + break; + case 3: + ui->fanButton->setStyleSheet( + "background-image: url(:/images/manual_button/fan_3.png)"); + break; + case 4: + ui->fanButton->setStyleSheet( + "background-image: url(:/images/manual_button/fan_4.png)"); + break; + case 5: + ui->fanButton->setStyleSheet( + "background-image: url(:/images/manual_button/fan_5.png)"); + break; + default: + ui->fanButton->setStyleSheet( + "background-image: url(:/images/manual_button/fan_1.png)"); + break; + } } if (oven->paused() && !oven->cooldown() && oven->door()) @@ -323,7 +320,7 @@ QPushButton:pressed {\ else ui->upperStack->setCurrentIndex(0); - if (oven->cooking() || oven->cooldown() || oven->preheating()) + if (oven->cooking()) { ui->reserveButton->hide(); ui->favoriteButton->hide(); @@ -336,7 +333,56 @@ QPushButton:pressed {\ ui->repeatButton->hide(); } - updateLabels(); +} + +void ManualCookWindow::showCurrentHumidity() +{ + showCurrentHumidity_ = true; + updateView(); +} + +void ManualCookWindow::hideCurrentHumidity() +{ + showCurrentHumidity_ = false; + updateView(); +} + +void ManualCookWindow::showCurrentTemp() +{ + showCurrentTemp_ = true; + updateView(); +} + +void ManualCookWindow::hideCurrentTemp() +{ + showCurrentTemp_ = false; + updateView(); +} + +void ManualCookWindow::onOvenUpdated(Oven *oven) +{ + updateView(); + + if (oven->interTempEnabled() && oven->currentInterTemp() >= oven->interTemp()) + { + oven->stopCooking(); + } + + if (repeat && !oven->cooking()) + { + repeat = false; + + ui->repeatButton->setStyleSheet("\ +QPushButton { background-image: url(:/images/manual_button/repeat.png); }\ +QPushButton:pressed { background-image: url(:/images/manual_button/repeat_ov.png); }"); + + oven->setMode(repeatSetting.mode); + oven->setHumidity(repeatSetting.humidity); + oven->setTemp(repeatSetting.temp); + oven->setTime(repeatSetting.time); + oven->setInterTempEnabled(repeatSetting.coreTempEnabled); + oven->setInterTemp(repeatSetting.coreTemp); + } } void ManualCookWindow::setOvenDefault(Define::Mode mode) diff --git a/app/gui/oven_control/manualcookwindow.h b/app/gui/oven_control/manualcookwindow.h index 1d6d40a..e8ac6bb 100644 --- a/app/gui/oven_control/manualcookwindow.h +++ b/app/gui/oven_control/manualcookwindow.h @@ -30,8 +30,7 @@ private slots: void setOvenDefault(Define::Mode mode); void start(); void stop(); - void checkTime(); - void updateLabels(); + void updateView(); void showCurrentHumidity(); void hideCurrentHumidity(); void showCurrentTemp(); @@ -77,7 +76,7 @@ private: Oven *oven; QTimer startCookingTimer; - QTimer checkTimeTimer; + QTimer updateViewTimer; QTimer showCurrentHumidityTimer; QTimer showCurrentTempTimer; @@ -90,6 +89,16 @@ private: bool showCurrentHumidity_ = false; bool showCurrentTemp_ = false; + int lastViewHumidity; + int lastViewTemp; + int lastViewTime; + int lastViewInterTemp; + bool lastViewInterTempEnabled; + bool lastViewCooking; + bool lastViewDamper; + bool lastViewHumidification; + int lastViewFan; + ManualCookSetting repeatSetting; bool repeat; }; -- 2.1.4