From 6f96c947af6920f10c55257446a936e716aa636e Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 31 Mar 2017 10:43:10 +0900 Subject: [PATCH] GUI 0.1.4 --- app/gui/oven_control/animatedimagebox.cpp | 4 +- app/gui/oven_control/autocookconfigwindow.cpp | 228 +++ app/gui/oven_control/autocookconfigwindow.h | 50 + app/gui/oven_control/autocookconfigwindow.ui | 1598 ++++++++++++++++++++ app/gui/oven_control/autocookselectionwindow.cpp | 11 +- app/gui/oven_control/autocookselectionwindow.h | 1 - app/gui/oven_control/autocookselectionwindow.ui | 75 +- app/gui/oven_control/autocookwindow.cpp | 252 ++- app/gui/oven_control/autocookwindow.h | 3 + app/gui/oven_control/autocookwindow.ui | 567 ++++--- app/gui/oven_control/burnertestwindow.cpp | 4 +- app/gui/oven_control/componenttestwindow.cpp | 5 +- app/gui/oven_control/configwindow.cpp | 3 + app/gui/oven_control/cook.cpp | 7 +- app/gui/oven_control/cook.h | 1 + app/gui/oven_control/fantestwindow.cpp | 3 + app/gui/oven_control/functiontestwindow.cpp | 7 +- app/gui/oven_control/functiontestwindow.ui | 12 - app/gui/oven_control/gastestwindow.cpp | 8 + app/gui/oven_control/gastestwindow.h | 2 + .../oven_control/images/auto/object_arrow_001.png | Bin 0 -> 4588 bytes .../oven_control/images/auto/object_arrow_002.png | Bin 0 -> 4600 bytes .../oven_control/images/auto/sys_icon_01_gau.png | Bin 0 -> 3553 bytes .../oven_control/images/auto/sys_icon_01_ov.png | Bin 0 -> 6855 bytes app/gui/oven_control/images/test/bgi-1.BMP | Bin 0 -> 766856 bytes app/gui/oven_control/images/test/bgi-1.png | Bin 0 -> 33627 bytes app/gui/oven_control/images/test/bgi-2.png | Bin 0 -> 13507 bytes app/gui/oven_control/mainwindow.cpp | 18 +- app/gui/oven_control/mainwindow.ui | 1320 +++------------- app/gui/oven_control/manualcookwindow.cpp | 66 +- app/gui/oven_control/manualcookwindow.ui | 570 ++----- app/gui/oven_control/oven_control.pro | 11 +- app/gui/oven_control/ovencontroller.cpp | 4 +- app/gui/oven_control/preheattempgauge.cpp | 62 + app/gui/oven_control/preheattempgauge.h | 33 + app/gui/oven_control/resources.qrc | 5 + app/gui/oven_control/udphandler.cpp | 4 +- app/gui/oven_control/valvetestwindow.cpp | 5 +- app/gui/oven_control/washtestwindow.cpp | 5 +- 39 files changed, 3113 insertions(+), 1831 deletions(-) create mode 100644 app/gui/oven_control/autocookconfigwindow.cpp create mode 100644 app/gui/oven_control/autocookconfigwindow.h create mode 100644 app/gui/oven_control/autocookconfigwindow.ui create mode 100644 app/gui/oven_control/images/auto/object_arrow_001.png create mode 100644 app/gui/oven_control/images/auto/object_arrow_002.png create mode 100644 app/gui/oven_control/images/auto/sys_icon_01_gau.png create mode 100644 app/gui/oven_control/images/auto/sys_icon_01_ov.png create mode 100644 app/gui/oven_control/images/test/bgi-1.BMP create mode 100644 app/gui/oven_control/images/test/bgi-1.png create mode 100644 app/gui/oven_control/images/test/bgi-2.png create mode 100644 app/gui/oven_control/preheattempgauge.cpp create mode 100644 app/gui/oven_control/preheattempgauge.h diff --git a/app/gui/oven_control/animatedimagebox.cpp b/app/gui/oven_control/animatedimagebox.cpp index 37967c3..a168cfb 100644 --- a/app/gui/oven_control/animatedimagebox.cpp +++ b/app/gui/oven_control/animatedimagebox.cpp @@ -22,13 +22,13 @@ void AnimatedImageBox::load(QString fileName) setPixmap(pixmap); images.append(pixmap); - index = 0; +// index = 0; } void AnimatedImageBox::clear() { images.clear(); - index = 0; +// index = 0; } void AnimatedImageBox::start(int msec) diff --git a/app/gui/oven_control/autocookconfigwindow.cpp b/app/gui/oven_control/autocookconfigwindow.cpp new file mode 100644 index 0000000..d30f026 --- /dev/null +++ b/app/gui/oven_control/autocookconfigwindow.cpp @@ -0,0 +1,228 @@ +#include "autocookconfigwindow.h" +#include "ui_autocookconfigwindow.h" + +AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, AbstractCook *cook) : + QMainWindow(parent), + ui(new Ui::AutoCookConfigWindow), + oven(oven), + cook(cook) +{ + ui->setupUi(this); + + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); + + ui->cookTypeIcon->setPixmap(Cook::icon(cook->type())); + ui->selectCookButton->setText(cook->name()); + + configWidgets.append( + ConfigWidget { + ui->configButton_1, + ui->configBlock_1, + ui->configMinLabel_1, + ui->configMaxLabel_1, + ui->configCurrentLabel_1, + ui->configSlider_1 + }); + configWidgets.append( + ConfigWidget { + ui->configButton_2, + ui->configBlock_2, + ui->configMinLabel_2, + ui->configMaxLabel_2, + ui->configCurrentLabel_2, + ui->configSlider_2 + }); + configWidgets.append( + ConfigWidget { + ui->configButton_3, + ui->configBlock_3, + ui->configMinLabel_3, + ui->configMaxLabel_3, + ui->configCurrentLabel_3, + ui->configSlider_3 + }); + configWidgets.append( + ConfigWidget { + ui->configButton_4, + ui->configBlock_4, + ui->configMinLabel_4, + ui->configMaxLabel_4, + ui->configCurrentLabel_4, + ui->configSlider_4 + }); + configWidgets.append( + ConfigWidget { + ui->configButton_5, + ui->configBlock_5, + ui->configMinLabel_5, + ui->configMaxLabel_5, + ui->configCurrentLabel_5, + ui->configSlider_5 + }); + + for (int idx = 0; idx < 5; idx++) + { + AbstractCookConfig *config = cook->configurations[idx]; + if (config == NULL) + { + ConfigWidget cw = configWidgets.at(idx); + cw.button->hide(); + cw.block->hide(); + cw.minimum->hide(); + cw.maximum->hide(); + cw.current->hide(); + cw.slider->hide(); + } + else + { + ConfigWidget cw = configWidgets.at(idx); + cw.button->setStyleSheet( + "QPushButton { border-image: url(" + + config->icon() + + ") } QPushButton::pressed { border-image: url(" + + config->overlayIcon() + + ") }"); + + cw.minimum->setText(config->minLabel()); + cw.maximum->setText(config->maxLabel()); + cw.slider->blockSignals(true); + cw.slider->setMinimum(1); + cw.slider->setMaximum(config->count()); + cw.slider->setValue(config->current()); + cw.slider->blockSignals(false); + + switch (config->type()) + { + case Cook::Time: + cw.slider->setProperty("sliderColor", "white"); + break; + case Cook::BurnDegree: + cw.slider->setProperty("sliderColor", "yellow"); + break; + case Cook::Brightness: + cw.slider->setProperty("sliderColor", "red"); + break; + default: + cw.slider->setProperty("sliderColor", "blue"); + break; + } + + cw.slider->style()->unpolish(cw.slider); + cw.slider->style()->polish(cw.slider); + cw.slider->update(); + + connect(cw.slider, SIGNAL(valueChanged(int)), SLOT(updateConfig())); + } + } + + if (cook->interTempEnabled()) + { + interTempEnabled = true; + + ConfigWidget cw = configWidgets.at(3); + cw.button->show(); + cw.button->setStyleSheet( + "QPushButton {" + " border-image: url(:/images/images/auto/011_icon_04_ov_01.png)" + "} QPushButton::pressed {" + " border-image: url(:/images/images/auto/011_icon_04_ov.png)" + "}"); + + cw.block->show(); + cw.minimum->hide(); + cw.maximum->hide(); + cw.current->hide(); + cw.slider->hide(); + + connect(cw.button, SIGNAL(clicked()), SLOT(changeInterTemp())); + } + +} + +AutoCookConfigWindow::~AutoCookConfigWindow() +{ + delete ui; +} + +void AutoCookConfigWindow::updateView() +{ + for (int idx = 0; idx < 5; idx++) + { + if (interTempEnabled && idx == 3) + continue; + + AbstractCookConfig *config = cook->configurations[idx]; + if (config == NULL) + continue; + + ConfigWidget cw = configWidgets.at(idx); + + switch (config->type()) + { + case Cook::Time: + { + int time = cook->time(); + if (time >= 3600) + cw.current->setText(QString().sprintf( + "%d" + "시간" + " %02d" + "", + time / 3600, + (time % 3600) / 60)); + else if (time >= 60) + cw.current->setText(QString().sprintf( + "%d" + "" + " %02d" + "", + time / 60, + time % 60)); + else + cw.current->setText(QString().sprintf( + "%d" + "", + time)); + break; + } + case Cook::BurnDegree: + cw.slider->setProperty("sliderColor", "yellow"); + break; + case Cook::Brightness: + cw.slider->setProperty("sliderColor", "red"); + break; + default: + cw.slider->setProperty("sliderColor", "blue"); + break; + } + } + + if (cook->interTempEnabled()) + { + ConfigWidget cw = configWidgets.at(3); + cw.button->show(); + cw.button->setStyleSheet( + "QPushButton {" + " border-image: url(:/images/images/auto/011_icon_04_ov_01.png)" + "} QPushButton::pressed {" + " border-image: url(:/images/images/auto/011_icon_04_ov.png)" + "}"); + + cw.block->show(); + cw.minimum->hide(); + cw.maximum->hide(); + cw.current->hide(); + cw.slider->hide(); + } +} + +void AutoCookConfigWindow::updateConfig() +{ + +} + +void AutoCookConfigWindow::changeInterTemp() +{ + cook->setInterTempEnabled(!cook->interTempEnabled()); +} diff --git a/app/gui/oven_control/autocookconfigwindow.h b/app/gui/oven_control/autocookconfigwindow.h new file mode 100644 index 0000000..5f594b3 --- /dev/null +++ b/app/gui/oven_control/autocookconfigwindow.h @@ -0,0 +1,50 @@ +#ifndef AUTOCOOKCONFIGWINDOW_H +#define AUTOCOOKCONFIGWINDOW_H + +#include +#include +#include +#include +#include + +#include "oven.h" +#include "cook.h" + +namespace Ui { +class AutoCookConfigWindow; +} + +class AutoCookConfigWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit AutoCookConfigWindow(QWidget *parent = 0, Oven *oven = 0, AbstractCook *cook = 0); + ~AutoCookConfigWindow(); + +private: + Ui::AutoCookConfigWindow *ui; + Oven *oven; + AbstractCook *cook; + + QTimer cookStartTimer; + bool interTempEnabled; + + struct ConfigWidget { + QPushButton *button; + QWidget *block; + QLabel *minimum; + QLabel *maximum; + QLabel *current; + QSlider *slider; + }; + + QList configWidgets; + +private slots: + void updateView(); + void updateConfig(); + void changeInterTemp(); +}; + +#endif // AUTOCOOKCONFIGWINDOW_H diff --git a/app/gui/oven_control/autocookconfigwindow.ui b/app/gui/oven_control/autocookconfigwindow.ui new file mode 100644 index 0000000..cb2844a --- /dev/null +++ b/app/gui/oven_control/autocookconfigwindow.ui @@ -0,0 +1,1598 @@ + + + AutoCookConfigWindow + + + + 0 + 0 + 900 + 1600 + + + + MainWindow + + + #centralwidget { +background-image: url(:/images/images/auto/ba_ground_set(full)_01); +} + +QSlider::groove { +background-image: url(:/images/images/auto/gau_04.png); +background-repeat: no-repeat; +background-position: center; +} + +QSlider::sub-page { +background-repeat: no-repeat; +background-position: left center; +margin: 0px 5px; +} + +QSlider[sliderColor="red"]::sub-page { +background-image: url(:/images/images/auto/gau_05.png); +} + +QSlider[sliderColor="yellow"]::sub-page { +background-image: url(:/images/images/auto/gau_06.png); +} + +QSlider[sliderColor="white"]::sub-page { +background-image: url(:/images/images/auto/gau_07.png); +} + +QSlider[sliderColor="blue"]::sub-page { +background-image: url(:/images/images/auto/gau_09.png); +} + +QSlider[sliderColor="green"]::sub-page { +background-image: url(:/images/images/auto/sys_icon_01_gau.png); +} + +QSlider::handle { +background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png); +background-repeat: no-repeat; +background-position: center; +width: 23px; +height: 33px; +} + + + + + + 0 + 0 + 900 + 426 + + + + + QWidget#clockContainer { +background-image: url(:/images/images/config/001_01_background_time.png); +} + + + + + 272 + 36 + 356 + 355 + + + + + + + + + + 0 + 1450 + 900 + 150 + + + + QWidget#bottomBar { +background-image: url(:/images/images/config_service/001_01_background_under_down.png); +} + + + + + 175 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_03.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_03_ov.png); } + + + + + + + + + 514 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_05.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_05_ov.png); } + + + + + + + + + 288 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_01.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_01_ov.png); } + + + + + + + + + 627 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_02.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_02_ov.png); } + + + + + + + + + 401 + 26 + 97 + 97 + + + + + 0 + 0 + + + + + + + + + + + + + true + + + + 700 + 1300 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 증가 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + true + + + + 185 + 1300 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 감소 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 420 + 480 + 288 + 70 + + + + + Roboto + 10 + 75 + true + + + + QPushButton { +border-image: url(:/images/images/auto/btn_01.png); +} +QPushButton::pressed { +border-image: url(:/images/images/auto/btn_01_ov.png); +} + + + + + + + + true + + + + 199 + 850 + 641 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Roboto + 16 + 75 + true + + + + 스팀 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + true + + + + 700 + 950 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 증가 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + true + + + + 185 + 950 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 감소 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + true + + + + 185 + 1130 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 감소 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 720 + 480 + 152 + 70 + + + + QPushButton { +border-image: url(:/images/images/auto/btn_02.png); +} +QPushButton::pressed { +border-image: url(:/images/images/auto/btn_02_ov.png); +} + + + + + + + :/images/images/auto/btn_icon_01.png:/images/images/auto/btn_icon_01.png + + + + 40 + 51 + + + + + + + 49 + 627 + 96 + 96 + + + + QPushButton { + border-image: url(:/images/images/manual/011_icon_01.png); +} + +QPushButton:pressed { + border-image: url(:/images/images/manual/011_icon_01_ov.png); +} + + + + + + + + + + 185 + 1173 + 666 + 33 + + + + 100 + + + 1 + + + 0 + + + true + + + Qt::Horizontal + + + + + + 49 + 1137 + 96 + 96 + + + + QPushButton { + border-image: url(:/images/images/manual/011_icon_01.png); +} + +QPushButton:pressed { + border-image: url(:/images/images/manual/011_icon_01_ov.png); +} + + + + + + + + + true + + + + 700 + 780 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 증가 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 27 + 935 + 140 + 140 + + + + background-image: url(:/images/images/manual/010_icon_block.png); + + + + + + 27 + 1115 + 140 + 140 + + + + background-image: url(:/images/images/manual/010_icon_block.png); + + + + + + 185 + 823 + 666 + 33 + + + + 100 + + + 1 + + + 10 + + + true + + + Qt::Horizontal + + + + + true + + + + 189 + 1370 + 651 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Roboto + 16 + 75 + true + + + + 스팀 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + true + + + + 185 + 780 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 감소 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 185 + 993 + 666 + 33 + + + + 100 + + + 1 + + + 0 + + + true + + + Qt::Horizontal + + + + + true + + + + 700 + 1130 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 증가 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 49 + 787 + 96 + 96 + + + + QPushButton { + border-image: url(:/images/images/manual/011_icon_01.png); +} + +QPushButton:pressed { + border-image: url(:/images/images/manual/011_icon_01_ov.png); +} + + + + + + + + + true + + + + 185 + 620 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 감소 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + 27 + 765 + 140 + 140 + + + + background-image: url(:/images/images/manual/010_icon_block.png); + + + + + true + + + + 700 + 620 + 151 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 9 + + + + 증가 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + true + + + + 199 + 1020 + 641 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Roboto + 16 + 75 + true + + + + 스팀 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + true + + + + 199 + 690 + 641 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Roboto + 16 + 75 + true + + + + 스팀 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 0 + 430 + 250 + 150 + + + + + + + :/images/images/auto/005_auto_icon_01_ov.png + + + Qt::AlignCenter + + + + + + 27 + 605 + 140 + 140 + + + + background-image: url(:/images/images/manual/010_icon_block.png); + + + + + + 27 + 1285 + 140 + 140 + + + + background-image: url(:/images/images/manual/010_icon_block.png); + + + + + + 49 + 1307 + 96 + 96 + + + + QPushButton { + border-image: url(:/images/images/manual/011_icon_01.png); +} + +QPushButton:pressed { + border-image: url(:/images/images/manual/011_icon_01_ov.png); +} + + + + + + + + + + 185 + 1343 + 666 + 33 + + + + 100 + + + 1 + + + 0 + + + true + + + Qt::Horizontal + + + + + true + + + + 199 + 1200 + 641 + 51 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Roboto + 16 + 75 + true + + + + 스팀 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 49 + 957 + 96 + 96 + + + + QPushButton { + border-image: url(:/images/images/manual/011_icon_01.png); +} + +QPushButton:pressed { + border-image: url(:/images/images/manual/011_icon_01_ov.png); +} + + + + + + + + + + 185 + 663 + 666 + 33 + + + + 100 + + + 1 + + + 39 + + + true + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 1 + + + configBlock_4 + configBlock_2 + configBlock_1 + upperStack + bottomBar + configMaxLabel_5 + configMinLabel_5 + selectCookButton + configCurrentLabel_2 + configMaxLabel_3 + configMinLabel_3 + configMinLabel_4 + pushButton_4 + configButton_1 + configSlider_4 + configButton_4 + configMaxLabel_2 + configBlock_3 + configSlider_2 + configCurrentLabel_5 + configMinLabel_2 + configSlider_3 + configMaxLabel_4 + configButton_2 + configMinLabel_1 + configMaxLabel_1 + configCurrentLabel_3 + configCurrentLabel_1 + cookTypeIcon + configBlock_5 + configButton_5 + configSlider_5 + configCurrentLabel_4 + configButton_3 + configSlider_1 + + + + + Clock + QWidget +
clock.h
+ 1 +
+
+ + + + +
diff --git a/app/gui/oven_control/autocookselectionwindow.cpp b/app/gui/oven_control/autocookselectionwindow.cpp index f44e88e..4b5df7b 100644 --- a/app/gui/oven_control/autocookselectionwindow.cpp +++ b/app/gui/oven_control/autocookselectionwindow.cpp @@ -2,6 +2,7 @@ #include "ui_autocookselectionwindow.h" #include +#include #include "autocookwindow.h" @@ -12,6 +13,7 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); setAttribute(Qt::WA_DeleteOnClose); ui->cookTypeIcon->setPixmap(Cook::icon(type)); @@ -76,14 +78,11 @@ void AutoCookSelectionWindow::onCookSelected(int idx) autoCookWindowOpened = true; - AutoCookWindow *w = new AutoCookWindow(this, oven, cookList.at(idx)); + AutoCookWindow *w = new AutoCookWindow(parentWidget(), oven, cookList.takeAt(idx)); + w->setWindowModality(Qt::WindowModal); w->showFullScreen(); - connect(w, SIGNAL(destroyed(QObject*)), SLOT(onAutoCookWindowDestroyed())); -} -void AutoCookSelectionWindow::onAutoCookWindowDestroyed() -{ - autoCookWindowOpened = false; + close(); } void AutoCookSelectionWindow::on_backButton_clicked() diff --git a/app/gui/oven_control/autocookselectionwindow.h b/app/gui/oven_control/autocookselectionwindow.h index 93190cc..e116740 100644 --- a/app/gui/oven_control/autocookselectionwindow.h +++ b/app/gui/oven_control/autocookselectionwindow.h @@ -20,7 +20,6 @@ public: private slots: void onCookSelected(int idx); - void onAutoCookWindowDestroyed(); void on_backButton_clicked(); diff --git a/app/gui/oven_control/autocookselectionwindow.ui b/app/gui/oven_control/autocookselectionwindow.ui index 0ac80b6..88a968f 100644 --- a/app/gui/oven_control/autocookselectionwindow.ui +++ b/app/gui/oven_control/autocookselectionwindow.ui @@ -62,7 +62,7 @@ background-image: url(:/images/images/config/001_01_background_time.png); - 401 + 232 26 97 97 @@ -75,8 +75,77 @@ background-image: url(:/images/images/config/001_01_background_time.png); - QPushButton { border-image: url(:/images/images/config_service/006_sys_icon_03.png); } -QPushButton:pressed { border-image: url(:/images/images/config_service/006_sys_icon_03_ov.png); } + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_03.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_03_ov.png); } + + + + + + + + + 345 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_01.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_01_ov.png); } + + + + + + + + + 458 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_05.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_05_ov.png); } + + + + + + + + + 571 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_02.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_02_ov.png); } diff --git a/app/gui/oven_control/autocookwindow.cpp b/app/gui/oven_control/autocookwindow.cpp index bc94925..9298351 100644 --- a/app/gui/oven_control/autocookwindow.cpp +++ b/app/gui/oven_control/autocookwindow.cpp @@ -7,25 +7,20 @@ AutoCookWindow::AutoCookWindow(QWidget *parent, Oven *oven, AbstractCook *cook) oven(oven), cook(cook), started(false), + done(false), selectedStepIndex(0) { ui->setupUi(this); - setAttribute(Qt::WA_DeleteOnClose); - ui->clockContainer->setParent(ui->upperStack); - - bulletPixmap.load(":/images/images/auto/window_arrow_pin_02.png"); - selectedBulletPixmap.load(":/images/images/auto/window_arrow_pin_01.png"); - steamModeIcon.load(":/images/images/auto/window_icon_04.png"); - dryModeIcon.load(":/images/images/auto/window_icon_06.png"); - combiModeIcon.load(":/images/images/auto/window_icon_05.png"); + setAttribute(Qt::WA_DeleteOnClose); connect(oven, SIGNAL(changed(Oven*)), SLOT(onOvenUpdated())); oven->setDefault(Oven::CombinationMode); lastHumidity = oven->currentHumidity(); lastTemp = oven->currentTemp(); + lastDoorView = Cook::Invalid; QTimer *cookStartTimer = new QTimer(this); cookStartTimer->setSingleShot(true); @@ -102,10 +97,18 @@ AutoCookWindow::AutoCookWindow(QWidget *parent, Oven *oven, AbstractCook *cook) AutoCookWindow::~AutoCookWindow() { delete ui; + + delete cook; } void AutoCookWindow::setupUi() { + bulletPixmap.load(":/images/images/auto/window_arrow_pin_02.png"); + selectedBulletPixmap.load(":/images/images/auto/window_arrow_pin_01.png"); + steamModeIcon.load(":/images/images/auto/window_icon_04.png"); + dryModeIcon.load(":/images/images/auto/window_icon_06.png"); + combiModeIcon.load(":/images/images/auto/window_icon_05.png"); + QString cookTypeIcon = Cook::icon(cook->type()); ui->cookTypeIcon_1->setPixmap(cookTypeIcon); ui->cookTypeIcon_2->setPixmap(cookTypeIcon); @@ -191,7 +194,25 @@ void AutoCookWindow::setupUi() slider->setValue(config->current()); slider->blockSignals(false); - qDebug() << "Current value" << config->current(); + switch (config->type()) + { + case Cook::Time: + slider->setProperty("sliderColor", QString("white")); + break; + case Cook::BurnDegree: + slider->setProperty("sliderColor", QString("yellow")); + break; + case Cook::Brightness: + slider->setProperty("sliderColor", QString("red")); + break; + default: + slider->setProperty("sliderColor", QString("blue")); + break; + } + + slider->style()->unpolish(slider); + slider->style()->polish(slider); + slider->update(); } else { @@ -243,12 +264,38 @@ void AutoCookWindow::setupUi() ui->heatGauge->setMaximum(300); ui->heatGauge->setValue(30); + ui->openDoorAnimation->load(":/images/images/auto/ani_01.png"); + ui->openDoorAnimation->load(":/images/images/auto/ani_02.png"); + ui->openDoorAnimation->load(":/images/images/auto/ani_03.png"); + ui->openDoorAnimation->load(":/images/images/auto/ani_04.png"); + ui->openDoorAnimation->load(":/images/images/auto/ani_05.png"); + ui->openDoorAnimation->load(":/images/images/auto/ani_06.png"); + ui->openDoorAnimation->load(":/images/images/auto/ani_07.png"); + ui->openDoorAnimation->load(":/images/images/auto/ani_08.png"); + ui->openDoorAnimation->load(":/images/images/auto/ani_09.png"); + ui->openDoorAnimation->start(300); + ui->openDoorAnimation->hide(); + ui->openDoorArrow->hide(); + + ui->closeDoorAnimation->load(":/images/images/auto/ani_09.png"); + ui->closeDoorAnimation->load(":/images/images/auto/ani_08.png"); + ui->closeDoorAnimation->load(":/images/images/auto/ani_07.png"); + ui->closeDoorAnimation->load(":/images/images/auto/ani_06.png"); + ui->closeDoorAnimation->load(":/images/images/auto/ani_05.png"); + ui->closeDoorAnimation->load(":/images/images/auto/ani_04.png"); + ui->closeDoorAnimation->load(":/images/images/auto/ani_03.png"); + ui->closeDoorAnimation->load(":/images/images/auto/ani_02.png"); + ui->closeDoorAnimation->load(":/images/images/auto/ani_01.png"); + ui->closeDoorAnimation->start(300); + ui->closeDoorAnimation->hide(); + ui->closeDoorArrow->hide(); + updateView(); } void AutoCookWindow::updateView() { - qDebug() << "updateView"; +// qDebug() << "updateView"; if (started) { ui->stackedWidget->setCurrentIndex(1); @@ -266,15 +313,48 @@ void AutoCookWindow::updateView() int time = oven->time(); if (time >= 3600) - ui->timeLabel->setText(QString().sprintf("%d시간 %02d분", time / 3600, (time % 3600) / 60)); + ui->timeLabel->setText(QString().sprintf("%d시간 %02d", time / 3600, (time % 3600) / 60)); else if (time >= 60) - ui->timeLabel->setText(QString().sprintf("%d분 %02d초", time / 60, time % 60)); + ui->timeLabel->setText(QString().sprintf("%d %02d", time / 60, time % 60)); else - ui->timeLabel->setText(QString().sprintf("%d초", time)); + ui->timeLabel->setText(QString().sprintf("%d", time)); int curInterTemp = oven->currentInterTemp(); - int interTemp = oven->interTemp(); - ui->interTempLabel->setText(QString().sprintf("%d℃ / %d℃", curInterTemp, interTemp)); + if (interTempEnabled) + { + int interTemp = oven->interTemp(); + ui->interTempLabel->setText(QString().sprintf("%d℃ / %d", curInterTemp, interTemp)); + } + else + ui->interTempLabel->setText(QString().sprintf("%d", curInterTemp)); + + if (!done) + { + if (oven->door()) + { + ui->closeDoorAnimation->show(); + ui->closeDoorArrow->show(); + ui->openDoorAnimation->hide(); + ui->openDoorArrow->hide(); + } + else + { + ui->closeDoorAnimation->hide(); + ui->closeDoorArrow->hide(); + + Cook::Step step = cook->currentStep(); + if (Cook::classify(step.type) == Cook::DoorClass) + { + ui->openDoorAnimation->show(); + ui->openDoorArrow->show(); + } + else + { + ui->openDoorAnimation->hide(); + ui->openDoorArrow->hide(); + } + } + } } else { @@ -312,13 +392,24 @@ void AutoCookWindow::updateView() break; } + int time = cook->time(); + int interTemp = cook->interTemp(); + switch (config->type()) { -// case Cook::Time: -// l->setText(QString().sprintf("%d", cook->time())); -// break; + case Cook::Time: + if (time >= 3600) + l->setText(QString().sprintf("%d시간 %02d", time / 3600, (time % 3600) / 60)); + else if (time >= 60) + l->setText(QString().sprintf("%d %02d", time / 60, time % 60)); + else + l->setText(QString().sprintf("%d", time)); + break; + case Cook::BurnDegree: + l->setText(QString().sprintf("%d", interTemp)); + break; default: - l->setText(QString().sprintf("%d / %d", config->current(), config->count())); + l->setText(QString().sprintf("%d/%d", config->current(), config->count())); break; } } @@ -346,7 +437,7 @@ void AutoCookWindow::updateView() void AutoCookWindow::viewStep(Cook::Step step) { - qDebug() << "viewStep" << step.type; +// qDebug() << "viewStep" << step.type; switch (Cook::classify(step.type)) { case Cook::PreheatClass: @@ -405,12 +496,11 @@ void AutoCookWindow::viewPreheatStep(Cook::Step step) void AutoCookWindow::viewDoorStep(Cook::Step step) { - qDebug() << "viewDoorStep"; +// qDebug() << "viewDoorStep"; ui->cookStepLabel->hide(); ui->cookStepIcon->hide(); ui->doorStepLabel->show(); ui->cookStepAnimation->show(); - ui->cookStepAnimation->clear(); ui->humidityGauge->hide(); ui->humidityLabel->hide(); @@ -418,39 +508,49 @@ void AutoCookWindow::viewDoorStep(Cook::Step step) ui->heatLabel->hide(); ui->cookModeIcon->hide(); - switch (step.type) + if (lastDoorView != step.type) { - case Cook::PutThermometer: - ui->doorStepLabel->setText("중심 온도계 삽입"); - ui->cookStepAnimation->load(":/images/images/auto/ani_d_01.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_d_02.png"); - ui->cookStepAnimation->setGeometry((900-210)/2, 800, 210, 307); - break; - case Cook::Load: - ui->doorStepLabel->setText("식재료 적재"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_01.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_02.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_03.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_04.png"); - ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307); - break; - case Cook::Cut: - ui->doorStepLabel->setText("자르기"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_b_01.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_b_02.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_b_03.png"); - ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307); - break; - case Cook::Pour: - ui->doorStepLabel->setText("물 붓기"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_a_01.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_a_02.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_a_03.png"); - ui->cookStepAnimation->load(":/images/images/auto/ani_frame_a_04.png"); - ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307); - break; - default: - ui->doorStepLabel->hide(); + lastDoorView = step.type; + qDebug() << "clearStepAnimation"; + + ui->cookStepAnimation->clear(); + switch (step.type) + { + case Cook::PutThermometer: + ui->doorStepLabel->setText("중심 온도계 삽입"); + ui->cookStepAnimation->load(":/images/images/auto/ani_d_01.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_d_02.png"); + ui->cookStepAnimation->setGeometry((900-210)/2, 800, 210, 307); + break; + case Cook::Load: + ui->doorStepLabel->setText("식재료 적재"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_01.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_02.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_03.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_04.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_03.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_02.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_c_01.png"); + ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307); + break; + case Cook::Cut: + ui->doorStepLabel->setText("자르기"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_b_01.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_b_02.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_b_03.png"); + ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307); + break; + case Cook::Pour: + ui->doorStepLabel->setText("물 붓기"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_a_01.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_a_02.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_a_03.png"); + ui->cookStepAnimation->load(":/images/images/auto/ani_frame_a_04.png"); + ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307); + break; + default: + ui->doorStepLabel->hide(); + } } } @@ -504,6 +604,13 @@ void AutoCookWindow::doPreheatStep(Cook::Step step) lastHumidity = oven->currentHumidity(); lastTemp = oven->currentTemp(); + + ui->preheatIcon->show(); + ui->preheatLabel->show(); + ui->preheatGauge->show(); + ui->preheatGauge->setMaximum(step.temp); + ui->preheatGauge->setMinimum(lastTemp); + ui->preheatGauge->setValue(lastTemp); } void AutoCookWindow::doDoorStep(Cook::Step /*step*/) @@ -531,12 +638,20 @@ static bool checkReached(int target, int last, int current) void AutoCookWindow::checkPreheatStep(Cook::Step step) { + int curTemp = oven->currentTemp(); + + ui->preheatGauge->setValue(curTemp); + if (/*checkReached(step.humidity, lastHumidity, oven->currentHumidity()) - && */checkReached(step.temp, lastTemp, oven->currentTemp())) + && */checkReached(step.temp, lastTemp, curTemp)) { if (selectedStepIndex == cook->currentStepIndex()) selectedStepIndex = cook->currentStepIndex() + 1; + ui->preheatIcon->hide(); + ui->preheatLabel->hide(); + ui->preheatGauge->hide(); + cook->setCurrentStepIndex(cook->currentStepIndex() + 1); doStep(); } @@ -544,7 +659,7 @@ void AutoCookWindow::checkPreheatStep(Cook::Step step) void AutoCookWindow::checkDoorStep(Cook::Step /*step*/) { - qDebug() << "checkDoorStep" << opened << oven->door(); +// qDebug() << "checkDoorStep" << opened << oven->door(); if (opened) { if (!oven->door()) @@ -588,6 +703,27 @@ void AutoCookWindow::checkCookStep(Cook::Step step) } } } + else /*if current step == last step*/ + { + if (done) + { + + } + else + { + if ((interTempEnabled && cook->interTemp() == oven->currentInterTemp()) + || oven->time() == 0) + { + done = true; + ui->openDoorAnimation->show(); + ui->openDoorArrow->show(); + ui->closeDoorAnimation->hide(); + ui->closeDoorArrow->hide(); + + oven->setTime(0); + } + } + } } void AutoCookWindow::start() @@ -596,8 +732,8 @@ void AutoCookWindow::start() started = true; oven->setTime(cook->time()); - oven->setInterTempEnabled(interTempEnabled); oven->setInterTemp(cook->interTemp()); + oven->setInterTempEnabled(interTempEnabled); doStep(); checkCookTimer.start(); @@ -636,7 +772,7 @@ void AutoCookWindow::doStep() void AutoCookWindow::checkCook() { - qDebug() << "checkCook"; +// qDebug() << "checkCook"; Cook::Step step = cook->currentStep(); switch (Cook::classify(step.type)) { diff --git a/app/gui/oven_control/autocookwindow.h b/app/gui/oven_control/autocookwindow.h index d19d436..de1b134 100644 --- a/app/gui/oven_control/autocookwindow.h +++ b/app/gui/oven_control/autocookwindow.h @@ -31,6 +31,7 @@ private: Oven *oven; AbstractCook *cook; bool started; + bool done; bool opened; bool interTempEnabled; @@ -52,6 +53,8 @@ private: int lastHumidity; int lastTemp; + Cook::StepType lastDoorView; + void setupUi(); void viewStep(Cook::Step step); void viewPreheatStep(Cook::Step step); diff --git a/app/gui/oven_control/autocookwindow.ui b/app/gui/oven_control/autocookwindow.ui index 1390572..28d3456 100644 --- a/app/gui/oven_control/autocookwindow.ui +++ b/app/gui/oven_control/autocookwindow.ui @@ -16,6 +16,52 @@ #centralwidget { background-image: url(:/images/images/auto/ba_ground_a01.png); +} + +QSlider::groove { +background-image: url(:/images/images/auto/gau_04.png); +background-repeat: no-repeat; +background-position: center; +} + +QSlider::sub-page { +background-repeat: no-repeat; +background-position: left center; +margin: 0px 5px; +} + +QSlider[sliderColor="red"]::sub-page { +background-image: url(:/images/images/auto/gau_05.png); +} + +QSlider[sliderColor="yellow"]::sub-page { +background-image: url(:/images/images/auto/gau_06.png); +} + +QSlider[sliderColor="white"]::sub-page { +background-image: url(:/images/images/auto/gau_07.png); +} + +QSlider[sliderColor="blue"]::sub-page { +background-image: url(:/images/images/auto/gau_09.png); +} + +QSlider[sliderColor="green"]::sub-page { +background-image: url(:/images/images/auto/sys_icon_01_gau.png); +} + +QSlider::handle { +background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png); +background-repeat: no-repeat; +background-position: center; +width: 23px; +height: 33px; +} + +QPushButton { +background-repeat: no-repeat; +background-position: center; +border: none; } @@ -150,33 +196,6 @@ border-image: url(:/images/images/auto/btn_02_ov.png); 33 - - QSlider::groove { -background-image: url(:/images/images/manual/010_gauge_bar_bar.png); -height: 25px; -margin-bottom: 8px; -} - -QSlider::sub-page { -background-image: url(:/images/images/manual/010_gauge_bar_stick_01.png); -height: 25px; -margin-top: 5px; -margin-left: 5px; -margin-bottom: 13px; -} - -QSlider::handle { -background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png); -width: 23px; -margin-bottom: -7px; -} - -QSlider { -background-image: url(:/images/images/auto/gau_04.png); -background-repeat: no-repeat; -} - - 100 @@ -184,7 +203,7 @@ background-repeat: no-repeat; 1 - 0 + 39 true @@ -192,6 +211,12 @@ background-repeat: no-repeat; Qt::Horizontal + + QSlider::TicksBelow + + + 1 + @@ -199,9 +224,9 @@ background-repeat: no-repeat; - 690 + 199 690 - 150 + 641 51 @@ -244,8 +269,10 @@ background-repeat: no-repeat; - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -568,9 +595,9 @@ QPushButton:pressed { - 690 + 199 850 - 150 + 641 51 @@ -613,8 +640,10 @@ QPushButton:pressed { - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -646,33 +675,6 @@ QPushButton:pressed { 33 - - QSlider::groove { -background-image: url(:/images/images/manual/010_gauge_bar_bar.png); -height: 25px; -margin-bottom: 8px; -} - -QSlider::sub-page { -background-image: url(:/images/images/manual/010_gauge_bar_stick_01.png); -height: 25px; -margin-top: 5px; -margin-left: 5px; -margin-bottom: 13px; -} - -QSlider::handle { -background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png); -width: 23px; -margin-bottom: -7px; -} - -QSlider { -background-image: url(:/images/images/auto/gau_04.png); -background-repeat: no-repeat; -} - - 100 @@ -680,7 +682,7 @@ background-repeat: no-repeat; 1 - 0 + 10 true @@ -842,9 +844,9 @@ QPushButton:pressed { - 690 + 199 1020 - 150 + 641 51 @@ -887,8 +889,10 @@ QPushButton:pressed { - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -920,33 +924,6 @@ QPushButton:pressed { 33 - - QSlider::groove { -background-image: url(:/images/images/manual/010_gauge_bar_bar.png); -height: 25px; -margin-bottom: 8px; -} - -QSlider::sub-page { -background-image: url(:/images/images/manual/010_gauge_bar_stick_01.png); -height: 25px; -margin-top: 5px; -margin-left: 5px; -margin-bottom: 13px; -} - -QSlider::handle { -background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png); -width: 23px; -margin-bottom: -7px; -} - -QSlider { -background-image: url(:/images/images/auto/gau_04.png); -background-repeat: no-repeat; -} - - 100 @@ -1116,9 +1093,9 @@ QPushButton:pressed { - 690 + 199 1200 - 150 + 641 51 @@ -1161,8 +1138,10 @@ QPushButton:pressed { - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -1194,33 +1173,6 @@ QPushButton:pressed { 33 - - QSlider::groove { -background-image: url(:/images/images/manual/010_gauge_bar_bar.png); -height: 25px; -margin-bottom: 8px; -} - -QSlider::sub-page { -background-image: url(:/images/images/manual/010_gauge_bar_stick_01.png); -height: 25px; -margin-top: 5px; -margin-left: 5px; -margin-bottom: 13px; -} - -QSlider::handle { -background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png); -width: 23px; -margin-bottom: -7px; -} - -QSlider { -background-image: url(:/images/images/auto/gau_04.png); -background-repeat: no-repeat; -} - - 100 @@ -1390,9 +1342,9 @@ QPushButton:pressed { - 690 + 189 1370 - 150 + 651 51 @@ -1435,8 +1387,10 @@ QPushButton:pressed { - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -1468,33 +1422,6 @@ QPushButton:pressed { 33 - - QSlider::groove { -background-image: url(:/images/images/manual/010_gauge_bar_bar.png); -height: 25px; -margin-bottom: 8px; -} - -QSlider::sub-page { -background-image: url(:/images/images/manual/010_gauge_bar_stick_01.png); -height: 25px; -margin-top: 5px; -margin-left: 5px; -margin-bottom: 13px; -} - -QSlider::handle { -background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png); -width: 23px; -margin-bottom: -7px; -} - -QSlider { -background-image: url(:/images/images/auto/gau_04.png); -background-repeat: no-repeat; -} - - 100 @@ -1664,18 +1591,18 @@ border-image: url(:/images/images/auto/btn_01_ov.png); - 20 - 860 - 38 - 60 + 10 + 715 + 60 + 400 QPushButton { -border-image: url(:/images/images/auto/time_window_02.png); +background-image: url(:/images/images/auto/time_window_02.png); } QPushButton::pressed { -border-image: url(:/images/images/auto/window_arrow_01_expand.png); +background-image: url(:/images/images/auto/window_arrow_01_expand.png); } @@ -1685,18 +1612,18 @@ border-image: url(:/images/images/auto/window_arrow_01_expand.png); - 840 - 850 - 38 - 60 + 830 + 715 + 60 + 400 QPushButton { -border-image: url(:/images/images/auto/time_window_03.png); +background-image: url(:/images/images/auto/time_window_03.png); } QPushButton::pressed { -border-image: url(:/images/images/auto/window_arrow_02_expand.png); +background-image: url(:/images/images/auto/window_arrow_02_expand.png); } @@ -1899,7 +1826,7 @@ border-image: url(:/images/images/auto/window_icon_03_ov.png); Qt::AlignCenter - + 40 @@ -2067,8 +1994,10 @@ border-image: url(:/images/images/auto/window_icon_03_ov.png); - Malgun Gothic - 14 + Roboto + 16 + 75 + true @@ -2126,8 +2055,10 @@ border-image: url(:/images/images/auto/window_icon_03_ov.png); - Malgun Gothic - 14 + Roboto + 16 + 75 + true @@ -2185,8 +2116,8 @@ border-image: url(:/images/images/auto/window_icon_03_ov.png); - Malgun Gothic - 14 + Roboto + 16 75 true @@ -2243,8 +2174,8 @@ border-image: url(:/images/images/auto/window_icon_03_ov.png); - Malgun Gothic - 14 + Roboto + 16 75 true @@ -2341,6 +2272,185 @@ border-image: url(:/images/images/auto/window_icon_03_ov.png); + + + + 460 + 1360 + 415 + 58 + + + + + + + 260 + 1370 + 100 + 48 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 14 + + + + + + + :/images/images/auto/sys_icon_05.png + + + Qt::AlignCenter + + + + + + 330 + 1370 + 131 + 48 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 123 + 123 + 123 + + + + + + + + + Malgun Gothic + 14 + + + + 예열 중 + + + Qt::AlignCenter + + + + + + 40 + 1220 + 251 + 201 + + + + + + + :/images/images/auto/ani_04.png + + + + + + 80 + 1320 + 85 + 24 + + + + + + + :/images/images/auto/object_arrow_002.png + + + + + + 80 + 1320 + 85 + 24 + + + + + + + :/images/images/auto/object_arrow_001.png + + @@ -2367,6 +2477,98 @@ background-image: url(:/images/images/config_service/001_01_background_under_dow + 175 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_03.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_03_ov.png); } + + + + + + + + + 514 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_05.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_05_ov.png); } + + + + + + + + + 288 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_01.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_01_ov.png); } + + + + + + + + + 627 + 26 + 97 + 97 + + + + + 0 + 0 + + + + QPushButton { border-image: url(:/images/images/auto/006_sys_icon_02.png); } +QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_02_ov.png); } + + + + + + + + 401 26 97 @@ -2380,8 +2582,7 @@ background-image: url(:/images/images/config_service/001_01_background_under_dow - QPushButton { border-image: url(:/images/images/config_service/006_sys_icon_03.png); } -QPushButton:pressed { border-image: url(:/images/images/config_service/006_sys_icon_03_ov.png); } + @@ -2417,6 +2618,12 @@ QPushButton:pressed { border-image: url(:/images/images/config_service/006_sys_i
heatcirculargauge.h
1 + + PreheatTempGauge + QWidget +
preheattempgauge.h
+ 1 +
diff --git a/app/gui/oven_control/burnertestwindow.cpp b/app/gui/oven_control/burnertestwindow.cpp index 264b268..fcc94a9 100644 --- a/app/gui/oven_control/burnertestwindow.cpp +++ b/app/gui/oven_control/burnertestwindow.cpp @@ -8,7 +8,9 @@ BurnerTestWindow::BurnerTestWindow(QWidget *parent, UdpHandler *udp) : ui(new Ui::BurnerTestWindow), udp(udp) { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); steamTimer.setInterval(5 * 60 * 1000); upperTimer.setInterval(5 * 60 * 1000); @@ -141,7 +143,7 @@ void BurnerTestWindow::on_backButton_clicked() udp->turnOff(TG_MANUAL_BURNER3); udp->turnOff(TG_SYSTEM); - deleteLater(); + close(); } void BurnerTestWindow::steamOn() diff --git a/app/gui/oven_control/componenttestwindow.cpp b/app/gui/oven_control/componenttestwindow.cpp index 9fc22e0..89410eb 100644 --- a/app/gui/oven_control/componenttestwindow.cpp +++ b/app/gui/oven_control/componenttestwindow.cpp @@ -6,7 +6,10 @@ ComponentTestWindow::ComponentTestWindow(QWidget *parent, UdpHandler *udp) : ui(new Ui::ComponentTestWindow), udp(udp) { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); + connect(udp, SIGNAL(changed()), this, SLOT(onDataChanged())); damperTimer.setInterval(10 * 1000); @@ -71,7 +74,7 @@ void ComponentTestWindow::on_backButton_clicked() udp->turnOff(TG_MANUAL_RELAY); udp->turnOff(TG_SYSTEM); - deleteLater(); + close(); } void ComponentTestWindow::lampOn() diff --git a/app/gui/oven_control/configwindow.cpp b/app/gui/oven_control/configwindow.cpp index 0ab81e4..8c852c4 100644 --- a/app/gui/oven_control/configwindow.cpp +++ b/app/gui/oven_control/configwindow.cpp @@ -8,6 +8,9 @@ ConfigWindow::ConfigWindow(QWidget *parent, UdpHandler *udp) : ui(new Ui::ConfigWindow), udp(udp) { ui->setupUi(this); + + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); } ConfigWindow::~ConfigWindow() diff --git a/app/gui/oven_control/cook.cpp b/app/gui/oven_control/cook.cpp index b0b0c48..13910e4 100644 --- a/app/gui/oven_control/cook.cpp +++ b/app/gui/oven_control/cook.cpp @@ -40,6 +40,11 @@ bool AbstractCook::interTempEnabled() return interTempEnabled_; } +void AbstractCook::setInterTempEnabled(bool enabled) +{ + interTempEnabled_ = enabled; +} + int AbstractCook::interTemp() { int t = interTemp_; @@ -462,7 +467,7 @@ MeatPie::MeatPie() stepList[3] = { Cook::CoolDown, Cook::DryMode, 100, 120 }; stepList[4] = { Cook::Bake, Cook::DryMode, 40, 120 }; - time_ = 77 * 60; + time_ = 1 * 60; interTempEnabled_ = true; interTemp_ = 62; diff --git a/app/gui/oven_control/cook.h b/app/gui/oven_control/cook.h index 33dd30a..6b50178 100644 --- a/app/gui/oven_control/cook.h +++ b/app/gui/oven_control/cook.h @@ -132,6 +132,7 @@ public: QString name(); int time(); bool interTempEnabled(); + void setInterTempEnabled(bool enabled); int interTemp(); Cook::Step currentStep(); diff --git a/app/gui/oven_control/fantestwindow.cpp b/app/gui/oven_control/fantestwindow.cpp index 3e01e13..5b7a544 100644 --- a/app/gui/oven_control/fantestwindow.cpp +++ b/app/gui/oven_control/fantestwindow.cpp @@ -6,7 +6,10 @@ FanTestWindow::FanTestWindow(QWidget *parent, UdpHandler *udp) : ui(new Ui::FanTestWindow), udp(udp) { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); + connect(udp, SIGNAL(changed()), this, SLOT(onDataChanged())); currentFan = Fan1; diff --git a/app/gui/oven_control/functiontestwindow.cpp b/app/gui/oven_control/functiontestwindow.cpp index 114c152..81da106 100644 --- a/app/gui/oven_control/functiontestwindow.cpp +++ b/app/gui/oven_control/functiontestwindow.cpp @@ -13,7 +13,10 @@ FunctionTestWindow::FunctionTestWindow(QWidget *parent, UdpHandler *udp) : ui(new Ui::FunctionTestWindow), udp(udp) { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); + connect(ui->backButton, SIGNAL(clicked(bool)), this, SLOT(deleteLater())); } @@ -54,6 +57,6 @@ void FunctionTestWindow::on_fanTestButton_clicked() void FunctionTestWindow::on_gasTestButton_clicked() { -// GasTestWindow *w = new GasTestWindow(this, udp); -// w->showFullScreen(); + GasTestWindow *w = new GasTestWindow(this, udp); + w->showFullScreen(); } diff --git a/app/gui/oven_control/functiontestwindow.ui b/app/gui/oven_control/functiontestwindow.ui index dc55e02..f4a5e55 100644 --- a/app/gui/oven_control/functiontestwindow.ui +++ b/app/gui/oven_control/functiontestwindow.ui @@ -87,8 +87,6 @@ background-image: url(:/images/images/config/001_01_background_time.png); 10 75 true - false - false
@@ -120,8 +118,6 @@ QPushButton:pressed { border-image: url(:/images/images/config_service/090_set_e 10 75 true - false - false @@ -153,8 +149,6 @@ QPushButton:pressed { border-image: url(:/images/images/config_service/090_set_e 10 75 true - false - false @@ -186,8 +180,6 @@ QPushButton:pressed { border-image: url(:/images/images/config_service/090_set_e 10 75 true - false - false @@ -219,8 +211,6 @@ QPushButton:pressed { border-image: url(:/images/images/config_service/090_set_e 10 75 true - false - false @@ -252,8 +242,6 @@ QPushButton:pressed { border-image: url(:/images/images/config_service/090_set_e 10 75 true - false - false diff --git a/app/gui/oven_control/gastestwindow.cpp b/app/gui/oven_control/gastestwindow.cpp index e5401c5..b5c3720 100644 --- a/app/gui/oven_control/gastestwindow.cpp +++ b/app/gui/oven_control/gastestwindow.cpp @@ -6,7 +6,10 @@ GasTestWindow::GasTestWindow(QWidget *parent, UdpHandler *udp) : ui(new Ui::GasTestWindow), udp(udp) { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); + connect(udp, SIGNAL(changed()), this, SLOT(onDataChanged())); } @@ -19,3 +22,8 @@ void GasTestWindow::onDataChanged() { } + +void GasTestWindow::on_backButton_clicked() +{ + close(); +} diff --git a/app/gui/oven_control/gastestwindow.h b/app/gui/oven_control/gastestwindow.h index bfad174..1b866b8 100644 --- a/app/gui/oven_control/gastestwindow.h +++ b/app/gui/oven_control/gastestwindow.h @@ -20,6 +20,8 @@ public: private slots: void onDataChanged(); + void on_backButton_clicked(); + private: Ui::GasTestWindow *ui; UdpHandler *udp; diff --git a/app/gui/oven_control/images/auto/object_arrow_001.png b/app/gui/oven_control/images/auto/object_arrow_001.png new file mode 100644 index 0000000000000000000000000000000000000000..22e73dca10ae4e152f75fa37750bd3f531068397 GIT binary patch literal 4588 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 b|NjF3m^C0jW{rP700000NkvXXu0mjfb-=5c literal 0 HcmV?d00001 diff --git a/app/gui/oven_control/images/auto/sys_icon_01_ov.png b/app/gui/oven_control/images/auto/sys_icon_01_ov.png new file mode 100644 index 0000000000000000000000000000000000000000..fb9b9932efb8d3d5dd4cd39a31be507a8d6a98cf GIT binary patch literal 6855 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 B5QG2# literal 0 HcmV?d00001 diff --git a/app/gui/oven_control/images/test/bgi-1.BMP b/app/gui/oven_control/images/test/bgi-1.BMP new file mode 100644 index 0000000000000000000000000000000000000000..b33323a9a3bcda10f34883ff932d3b2001b82378 GIT binary patch literal 766856 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 S&~kF#d8_<{;`p!r<^KRiXtnqN literal 0 HcmV?d00001 diff --git a/app/gui/oven_control/mainwindow.cpp b/app/gui/oven_control/mainwindow.cpp index d3e29af..336d0fb 100644 --- a/app/gui/oven_control/mainwindow.cpp +++ b/app/gui/oven_control/mainwindow.cpp @@ -26,6 +26,15 @@ MainWindow::MainWindow(QWidget *parent) : qDebug() << udp->init(); interface->setUdpHandler(udp); + QSignalMapper *sm = new QSignalMapper(this); + sm->setMapping(ui->steamButton, (int) Oven::SteamMode); + sm->setMapping(ui->combiButton, (int) Oven::CombinationMode); + sm->setMapping(ui->dryheatButton, (int) Oven::HeatMode); + connect(ui->steamButton, SIGNAL(clicked()), sm, SLOT(map())); + connect(ui->combiButton, SIGNAL(clicked()), sm, SLOT(map())); + connect(ui->dryheatButton, SIGNAL(clicked()), sm, SLOT(map())); + connect(sm, SIGNAL(mapped(int)), this, SLOT(onModeButtonClicked(int))); + ManualCookWindow *window = new ManualCookWindow(this, oven, udp); window->setWindowModality(Qt::WindowModal); window->hide(); @@ -36,15 +45,6 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, SIGNAL(modeButtonClicked()), window, SLOT(showFullScreen())); connect(this, SIGNAL(modeButtonClicked()), window, SLOT(raise())); - - QSignalMapper *sm = new QSignalMapper(this); - sm->setMapping(ui->steamButton, (int) Oven::SteamMode); - sm->setMapping(ui->combiButton, (int) Oven::CombinationMode); - sm->setMapping(ui->dryheatButton, (int) Oven::HeatMode); - connect(ui->steamButton, SIGNAL(clicked()), sm, SLOT(map())); - connect(ui->combiButton, SIGNAL(clicked()), sm, SLOT(map())); - connect(ui->dryheatButton, SIGNAL(clicked()), sm, SLOT(map())); - connect(sm, SIGNAL(mapped(int)), this, SLOT(onModeButtonClicked(int))); } MainWindow::~MainWindow() diff --git a/app/gui/oven_control/mainwindow.ui b/app/gui/oven_control/mainwindow.ui index 3c1ce5e..7ef6918 100644 --- a/app/gui/oven_control/mainwindow.ui +++ b/app/gui/oven_control/mainwindow.ui @@ -22,6 +22,45 @@ true + + QPushButton[style="mode"] { +background-repeat: no-repeat; +background-position: center; +background-clip: border; +background-origin: border; +margin-bottom: 50px; + +border-top: 200px; +border-bottom: -50px; +border-style: hidden; +color: white; +font-size: 40px; +} + +QPushButton[style="type"] { +background-repeat: no-repeat; +background-position: center; +background-clip: border; +background-origin: border; + +border-top: 165px; +border-style: hidden; +color: white; +font-size: 30px; +} + +QPushButton[style="function"] { +background-repeat: no-repeat; +background-position: center; +background-clip: border; +background-origin: border; + +border-top: 206px; +border-style: hidden; +color: white; +font-size: 30px; +} + @@ -63,7 +102,7 @@ - 343 + 345 26 97 97 @@ -97,7 +136,7 @@ QPushButton:pressed { - 460 + 458 26 97 97 @@ -132,10 +171,10 @@ QPushButton:pressed { - 109 - 1251 - 83 - 113 + 0 + 1164 + 300 + 286 @@ -144,32 +183,29 @@ QPushButton:pressed { 0 - - - 62 - 71 - - - QPushButton#multiButton { - border-image: url(:/images/images/main/005_auto_icon_09.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_09.png); } -QPushButton#multiButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_09_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_09_ov.png); } - + 다중요리 + + + function - 403 - 1254 - 94 - 107 + 300 + 1164 + 300 + 286 @@ -178,32 +214,29 @@ QPushButton#multiButton:pressed { 0 - - - 62 - 71 - - - QPushButton#programmingButton { - border-image: url(:/images/images/main/005_auto_icon_10.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_10.png); } -QPushButton#programmingButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_10_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_10_ov.png); } - + 프로그래밍모드 + + + function - 702 - 1262 - 97 - 91 + 600 + 1164 + 300 + 286 @@ -212,23 +245,20 @@ QPushButton#programmingButton:pressed { 0 - - - 62 - 71 - - - QPushButton#washButton { - border-image: url(:/images/images/main/005_auto_icon_11.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_11.png); } -QPushButton#washButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_11_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_11_ov.png); } - + 세척모드 + + + function @@ -327,112 +357,84 @@ QPushButton#washButton:pressed { - 686 - 479 - 129 - 128 + 600 + 426 + 300 + 293 - - - 129 - 128 - - - - - 129 - 128 - - - QPushButton#dryheatButton { - border-image: url(:/images/images/main/003_dryheat_icon.png); + QPushButton { +background-image: url(:/images/images/main/003_dryheat_icon.png); } -QPushButton#dryheatButton:pressed { - border-image: url(:/images/images/main/003_dryheat_icon_ov.png); +QPushButton:pressed { +background-image: url(:/images/images/main/003_dryheat_icon_ov.png); } - + 건열 + + + mode - 386 - 479 - 129 - 128 + 300 + 426 + 300 + 293 - - - 129 - 128 - - - - - 129 - 128 - - - QPushButton#combiButton { - border-image: url(:/images/images/main/003_combi_icon.png); + QPushButton { +background-image: url(:/images/images/main/003_combi_icon.png); } -QPushButton#combiButton:pressed { - border-image: url(:/images/images/main/003_combi_icon_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/003_combi_icon_ov.png); } - + 콤비 + + + mode - 86 - 479 - 129 - 128 + 0 + 426 + 300 + 293 - - - 129 - 128 - - - - - 129 - 128 - - - QPushButton#steamButton { - border-image: url(:/images/images/main/003_steam_icon.png); + QPushButton { +background-image: url(:/images/images/main/003_steam_icon.png); } - -QPushButton#steamButton:pressed { - border-image: url(:/images/images/main/003_steam_icon_ov.png); +QPushButton:pressed { +background-image: url(:/images/images/main/003_steam_icon_ov.png); } - + 스팀 + + + mode - 273 - 797 - 129 - 69 + 225 + 720 + 225 + 222 @@ -441,32 +443,29 @@ QPushButton#steamButton:pressed { 0 - - - 129 - 69 - - - QPushButton#meatButton { - border-image: url(:/images/images/main/005_auto_icon_02.png); + QPushButton { +background-image: url(:/images/images/main/005_auto_icon_02.png); } -QPushButton#meatButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_02_ov.png); +QPushButton:pressed { +background-image: url(:/images/images/main/005_auto_icon_02_ov.png); } - + 육류 + + + type - 749 - 793 - 77 - 81 + 675 + 720 + 225 + 222 @@ -475,32 +474,29 @@ QPushButton#meatButton:pressed { 0 - - - 77 - 81 - - - QPushButton#dessertButton { - border-image: url(:/images/images/main/005_auto_icon_04.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_04.png); } -QPushButton#dessertButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_04_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_04_ov.png); } - + 디저트류 + + + type - 519 - 1012 - 87 - 82 + 450 + 942 + 225 + 222 @@ -509,32 +505,29 @@ QPushButton#dessertButton:pressed { 0 - - - 87 - 82 - - - QPushButton#etcButton { - border-image: url(:/images/images/main/005_auto_icon_07.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_07.png); } -QPushButton#etcButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_07_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_07_ov.png); } - + 기타요리 + + + type - 58 - 1009 - 109 - 89 + 0 + 942 + 225 + 222 @@ -543,32 +536,29 @@ QPushButton#etcButton:pressed { 0 - - - 109 - 89 - - - QPushButton#grainButton { - border-image: url(:/images/images/main/005_auto_icon_05.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_05.png); } -QPushButton#grainButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_05_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_05_ov.png); } - + 채소및곡류 + + + type - 49 - 788 - 127 - 87 + 0 + 720 + 225 + 222 @@ -577,32 +567,29 @@ QPushButton#grainButton:pressed { 0 - - - 127 - 87 - - - QPushButton#poultryButton { - border-image: url(:/images/images/main/005_auto_icon_01.png); + QPushButton { +background-image: url(:/images/images/main/005_auto_icon_01.png); } -QPushButton#poultryButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_01_ov.png); +QPushButton:pressed { +background-image: url(:/images/images/main/005_auto_icon_01_ov.png); } - + 가금류 + + + type - 499 - 798 - 127 - 67 + 450 + 720 + 225 + 222 @@ -611,32 +598,29 @@ QPushButton#poultryButton:pressed { 0 - - - 127 - 67 - - - QPushButton#fishButton { - border-image: url(:/images/images/main/005_auto_icon_03.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_03.png); } -QPushButton#fishButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_03_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_03_ov.png); } - + 생선류 + + + type - 291 - 1017 - 93 - 73 + 225 + 942 + 225 + 222 @@ -645,32 +629,29 @@ QPushButton#fishButton:pressed { 0 - - - 93 - 73 - - - QPushButton#breadButton { - border-image: url(:/images/images/main/005_auto_icon_06.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_06.png); } -QPushButton#breadButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_06_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_06_ov.png); } - + 제과제빵류 + + + type - 756 - 1018 - 62 - 71 + 675 + 942 + 225 + 222 @@ -679,23 +660,20 @@ QPushButton#breadButton:pressed { 0 - - - 62 - 71 - - - QPushButton#primeButton { - border-image: url(:/images/images/main/005_auto_icon_08.png); + QPushButton { + background-image: url(:/images/images/main/005_auto_icon_08.png); } -QPushButton#primeButton:pressed { - border-image: url(:/images/images/main/005_auto_icon_08_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/005_auto_icon_08_ov.png); } - + 부가기능 + + + type @@ -723,884 +701,16 @@ QPushButton#primeButton:pressed {
- - - true - - - - 86 - 607 - 129 - 113 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 12 - - - - 스팀 - - - Qt::AlignCenter - - - + true - 386 - 607 - 129 - 113 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 12 - - - - 콤비 - - - Qt::AlignCenter - - - - - true - - - - 686 - 607 - 129 - 113 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 12 - - - - 건열 - - - Qt::AlignCenter - - - - - true - - - - 0 - 882 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 가금류 - - - Qt::AlignCenter - - - - - true - - - - 225 - 882 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 육류 - - - Qt::AlignCenter - - - - - true - - - - 450 - 882 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 생선류 - - - Qt::AlignCenter - - - - - true - - - - 675 - 882 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 디저트류 - - - Qt::AlignCenter - - - - - true - - - - 0 - 1104 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 채소및곡류 - - - Qt::AlignCenter - - - - - true - - - - 225 - 1104 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 제과제빵류 - - - Qt::AlignCenter - - - - - true - - - - 450 - 1104 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 기타요리 - - - Qt::AlignCenter - - - - - true - - - - 675 - 1104 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 부가기능 - - - Qt::AlignCenter - - - - - true - - - - 40 - 1370 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 다중요리 - - - Qt::AlignCenter - - - - - true - - - - 330 - 1370 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 프로그래밍모드 - - - Qt::AlignCenter - - - - - true - - - - 640 - 1370 - 225 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 10 - - - - 세척모드 - - - Qt::AlignCenter - - - - - true - - - - 600 - 1500 - 300 - 100 + 750 + 1550 + 150 + 50 @@ -1647,7 +757,7 @@ QPushButton#primeButton:pressed { - V0.1.2 + V0.1.4 Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing diff --git a/app/gui/oven_control/manualcookwindow.cpp b/app/gui/oven_control/manualcookwindow.cpp index 324d9cd..325f396 100644 --- a/app/gui/oven_control/manualcookwindow.cpp +++ b/app/gui/oven_control/manualcookwindow.cpp @@ -11,6 +11,9 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Oven *oven, UdpHandler *udp) { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); + connect(oven, SIGNAL(changed(Oven*)), this, SLOT(onOvenUpdated(Oven*))); connect(ui->steamButton, SIGNAL(clicked()), this, SIGNAL(modeButtonClicked())); @@ -149,7 +152,7 @@ void ManualCookWindow::updateLabels() else temp = oven->temp(); - ui->tempLabel->setText(buf.sprintf("%d℃", temp)); + ui->tempLabel->setText(buf.sprintf("%d", temp)); int time; if (ui->timeSlider->isSliderDown()) @@ -158,11 +161,11 @@ void ManualCookWindow::updateLabels() time = oven->time(); if (time >= 3600) - ui->timeLabel->setText(buf.sprintf("%d시간 %02d분", time / 3600, (time % 3600) / 60)); + ui->timeLabel->setText(buf.sprintf("%d시간 %02d", time / 3600, (time % 3600) / 60)); else if (time >= 60) - ui->timeLabel->setText(buf.sprintf("%d분 %02d초", time / 60, time % 60)); + ui->timeLabel->setText(buf.sprintf("%d %02d", time / 60, time % 60)); else - ui->timeLabel->setText(buf.sprintf("%d초", time)); + ui->timeLabel->setText(buf.sprintf("%d", time)); if (oven->interTempEnabled()) { @@ -172,10 +175,10 @@ void ManualCookWindow::updateLabels() else interTemp = oven->interTemp(); - ui->interTempLabel->setText(buf.sprintf("%d℃", interTemp)); + ui->interTempLabel->setText(buf.sprintf("%d", interTemp)); } else - ui->interTempLabel->setText("℃"); + ui->interTempLabel->setText(""); int innerInterTemp = ui->innerInterTempSlider->sliderPosition(); // if (ui->innerInterTempSlider->isSliderDown()) @@ -183,7 +186,7 @@ void ManualCookWindow::updateLabels() // else // innerInterTemp = oven->interTemp(); - ui->innerInterTempLabel->setText(buf.sprintf("%d℃", innerInterTemp)); + ui->innerInterTempLabel->setText(buf.sprintf("%d", innerInterTemp)); ui->curHumidityLabel->setText(buf.sprintf("%d", oven->currentHumidity())); ui->targetHumidityLabel->setText(buf.sprintf("%d", oven->humidity())); @@ -200,29 +203,16 @@ void ManualCookWindow::onModeButtonClicked(int mode) void ManualCookWindow::onOvenUpdated(Oven *oven) { - ui->steamIndicator->hide(); - ui->combiIndicator->hide(); - ui->dryheatIndicator->hide(); - ui->steamLabel->setEnabled(false); - ui->combiLabel->setEnabled(false); - ui->dryheatLabel->setEnabled(false); - switch (oven->mode()) { case Oven::HeatMode: ui->dryheatButton->setChecked(true); - ui->dryheatIndicator->show(); - ui->dryheatLabel->setEnabled(true); break; case Oven::SteamMode: ui->steamButton->setChecked(true); - ui->steamIndicator->show(); - ui->steamLabel->setEnabled(true); break; case Oven::CombinationMode: ui->combiButton->setChecked(true); - ui->combiIndicator->show(); - ui->combiLabel->setEnabled(true); break; default: break; @@ -249,18 +239,18 @@ void ManualCookWindow::onOvenUpdated(Oven *oven) // ui->interTempButton->setChecked(oven->interTempEnabled()); if (oven->interTempEnabled()) ui->interTempButton->setStyleSheet("\ -QPushButton#interTempButton {\ +QPushButton {\ border-image: url(:/images/images/manual/011_icon_04_ov_01.png);\ }\ -QPushButton#interTempButton:pressed {\ +QPushButton:pressed {\ border-image: url(:/images/images/manual/011_icon_04_ov.png);\ }"); else ui->interTempButton->setStyleSheet("\ -QPushButton#interTempButton {\ +QPushButton {\ border-image: url(:/images/images/manual/011_icon_04.png);\ }\ -QPushButton#interTempButton:pressed {\ +QPushButton:pressed {\ border-image: url(:/images/images/manual/011_icon_04_ov.png);\ }"); @@ -284,57 +274,57 @@ QPushButton#interTempButton:pressed {\ if (oven->preheating()) ui->preheatButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_01_ov.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_01_ov.png)"); else ui->preheatButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_01.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_01.png)"); if (oven->damper()) ui->damperButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_02_ov.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_02_ov.png)"); else ui->damperButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_02.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_02.png)"); if (oven->humidification()) ui->humidificationButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_03_ov.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_03_ov.png)"); else ui->humidificationButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_03.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_03.png)"); if (oven->cooldown()) ui->cooldownButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_05_ov.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_05_ov.png)"); else ui->cooldownButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_05.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_05.png)"); switch (oven->fan()) { case 1: ui->fanButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_06.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_06.png)"); break; case 2: ui->fanButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_06_01.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_06_01.png)"); break; case 3: ui->fanButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_06_02.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_06_02.png)"); break; case 4: ui->fanButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_06_03.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_06_03.png)"); break; case 5: ui->fanButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_06_04.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_06_04.png)"); break; default: ui->fanButton->setStyleSheet( - "border-image: url(:/images/images/manual/013_sys_icon_06.png)"); + "background-image: url(:/images/images/manual/013_sys_icon_06.png)"); break; } diff --git a/app/gui/oven_control/manualcookwindow.ui b/app/gui/oven_control/manualcookwindow.ui index 813e1b4..4a7ea47 100644 --- a/app/gui/oven_control/manualcookwindow.ui +++ b/app/gui/oven_control/manualcookwindow.ui @@ -13,6 +13,27 @@ MainWindow + + QPushButton[style="mode"] { +background-repeat: no-repeat; +background-position: center; +background-clip: border; +background-origin: border; +margin-bottom: 50px; + +border-top: 200px; +border-bottom: -50px; +border-style: hidden; +color: #7B7B7B; +font-size: 40px; +} + +QPushButton[style="mode"]:checked { +color: white; +image: url(:/images/images/manual/003_02__mainicon_arrow.png); +image-position: bottom; +} + QWidget#centralwidget { @@ -46,13 +67,13 @@ 426 - + #clockContainer_2 { background-image: url(:/images/images/manual/001_01_background_time.png) } - + 272 @@ -67,39 +88,27 @@ - 386 - 479 - 129 - 128 + 300 + 426 + 300 + 293 - - - 129 - 128 - - - - - 129 - 128 - - - QPushButton#combiButton { - border-image: url(:/images/images/manual/003_combi_icon_hide.png); + QPushButton { + background-image: url(:/images/images/manual/003_combi_icon_hide.png); } -QPushButton#combiButton:pressed { - border-image: url(:/images/images/manual/003_combi_icon_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/manual/003_combi_icon_ov.png); } -QPushButton#combiButton:checked { - border-image: url(:/images/images/manual/003_combi_icon.png); +QPushButton:checked { + background-image: url(:/images/images/manual/003_combi_icon.png); } - + 콤비 true @@ -107,43 +116,34 @@ QPushButton#combiButton:checked { true + + mode + - 86 - 479 - 129 - 128 + 0 + 426 + 300 + 293 - - - 129 - 128 - - - - - 129 - 128 - - - QPushButton#steamButton { - border-image: url(:/images/images/manual/003_steam_icon_hide.png); + QPushButton { + background-image: url(:/images/images/manual/003_steam_icon_hide.png); } -QPushButton#steamButton:pressed { - border-image: url(:/images/images/main/003_steam_icon_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/main/003_steam_icon_ov.png); } -QPushButton#steamButton:checked { - border-image: url(:/images/images/manual/003_steam_icon.png); +QPushButton:checked { + background-image: url(:/images/images/manual/003_steam_icon.png); } - + 스팀 true @@ -151,43 +151,34 @@ QPushButton#steamButton:checked { true + + mode + - 686 - 479 - 129 - 128 + 600 + 426 + 300 + 293 - - - 129 - 128 - - - - - 129 - 128 - - - QPushButton#dryheatButton { - border-image: url(:/images/images/manual/003_dryheat_icon_hide.png); + QPushButton { + background-image: url(:/images/images/manual/003_dryheat_icon_hide.png); } -QPushButton#dryheatButton:pressed { - border-image: url(:/images/images/manual/003_dryheat_icon_ov.png); +QPushButton:pressed { + background-image: url(:/images/images/manual/003_dryheat_icon_ov.png); } -QPushButton#dryheatButton:checked { - border-image: url(:/images/images/manual/003_dryheat_icon.png); +QPushButton:checked { + background-image: url(:/images/images/manual/003_dryheat_icon.png); } - + 건열 true @@ -195,6 +186,9 @@ QPushButton#dryheatButton:checked { true + + mode + @@ -613,11 +607,11 @@ QPushButton#humidityButton:pressed { - QPushButton#interTempButton { + QPushButton { border-image: url(:/images/images/manual/011_icon_04.png); } -QPushButton#interTempButton:pressed { +QPushButton:pressed { border-image: url(:/images/images/manual/011_icon_04_ov.png); } @@ -711,23 +705,30 @@ QPushButton#tempButton:pressed { 131 + + QPushButton { +background-repeat: no-repeat; +background-position: center; +border: none; +} + - 488 - 36 - 37 - 60 + 448 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_arrow.png); +background-image: url(:/images/images/manual/013_sys_icon_arrow.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_arrow_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_arrow_ov.png); } @@ -750,19 +751,19 @@ border-image: url(:/images/images/manual/013_sys_icon_arrow_ov.png); - 250 - 26 - 63 - 79 + 224 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_03.png); +background-image: url(:/images/images/manual/013_sys_icon_03.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_03_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_03_ov.png); } @@ -785,19 +786,19 @@ border-image: url(:/images/images/manual/013_sys_icon_03_ov.png); - 29 - 35 - 55 - 61 + 0 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_01.png); +background-image: url(:/images/images/manual/013_sys_icon_01.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_01_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_01_ov.png); } @@ -807,19 +808,19 @@ border-image: url(:/images/images/manual/013_sys_icon_01_ov.png); - 358 - 32 - 72 - 68 + 336 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_04.png); +background-image: url(:/images/images/manual/013_sys_icon_04.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_04_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_04_ov.png); } @@ -842,19 +843,19 @@ border-image: url(:/images/images/manual/013_sys_icon_04_ov.png); - 131 - 33 - 76 - 66 + 112 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_02.png); +background-image: url(:/images/images/manual/013_sys_icon_02.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_02_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_02_ov.png); } @@ -866,19 +867,19 @@ border-image: url(:/images/images/manual/013_sys_icon_02_ov.png); - 488 - 36 - 37 - 60 + 448 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_arrow.png); +background-image: url(:/images/images/manual/013_sys_icon_arrow.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_arrow_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_arrow_ov.png); } @@ -901,27 +902,24 @@ border-image: url(:/images/images/manual/013_sys_icon_arrow_ov.png); - 247 - 37 - 69 - 58 + 224 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_07.png); +background-image: url(:/images/images/manual/013_sys_icon_07.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_07_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_07_ov.png); } - - true - @@ -939,19 +937,19 @@ border-image: url(:/images/images/manual/013_sys_icon_07_ov.png); - 29 - 35 - 55 - 61 + 0 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_05.png); +background-image: url(:/images/images/manual/013_sys_icon_05.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_05_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_05_ov.png); } @@ -964,31 +962,25 @@ border-image: url(:/images/images/manual/013_sys_icon_05_ov.png); - 361 - 39 - 66 - 54 + 336 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_08.png); +background-image: url(:/images/images/manual/013_sys_icon_08.png); } QPushButton:pressed { -border-image: url(:/images/images/manual/013_sys_icon_08_ov.png); +background-image: url(:/images/images/manual/013_sys_icon_08_ov.png); } - -QPushButton:checked { -border-image: url(:/images/images/manual/013_sys_icon_08_ov.png); -} + - - true - @@ -1006,15 +998,15 @@ border-image: url(:/images/images/manual/013_sys_icon_08_ov.png); - 139 - 36 - 60 - 59 + 112 + 0 + 112 + 131 QPushButton { -border-image: url(:/images/images/manual/013_sys_icon_06.png); +background-image: url(:/images/images/manual/013_sys_icon_06.png); } @@ -1323,8 +1315,10 @@ border-image: url(:/images/images/manual/013_sys_icon_06.png); - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -1385,8 +1379,10 @@ border-image: url(:/images/images/manual/013_sys_icon_06.png); - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -1402,9 +1398,9 @@ border-image: url(:/images/images/manual/013_sys_icon_06.png); - 690 + 539 1110 - 150 + 301 51 @@ -1447,8 +1443,10 @@ border-image: url(:/images/images/manual/013_sys_icon_06.png); - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -1509,8 +1507,10 @@ border-image: url(:/images/images/manual/013_sys_icon_06.png); - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -1800,8 +1800,10 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); - Malgun Gothic - 11 + Roboto + 16 + 75 + true @@ -1863,7 +1865,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 9 + 11 @@ -1925,7 +1927,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 9 + 11 @@ -1987,7 +1989,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 9 + 11 @@ -2049,7 +2051,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 9 + 11 @@ -2367,7 +2369,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 14 + 16 75 true @@ -2431,7 +2433,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 14 + 16 75 true @@ -2495,7 +2497,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 14 + 16 75 true @@ -2559,7 +2561,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 14 + 16 75 true @@ -2623,7 +2625,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 9 + 11 @@ -2685,7 +2687,7 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); Malgun Gothic - 9 + 11 @@ -2721,252 +2723,12 @@ border-image: url(:/images/images/manual/016_btn_02_ov.png); steamLabel_15 - - - false - - - - 686 - 607 - 129 - 113 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 12 - - - - 건열 - - - Qt::AlignCenter - - - - - - 417 - 681 - 67 - 37 - - - - - - - :/images/images/manual/003_02__mainicon_arrow.png - - - - - false - - - - 386 - 607 - 129 - 113 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 12 - - - - 콤비 - - - Qt::AlignCenter - - - - - - 117 - 681 - 67 - 37 - - - - - - - :/images/images/manual/003_02__mainicon_arrow.png - - - - - - 717 - 681 - 67 - 37 - - - - - - - :/images/images/manual/003_02__mainicon_arrow.png - - - - - false - - - - 86 - 607 - 129 - 113 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 123 - 123 - 123 - - - - - - - - - Malgun Gothic - 12 - - - - 스팀 - - - Qt::AlignCenter - - bodyStack upperStack combiButton steamButton dryheatButton underBar - dryheatLabel - combiIndicator - combiLabel - steamIndicator - dryheatIndicator - steamLabel diff --git a/app/gui/oven_control/oven_control.pro b/app/gui/oven_control/oven_control.pro index d1996f8..ea09202 100644 --- a/app/gui/oven_control/oven_control.pro +++ b/app/gui/oven_control/oven_control.pro @@ -35,7 +35,9 @@ SOURCES += main.cpp\ animatedimagebox.cpp \ circulargauge.cpp \ humiditycirculargauge.cpp \ - heatcirculargauge.cpp + heatcirculargauge.cpp \ + preheattempgauge.cpp \ + autocookconfigwindow.cpp HEADERS += mainwindow.h \ cook.h \ @@ -59,7 +61,9 @@ HEADERS += mainwindow.h \ animatedimagebox.h \ circulargauge.h \ humiditycirculargauge.h \ - heatcirculargauge.h + heatcirculargauge.h \ + preheattempgauge.h \ + autocookconfigwindow.h FORMS += mainwindow.ui \ manualcookwindow.ui \ @@ -72,7 +76,8 @@ FORMS += mainwindow.ui \ fantestwindow.ui \ gastestwindow.ui \ autocookselectionwindow.ui \ - autocookwindow.ui + autocookwindow.ui \ + autocookconfigwindow.ui RESOURCES += \ resources.qrc diff --git a/app/gui/oven_control/ovencontroller.cpp b/app/gui/oven_control/ovencontroller.cpp index bc54740..97e7e09 100644 --- a/app/gui/oven_control/ovencontroller.cpp +++ b/app/gui/oven_control/ovencontroller.cpp @@ -2,6 +2,8 @@ OvenController::OvenController(QObject *parent) : OvenInterface(parent) { + bzero(&control, sizeof(control)); + bzero(&state, sizeof(state)); } void OvenController::setUdpHandler(UdpHandler *udp) @@ -42,7 +44,7 @@ int OvenController::currentHumidity() int OvenController::currentInterTemp() { - return 0; + return state.sensor6; } bool OvenController::door() diff --git a/app/gui/oven_control/preheattempgauge.cpp b/app/gui/oven_control/preheattempgauge.cpp new file mode 100644 index 0000000..1edabf1 --- /dev/null +++ b/app/gui/oven_control/preheattempgauge.cpp @@ -0,0 +1,62 @@ +#include "preheattempgauge.h" + +#include +#include + +PreheatTempGauge::PreheatTempGauge(QWidget *parent) : QWidget(parent) +{ + border.load(":/images/images/auto/graphe_hit_01.png"); + indicator.load(":/images/images/auto/graphe_hit_02.png"); + body.load(":/images/images/auto/graphe_hit_03.png"); + + value = 0; + min = 0; + max = 1; +} + +void PreheatTempGauge::setValue(int value) +{ + this->value = qBound(min, value, max); + + update(); +} + +void PreheatTempGauge::setMinimum(int minimum) +{ + min = minimum; + max = qMax(min, max); + value = qBound(min, value, max); + + update(); +} + +void PreheatTempGauge::setMaximum(int maximum) +{ + max = maximum; + min = qMin(min, max); + value = qBound(min, value, max); + + update(); +} + +void PreheatTempGauge::paintEvent(QPaintEvent */*event*/) +{ + QPainter painter(this); + painter.setBrush(Qt::NoBrush); + painter.setPen(Qt::NoPen); + + qreal percentage = (qreal) (value - min) / qMax(max - min, 1); + percentage = qBound((qreal) 0.0, percentage, (qreal) 1.0); + + QRect targetRect( + (border.size().width() - body.size().width()) / 2 + indicator.size().width() / 2, + (border.size().height() - body.size().height()) / 2 + indicator.size().height(), + body.size().width() * percentage, body.height()); + + QRect sourceRect(0, 0, body.size().width() * percentage, body.height()); + + painter.drawPixmap(targetRect, body, sourceRect); + painter.drawPixmap(indicator.size().width() / 2, indicator.size().height(), border); + painter.drawPixmap(targetRect.right() - indicator.size().width() / 2, 0, indicator); +} + diff --git a/app/gui/oven_control/preheattempgauge.h b/app/gui/oven_control/preheattempgauge.h new file mode 100644 index 0000000..ae7da12 --- /dev/null +++ b/app/gui/oven_control/preheattempgauge.h @@ -0,0 +1,33 @@ +#ifndef INTERTEMPGAUGE_H +#define INTERTEMPGAUGE_H + +#include +#include + +class PreheatTempGauge : public QWidget +{ + Q_OBJECT +public: + explicit PreheatTempGauge(QWidget *parent = 0); + +signals: + +public slots: + void setValue(int value); + void setMinimum(int minimum); + void setMaximum(int maximum); + +protected: + void paintEvent(QPaintEvent *event); + +private: + QPixmap body; + QPixmap border; + QPixmap indicator; + + int value; + int min; + int max; +}; + +#endif // INTERTEMPGAUGE_H diff --git a/app/gui/oven_control/resources.qrc b/app/gui/oven_control/resources.qrc index edd94b6..bf7d870 100644 --- a/app/gui/oven_control/resources.qrc +++ b/app/gui/oven_control/resources.qrc @@ -644,5 +644,10 @@ images/auto/Gau_icon_06_ov.png images/auto/Gau_icon_07.png images/auto/Gau_icon_07_ov.png + images/test/bgi-1.BMP + images/test/bgi-1.png + images/test/bgi-2.png + images/auto/object_arrow_001.png + images/auto/object_arrow_002.png diff --git a/app/gui/oven_control/udphandler.cpp b/app/gui/oven_control/udphandler.cpp index a466d00..2b6a932 100644 --- a/app/gui/oven_control/udphandler.cpp +++ b/app/gui/oven_control/udphandler.cpp @@ -48,11 +48,11 @@ void UdpHandler::processDatagram(QByteArray &datagram) switch (packet->header) { case HDR_OVEN_CONTROL: - qDebug() << "Received Control"; +// qDebug() << "Received Control"; processControl((oven_control_t *) packet->body); break; case HDR_OVEN_STATE: - qDebug() << "Received State"; +// qDebug() << "Received State"; processState((oven_state_t *) packet->body); break; case HDR_ERROR_CODE: diff --git a/app/gui/oven_control/valvetestwindow.cpp b/app/gui/oven_control/valvetestwindow.cpp index 82440b3..3c03f95 100644 --- a/app/gui/oven_control/valvetestwindow.cpp +++ b/app/gui/oven_control/valvetestwindow.cpp @@ -6,7 +6,10 @@ ValveTestWindow::ValveTestWindow(QWidget *parent, UdpHandler *udp) : ui(new Ui::ValveTestWindow), udp(udp) { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); + connect(udp, SIGNAL(changed()), this, SLOT(onDataChanged())); udp->set(TG_OVEN_MODE, 4); @@ -92,7 +95,7 @@ void ValveTestWindow::on_backButton_clicked() udp->turnOff(TG_MANUAL_RELAY); udp->turnOff(TG_SYSTEM); - deleteLater(); + close(); } void ValveTestWindow::steamValveOpen() diff --git a/app/gui/oven_control/washtestwindow.cpp b/app/gui/oven_control/washtestwindow.cpp index a58d6df..296953f 100644 --- a/app/gui/oven_control/washtestwindow.cpp +++ b/app/gui/oven_control/washtestwindow.cpp @@ -6,7 +6,10 @@ WashTestWindow::WashTestWindow(QWidget *parent, UdpHandler *udp) : ui(new Ui::WashTestWindow), udp(udp) { ui->setupUi(this); + ui->clockContainer->setParent(ui->upperStack); + setAttribute(Qt::WA_DeleteOnClose); + connect(udp, SIGNAL(changed()), this, SLOT(onDataChanged())); udp->set(TG_OVEN_MODE, 4); @@ -83,7 +86,7 @@ void WashTestWindow::on_backButton_clicked() udp->turnOff(TG_MANUAL_RELAY); udp->turnOff(TG_SYSTEM); - deleteLater(); + close(); } void WashTestWindow::steamPumpOn() -- 2.1.4