Commit 6a81d38e4cef99a38cc392c4483816492e917114

Authored by 김태훈
1 parent fd8461350e
Exists in master and in 2 other branches fhd, fhd-demo

자동 요리 관련 로직 전면 재작성

app/gui/oven_control/autocook.cpp
... ... @@ -0,0 +1,522 @@
  1 +#include "autocook.h"
  2 +
  3 +AutoCook::AutoCook() : currentStepIndex(0), done_(false), doorOpened(false), checkingCoreTemp(false)
  4 +{
  5 +
  6 +}
  7 +
  8 +AutoCook::AutoCook(Cook cook) : AutoCook()
  9 +{
  10 + this->cook = cook;
  11 + for (int idx = 0; idx < this->cook.steps.size(); idx++)
  12 + this->cook.steps[idx].time *= 1000;
  13 +
  14 +
  15 + startStep();
  16 +}
  17 +
  18 +void AutoCook::startStep()
  19 +{
  20 + Oven *oven = Oven::getInstance();
  21 +
  22 + CookStep &currentStep = cook.steps[currentStepIndex];
  23 + switch (Define::classify(currentStep.type))
  24 + {
  25 + case Define::PreheatClass:
  26 + startHumidity = oven->currentHumidity();
  27 + startTemp = oven->currentTemp();
  28 + isWaitingDoorOpened_ = false;
  29 + oven->setMode(Oven::CombinationMode);
  30 + oven->setHumidity(currentStep.humidity);
  31 + oven->setTemp(currentStep.temp);
  32 + oven->setFan(currentStep.fan);
  33 + oven->startPreheating();
  34 + break;
  35 + case Define::DoorClass:
  36 + isWaitingDoorOpened_ = true;
  37 + break;
  38 + case Define::CookClass:
  39 + startHumidity = oven->currentHumidity();
  40 + startTemp = oven->currentTemp();
  41 + isWaitingDoorOpened_ = false;
  42 + oven->setMode(Oven::CombinationMode);
  43 + oven->setHumidity(currentStep.humidity);
  44 + oven->setTemp(currentStep.temp);
  45 + oven->setFan(currentStep.fan);
  46 + oven->setTime(remainingTime() + 300);
  47 +
  48 + if (cook.isCoreTempValid())
  49 + {
  50 + oven->setInterTemp(cook.coreTemp());
  51 + oven->setInterTempEnabled(true);
  52 + }
  53 + else
  54 + oven->setInterTempEnabled(false);
  55 +
  56 + if (currentStep.dehumidification)
  57 + {
  58 + if (currentStep.dehumidificationRepeatDelay)
  59 + oven->repeatDamper(currentStep.dehumidification, currentStep.dehumidificationRepeatDelay, currentStep.dehumidificationRepeatCount);
  60 + else
  61 + oven->openDamper(currentStep.dehumidification);
  62 + }
  63 +
  64 + if (currentStep.humidification)
  65 + {
  66 + if (currentStep.humidificationRepeatDelay)
  67 + oven->repeatHumidification(currentStep.humidification, currentStep.humidificationRepeatDelay, currentStep.humidificationRepeatCount);
  68 + else
  69 + oven->startHumidification(currentStep.humidification);
  70 + }
  71 +
  72 + stepStartTime.start();
  73 + oven->startCooking();
  74 + case Define::InvalidClass:
  75 + break;
  76 + }
  77 +
  78 + advance();
  79 +}
  80 +
  81 +void AutoCook::nextStep()
  82 +{
  83 + qDebug() << "Next Step Before" << remainingTime();
  84 +
  85 + Oven *oven = Oven::getInstance();
  86 +
  87 + CookStep &currentStep = cook.steps[currentStepIndex];
  88 + CookStep &nextStep = cook.steps[currentStepIndex + 1];
  89 +
  90 + Define::StepClass currentClass = Define::classify(currentStep.type);
  91 + Define::StepClass nextClass = Define::classify(nextStep.type);
  92 +
  93 + if (currentClass == Define::PreheatClass && nextClass == Define::DoorClass)
  94 + {
  95 + oven->stopPreheating();
  96 + isWaitingDoorOpened_ = true;
  97 + }
  98 + else if (currentClass == Define::DoorClass && nextClass == Define::CookClass)
  99 + {
  100 + startHumidity = oven->currentHumidity();
  101 + startTemp = oven->currentTemp();
  102 + oven->setHumidity(nextStep.humidity);
  103 + oven->setTemp(nextStep.temp);
  104 + oven->setFan(nextStep.fan);
  105 + oven->setTime(remainingTime() + 300);
  106 +
  107 + if (cook.isCoreTempValid())
  108 + {
  109 + oven->setInterTemp(cook.coreTemp());
  110 + oven->setInterTempEnabled(true);
  111 + }
  112 + else
  113 + oven->setInterTempEnabled(false);
  114 +
  115 + stepStartTime.start();
  116 + oven->startCooking();
  117 +
  118 + if (nextStep.dehumidification)
  119 + {
  120 + if (nextStep.dehumidificationRepeatDelay)
  121 + oven->repeatDamper(nextStep.dehumidification, nextStep.dehumidificationRepeatDelay, nextStep.dehumidificationRepeatCount);
  122 + else
  123 + oven->openDamper(nextStep.dehumidification);
  124 + }
  125 +
  126 + if (nextStep.humidification)
  127 + {
  128 + if (nextStep.humidificationRepeatDelay)
  129 + oven->repeatHumidification(nextStep.humidification, nextStep.humidificationRepeatDelay, nextStep.humidificationRepeatCount);
  130 + else
  131 + oven->startHumidification(nextStep.humidification);
  132 + }
  133 +
  134 + if (checkingCoreTemp && currentStepIndex + 2 >= cook.steps.size())
  135 + {
  136 + lastCoreTempIncreasedTime.start();
  137 + }
  138 + }
  139 + else if (currentClass == Define::CookClass && nextClass == Define::CookClass)
  140 + {
  141 + startHumidity = oven->currentHumidity();
  142 + startTemp = oven->currentTemp();
  143 + oven->setHumidity(nextStep.humidity);
  144 + oven->setTemp(nextStep.temp);
  145 + oven->setFan(nextStep.fan);
  146 + stepStartTime.start();
  147 +
  148 + if (currentStep.dehumidification)
  149 + {
  150 + if (nextStep.dehumidification)
  151 + {
  152 + if (currentStep.dehumidificationRepeatDelay)
  153 + {
  154 + if (nextStep.dehumidificationRepeatDelay)
  155 + oven->repeatDamper(nextStep.dehumidification, nextStep.dehumidificationRepeatDelay, nextStep.dehumidificationRepeatCount);
  156 + else
  157 + {
  158 + oven->stopRepeatDamper();
  159 + oven->openDamper(nextStep.dehumidification);
  160 + }
  161 + }
  162 + else
  163 + {
  164 + if (nextStep.dehumidificationRepeatDelay)
  165 + oven->repeatDamper(nextStep.dehumidification, nextStep.dehumidificationRepeatDelay, nextStep.dehumidificationRepeatCount);
  166 + else
  167 + oven->openDamper(nextStep.dehumidification);
  168 + }
  169 + }
  170 + else
  171 + {
  172 + if (currentStep.dehumidificationRepeatDelay)
  173 + oven->stopRepeatDamper();
  174 + }
  175 + }
  176 + else
  177 + {
  178 + if (nextStep.dehumidification)
  179 + {
  180 + if (nextStep.dehumidificationRepeatDelay)
  181 + oven->repeatDamper(nextStep.dehumidification, nextStep.dehumidificationRepeatDelay, nextStep.dehumidificationRepeatCount);
  182 + else
  183 + oven->openDamper(nextStep.dehumidification);
  184 + }
  185 + }
  186 +
  187 + if (nextStep.humidification != currentStep.humidification
  188 + || nextStep.humidificationRepeatDelay != currentStep.humidificationRepeatDelay
  189 + || nextStep.humidificationRepeatCount != currentStep.humidificationRepeatCount)
  190 + {
  191 + if (nextStep.humidificationRepeatDelay)
  192 + {
  193 + if (currentStep.humidificationRepeatDelay)
  194 + oven->repeatHumidification(nextStep.humidification, nextStep.humidificationRepeatDelay, nextStep.humidificationRepeatCount);
  195 + else
  196 + {
  197 + oven->stopHumidification();
  198 + oven->repeatHumidification(nextStep.humidification, nextStep.humidificationRepeatDelay, nextStep.humidificationRepeatCount);
  199 + }
  200 + }
  201 + else
  202 + {
  203 + if (currentStep.humidificationRepeatDelay)
  204 + {
  205 + oven->stopRepeatHumidification();
  206 + oven->startHumidification(nextStep.humidification);
  207 + }
  208 + else
  209 + oven->startHumidification(nextStep.humidification);
  210 + }
  211 + }
  212 +
  213 + if (checkingCoreTemp && currentStepIndex + 2 >= cook.steps.size())
  214 + {
  215 + lastCoreTempIncreasedTime.start();
  216 + }
  217 + }
  218 + else if (currentClass == Define::CookClass && nextClass == Define::DoorClass)
  219 + {
  220 + if (currentStep.dehumidification)
  221 + {
  222 + if (currentStep.dehumidificationRepeatDelay)
  223 + oven->stopRepeatDamper();
  224 + else
  225 + oven->closeDamper();
  226 + }
  227 +
  228 + if (currentStep.humidification)
  229 + {
  230 + if (currentStep.humidificationRepeatDelay)
  231 + oven->stopRepeatHumidification();
  232 + else
  233 + oven->stopHumidification();
  234 + }
  235 +
  236 + oven->stopCooking();
  237 + isWaitingDoorOpened_ = true;
  238 + }
  239 +
  240 + currentStepIndex++;
  241 +
  242 + advance();
  243 +
  244 + qDebug() << "Next Step After" << remainingTime();
  245 +}
  246 +
  247 +bool AutoCook::advance()
  248 +{
  249 + Oven *oven = Oven::getInstance();
  250 +
  251 + CookStep &currentStep = cook.steps[currentStepIndex];
  252 + switch (Define::classify(currentStep.type))
  253 + {
  254 + case Define::PreheatClass:
  255 + if (oven->currentHumidity() >= currentStep.humidity
  256 + && oven->currentTemp() >= currentStep.temp)
  257 + {
  258 + nextStep();
  259 +
  260 + return true;
  261 + }
  262 + break;
  263 + case Define::DoorClass:
  264 + if (isWaitingDoorOpened_)
  265 + {
  266 + if (oven->door())
  267 + {
  268 + isWaitingDoorOpened_ = false;
  269 +
  270 + return true;
  271 + }
  272 + }
  273 + else
  274 + {
  275 + if (!oven->door())
  276 + {
  277 + nextStep();
  278 +
  279 + return true;
  280 + }
  281 + }
  282 + break;
  283 + case Define::CookClass:
  284 + {
  285 + if (oven->door())
  286 + {
  287 + if (!doorOpened)
  288 + {
  289 + doorOpened = true;
  290 +
  291 + if (checkingCoreTemp && currentStepIndex + 1 >= cook.steps.size())
  292 + {
  293 + currentStep.time -= lastCoreTempIncreasedTime.elapsed();
  294 + }
  295 + else
  296 + {
  297 + currentStep.time -= stepStartTime.elapsed();
  298 + }
  299 + }
  300 +
  301 + return false;
  302 + }
  303 + else if (doorOpened)
  304 + {
  305 + doorOpened = false;
  306 + stepStartTime.start();
  307 + lastCoreTempIncreasedTime.start();
  308 + lastCoreTempChangedTime.start();
  309 + }
  310 +
  311 + int remainingCurrentStepTime = currentStep.time;
  312 + if (checkingCoreTemp && currentStepIndex + 1 >= cook.steps.size())
  313 + remainingCurrentStepTime -= lastCoreTempIncreasedTime.elapsed();
  314 + else
  315 + remainingCurrentStepTime -= stepStartTime.elapsed();
  316 +
  317 + if (remainingCurrentStepTime <= 0)
  318 + {
  319 + if (currentStepIndex + 1 < cook.steps.size())
  320 + {
  321 + nextStep();
  322 +
  323 + return true;
  324 + }
  325 + else
  326 + {
  327 + done_ = true;
  328 +
  329 + if (currentStep.dehumidification)
  330 + {
  331 + if (currentStep.dehumidificationRepeatDelay)
  332 + oven->stopRepeatDamper();
  333 + else
  334 + oven->closeDamper();
  335 + }
  336 +
  337 + if (currentStep.humidification)
  338 + {
  339 + if (currentStep.humidificationRepeatDelay)
  340 + oven->stopRepeatHumidification();
  341 + else
  342 + oven->stopHumidification();
  343 + }
  344 +
  345 + oven->stopCooking();
  346 +
  347 + return true;
  348 + }
  349 + }
  350 + else if (cook.isCoreTempValid() && oven->isInterTempValid())
  351 + {
  352 + if (!checkingCoreTemp)
  353 + {
  354 + checkingCoreTemp = true;
  355 + lastCoreTemp = oven->currentInterTemp();
  356 + lastIncreasedCoreTemp = lastCoreTemp;
  357 + lastCoreTempChangedTime.start();
  358 + lastCoreTempIncreasedTime.start();
  359 + }
  360 +
  361 +
  362 + int currentCoreTemp = oven->currentInterTemp();
  363 + if (currentCoreTemp >= cook.coreTemp())
  364 + {
  365 + done_ = true;
  366 +
  367 + if (currentStep.dehumidification)
  368 + {
  369 + if (currentStep.dehumidificationRepeatDelay)
  370 + oven->stopRepeatDamper();
  371 + else
  372 + oven->closeDamper();
  373 + }
  374 +
  375 + if (currentStep.humidification)
  376 + {
  377 + if (currentStep.humidificationRepeatDelay)
  378 + oven->stopRepeatHumidification();
  379 + else
  380 + oven->stopHumidification();
  381 + }
  382 +
  383 + oven->stopCooking();
  384 +
  385 + currentStepIndex = cook.steps.size() - 1;
  386 +
  387 + return true;
  388 + }
  389 + else if (currentCoreTemp != lastCoreTemp)
  390 + {
  391 + if (currentCoreTemp > lastIncreasedCoreTemp)
  392 + {
  393 + if (currentStepIndex + 1 < cook.steps.size())
  394 + {
  395 + int otherStepsTime = 0;
  396 + for (int idx = currentStepIndex; idx + 1 < cook.steps.size(); idx++)
  397 + otherStepsTime += cook.steps[idx].time;
  398 +
  399 + otherStepsTime -= stepStartTime.elapsed();
  400 +
  401 + int expectedRemainingTime = (cook.coreTemp() - currentCoreTemp) * lastCoreTempChangedTime.elapsed() / (currentCoreTemp - lastCoreTemp);
  402 + int expectedLastStepRemainingTime = expectedRemainingTime - otherStepsTime;
  403 +
  404 + CookStep &lastStep = cook.steps[cook.steps.size() - 1];
  405 + lastStep.time = qMax(expectedLastStepRemainingTime, 30000);
  406 +
  407 + lastIncreasedCoreTemp = currentCoreTemp;
  408 + lastCoreTempIncreasedTime.start();
  409 + }
  410 + else
  411 + {
  412 + CookStep &lastStep = cook.steps[cook.steps.size() - 1];
  413 +
  414 + int expectedRemainingTime = (cook.coreTemp() - currentCoreTemp) * lastCoreTempChangedTime.elapsed() / (currentCoreTemp - lastCoreTemp);
  415 +
  416 + qDebug() << "cook.coreTemp()" << cook.coreTemp();
  417 + qDebug() << "currentCoreTemp" << currentCoreTemp;
  418 + qDebug() << "lastCoreTemp" << lastCoreTemp;
  419 + qDebug() << "lastCoreTempChangedTime.elapsed()" << lastCoreTempChangedTime.elapsed();
  420 + qDebug() << "expectedRemainingTime" << expectedRemainingTime;
  421 +
  422 + if (expectedRemainingTime > 30000)
  423 + {
  424 + lastStep.time = expectedRemainingTime;
  425 + lastCoreTempIncreasedTime.start();
  426 + }
  427 + else
  428 + {
  429 + int currentRemainingTime = lastStep.time - lastCoreTempIncreasedTime.elapsed();
  430 +
  431 + qDebug() << "lastCoreTempIncreasedTime" << lastCoreTempIncreasedTime;
  432 + qDebug() << "currentRemainingTime" << currentRemainingTime;
  433 +
  434 + if (currentRemainingTime > 30000)
  435 + {
  436 + lastStep.time = 30000;
  437 + lastCoreTempIncreasedTime.start();
  438 + }
  439 + else if (expectedRemainingTime > currentRemainingTime)
  440 + {
  441 + lastStep.time = expectedRemainingTime;
  442 + lastCoreTempIncreasedTime.start();
  443 + }
  444 + }
  445 + }
  446 + }
  447 +
  448 + lastCoreTemp = currentCoreTemp;
  449 + lastCoreTempChangedTime.start();
  450 + }
  451 +
  452 +
  453 +// int currentCoreTemp = oven->currentInterTemp();
  454 +// if (currentCoreTemp != lastCoreTemp)
  455 +// {
  456 +// int remainingStepsTime = 0;
  457 +// for (int idx = currentStepIndex + 1; idx < cook.steps.size(); idx++)
  458 +// remainingStepsTime += cook.steps[idx].time;
  459 +
  460 +// int currentRemainingTime = currentStep.time - lastCoreTempTime.elapsed() + remainingStepsTime;
  461 +// int expectedTime = (cook.coreTemp() - currentCoreTemp) * qAbs(lastCoreTempTime.elapsed() / (currentCoreTemp - lastCoreTemp));
  462 +// int expectedCurrentStepTime = expectedTime - remainingStepsTime;
  463 +
  464 +// for (int idx = currentStepIndex; idx < cook.steps.size(); idx++)
  465 +// {
  466 +// CookStep &step = cook.steps[idx];
  467 +// if (expectedCurrentStepTime > 0)
  468 +// {
  469 +// step.time = expectedCurrentStepTime;
  470 +// break;
  471 +// }
  472 +// else
  473 +// {
  474 +// expectedCurrentStepTime += step.time;
  475 +// step.time = 0;
  476 +// }
  477 +// }
  478 +
  479 +// lastCoreTemp = oven->currentInterTemp();
  480 +// lastCoreTempTime.start();
  481 +// stepStartTime.start();
  482 +
  483 +// advance();
  484 +
  485 +// return true;
  486 +// }
  487 + }
  488 + }
  489 + case Define::InvalidClass:
  490 + break;
  491 + }
  492 +
  493 + return false;
  494 +}
  495 +
  496 +int AutoCook::remainingTime()
  497 +{
  498 + if (done_)
  499 + {
  500 + return 0;
  501 + }
  502 + else if (checkingCoreTemp && currentStepIndex + 1 >= cook.steps.size())
  503 + {
  504 + CookStep &step = cook.steps[cook.steps.size() - 1];
  505 + int t = step.time;
  506 + if (!doorOpened)
  507 + t -= lastCoreTempIncreasedTime.elapsed();
  508 +
  509 + return t / 1000;
  510 + }
  511 + else
  512 + {
  513 + int t = 0;
  514 + for (int i = currentStepIndex; i < cook.steps.size(); i++)
  515 + t += cook.steps[i].time;
  516 +
  517 + if (!doorOpened && Define::classify(cook.steps[currentStepIndex].type) == Define::CookClass)
  518 + t -= stepStartTime.elapsed();
  519 +
  520 + return t / 1000;
  521 + }
  522 +}
... ...
app/gui/oven_control/autocook.h
... ... @@ -0,0 +1,42 @@
  1 +#ifndef AUTOCOOK_H
  2 +#define AUTOCOOK_H
  3 +
  4 +#include "oven.h"
  5 +#include "cook.h"
  6 +
  7 +class AutoCook
  8 +{
  9 +public:
  10 + AutoCook();
  11 + AutoCook(Cook cook);
  12 +
  13 + void startStep();
  14 + void nextStep();
  15 +
  16 + bool advance();
  17 +
  18 + int remainingTime();
  19 + bool isWaitingDoorOpened() { return isWaitingDoorOpened_; }
  20 + bool done() { return done_; }
  21 +
  22 + Cook cook;
  23 + int currentStepIndex;
  24 +
  25 + int startHumidity;
  26 + int startTemp;
  27 +
  28 +private:
  29 + bool done_;
  30 + bool isWaitingDoorOpened_;
  31 +
  32 + bool doorOpened;
  33 +
  34 + QTime stepStartTime;
  35 + bool checkingCoreTemp;
  36 + int lastCoreTemp;
  37 + int lastIncreasedCoreTemp;
  38 + QTime lastCoreTempChangedTime;
  39 + QTime lastCoreTempIncreasedTime;
  40 +};
  41 +
  42 +#endif // AUTOCOOK_H
... ...
app/gui/oven_control/autocookconfigwindow.cpp
1 1 #include "autocookconfigwindow.h"
2 2 #include "ui_autocookconfigwindow.h"
3 3  
4   -AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, AbstractCook *cook) :
  4 +#include "autocookwindow.h"
  5 +
  6 +AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Cook cook) :
5 7 QMainWindow(parent),
6 8 ui(new Ui::AutoCookConfigWindow),
7 9 oven(oven),
... ... @@ -12,13 +14,9 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
12 14 ui->clockContainer->setParent(ui->upperStack);
13 15 setAttribute(Qt::WA_DeleteOnClose);
14 16  
15   - ui->cookTypeIcon->setPixmap(Cook::icon(cook->type()));
16   - ui->selectCookButton->setText(cook->name());
17   -
18 17 configWidgets.append(
19 18 ConfigWidget {
20 19 ui->configButton_1,
21   - ui->configBlock_1,
22 20 ui->configMinLabel_1,
23 21 ui->configMaxLabel_1,
24 22 ui->configCurrentLabel_1,
... ... @@ -27,7 +25,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
27 25 configWidgets.append(
28 26 ConfigWidget {
29 27 ui->configButton_2,
30   - ui->configBlock_2,
31 28 ui->configMinLabel_2,
32 29 ui->configMaxLabel_2,
33 30 ui->configCurrentLabel_2,
... ... @@ -36,7 +33,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
36 33 configWidgets.append(
37 34 ConfigWidget {
38 35 ui->configButton_3,
39   - ui->configBlock_3,
40 36 ui->configMinLabel_3,
41 37 ui->configMaxLabel_3,
42 38 ui->configCurrentLabel_3,
... ... @@ -45,7 +41,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
45 41 configWidgets.append(
46 42 ConfigWidget {
47 43 ui->configButton_4,
48   - ui->configBlock_4,
49 44 ui->configMinLabel_4,
50 45 ui->configMaxLabel_4,
51 46 ui->configCurrentLabel_4,
... ... @@ -54,21 +49,46 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
54 49 configWidgets.append(
55 50 ConfigWidget {
56 51 ui->configButton_5,
57   - ui->configBlock_5,
58 52 ui->configMinLabel_5,
59 53 ui->configMaxLabel_5,
60 54 ui->configCurrentLabel_5,
61 55 ui->configSlider_5
62 56 });
63 57  
  58 + cookStartTimer.setSingleShot(true);
  59 + cookStartTimer.setInterval(3000);
  60 + connect(&cookStartTimer, SIGNAL(timeout()), SLOT(start()));
  61 +
  62 + foreach (ConfigWidget w, configWidgets)
  63 + {
  64 + connect(w.button, SIGNAL(pressed()), SLOT(stopTimer()));
  65 + connect(w.button, SIGNAL(released()), SLOT(startTimer()));
  66 + connect(w.slider, SIGNAL(sliderPressed()), SLOT(stopTimer()));
  67 + connect(w.slider, SIGNAL(sliderReleased()), SLOT(startTimer()));
  68 + }
  69 +
  70 + setupUi();
  71 +
  72 + startTimer();
  73 +}
  74 +
  75 +AutoCookConfigWindow::~AutoCookConfigWindow()
  76 +{
  77 + delete ui;
  78 +}
  79 +
  80 +void AutoCookConfigWindow::setupUi()
  81 +{
  82 + ui->cookTypeIcon->setPixmap(Define::icon(cook.type));
  83 + ui->selectCookButton->setText(cook.name);
  84 +
64 85 for (int idx = 0; idx < 5; idx++)
65 86 {
66   - AbstractCookConfig *config = cook->configurations[idx];
67   - if (config == NULL)
  87 + CookConfig config = cook.configs[idx];
  88 + if (config.type == Define::ConfigNotUsed)
68 89 {
69 90 ConfigWidget cw = configWidgets.at(idx);
70 91 cw.button->hide();
71   - cw.block->hide();
72 92 cw.minimum->hide();
73 93 cw.maximum->hide();
74 94 cw.current->hide();
... ... @@ -78,29 +98,29 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
78 98 {
79 99 ConfigWidget cw = configWidgets.at(idx);
80 100 cw.button->setStyleSheet(
81   - "QPushButton { border-image: url("
82   - + config->icon()
83   - + ") } QPushButton::pressed { border-image: url("
84   - + config->overlayIcon()
  101 + "QPushButton { image: url("
  102 + + Define::icon(config.type)
  103 + + ") } QPushButton::pressed { image: url("
  104 + + Define::iconOverlay(config.type)
85 105 + ") }");
86 106  
87   - cw.minimum->setText(config->minLabel());
88   - cw.maximum->setText(config->maxLabel());
  107 + cw.minimum->setText(Define::minimum(config.type));
  108 + cw.maximum->setText(Define::maximum(config.type));
89 109 cw.slider->blockSignals(true);
90 110 cw.slider->setMinimum(1);
91   - cw.slider->setMaximum(config->count());
92   - cw.slider->setValue(config->current());
  111 + cw.slider->setMaximum(config.maximum);
  112 + cw.slider->setValue(config.current);
93 113 cw.slider->blockSignals(false);
94 114  
95   - switch (config->type())
  115 + switch (config.type)
96 116 {
97   - case Cook::Time:
  117 + case Define::Time:
98 118 cw.slider->setProperty("sliderColor", "white");
99 119 break;
100   - case Cook::BurnDegree:
  120 + case Define::BurnDegree:
101 121 cw.slider->setProperty("sliderColor", "yellow");
102 122 break;
103   - case Cook::Brightness:
  123 + case Define::Brightness:
104 124 cw.slider->setProperty("sliderColor", "red");
105 125 break;
106 126 default:
... ... @@ -108,61 +128,32 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
108 128 break;
109 129 }
110 130  
111   - cw.slider->style()->unpolish(cw.slider);
112   - cw.slider->style()->polish(cw.slider);
113   - cw.slider->update();
  131 +// cw.slider->style()->unpolish(cw.slider);
  132 +// cw.slider->style()->polish(cw.slider);
  133 +// cw.slider->update();
114 134  
115 135 connect(cw.slider, SIGNAL(valueChanged(int)), SLOT(updateConfig()));
116 136 }
117 137 }
118 138  
119   - if (cook->interTempEnabled())
120   - {
121   - interTempEnabled = true;
122   -
123   - ConfigWidget cw = configWidgets.at(3);
124   - cw.button->show();
125   - cw.button->setStyleSheet(
126   - "QPushButton {"
127   - " border-image: url(:/images/images/auto/011_icon_04_ov_01.png)"
128   - "} QPushButton::pressed {"
129   - " border-image: url(:/images/images/auto/011_icon_04_ov.png)"
130   - "}");
131   -
132   - cw.block->show();
133   - cw.minimum->hide();
134   - cw.maximum->hide();
135   - cw.current->hide();
136   - cw.slider->hide();
137   -
138   - connect(cw.button, SIGNAL(clicked()), SLOT(changeInterTemp()));
139   - }
140   -
141   -}
142   -
143   -AutoCookConfigWindow::~AutoCookConfigWindow()
144   -{
145   - delete ui;
  139 + updateView();
146 140 }
147 141  
148 142 void AutoCookConfigWindow::updateView()
149 143 {
150 144 for (int idx = 0; idx < 5; idx++)
151 145 {
152   - if (interTempEnabled && idx == 3)
153   - continue;
154   -
155   - AbstractCookConfig *config = cook->configurations[idx];
156   - if (config == NULL)
  146 + CookConfig config = cook.configs[idx];
  147 + if (config.type == Define::ConfigNotUsed)
157 148 continue;
158 149  
159 150 ConfigWidget cw = configWidgets.at(idx);
160 151  
161   - switch (config->type())
  152 + switch (config.type)
162 153 {
163   - case Cook::Time:
  154 + case Define::Time:
164 155 {
165   - int time = cook->time();
  156 + int time = cook.time();
166 157 if (time >= 3600)
167 158 cw.current->setText(QString().sprintf(
168 159 "%d"
... ... @@ -186,43 +177,54 @@ void AutoCookConfigWindow::updateView()
186 177 time));
187 178 break;
188 179 }
189   - case Cook::BurnDegree:
190   - cw.slider->setProperty("sliderColor", "yellow");
191   - break;
192   - case Cook::Brightness:
193   - cw.slider->setProperty("sliderColor", "red");
  180 + case Define::BurnDegree:
  181 + cw.current->setText(QString().sprintf(
  182 + "%d"
  183 + "<span style=\"font-size:11pt;\">℃</span>",
  184 + cook.coreTemp()));
194 185 break;
195 186 default:
196   - cw.slider->setProperty("sliderColor", "blue");
  187 + cw.current->setText(QString().sprintf(
  188 + "%d"
  189 + "<span style=\"font-size:11pt;\">/%d</span>",
  190 + config.current, config.maximum));
197 191 break;
198 192 }
199 193 }
200   -
201   - if (cook->interTempEnabled())
202   - {
203   - ConfigWidget cw = configWidgets.at(3);
204   - cw.button->show();
205   - cw.button->setStyleSheet(
206   - "QPushButton {"
207   - " border-image: url(:/images/images/auto/011_icon_04_ov_01.png)"
208   - "} QPushButton::pressed {"
209   - " border-image: url(:/images/images/auto/011_icon_04_ov.png)"
210   - "}");
211   -
212   - cw.block->show();
213   - cw.minimum->hide();
214   - cw.maximum->hide();
215   - cw.current->hide();
216   - cw.slider->hide();
217   - }
218 194 }
219 195  
220 196 void AutoCookConfigWindow::updateConfig()
221 197 {
  198 + cook.setConfig(ui->configSlider_1->value(),
  199 + ui->configSlider_2->value(),
  200 + ui->configSlider_3->value(),
  201 + ui->configSlider_4->value(),
  202 + ui->configSlider_5->value());
  203 +
  204 + updateView();
  205 +}
  206 +
  207 +void AutoCookConfigWindow::startTimer()
  208 +{
  209 + cookStartTimer.start();
  210 +}
  211 +
  212 +void AutoCookConfigWindow::stopTimer()
  213 +{
  214 + cookStartTimer.stop();
  215 +}
  216 +
  217 +void AutoCookConfigWindow::start()
  218 +{
  219 + close();
222 220  
  221 + AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook);
  222 + w->setWindowModality(Qt::WindowModal);
  223 + w->showFullScreen();
  224 + w->raise();
223 225 }
224 226  
225   -void AutoCookConfigWindow::changeInterTemp()
  227 +void AutoCookConfigWindow::on_backButton_clicked()
226 228 {
227   - cook->setInterTempEnabled(!cook->interTempEnabled());
  229 + close();
228 230 }
... ...
app/gui/oven_control/autocookconfigwindow.h
... ... @@ -8,7 +8,8 @@
8 8 #include <QSlider>
9 9  
10 10 #include "oven.h"
11   -#include "cook.h"
  11 +//#include "cook.h"
  12 +#include "cookbook.h"
12 13  
13 14 namespace Ui {
14 15 class AutoCookConfigWindow;
... ... @@ -19,20 +20,19 @@ class AutoCookConfigWindow : public QMainWindow
19 20 Q_OBJECT
20 21  
21 22 public:
22   - explicit AutoCookConfigWindow(QWidget *parent = 0, Oven *oven = 0, AbstractCook *cook = 0);
  23 + explicit AutoCookConfigWindow(QWidget *parent = 0, Oven *oven = 0,
  24 + Cook cook = Cook(Define::Poultry, "/prime/cookbook/poultry/chicken", "Chicken"));
23 25 ~AutoCookConfigWindow();
24 26  
25 27 private:
26 28 Ui::AutoCookConfigWindow *ui;
27 29 Oven *oven;
28   - AbstractCook *cook;
  30 + Cook cook;
29 31  
30 32 QTimer cookStartTimer;
31   - bool interTempEnabled;
32 33  
33 34 struct ConfigWidget {
34 35 QPushButton *button;
35   - QWidget *block;
36 36 QLabel *minimum;
37 37 QLabel *maximum;
38 38 QLabel *current;
... ... @@ -42,9 +42,14 @@ private:
42 42 QList<ConfigWidget> configWidgets;
43 43  
44 44 private slots:
  45 + void setupUi();
45 46 void updateView();
46 47 void updateConfig();
47   - void changeInterTemp();
  48 + void startTimer();
  49 + void stopTimer();
  50 + void start();
  51 +
  52 + void on_backButton_clicked();
48 53 };
49 54  
50 55 #endif // AUTOCOOKCONFIGWINDOW_H
... ...
app/gui/oven_control/autocookconfigwindow.ui
... ... @@ -14,11 +14,11 @@
14 14 <string>MainWindow</string>
15 15 </property>
16 16 <property name="styleSheet">
17   - <string notr="true">#centralwidget { background-image: url(:/images/background/auto_config.png); }
  17 + <string notr="true">#centralwidget { background-image: url(:/images/background/auto.png); }
18 18 #bottomBar { background-image: url(:/images/bottom_bar/background.png); }
19 19  
20 20 QSlider::groove {
21   -background-image: url(:/images/images/auto/gau_04.png);
  21 +background-image: url(:/images/slider/groove.png);
22 22 background-repeat: no-repeat;
23 23 background-position: center;
24 24 }
... ... @@ -30,31 +30,38 @@ margin: 0px 5px;
30 30 }
31 31  
32 32 QSlider[sliderColor=&quot;red&quot;]::sub-page {
33   -background-image: url(:/images/images/auto/gau_05.png);
  33 +background-image: url(:/images/slider/sub_red.png);
34 34 }
35 35  
36 36 QSlider[sliderColor=&quot;yellow&quot;]::sub-page {
37   -background-image: url(:/images/images/auto/gau_06.png);
  37 +background-image: url(:/images/slider/sub_yellow.png);
38 38 }
39 39  
40 40 QSlider[sliderColor=&quot;white&quot;]::sub-page {
41   -background-image: url(:/images/images/auto/gau_07.png);
  41 +background-image: url(:/images/slider/sub_white.png);
42 42 }
43 43  
44 44 QSlider[sliderColor=&quot;blue&quot;]::sub-page {
45   -background-image: url(:/images/images/auto/gau_09.png);
  45 +background-image: url(:/images/slider/sub_blue.png);
46 46 }
47 47  
48 48 QSlider[sliderColor=&quot;green&quot;]::sub-page {
49   -background-image: url(:/images/images/auto/sys_icon_01_gau.png);
  49 +background-image: url(:/images/slider/sub_green.png);
50 50 }
51 51  
52 52 QSlider::handle {
53   -background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png);
  53 +background-image: url(:/images/slider/handle_big.png);
54 54 background-repeat: no-repeat;
55 55 background-position: center;
56 56 width: 23px;
57 57 height: 33px;
  58 +}
  59 +
  60 +QPushButton[style=&quot;icon&quot;] {
  61 +background-image: url(:/images/slider_icon/background.png);
  62 +background-repeat: no-repeat;
  63 +background-position: center;
  64 +border: none;
58 65 }</string>
59 66 </property>
60 67 <widget class="QWidget" name="centralwidget">
... ... @@ -109,14 +116,14 @@ height: 33px;
109 116 </sizepolicy>
110 117 </property>
111 118 <property name="styleSheet">
112   - <string notr="true">QPushButton { border-image: url(:/images/images/auto/006_sys_icon_03.png); }
113   -QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_03_ov.png); }</string>
  119 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/back.png); }
  120 +QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</string>
114 121 </property>
115 122 <property name="text">
116 123 <string/>
117 124 </property>
118 125 </widget>
119   - <widget class="QPushButton" name="backButton_3">
  126 + <widget class="QPushButton" name="washButton">
120 127 <property name="geometry">
121 128 <rect>
122 129 <x>514</x>
... ... @@ -132,14 +139,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_03_ov.
132 139 </sizepolicy>
133 140 </property>
134 141 <property name="styleSheet">
135   - <string notr="true">QPushButton { border-image: url(:/images/images/auto/006_sys_icon_05.png); }
136   -QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_05_ov.png); }</string>
  142 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/wash.png); }
  143 +QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); }</string>
137 144 </property>
138 145 <property name="text">
139 146 <string/>
140 147 </property>
141 148 </widget>
142   - <widget class="QPushButton" name="backButton_2">
  149 + <widget class="QPushButton" name="configButton">
143 150 <property name="geometry">
144 151 <rect>
145 152 <x>288</x>
... ... @@ -155,14 +162,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_05_ov.
155 162 </sizepolicy>
156 163 </property>
157 164 <property name="styleSheet">
158   - <string notr="true">QPushButton { border-image: url(:/images/images/auto/006_sys_icon_01.png); }
159   -QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_01_ov.png); }</string>
  165 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/config.png); }
  166 +QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</string>
160 167 </property>
161 168 <property name="text">
162 169 <string/>
163 170 </property>
164 171 </widget>
165   - <widget class="QPushButton" name="backButton_4">
  172 + <widget class="QPushButton" name="helpButton">
166 173 <property name="geometry">
167 174 <rect>
168 175 <x>627</x>
... ... @@ -178,14 +185,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_01_ov.
178 185 </sizepolicy>
179 186 </property>
180 187 <property name="styleSheet">
181   - <string notr="true">QPushButton { border-image: url(:/images/images/auto/006_sys_icon_02.png); }
182   -QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_02_ov.png); }</string>
  188 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/help.png); }
  189 +QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</string>
183 190 </property>
184 191 <property name="text">
185 192 <string/>
186 193 </property>
187 194 </widget>
188   - <widget class="QPushButton" name="backButton_5">
  195 + <widget class="QPushButton" name="favoritesButton">
189 196 <property name="geometry">
190 197 <rect>
191 198 <x>401</x>
... ... @@ -201,7 +208,8 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_02_ov.
201 208 </sizepolicy>
202 209 </property>
203 210 <property name="styleSheet">
204   - <string notr="true"/>
  211 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/favorites.png); }
  212 +QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); }</string>
205 213 </property>
206 214 <property name="text">
207 215 <string/>
... ... @@ -632,8 +640,8 @@ border-image: url(:/images/button/152_ov.png);
632 640 <string/>
633 641 </property>
634 642 <property name="icon">
635   - <iconset>
636   - <normaloff>:/images/images/auto/btn_icon_01.png</normaloff>:/images/images/auto/btn_icon_01.png</iconset>
  643 + <iconset resource="resources.qrc">
  644 + <normaloff>:/images/auto_button/btn_icon_01.png</normaloff>:/images/auto_button/btn_icon_01.png</iconset>
637 645 </property>
638 646 <property name="iconSize">
639 647 <size>
... ... @@ -645,25 +653,18 @@ border-image: url(:/images/button/152_ov.png);
645 653 <widget class="QPushButton" name="configButton_1">
646 654 <property name="geometry">
647 655 <rect>
648   - <x>49</x>
649   - <y>627</y>
650   - <width>96</width>
651   - <height>96</height>
  656 + <x>27</x>
  657 + <y>605</y>
  658 + <width>140</width>
  659 + <height>140</height>
652 660 </rect>
653 661 </property>
654   - <property name="styleSheet">
655   - <string notr="true">QPushButton {
656   - border-image: url(:/images/images/manual/011_icon_01.png);
657   -}
658   -
659   -QPushButton:pressed {
660   - border-image: url(:/images/images/manual/011_icon_01_ov.png);
661   -}
662   -</string>
663   - </property>
664 662 <property name="text">
665 663 <string/>
666 664 </property>
  665 + <property name="style" stdset="0">
  666 + <string notr="true">icon</string>
  667 + </property>
667 668 </widget>
668 669 <widget class="QSlider" name="configSlider_4">
669 670 <property name="geometry">
... ... @@ -693,25 +694,18 @@ QPushButton:pressed {
693 694 <widget class="QPushButton" name="configButton_4">
694 695 <property name="geometry">
695 696 <rect>
696   - <x>49</x>
697   - <y>1137</y>
698   - <width>96</width>
699   - <height>96</height>
  697 + <x>27</x>
  698 + <y>1115</y>
  699 + <width>140</width>
  700 + <height>140</height>
700 701 </rect>
701 702 </property>
702   - <property name="styleSheet">
703   - <string notr="true">QPushButton {
704   - border-image: url(:/images/images/manual/011_icon_01.png);
705   -}
706   -
707   -QPushButton:pressed {
708   - border-image: url(:/images/images/manual/011_icon_01_ov.png);
709   -}
710   -</string>
711   - </property>
712 703 <property name="text">
713 704 <string/>
714 705 </property>
  706 + <property name="style" stdset="0">
  707 + <string notr="true">icon</string>
  708 + </property>
715 709 </widget>
716 710 <widget class="QLabel" name="configMaxLabel_2">
717 711 <property name="enabled">
... ... @@ -775,32 +769,6 @@ QPushButton:pressed {
775 769 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
776 770 </property>
777 771 </widget>
778   - <widget class="QWidget" name="configBlock_3" native="true">
779   - <property name="geometry">
780   - <rect>
781   - <x>27</x>
782   - <y>935</y>
783   - <width>140</width>
784   - <height>140</height>
785   - </rect>
786   - </property>
787   - <property name="styleSheet">
788   - <string notr="true">background-image: url(:/images/images/manual/010_icon_block.png);</string>
789   - </property>
790   - </widget>
791   - <widget class="QWidget" name="configBlock_4" native="true">
792   - <property name="geometry">
793   - <rect>
794   - <x>27</x>
795   - <y>1115</y>
796   - <width>140</width>
797   - <height>140</height>
798   - </rect>
799   - </property>
800   - <property name="styleSheet">
801   - <string notr="true">background-image: url(:/images/images/manual/010_icon_block.png);</string>
802   - </property>
803   - </widget>
804 772 <widget class="QSlider" name="configSlider_2">
805 773 <property name="geometry">
806 774 <rect>
... ... @@ -1042,25 +1010,18 @@ QPushButton:pressed {
1042 1010 <widget class="QPushButton" name="configButton_2">
1043 1011 <property name="geometry">
1044 1012 <rect>
1045   - <x>49</x>
1046   - <y>787</y>
1047   - <width>96</width>
1048   - <height>96</height>
  1013 + <x>27</x>
  1014 + <y>765</y>
  1015 + <width>140</width>
  1016 + <height>140</height>
1049 1017 </rect>
1050 1018 </property>
1051   - <property name="styleSheet">
1052   - <string notr="true">QPushButton {
1053   - border-image: url(:/images/images/manual/011_icon_01.png);
1054   -}
1055   -
1056   -QPushButton:pressed {
1057   - border-image: url(:/images/images/manual/011_icon_01_ov.png);
1058   -}
1059   -</string>
1060   - </property>
1061 1019 <property name="text">
1062 1020 <string/>
1063 1021 </property>
  1022 + <property name="style" stdset="0">
  1023 + <string notr="true">icon</string>
  1024 + </property>
1064 1025 </widget>
1065 1026 <widget class="QLabel" name="configMinLabel_1">
1066 1027 <property name="enabled">
... ... @@ -1124,19 +1085,6 @@ QPushButton:pressed {
1124 1085 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
1125 1086 </property>
1126 1087 </widget>
1127   - <widget class="QWidget" name="configBlock_2" native="true">
1128   - <property name="geometry">
1129   - <rect>
1130   - <x>27</x>
1131   - <y>765</y>
1132   - <width>140</width>
1133   - <height>140</height>
1134   - </rect>
1135   - </property>
1136   - <property name="styleSheet">
1137   - <string notr="true">background-image: url(:/images/images/manual/010_icon_block.png);</string>
1138   - </property>
1139   - </widget>
1140 1088 <widget class="QLabel" name="configMaxLabel_1">
1141 1089 <property name="enabled">
1142 1090 <bool>true</bool>
... ... @@ -1346,20 +1294,7 @@ QPushButton:pressed {
1346 1294 <set>Qt::AlignCenter</set>
1347 1295 </property>
1348 1296 </widget>
1349   - <widget class="QWidget" name="configBlock_1" native="true">
1350   - <property name="geometry">
1351   - <rect>
1352   - <x>27</x>
1353   - <y>605</y>
1354   - <width>140</width>
1355   - <height>140</height>
1356   - </rect>
1357   - </property>
1358   - <property name="styleSheet">
1359   - <string notr="true">background-image: url(:/images/images/manual/010_icon_block.png);</string>
1360   - </property>
1361   - </widget>
1362   - <widget class="QWidget" name="configBlock_5" native="true">
  1297 + <widget class="QPushButton" name="configButton_5">
1363 1298 <property name="geometry">
1364 1299 <rect>
1365 1300 <x>27</x>
... ... @@ -1368,32 +1303,12 @@ QPushButton:pressed {
1368 1303 <height>140</height>
1369 1304 </rect>
1370 1305 </property>
1371   - <property name="styleSheet">
1372   - <string notr="true">background-image: url(:/images/images/manual/010_icon_block.png);</string>
1373   - </property>
1374   - </widget>
1375   - <widget class="QPushButton" name="configButton_5">
1376   - <property name="geometry">
1377   - <rect>
1378   - <x>49</x>
1379   - <y>1307</y>
1380   - <width>96</width>
1381   - <height>96</height>
1382   - </rect>
1383   - </property>
1384   - <property name="styleSheet">
1385   - <string notr="true">QPushButton {
1386   - border-image: url(:/images/images/manual/011_icon_01.png);
1387   -}
1388   -
1389   -QPushButton:pressed {
1390   - border-image: url(:/images/images/manual/011_icon_01_ov.png);
1391   -}
1392   -</string>
1393   - </property>
1394 1306 <property name="text">
1395 1307 <string/>
1396 1308 </property>
  1309 + <property name="style" stdset="0">
  1310 + <string notr="true">icon</string>
  1311 + </property>
1397 1312 </widget>
1398 1313 <widget class="QSlider" name="configSlider_5">
1399 1314 <property name="geometry">
... ... @@ -1487,25 +1402,18 @@ QPushButton:pressed {
1487 1402 <widget class="QPushButton" name="configButton_3">
1488 1403 <property name="geometry">
1489 1404 <rect>
1490   - <x>49</x>
1491   - <y>957</y>
1492   - <width>96</width>
1493   - <height>96</height>
  1405 + <x>27</x>
  1406 + <y>935</y>
  1407 + <width>140</width>
  1408 + <height>140</height>
1494 1409 </rect>
1495 1410 </property>
1496   - <property name="styleSheet">
1497   - <string notr="true">QPushButton {
1498   - border-image: url(:/images/images/manual/011_icon_01.png);
1499   -}
1500   -
1501   -QPushButton:pressed {
1502   - border-image: url(:/images/images/manual/011_icon_01_ov.png);
1503   -}
1504   -</string>
1505   - </property>
1506 1411 <property name="text">
1507 1412 <string/>
1508 1413 </property>
  1414 + <property name="style" stdset="0">
  1415 + <string notr="true">icon</string>
  1416 + </property>
1509 1417 </widget>
1510 1418 <widget class="QSlider" name="configSlider_1">
1511 1419 <property name="geometry">
... ... @@ -1538,41 +1446,6 @@ QPushButton:pressed {
1538 1446 <number>1</number>
1539 1447 </property>
1540 1448 </widget>
1541   - <zorder>configBlock_4</zorder>
1542   - <zorder>configBlock_2</zorder>
1543   - <zorder>configBlock_1</zorder>
1544   - <zorder>upperStack</zorder>
1545   - <zorder>bottomBar</zorder>
1546   - <zorder>configMaxLabel_5</zorder>
1547   - <zorder>configMinLabel_5</zorder>
1548   - <zorder>selectCookButton</zorder>
1549   - <zorder>configCurrentLabel_2</zorder>
1550   - <zorder>configMaxLabel_3</zorder>
1551   - <zorder>configMinLabel_3</zorder>
1552   - <zorder>configMinLabel_4</zorder>
1553   - <zorder>pushButton_4</zorder>
1554   - <zorder>configButton_1</zorder>
1555   - <zorder>configSlider_4</zorder>
1556   - <zorder>configButton_4</zorder>
1557   - <zorder>configMaxLabel_2</zorder>
1558   - <zorder>configBlock_3</zorder>
1559   - <zorder>configSlider_2</zorder>
1560   - <zorder>configCurrentLabel_5</zorder>
1561   - <zorder>configMinLabel_2</zorder>
1562   - <zorder>configSlider_3</zorder>
1563   - <zorder>configMaxLabel_4</zorder>
1564   - <zorder>configButton_2</zorder>
1565   - <zorder>configMinLabel_1</zorder>
1566   - <zorder>configMaxLabel_1</zorder>
1567   - <zorder>configCurrentLabel_3</zorder>
1568   - <zorder>configCurrentLabel_1</zorder>
1569   - <zorder>cookTypeIcon</zorder>
1570   - <zorder>configBlock_5</zorder>
1571   - <zorder>configButton_5</zorder>
1572   - <zorder>configSlider_5</zorder>
1573   - <zorder>configCurrentLabel_4</zorder>
1574   - <zorder>configButton_3</zorder>
1575   - <zorder>configSlider_1</zorder>
1576 1449 </widget>
1577 1450 </widget>
1578 1451 <customwidgets>
... ... @@ -1583,6 +1456,8 @@ QPushButton:pressed {
1583 1456 <container>1</container>
1584 1457 </customwidget>
1585 1458 </customwidgets>
1586   - <resources/>
  1459 + <resources>
  1460 + <include location="resources.qrc"/>
  1461 + </resources>
1587 1462 <connections/>
1588 1463 </ui>
... ...
app/gui/oven_control/autocookselectionwindow.cpp
... ... @@ -4,9 +4,10 @@
4 4 #include <QSignalMapper>
5 5 #include <QtDebug>
6 6  
7   -#include "autocookwindow.h"
  7 +#include "autocookconfigwindow.h"
  8 +//#include "autocookwindow.h"
8 9  
9   -AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Cook::CookType type) :
  10 +AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Define::CookType type) :
10 11 QMainWindow(parent),
11 12 ui(new Ui::AutoCookSelectionWindow),
12 13 oven(oven), type(type), autoCookWindowOpened(false)
... ... @@ -16,20 +17,9 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co
16 17 ui->clockContainer->setParent(ui->upperStack);
17 18 setAttribute(Qt::WA_DeleteOnClose);
18 19  
19   - ui->cookTypeIcon->setPixmap(Cook::icon(type));
  20 + ui->cookTypeIcon->setPixmap(Define::icon(type));
20 21  
21   - switch (type)
22   - {
23   - case Cook::Poultry:
24   - cookList.append(new ChickenCook);
25   - break;
26   - case Cook::Meat:
27   - cookList.append(new MeatPie);
28   - break;
29   - case Cook::Bread:
30   - cookList.append(new Croissant);
31   - break;
32   - }
  22 + book = CookBook(type);
33 23  
34 24 QSignalMapper *sm = new QSignalMapper(this);
35 25 connect(sm, SIGNAL(mapped(int)), SLOT(onCookSelected(int)));
... ... @@ -47,7 +37,7 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co
47 37 "border-image: url(:/images/button/288_ov.png);\n"
48 38 "}");
49 39  
50   - for (int idx = 0; idx < cookList.size(); idx++)
  40 + for (int idx = 0; idx < book.list.size(); idx++)
51 41 {
52 42 int x = 12 + (idx % 3) * 294;
53 43 int y = 615 + (idx / 3) * 80;
... ... @@ -56,7 +46,7 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co
56 46 pb->setGeometry(QRect(x, y, 288, 70));
57 47 pb->setFont(font);
58 48 pb->setStyleSheet(stylesheet);
59   - pb->setText(cookList.at(idx)->name());
  49 + pb->setText(book.list.at(idx));
60 50  
61 51 sm->setMapping(pb, idx);
62 52 connect(pb, SIGNAL(clicked()), sm, SLOT(map()));
... ... @@ -66,9 +56,6 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co
66 56 AutoCookSelectionWindow::~AutoCookSelectionWindow()
67 57 {
68 58 delete ui;
69   -
70   - foreach (AbstractCook *cook, cookList)
71   - delete cook;
72 59 }
73 60  
74 61 void AutoCookSelectionWindow::onCookSelected(int idx)
... ... @@ -78,11 +65,12 @@ void AutoCookSelectionWindow::onCookSelected(int idx)
78 65  
79 66 autoCookWindowOpened = true;
80 67  
81   - AutoCookWindow *w = new AutoCookWindow(parentWidget(), oven, cookList.takeAt(idx));
  68 + close();
  69 +
  70 + AutoCookConfigWindow *w = new AutoCookConfigWindow(parentWidget(), oven, book.get(idx));
82 71 w->setWindowModality(Qt::WindowModal);
83 72 w->showFullScreen();
84   -
85   - close();
  73 + w->raise();
86 74 }
87 75  
88 76 void AutoCookSelectionWindow::on_backButton_clicked()
... ...
app/gui/oven_control/autocookselectionwindow.h
... ... @@ -4,7 +4,7 @@
4 4 #include <QMainWindow>
5 5  
6 6 #include "oven.h"
7   -#include "cook.h"
  7 +#include "cookbook.h"
8 8  
9 9 namespace Ui {
10 10 class AutoCookSelectionWindow;
... ... @@ -15,7 +15,7 @@ class AutoCookSelectionWindow : public QMainWindow
15 15 Q_OBJECT
16 16  
17 17 public:
18   - explicit AutoCookSelectionWindow(QWidget *parent = 0, Oven *oven = 0, Cook::CookType type = Cook::Poultry);
  18 + explicit AutoCookSelectionWindow(QWidget *parent = 0, Oven *oven = 0, Define::CookType type = Define::Poultry);
19 19 ~AutoCookSelectionWindow();
20 20  
21 21 private slots:
... ... @@ -26,8 +26,9 @@ private slots:
26 26 private:
27 27 Ui::AutoCookSelectionWindow *ui;
28 28 Oven *oven;
29   - Cook::CookType type;
30   - QList<AbstractCook *> cookList;
  29 + Define::CookType type;
  30 + CookBook book;
  31 +
31 32 bool autoCookWindowOpened;
32 33 };
33 34  
... ...
app/gui/oven_control/autocookwindow.cpp
1 1 #include "autocookwindow.h"
2 2 #include "ui_autocookwindow.h"
3 3  
4   -AutoCookWindow::AutoCookWindow(QWidget *parent, Oven *oven, AbstractCook *cook) :
  4 +#include "keepwarmpopup.h"
  5 +
  6 +AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) :
5 7 QMainWindow(parent),
6 8 ui(new Ui::AutoCookWindow),
7   - oven(oven),
8   - cook(cook),
9   - started(false),
10   - done(false),
11   - selectedStepIndex(0)
  9 + cook(cook)
12 10 {
13 11 ui->setupUi(this);
14 12  
15 13 ui->clockContainer->setParent(ui->upperStack);
16 14 setAttribute(Qt::WA_DeleteOnClose);
17 15  
18   - connect(oven, SIGNAL(changed(Oven*)), SLOT(onOvenUpdated()));
19   - oven->setDefault(Oven::CombinationMode);
20   -
21   - lastHumidity = oven->currentHumidity();
22   - lastTemp = oven->currentTemp();
23   - lastDoorView = Cook::Invalid;
24   -
25   - QTimer *cookStartTimer = new QTimer(this);
26   - cookStartTimer->setSingleShot(true);
27   - cookStartTimer->setInterval(3000);
28   - connect(cookStartTimer, SIGNAL(timeout()), SLOT(start()));
29   -
30   - connect(ui->configButton_1, SIGNAL(pressed()), SIGNAL(stopCookStartTimer()));
31   - connect(ui->configButton_2, SIGNAL(pressed()), SIGNAL(stopCookStartTimer()));
32   - connect(ui->configButton_3, SIGNAL(pressed()), SIGNAL(stopCookStartTimer()));
33   - connect(ui->configButton_4, SIGNAL(pressed()), SIGNAL(stopCookStartTimer()));
34   - connect(ui->configButton_5, SIGNAL(pressed()), SIGNAL(stopCookStartTimer()));
35   - connect(ui->configButton_1, SIGNAL(released()), SIGNAL(startCookStartTimer()));
36   - connect(ui->configButton_2, SIGNAL(released()), SIGNAL(startCookStartTimer()));
37   - connect(ui->configButton_3, SIGNAL(released()), SIGNAL(startCookStartTimer()));
38   - connect(ui->configButton_4, SIGNAL(released()), SIGNAL(startCookStartTimer()));
39   - connect(ui->configButton_5, SIGNAL(released()), SIGNAL(startCookStartTimer()));
40   -
41   - connect(ui->configSlider_1, SIGNAL(sliderPressed()), SIGNAL(stopCookStartTimer()));
42   - connect(ui->configSlider_2, SIGNAL(sliderPressed()), SIGNAL(stopCookStartTimer()));
43   - connect(ui->configSlider_3, SIGNAL(sliderPressed()), SIGNAL(stopCookStartTimer()));
44   - connect(ui->configSlider_4, SIGNAL(sliderPressed()), SIGNAL(stopCookStartTimer()));
45   - connect(ui->configSlider_5, SIGNAL(sliderPressed()), SIGNAL(stopCookStartTimer()));
46   - connect(ui->configSlider_1, SIGNAL(actionTriggered(int)), SIGNAL(startCookStartTimer()));
47   - connect(ui->configSlider_2, SIGNAL(actionTriggered(int)), SIGNAL(startCookStartTimer()));
48   - connect(ui->configSlider_3, SIGNAL(actionTriggered(int)), SIGNAL(startCookStartTimer()));
49   - connect(ui->configSlider_4, SIGNAL(actionTriggered(int)), SIGNAL(startCookStartTimer()));
50   - connect(ui->configSlider_5, SIGNAL(actionTriggered(int)), SIGNAL(startCookStartTimer()));
51   -
52   - connect(this, SIGNAL(stopCookStartTimer()), cookStartTimer, SLOT(stop()));
53   - connect(this, SIGNAL(startCookStartTimer()), cookStartTimer, SLOT(start()));
54   -
55   - connect(ui->configSlider_1, SIGNAL(valueChanged(int)), SLOT(onConfigChanged()));
56   - connect(ui->configSlider_2, SIGNAL(valueChanged(int)), SLOT(onConfigChanged()));
57   - connect(ui->configSlider_3, SIGNAL(valueChanged(int)), SLOT(onConfigChanged()));
58   - connect(ui->configSlider_4, SIGNAL(valueChanged(int)), SLOT(onConfigChanged()));
59   - connect(ui->configSlider_5, SIGNAL(valueChanged(int)), SLOT(onConfigChanged()));
60   -
61   - connect(ui->configSlider_1, SIGNAL(sliderMoved(int)), SLOT(updateView()));
62   - connect(ui->configSlider_2, SIGNAL(sliderMoved(int)), SLOT(updateView()));
63   - connect(ui->configSlider_3, SIGNAL(sliderMoved(int)), SLOT(updateView()));
64   - connect(ui->configSlider_4, SIGNAL(sliderMoved(int)), SLOT(updateView()));
65   - connect(ui->configSlider_5, SIGNAL(sliderMoved(int)), SLOT(updateView()));
66   - connect(ui->configSlider_1, SIGNAL(valueChanged(int)), SLOT(updateView()));
67   - connect(ui->configSlider_2, SIGNAL(valueChanged(int)), SLOT(updateView()));
68   - connect(ui->configSlider_3, SIGNAL(valueChanged(int)), SLOT(updateView()));
69   - connect(ui->configSlider_4, SIGNAL(valueChanged(int)), SLOT(updateView()));
70   - connect(ui->configSlider_5, SIGNAL(valueChanged(int)), SLOT(updateView()));
71   -
72   -
73   - checkCookTimer.setInterval(1000);
74   - connect(&checkCookTimer, SIGNAL(timeout()), SLOT(checkCook()));
  16 + autocook = AutoCook(cook);
  17 + processSelected = false;
  18 +
  19 + setupUi();
75 20  
  21 + Oven *oven = Oven::getInstance();
  22 + connect(oven, SIGNAL(changed(Oven*)), SLOT(updateView()));
76 23  
77 24 returnToCurrentStepTimer.setSingleShot(true);
78 25 returnToCurrentStepTimer.setInterval(3000);
79 26 connect(&returnToCurrentStepTimer, SIGNAL(timeout()), SLOT(returnToCurrentStep()));
80 27  
81   -
82   - showingCurrentHumidity = false;
83 28 showCurrentHumidityTimer.setSingleShot(true);
84 29 showCurrentHumidityTimer.setInterval(3000);
85 30 connect(&showCurrentHumidityTimer, SIGNAL(timeout()), SLOT(showCurrentHumidity()));
86 31  
87   - showingCurrentTemp = false;
88 32 showCurrentTempTimer.setSingleShot(true);
89 33 showCurrentTempTimer.setInterval(3000);
90 34 connect(&showCurrentTempTimer, SIGNAL(timeout()), SLOT(showCurrentTemp()));
91 35  
92   - setupUi();
  36 + connect(&checkCookTimer, SIGNAL(timeout()), SLOT(checkCook()));
  37 + checkCookTimer.start(100);
93 38  
94   - cookStartTimer->start();
  39 + connect(&checkProcessTimer, SIGNAL(timeout()), SLOT(checkProcess()));
95 40 }
96 41  
97 42 AutoCookWindow::~AutoCookWindow()
98 43 {
99 44 delete ui;
100   -
101   - delete cook;
102 45 }
103 46  
104 47 void AutoCookWindow::setupUi()
... ... @@ -109,137 +52,14 @@ void AutoCookWindow::setupUi()
109 52 dryModeIcon.load(":/images/cook_mode/small_dryheat.png");
110 53 combiModeIcon.load(":/images/cook_mode/small_combi.png");
111 54  
112   - QString cookTypeIcon = Cook::icon(cook->type());
113   - ui->cookTypeIcon_1->setPixmap(cookTypeIcon);
114   - ui->cookTypeIcon_2->setPixmap(cookTypeIcon);
115   -
116   - QString name = cook->name();
117   - ui->selectCookButton_1->setText(name);
118   - ui->selectCookButton_2->setText(name);
  55 + ui->cookTypeIcon->setPixmap(Define::icon(cook.type));
  56 + ui->selectCookButton->setText(cook.name);
119 57  
120   - for (int idx = 0; idx < 5; idx++)
121   - {
122   - QPushButton *icon;
123   - QLabel *minLabel;
124   - QLabel *maxLabel;
125   - QLabel *currentLabel;
126   - QSlider *slider;
127   -
128   - switch (idx)
129   - {
130   - case 0:
131   - icon = ui->configButton_1;
132   - minLabel = ui->configMinLabel_1;
133   - maxLabel = ui->configMaxLabel_1;
134   - currentLabel = ui->configCurrentLabel_1;
135   - slider = ui->configSlider_1;
136   - break;
137   - case 1:
138   - icon = ui->configButton_2;
139   - minLabel = ui->configMinLabel_2;
140   - maxLabel = ui->configMaxLabel_2;
141   - currentLabel = ui->configCurrentLabel_2;
142   - slider = ui->configSlider_2;
143   - break;
144   - case 2:
145   - icon = ui->configButton_3;
146   - minLabel = ui->configMinLabel_3;
147   - maxLabel = ui->configMaxLabel_3;
148   - currentLabel = ui->configCurrentLabel_3;
149   - slider = ui->configSlider_3;
150   - break;
151   - case 3:
152   - icon = ui->configButton_4;
153   - minLabel = ui->configMinLabel_4;
154   - maxLabel = ui->configMaxLabel_4;
155   - currentLabel = ui->configCurrentLabel_4;
156   - slider = ui->configSlider_4;
157   - break;
158   - case 4:
159   - icon = ui->configButton_5;
160   - minLabel = ui->configMinLabel_5;
161   - maxLabel = ui->configMaxLabel_5;
162   - currentLabel = ui->configCurrentLabel_5;
163   - slider = ui->configSlider_5;
164   - break;
165   - }
166   -
167   - AbstractCookConfig *config = cook->configurations[idx];
168   - if (config != NULL)
169   - {
170   - icon->show();
171   - icon->setStyleSheet("QPushButton { image: url("
172   - + config->icon()
173   - + ") } QPushButton::pressed { image: url("
174   - + config->overlayIcon()
175   - + ") }");
176   - minLabel->show();
177   - minLabel->setText(config->minLabel());
178   - maxLabel->show();
179   - maxLabel->setText(config->maxLabel());
180   -
181   - currentLabel->show();
182   -
183   - slider->show();
184   - slider->blockSignals(true);
185   - slider->setMinimum(1);
186   - slider->setMaximum(config->count());
187   - slider->setValue(config->current());
188   - slider->blockSignals(false);
189   -
190   - switch (config->type())
191   - {
192   - case Cook::Time:
193   - slider->setProperty("sliderColor", QString("white"));
194   - break;
195   - case Cook::BurnDegree:
196   - slider->setProperty("sliderColor", QString("yellow"));
197   - break;
198   - case Cook::Brightness:
199   - slider->setProperty("sliderColor", QString("red"));
200   - break;
201   - default:
202   - slider->setProperty("sliderColor", QString("blue"));
203   - break;
204   - }
205   -
206   - slider->style()->unpolish(slider);
207   - slider->style()->polish(slider);
208   - slider->update();
209   - }
210   - else
211   - {
212   - icon->hide();
213   - minLabel->hide();
214   - maxLabel->hide();
215   - currentLabel->hide();
216   - slider->hide();
217   - }
218   - }
219   -
220   - if (cook->interTempEnabled())
221   - {
222   - ui->configButton_4->show();
223   - ui->configButton_4->setStyleSheet(
224   - QString("QPushButton { image: url(")
225   - + ":/images/slider_icon/core_temp_enabled.png"
226   - + ") } QPushButton::pressed { image: url("
227   - + ":/images/slider_icon/core_temp_ov.png"
228   - + ") }"
229   - );
230   - ui->configMinLabel_4->hide();
231   - ui->configMaxLabel_4->hide();
232   - ui->configCurrentLabel_4->hide();
233   - ui->configSlider_4->hide();
234   -
235   - interTempEnabled = true;
236   - }
237   -
238   - int offsetX = (900 - (cook->stepCount() * 19 * 2 - 19)) / 2;
  58 + int offsetX = (900 - (cook.steps.size() * 19 * 2 - 19)) / 2;
239 59 int offsetY = 1150;
240   - for (int idx = 0; idx < cook->stepCount(); idx++)
  60 + for (int idx = 0; idx < cook.steps.size(); idx++)
241 61 {
242   - QLabel *bullet = new QLabel(ui->cookPage);
  62 + QLabel *bullet = new QLabel(this);
243 63 bullet->setPixmap(bulletPixmap);
244 64 bullet->setGeometry(offsetX + 19 * 2 * idx, offsetY, 19, 19);
245 65 bullets.append(bullet);
... ... @@ -281,588 +101,533 @@ void AutoCookWindow::setupUi()
281 101 ui->closeDoorAnimation->hide();
282 102 ui->closeDoorArrow->hide();
283 103  
284   - updateView();
285   -}
  104 + lastViewCookMode = Define::InvalidMode;
  105 + lastViewCookType = Define::Invalid;
  106 + lastViewCoreTemp = 999;
  107 + lastViewDoorType = Define::Invalid;
  108 + lastViewTime = 0;
  109 + lastViewStepIndex = -1;
  110 + selectedStepIndex = 0;
  111 + showingCurrentHumidity = false;
  112 + showingCurrentTemp = false;
286 113  
287   -void AutoCookWindow::updateView()
288   -{
289   -// qDebug() << "updateView";
290   - if (started)
  114 + if (autocook.cook.processes.isEmpty())
291 115 {
292   - ui->stackedWidget->setCurrentIndex(1);
293   -
294   - for (int idx = 0; idx < bullets.length(); idx++)
295   - {
296   - QLabel *bullet = bullets.at(idx);
297   - if (idx == selectedStepIndex)
298   - bullet->setPixmap(selectedBulletPixmap);
299   - else
300   - bullet->setPixmap(bulletPixmap);
301   - }
302   -
303   - viewStep(cook->step(selectedStepIndex));
304   -
305   - int time = oven->time();
306   - if (time >= 3600)
307   - ui->timeLabel->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">시간</span> %02d<span style=\"font-size:11pt;\">분</span>", time / 3600, (time % 3600) / 60));
308   - else if (time >= 60)
309   - ui->timeLabel->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">분</span> %02d<span style=\"font-size:11pt;\">초</span>", time / 60, time % 60));
310   - else
311   - ui->timeLabel->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">초</span>", time));
312   -
313   - int curInterTemp = oven->currentInterTemp();
314   - if (interTempEnabled)
315   - {
316   - int interTemp = oven->interTemp();
317   - ui->interTempLabel->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">℃ / %d</span><span style=\"font-size:9pt;\">℃</span>", curInterTemp, interTemp));
318   - }
319   - else
320   - ui->interTempLabel->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">℃</span>", curInterTemp));
321   -
322   - if (!done)
323   - {
324   - if (oven->door())
325   - {
326   - ui->closeDoorAnimation->show();
327   - ui->closeDoorArrow->show();
328   - ui->openDoorAnimation->hide();
329   - ui->openDoorArrow->hide();
330   - }
331   - else
332   - {
333   - ui->closeDoorAnimation->hide();
334   - ui->closeDoorArrow->hide();
335   -
336   - Cook::Step step = cook->currentStep();
337   - if (Cook::classify(step.type) == Cook::DoorClass)
338   - {
339   - ui->openDoorAnimation->show();
340   - ui->openDoorArrow->show();
341   - }
342   - else
343   - {
344   - ui->openDoorAnimation->hide();
345   - ui->openDoorArrow->hide();
346   - }
347   - }
348   - }
  116 + ui->processTitleLabel->hide();
  117 + ui->processTypeLabel->hide();
  118 + ui->processButton_1->hide();
  119 + ui->processButton_2->hide();
  120 + ui->processButton_3->hide();
349 121 }
350 122 else
351 123 {
352   - ui->stackedWidget->setCurrentIndex(0);
353   -
354   - for (int idx = 0; idx < 5; idx++)
  124 + QString typeText;
  125 + QSignalMapper *sm = NULL;
  126 + for (int i = 0; i < 3; i++)
355 127 {
356   - AbstractCookConfig *config = cook->configurations[idx];
357   - if (config == NULL)
358   - continue;
359   -
360   - QLabel *l;
361   - QSlider *s;
362   - switch (idx)
  128 + QPushButton *pb;
  129 + switch (i)
363 130 {
364 131 case 0:
365   - l = ui->configCurrentLabel_1;
366   - s = ui->configSlider_1;
  132 + pb = ui->processButton_1;
367 133 break;
368 134 case 1:
369   - l = ui->configCurrentLabel_2;
370   - s = ui->configSlider_2;
  135 + pb = ui->processButton_2;
371 136 break;
372 137 case 2:
373   - l = ui->configCurrentLabel_3;
374   - s = ui->configSlider_3;
375   - break;
376   - case 3:
377   - l = ui->configCurrentLabel_4;
378   - s = ui->configSlider_4;
379   - break;
380   - case 4:
381   - l = ui->configCurrentLabel_5;
382   - s = ui->configSlider_5;
  138 + pb = ui->processButton_3;
383 139 break;
384 140 }
385 141  
386   - int time = cook->time();
387   - int interTemp = cook->interTemp();
388   -
389   - switch (config->type())
  142 + if (i < autocook.cook.processes.size())
390 143 {
391   - case Cook::Time:
392   - if (time >= 3600)
393   - l->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">시간</span> %02d<span style=\"font-size:11pt;\">분</span>", time / 3600, (time % 3600) / 60));
394   - else if (time >= 60)
395   - l->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">분</span> %02d<span style=\"font-size:11pt;\">초</span>", time / 60, time % 60));
  144 + if (sm == NULL)
  145 + {
  146 + sm = new QSignalMapper(this);
  147 + connect(sm, SIGNAL(mapped(int)), SLOT(startProcess(int)));
  148 + }
  149 +
  150 + Define::Process process = autocook.cook.processes[i];
  151 +
  152 + QString text = Define::name(process);
  153 + if (typeText.isEmpty())
  154 + typeText = text;
396 155 else
397   - l->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">초</span>", time));
398   - break;
399   - case Cook::BurnDegree:
400   - l->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">℃</span>", interTemp));
401   - break;
402   - default:
403   - l->setText(QString().sprintf("%d<span style=\"font-size:11pt;\">/%d</span>", config->current(), config->count()));
404   - break;
  156 + typeText += ", " + text;
  157 +
  158 + QString styleSheet = QString("QPushButton { border-image: url(%1) } QPushButton:pressed { border-image: url(%2) }")
  159 + .arg(Define::icon(process))
  160 + .arg(Define::iconOverlay(process));
  161 +
  162 + pb->setStyleSheet(styleSheet);
  163 +
  164 + sm->setMapping(pb, (int) process);
  165 + connect(pb, SIGNAL(clicked()), sm, SLOT(map()));
  166 + }
  167 + else
  168 + {
  169 + pb->hide();
405 170 }
406 171 }
407 172  
408   - if (interTempEnabled)
409   - {
410   - ui->configButton_4->setStyleSheet(
411   - QString("QPushButton { image: url(")
412   - + ":/images/slider_icon/core_temp_enabled.png"
413   - + ") } QPushButton::pressed { image: url("
414   - + ":/images/slider_icon/core_temp_ov.png"
415   - + ") }");
416   - }
417   - else
418   - {
419   - ui->configButton_4->setStyleSheet(
420   - QString("QPushButton { image: url(")
421   - + ":/images/slider_icon/core_temp.png"
422   - + ") } QPushButton::pressed { image: url("
423   - + ":/images/slider_icon/core_temp_ov.png"
424   - + ") }");
425   - }
  173 + ui->processTypeLabel->setText(typeText);
426 174 }
  175 +
  176 + ui->processContainer->hide();
  177 +
  178 + updateView();
427 179 }
428 180  
429   -void AutoCookWindow::viewStep(Cook::Step step)
  181 +void AutoCookWindow::updateView()
430 182 {
431   -// qDebug() << "viewStep" << step.type;
432   - switch (Cook::classify(step.type))
  183 + Oven *oven = Oven::getInstance();
  184 +
  185 + QString spanFontSize11("<span style=\"font-size:11pt\">%1</span>");
  186 + QString spanFontSize9("<span style=\"font-size:9pt\">%1</span>");
  187 +
  188 + int remainingTime = qMax(0, autocook.remainingTime());
  189 + if (remainingTime != lastViewTime)
433 190 {
434   - case Cook::PreheatClass:
435   - viewPreheatStep(step);
436   - break;
437   - case Cook::DoorClass:
438   - viewDoorStep(step);
439   - break;
440   - case Cook::CookClass:
441   - viewCookStep(step);
442   - break;
443   - default:
444   - break;
  191 + lastViewTime = remainingTime;
  192 +
  193 + QString hour = spanFontSize11.arg("시간");
  194 + QString min = spanFontSize11.arg("분");
  195 + QString sec = spanFontSize11.arg("초");
  196 +
  197 + if (remainingTime >= 3600)
  198 + ui->timeLabel->setText(QString("%1%2 %3%4")
  199 + .arg(remainingTime / 3600)
  200 + .arg(hour)
  201 + .arg((remainingTime % 3600) / 60, 2, 10, QLatin1Char('0'))
  202 + .arg(min));
  203 + else if (remainingTime >= 60)
  204 + ui->timeLabel->setText(QString("%1%2 %3%4")
  205 + .arg(remainingTime / 60)
  206 + .arg(min)
  207 + .arg(remainingTime % 60, 2, 10, QLatin1Char('0'))
  208 + .arg(sec));
  209 + else
  210 + ui->timeLabel->setText(QString("%1%2")
  211 + .arg(remainingTime)
  212 + .arg(sec));
445 213 }
446   -}
447 214  
448   -void AutoCookWindow::viewPreheatStep(Cook::Step step)
449   -{
450   - ui->cookStepIcon->show();
451   - ui->cookStepIcon->setPixmap(QPixmap(":/images/cook_step_type/sys_icon_05.png"));
452   - ui->cookStepLabel->show();
453   - ui->cookStepLabel->setText("예열");
454   - ui->doorStepLabel->hide();
455   - ui->cookStepAnimation->hide();
456   -
457   - ui->humidityGauge->show();
458   - ui->humidityGauge->setValue(step.humidity);
459   - ui->humidityLabel->show();
460   - if (showingCurrentHumidity)
461   - ui->humidityLabel->setText(QString().sprintf("%d%%", oven->currentHumidity()));
462   - else
463   - ui->humidityLabel->setText(QString().sprintf("%d%%", step.humidity));
  215 + int coreTemp = oven->currentInterTemp();
  216 + if (coreTemp != lastViewCoreTemp)
  217 + {
  218 + lastViewCoreTemp = coreTemp;
464 219  
465   - ui->heatGauge->show();
466   - ui->heatGauge->setValue(step.temp);
467   - ui->heatLabel->show();
468   - if (showingCurrentTemp)
469   - ui->heatLabel->setText(QString().sprintf("%d℃", oven->currentTemp()));
470   - else
471   - ui->heatLabel->setText(QString().sprintf("%d℃", step.temp));
  220 + QString coreTempLabel = QString::number(coreTemp);
  221 + if (cook.isCoreTempValid())
  222 + coreTempLabel += spanFontSize11.arg("℃ / " + QString::number(cook.coreTemp())) + spanFontSize9.arg("℃");
  223 + else
  224 + coreTempLabel += spanFontSize11.arg("℃");
472 225  
473   - ui->cookModeIcon->show();
474   - switch (step.mode)
475   - {
476   - case Cook::SteamMode:
477   - ui->cookModeIcon->setPixmap(steamModeIcon);
478   - break;
479   - case Cook::DryMode:
480   - ui->cookModeIcon->setPixmap(dryModeIcon);
481   - break;
482   - case Cook::CombiMode:
483   - ui->cookModeIcon->setPixmap(combiModeIcon);
484   - break;
  226 + ui->interTempLabel->setText(coreTempLabel);
485 227 }
486   -}
487 228  
488   -void AutoCookWindow::viewDoorStep(Cook::Step step)
489   -{
490   -// qDebug() << "viewDoorStep";
491   - ui->cookStepLabel->hide();
492   - ui->cookStepIcon->hide();
493   - ui->doorStepLabel->show();
494   - ui->cookStepAnimation->show();
495   -
496   - ui->humidityGauge->hide();
497   - ui->humidityLabel->hide();
498   - ui->heatGauge->hide();
499   - ui->heatLabel->hide();
500   - ui->cookModeIcon->hide();
501   -
502   - if (lastDoorView != step.type)
  229 + if (autocook.done())
503 230 {
504   - lastDoorView = step.type;
505   - qDebug() << "clearStepAnimation";
  231 + if (!oven->door())
  232 + {
  233 + if (ui->openDoorAnimation->isHidden())
  234 + ui->openDoorAnimation->show();
506 235  
507   - ui->cookStepAnimation->clear();
508   - switch (step.type)
  236 + if (ui->openDoorArrow->isHidden())
  237 + ui->openDoorArrow->show();
  238 +
  239 + if (ui->closeDoorAnimation->isVisible())
  240 + ui->closeDoorAnimation->hide();
  241 +
  242 + if (ui->closeDoorArrow->isVisible())
  243 + ui->closeDoorArrow->hide();
  244 + }
  245 + else
509 246 {
510   - case Cook::PutThermometer:
511   - ui->doorStepLabel->setText("중심 온도계 삽입");
512   - ui->cookStepAnimation->load(":/images/animation/thermometer_01.png");
513   - ui->cookStepAnimation->load(":/images/animation/thermometer_02.png");
514   - ui->cookStepAnimation->setGeometry((900-210)/2, 800, 210, 307);
515   - break;
516   - case Cook::Load:
517   - ui->doorStepLabel->setText("식재료 적재");
518   - ui->cookStepAnimation->load(":/images/animation/load_01.png");
519   - ui->cookStepAnimation->load(":/images/animation/load_02.png");
520   - ui->cookStepAnimation->load(":/images/animation/load_03.png");
521   - ui->cookStepAnimation->load(":/images/animation/load_04.png");
522   - ui->cookStepAnimation->load(":/images/animation/load_03.png");
523   - ui->cookStepAnimation->load(":/images/animation/load_02.png");
524   - ui->cookStepAnimation->load(":/images/animation/load_01.png");
525   - ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
526   - break;
527   - case Cook::Cut:
528   - ui->doorStepLabel->setText("자르기");
529   - ui->cookStepAnimation->load(":/images/animation/cut_01.png");
530   - ui->cookStepAnimation->load(":/images/animation/cut_02.png");
531   - ui->cookStepAnimation->load(":/images/animation/cut_03.png");
532   - ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
533   - break;
534   - case Cook::Pour:
535   - ui->doorStepLabel->setText("물 붓기");
536   - ui->cookStepAnimation->load(":/images/animation/pour_01.png");
537   - ui->cookStepAnimation->load(":/images/animation/pour_02.png");
538   - ui->cookStepAnimation->load(":/images/animation/pour_03.png");
539   - ui->cookStepAnimation->load(":/images/animation/pour_04.png");
540   - ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
541   - break;
542   - default:
543   - ui->doorStepLabel->hide();
  247 + if (ui->openDoorAnimation->isVisible())
  248 + ui->openDoorAnimation->hide();
  249 +
  250 + if (ui->openDoorArrow->isVisible())
  251 + ui->openDoorArrow->hide();
  252 +
  253 + if (ui->closeDoorAnimation->isVisible())
  254 + ui->closeDoorAnimation->hide();
  255 +
  256 + if (ui->closeDoorArrow->isVisible())
  257 + ui->closeDoorArrow->hide();
544 258 }
  259 +
  260 + if (ui->processContainer->isHidden())
  261 + ui->processContainer->show();
545 262 }
546   -}
  263 + else if (autocook.isWaitingDoorOpened() && !oven->door())
  264 + {
  265 + if (ui->openDoorAnimation->isHidden())
  266 + ui->openDoorAnimation->show();
547 267  
548   -void AutoCookWindow::viewCookStep(Cook::Step step)
549   -{
550   - ui->cookStepLabel->show();
551   - ui->cookStepIcon->show();
552   - ui->doorStepLabel->hide();
553   - ui->cookStepAnimation->hide();
554   -
555   - ui->humidityGauge->show();
556   - ui->humidityGauge->setValue(step.humidity);
557   - ui->humidityLabel->show();
558   - if (showingCurrentHumidity)
559   - ui->humidityLabel->setText(QString().sprintf("%d%%", oven->currentHumidity()));
560   - else
561   - ui->humidityLabel->setText(QString().sprintf("%d%%", step.humidity));
  268 + if (ui->openDoorArrow->isHidden())
  269 + ui->openDoorArrow->show();
562 270  
563   - ui->heatGauge->show();
564   - ui->heatGauge->setValue(step.temp);
565   - ui->heatLabel->show();
566   - if (showingCurrentTemp)
567   - ui->heatLabel->setText(QString().sprintf("%d℃", oven->currentTemp()));
568   - else
569   - ui->heatLabel->setText(QString().sprintf("%d℃", step.temp));
  271 + if (ui->closeDoorAnimation->isVisible())
  272 + ui->closeDoorAnimation->hide();
570 273  
571   - ui->cookModeIcon->show();
572   - switch (step.mode)
573   - {
574   - case Cook::SteamMode:
575   - ui->cookModeIcon->setPixmap(steamModeIcon);
576   - break;
577   - case Cook::DryMode:
578   - ui->cookModeIcon->setPixmap(dryModeIcon);
579   - break;
580   - case Cook::CombiMode:
581   - ui->cookModeIcon->setPixmap(combiModeIcon);
582   - break;
  274 + if (ui->closeDoorArrow->isVisible())
  275 + ui->closeDoorArrow->hide();
583 276 }
  277 + else if (!autocook.isWaitingDoorOpened() && oven->door())
  278 + {
  279 + if (ui->openDoorAnimation->isVisible())
  280 + ui->openDoorAnimation->hide();
584 281  
585   - ui->cookStepLabel->setText(Cook::name(step.type));
586   - ui->cookStepIcon->setPixmap(QPixmap(Cook::icon(step.type)));
587   -}
  282 + if (ui->openDoorArrow->isVisible())
  283 + ui->openDoorArrow->hide();
588 284  
589   -void AutoCookWindow::doPreheatStep(Cook::Step step)
590   -{
591   -// oven->setHumidity(step.humidity);
592   - oven->setHumidity(0);
593   - oven->setTemp(step.temp);
594   - oven->startPreheating();
595   -
596   - lastHumidity = oven->currentHumidity();
597   - lastTemp = oven->currentTemp();
598   -
599   - ui->preheatIcon->show();
600   - ui->preheatLabel->show();
601   - ui->preheatGauge->show();
602   - ui->preheatGauge->setMaximum(step.temp);
603   - ui->preheatGauge->setMinimum(lastTemp);
604   - ui->preheatGauge->setValue(lastTemp);
605   -}
  285 + if (ui->closeDoorAnimation->isHidden())
  286 + ui->closeDoorAnimation->show();
606 287  
607   -void AutoCookWindow::doDoorStep(Cook::Step /*step*/)
608   -{
609   - opened = false;
610   -}
  288 + if (ui->closeDoorArrow->isHidden())
  289 + ui->closeDoorArrow->show();
  290 + }
  291 + else
  292 + {
  293 + if (ui->openDoorAnimation->isVisible())
  294 + ui->openDoorAnimation->hide();
611 295  
612   -void AutoCookWindow::doCookStep(Cook::Step step)
613   -{
614   -// oven->setHumidity(step.humidity);
615   - oven->setHumidity(0);
616   - oven->setTemp(step.temp);
617   - oven->startCooking();
  296 + if (ui->openDoorArrow->isVisible())
  297 + ui->openDoorArrow->hide();
618 298  
619   - lastHumidity = oven->currentHumidity();
620   - lastTemp = oven->currentTemp();
621   -}
  299 + if (ui->closeDoorAnimation->isVisible())
  300 + ui->closeDoorAnimation->hide();
622 301  
623   -static bool checkReached(int target, int last, int current)
624   -{
625   - qDebug() << "checkReached" << target << last << current;
626   - return ((target >= last) && (target <= current))
627   - || ((target <= last) && (target >= current));
628   -}
  302 + if (ui->closeDoorArrow->isVisible())
  303 + ui->closeDoorArrow->hide();
  304 + }
629 305  
630   -void AutoCookWindow::checkPreheatStep(Cook::Step step)
631   -{
632   - int curTemp = oven->currentTemp();
  306 + if (autocook.cook.steps[autocook.currentStepIndex].type == Define::Preheat)
  307 + {
  308 + if (ui->preheatIcon->isHidden())
  309 + ui->preheatIcon->show();
633 310  
634   - ui->preheatGauge->setValue(curTemp);
  311 + if (ui->preheatLabel->isHidden())
  312 + ui->preheatLabel->show();
635 313  
636   - if (checkReached(step.humidity, lastHumidity, oven->currentHumidity())
637   - && checkReached(step.temp, lastTemp, curTemp))
  314 + if (ui->preheatGauge->isHidden())
  315 + ui->preheatGauge->show();
  316 +
  317 + ui->preheatGauge->setMaximum(autocook.cook.steps[autocook.currentStepIndex].temp);
  318 + ui->preheatGauge->setMinimum(autocook.startTemp);
  319 + ui->preheatGauge->setValue(oven->currentTemp());
  320 + }
  321 + else
638 322 {
639   - if (selectedStepIndex == cook->currentStepIndex())
640   - selectedStepIndex = cook->currentStepIndex() + 1;
  323 + if (ui->preheatIcon->isVisible())
  324 + ui->preheatIcon->hide();
641 325  
642   - ui->preheatIcon->hide();
643   - ui->preheatLabel->hide();
644   - ui->preheatGauge->hide();
  326 + if (ui->preheatLabel->isVisible())
  327 + ui->preheatLabel->hide();
645 328  
646   - cook->setCurrentStepIndex(cook->currentStepIndex() + 1);
647   - doStep();
  329 + if (ui->preheatGauge->isVisible())
  330 + ui->preheatGauge->hide();
648 331 }
649   -}
650 332  
651   -void AutoCookWindow::checkDoorStep(Cook::Step /*step*/)
652   -{
653   -// qDebug() << "checkDoorStep" << opened << oven->door();
654   - if (opened)
  333 + if (selectedStepIndex != lastViewStepIndex)
655 334 {
656   - if (!oven->door())
657   - {
658   - if (selectedStepIndex == cook->currentStepIndex())
659   - selectedStepIndex = cook->currentStepIndex() + 1;
  335 + lastViewStepIndex = selectedStepIndex;
660 336  
661   - cook->setCurrentStepIndex(cook->currentStepIndex() + 1);
662   - doStep();
  337 + for (int idx = 0; idx < bullets.length(); idx++)
  338 + {
  339 + QLabel *bullet = bullets.at(idx);
  340 + if (idx == selectedStepIndex)
  341 + bullet->setPixmap(selectedBulletPixmap);
  342 + else
  343 + bullet->setPixmap(bulletPixmap);
663 344 }
664 345 }
665   - else
666   - {
667   - if (oven->door())
668   - opened = true;
669   - }
670   -}
671 346  
672   -void AutoCookWindow::checkCookStep(Cook::Step step)
673   -{
674   - if (cook->currentStepIndex() + 1 < cook->stepCount())
  347 + CookStep showingStep = autocook.cook.steps[selectedStepIndex];
  348 + if (Define::classify(showingStep.type) == Define::DoorClass)
675 349 {
676   - if (checkReached(step.humidity, lastHumidity, oven->currentHumidity())
677   - && checkReached(step.temp, lastTemp, oven->currentTemp()))
678   - {
679   - if (selectedStepIndex == cook->currentStepIndex())
680   - selectedStepIndex = cook->currentStepIndex() + 1;
  350 + if (ui->cookStepIcon->isVisible())
  351 + ui->cookStepIcon->hide();
681 352  
682   - cook->setCurrentStepIndex(cook->currentStepIndex() + 1);
683   - doStep();
684   - }
685   - else if (interTempEnabled)
  353 + if (ui->cookStepLabel->isVisible())
  354 + ui->cookStepLabel->hide();
  355 +
  356 + if (ui->cookModeIcon->isVisible())
  357 + ui->cookModeIcon->hide();
  358 +
  359 + if (ui->humidityGauge->isVisible())
  360 + ui->humidityGauge->hide();
  361 +
  362 + if (ui->humidityGaugeButton->isVisible())
  363 + ui->humidityGaugeButton->hide();
  364 +
  365 + if (ui->humidityLabel->isVisible())
  366 + ui->humidityLabel->hide();
  367 +
  368 + if (ui->heatGauge->isVisible())
  369 + ui->heatGauge->hide();
  370 +
  371 + if (ui->heatGaugeButton->isVisible())
  372 + ui->heatGaugeButton->hide();
  373 +
  374 + if (ui->heatLabel->isVisible())
  375 + ui->heatLabel->hide();
  376 +
  377 + if (ui->doorStepLabel->isHidden())
  378 + ui->doorStepLabel->show();
  379 +
  380 + if (ui->cookStepAnimation->isHidden())
  381 + ui->cookStepAnimation->show();
  382 +
  383 + if (showingStep.type != lastViewDoorType)
686 384 {
687   - if (cook->interTemp() <= oven->currentInterTemp())
688   - {
689   - if (selectedStepIndex == cook->currentStepIndex())
690   - selectedStepIndex = cook->stepCount() - 1;
  385 + lastViewDoorType = showingStep.type;
691 386  
692   - cook->setCurrentStepIndex(cook->stepCount() - 1);
693   - doStep();
  387 + ui->doorStepLabel->setText(Define::name(showingStep.type));
  388 + ui->cookStepAnimation->clear();
  389 + switch (showingStep.type)
  390 + {
  391 + case Define::PutThermometer:
  392 + ui->doorStepLabel->setText("중심 온도계 삽입");
  393 + ui->cookStepAnimation->load(":/images/animation/thermometer_01.png");
  394 + ui->cookStepAnimation->load(":/images/animation/thermometer_02.png");
  395 + ui->cookStepAnimation->setGeometry((900-210)/2, 800, 210, 307);
  396 + ui->cookStepAnimation->start(300);
  397 + break;
  398 + case Define::Load:
  399 + ui->doorStepLabel->setText("식재료 적재");
  400 + ui->cookStepAnimation->load(":/images/animation/load_01.png");
  401 + ui->cookStepAnimation->load(":/images/animation/load_02.png");
  402 + ui->cookStepAnimation->load(":/images/animation/load_03.png");
  403 + ui->cookStepAnimation->load(":/images/animation/load_04.png");
  404 + ui->cookStepAnimation->load(":/images/animation/load_03.png");
  405 + ui->cookStepAnimation->load(":/images/animation/load_02.png");
  406 + ui->cookStepAnimation->load(":/images/animation/load_01.png");
  407 + ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
  408 + ui->cookStepAnimation->start(300);
  409 + break;
  410 + case Define::Cut:
  411 + ui->doorStepLabel->setText("자르기");
  412 + ui->cookStepAnimation->load(":/images/animation/cut_01.png");
  413 + ui->cookStepAnimation->load(":/images/animation/cut_02.png");
  414 + ui->cookStepAnimation->load(":/images/animation/cut_03.png");
  415 + ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
  416 + ui->cookStepAnimation->start(300);
  417 + break;
  418 + case Define::Pour:
  419 + ui->doorStepLabel->setText("물 붓기");
  420 + ui->cookStepAnimation->load(":/images/animation/pour_01.png");
  421 + ui->cookStepAnimation->load(":/images/animation/pour_02.png");
  422 + ui->cookStepAnimation->load(":/images/animation/pour_03.png");
  423 + ui->cookStepAnimation->load(":/images/animation/pour_04.png");
  424 + ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
  425 + ui->cookStepAnimation->start(300);
  426 + break;
  427 + default:
  428 + ui->doorStepLabel->hide();
  429 + ui->cookStepAnimation->hide();
694 430 }
695 431 }
696 432 }
697   - else /*if current step == last step*/
  433 + else
698 434 {
699   - if (done)
  435 + if (ui->doorStepLabel->isVisible())
  436 + ui->doorStepLabel->hide();
  437 +
  438 + if (ui->cookStepAnimation->isVisible())
  439 + ui->cookStepAnimation->hide();
  440 +
  441 + if (ui->cookStepIcon->isHidden())
  442 + ui->cookStepIcon->show();
  443 +
  444 + if (ui->cookStepLabel->isHidden())
  445 + ui->cookStepLabel->show();
  446 +
  447 + if (ui->cookModeIcon->isHidden())
  448 + ui->cookModeIcon->show();
  449 +
  450 + if (ui->humidityGauge->isHidden())
  451 + ui->humidityGauge->show();
  452 +
  453 + if (ui->humidityGaugeButton->isHidden())
  454 + ui->humidityGaugeButton->show();
  455 +
  456 + if (ui->humidityLabel->isHidden())
  457 + ui->humidityLabel->show();
  458 +
  459 + if (ui->heatGauge->isHidden())
  460 + ui->heatGauge->show();
  461 +
  462 + if (ui->heatGaugeButton->isHidden())
  463 + ui->heatGaugeButton->show();
  464 +
  465 + if (ui->heatLabel->isHidden())
  466 + ui->heatLabel->show();
  467 +
  468 + if (showingStep.type != lastViewCookType)
700 469 {
  470 + lastViewCookType = showingStep.type;
701 471  
  472 + ui->cookStepIcon->setPixmap(Define::icon(showingStep.type));
  473 + ui->cookStepLabel->setText(Define::name(showingStep.type));
702 474 }
703   - else
  475 +
  476 + if (showingStep.mode != lastViewCookMode)
704 477 {
705   - if ((interTempEnabled && cook->interTemp() <= oven->currentInterTemp())
706   - || oven->time() == 0)
707   - {
708   - done = true;
709   - ui->openDoorAnimation->show();
710   - ui->openDoorArrow->show();
711   - ui->closeDoorAnimation->hide();
712   - ui->closeDoorArrow->hide();
  478 + lastViewCookMode = showingStep.mode;
713 479  
714   - oven->setTime(0);
  480 + switch (showingStep.mode)
  481 + {
  482 + case Define::SteamMode:
  483 + ui->cookModeIcon->setPixmap(steamModeIcon);
  484 + break;
  485 + case Define::CombiMode:
  486 + ui->cookModeIcon->setPixmap(combiModeIcon);
  487 + break;
  488 + case Define::DryMode:
  489 + ui->cookModeIcon->setPixmap(dryModeIcon);
  490 + break;
  491 + case Define::InvalidClass:
  492 + ui->cookModeIcon->hide();
  493 + break;
715 494 }
716 495 }
717   - }
718   -}
719   -
720   -void AutoCookWindow::start()
721   -{
722   - qDebug() << "start";
723 496  
724   - started = true;
725   - oven->setTime(cook->time());
726   - oven->setInterTemp(cook->interTemp());
727   - oven->setInterTempEnabled(interTempEnabled);
  497 + ui->humidityGauge->setValue(showingStep.humidity);
728 498  
729   - doStep();
730   - checkCookTimer.start();
  499 + int humidity;
  500 + if (showingCurrentHumidity)
  501 + humidity = oven->currentHumidity();
  502 + else
  503 + humidity = showingStep.humidity;
731 504  
732   - updateView();
733   -}
  505 + if (humidity != lastViewHumidity)
  506 + {
  507 + lastViewHumidity = humidity;
  508 + ui->humidityLabel->setText(QString("%1%").arg(humidity));
  509 + }
734 510  
735   -void AutoCookWindow::stop()
736   -{
737   - qDebug() << "stop";
738   - oven->stop();
739   - checkCookTimer.stop();
  511 + ui->heatGauge->setValue(showingStep.temp);
740 512  
741   - updateView();
742   -}
  513 + int temp;
  514 + if (showingCurrentTemp)
  515 + temp = oven->currentTemp();
  516 + else
  517 + temp = showingStep.temp;
743 518  
744   -void AutoCookWindow::doStep()
745   -{
746   - qDebug() << "doStep";
747   - Cook::Step step = cook->currentStep();
748   - switch (Cook::classify(step.type))
749   - {
750   - case Cook::PreheatClass:
751   - doPreheatStep(step);
752   - break;
753   - case Cook::DoorClass:
754   - doDoorStep(step);
755   - break;
756   - case Cook::CookClass:
757   - doCookStep(step);
758   - break;
759   - default:
760   - break;
  519 + if (temp != lastViewTemp)
  520 + {
  521 + lastViewTemp = temp;
  522 + ui->heatLabel->setText(QString("%1℃").arg(temp));
  523 + }
761 524 }
762 525 }
763 526  
764 527 void AutoCookWindow::checkCook()
765 528 {
766   -// qDebug() << "checkCook";
767   - Cook::Step step = cook->currentStep();
768   - switch (Cook::classify(step.type))
  529 + int lastStepIndex = autocook.currentStepIndex;
  530 + if (autocook.advance())
769 531 {
770   - case Cook::PreheatClass:
771   - checkPreheatStep(step);
772   - break;
773   - case Cook::DoorClass:
774   - checkDoorStep(step);
775   - break;
776   - case Cook::CookClass:
777   - checkCookStep(step);
778   - break;
779   - default:
780   - qDebug() << "Checking Invalid Cook";
  532 + if (lastStepIndex != autocook.currentStepIndex)
  533 + selectedStepIndex = autocook.currentStepIndex;
  534 +
  535 + if (autocook.done())
  536 + checkCookTimer.stop();
781 537 }
782 538  
783 539 updateView();
784 540 }
785 541  
786   -void AutoCookWindow::onOvenUpdated()
  542 +void AutoCookWindow::startProcess(int process)
787 543 {
788   - updateView();
  544 + if (processSelected)
  545 + return;
789 546  
790   - qDebug() << "onOvenUpdated()";
791   -}
  547 + processSelected = true;
792 548  
793   -void AutoCookWindow::on_showPrevStepButton_clicked()
794   -{
795   - if (selectedStepIndex > 0)
796   - selectedStepIndex--;
797   -
798   - updateView();
  549 + Define::Process p = (Define::Process) process;
  550 + switch (p)
  551 + {
  552 + case Define::CookAgain:
  553 + {
  554 + close();
799 555  
800   - returnToCurrentStepTimer.start();
801   -}
  556 + AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook);
  557 + w->setWindowModality(Qt::WindowModal);
  558 + w->showFullScreen();
  559 + w->raise();
802 560  
803   -void AutoCookWindow::on_showNextStepButton_clicked()
804   -{
805   - if (selectedStepIndex + 1 < cook->stepCount())
806   - selectedStepIndex++;
  561 + break;
  562 + }
  563 + case Define::MakeCrisper:
  564 + {
  565 + selectedProcess = (Define::Process) process;
807 566  
808   - updateView();
  567 + CookStep &step = autocook.cook.steps[autocook.cook.steps.size() - 1];
809 568  
810   - returnToCurrentStepTimer.start();
811   -}
  569 + Oven *oven = Oven::getInstance();
  570 + oven->setHumidity(step.humidity);
  571 + oven->setTemp(step.temp + 10);
  572 + oven->startCooking();
812 573  
813   -void AutoCookWindow::returnToCurrentStep()
814   -{
815   - selectedStepIndex = cook->currentStepIndex();
  574 + checkProcessTimer.start(100);
  575 + break;
  576 + }
  577 + case Define::KeepWarm:
  578 + {
  579 + processSelected = false;
  580 + selectedProcess = (Define::Process) process;
816 581  
817   - updateView();
  582 + KeepWarmPopup *p = new KeepWarmPopup(this);
  583 + p->showFullScreen();
  584 + p->raise();
  585 + break;
  586 + }
  587 + }
818 588 }
819 589  
820   -void AutoCookWindow::onConfigChanged()
  590 +void AutoCookWindow::checkProcess()
821 591 {
822   - for (int idx = 0; idx < 5; idx++)
823   - {
824   - AbstractCookConfig *config = cook->configurations[idx];
825   - if (config == NULL)
826   - continue;
  592 + if (!processSelected)
  593 + return;
827 594  
828   - QSlider *slider;
829   - switch (idx)
  595 + switch (selectedProcess)
  596 + {
  597 + case Define::MakeCrisper:
  598 + {
  599 + Oven *oven = Oven::getInstance();
  600 + if (oven->currentTemp() >= oven->temp())
830 601 {
831   - case 0:
832   - slider = ui->configSlider_1;
833   - break;
834   - case 1:
835   - slider = ui->configSlider_2;
836   - break;
837   - case 2:
838   - slider = ui->configSlider_3;
839   - break;
840   - case 3:
841   - slider = ui->configSlider_4;
842   - break;
843   - case 4:
844   - slider = ui->configSlider_5;
845   - break;
  602 + oven->stopCooking();
  603 + checkProcessTimer.stop();
846 604 }
847   -
848   - config->setCurrent(slider->value());
  605 + break;
  606 + }
  607 + default:
  608 + break;
849 609 }
  610 +
  611 + updateView();
850 612 }
851 613  
852   -void AutoCookWindow::on_backButton_clicked()
  614 +void AutoCookWindow::returnToCurrentStep()
853 615 {
854   - stop();
855   - close();
  616 + selectedStepIndex = autocook.currentStepIndex;
  617 + showingDifferentStep = false;
  618 + updateView();
856 619 }
857 620  
858   -void AutoCookWindow::on_configButton_4_clicked()
  621 +void AutoCookWindow::showCurrentHumidity()
859 622 {
860   - if (cook->interTempEnabled())
861   - {
862   - interTempEnabled = !interTempEnabled;
  623 + showingCurrentHumidity = true;
  624 + updateView();
  625 +}
863 626  
864   - updateView();
865   - }
  627 +void AutoCookWindow::showCurrentTemp()
  628 +{
  629 + showingCurrentTemp = true;
  630 + updateView();
866 631 }
867 632  
868 633 void AutoCookWindow::on_humidityGaugeButton_pressed()
... ... @@ -872,7 +637,8 @@ void AutoCookWindow::on_humidityGaugeButton_pressed()
872 637  
873 638 void AutoCookWindow::on_humidityGaugeButton_released()
874 639 {
875   - showCurrentHumidityTimer.stop();
  640 + if (showCurrentHumidityTimer.isActive())
  641 + showCurrentHumidityTimer.stop();
876 642  
877 643 if (showingCurrentHumidity)
878 644 {
... ... @@ -888,7 +654,8 @@ void AutoCookWindow::on_heatGaugeButton_pressed()
888 654  
889 655 void AutoCookWindow::on_heatGaugeButton_released()
890 656 {
891   - showCurrentTempTimer.stop();
  657 + if (showCurrentTempTimer.isActive())
  658 + showCurrentTempTimer.stop();
892 659  
893 660 if (showingCurrentTemp)
894 661 {
... ... @@ -897,16 +664,30 @@ void AutoCookWindow::on_heatGaugeButton_released()
897 664 }
898 665 }
899 666  
900   -void AutoCookWindow::showCurrentHumidity()
  667 +void AutoCookWindow::on_backButton_clicked()
901 668 {
902   - showingCurrentHumidity = true;
  669 + Oven::getInstance()->stop();
  670 + close();
  671 +}
903 672  
904   - updateView();
  673 +void AutoCookWindow::on_showPrevStepButton_clicked()
  674 +{
  675 + if (selectedStepIndex > 0)
  676 + {
  677 + selectedStepIndex--;
  678 + updateView();
  679 + }
  680 +
  681 + returnToCurrentStepTimer.start();
905 682 }
906 683  
907   -void AutoCookWindow::showCurrentTemp()
  684 +void AutoCookWindow::on_showNextStepButton_clicked()
908 685 {
909   - showingCurrentTemp = true;
  686 + if (selectedStepIndex + 1 < cook.steps.size())
  687 + {
  688 + selectedStepIndex++;
  689 + updateView();
  690 + }
910 691  
911   - updateView();
  692 + returnToCurrentStepTimer.start();
912 693 }
... ...
app/gui/oven_control/autocookwindow.h
... ... @@ -2,12 +2,10 @@
2 2 #define AUTOCOOKWINDOW_H
3 3  
4 4 #include <QMainWindow>
5   -#include <QTimer>
6   -#include <QPixmap>
7 5 #include <QLabel>
  6 +#include <QTimer>
8 7  
9   -#include "oven.h"
10   -#include "cook.h"
  8 +#include "autocook.h"
11 9  
12 10 namespace Ui {
13 11 class AutoCookWindow;
... ... @@ -17,76 +15,67 @@ class AutoCookWindow : public QMainWindow
17 15 {
18 16 Q_OBJECT
19 17  
20   -signals:
21   - void startCookStartTimer();
22   - void stopCookStartTimer();
23   -
24 18 public:
25   - explicit AutoCookWindow(QWidget *parent = 0, Oven *oven = 0, AbstractCook *cook = 0);
  19 + explicit AutoCookWindow(QWidget *parent, Cook cook);
26 20 ~AutoCookWindow();
27 21  
28 22 private:
29 23 Ui::AutoCookWindow *ui;
  24 +
  25 + Cook cook;
  26 + AutoCook autocook;
  27 +
30 28 QTimer checkCookTimer;
31   - Oven *oven;
32   - AbstractCook *cook;
33   - bool started;
34   - bool done;
35   - bool opened;
36   - bool interTempEnabled;
37 29  
38 30 QPixmap bulletPixmap;
39 31 QPixmap selectedBulletPixmap;
40 32 QList<QLabel *> bullets;
41   - int selectedStepIndex;
42   - QTimer returnToCurrentStepTimer;
43 33  
44 34 QPixmap steamModeIcon;
45 35 QPixmap dryModeIcon;
46 36 QPixmap combiModeIcon;
47 37  
  38 + int selectedStepIndex;
  39 + int lastViewStepIndex;
  40 + bool showingDifferentStep;
  41 + QTimer returnToCurrentStepTimer;
  42 +
48 43 bool showingCurrentHumidity;
49 44 bool showingCurrentTemp;
50 45 QTimer showCurrentHumidityTimer;
51 46 QTimer showCurrentTempTimer;
52 47  
53   - int lastHumidity;
54   - int lastTemp;
  48 + int lastViewTime;
  49 + int lastViewCoreTemp;
  50 + int lastViewHumidity;
  51 + int lastViewTemp;
  52 + Define::StepType lastViewDoorType;
  53 + Define::StepType lastViewCookType;
  54 + Define::Mode lastViewCookMode;
  55 +
  56 + bool processSelected;
  57 + Define::Process selectedProcess;
  58 + QTimer checkProcessTimer;
55 59  
56   - Cook::StepType lastDoorView;
57 60  
58 61 void setupUi();
59   - void viewStep(Cook::Step step);
60   - void viewPreheatStep(Cook::Step step);
61   - void viewDoorStep(Cook::Step step);
62   - void viewCookStep(Cook::Step step);
63   - void doPreheatStep(Cook::Step step);
64   - void doDoorStep(Cook::Step step);
65   - void doCookStep(Cook::Step step);
66   - void checkPreheatStep(Cook::Step step);
67   - void checkDoorStep(Cook::Step step);
68   - void checkCookStep(Cook::Step step);
69 62  
70 63 private slots:
71 64 void updateView();
72   - void start();
73   - void stop();
74   - void doStep();
75 65 void checkCook();
76   - void onOvenUpdated();
77   - void on_showPrevStepButton_clicked();
78   - void on_showNextStepButton_clicked();
79   - void returnToCurrentStep();
  66 + void startProcess(int process);
  67 + void checkProcess();
80 68  
81   - void onConfigChanged();
82   - void on_backButton_clicked();
83   - void on_configButton_4_clicked();
  69 + void returnToCurrentStep();
  70 + void showCurrentHumidity();
  71 + void showCurrentTemp();
84 72 void on_humidityGaugeButton_pressed();
85 73 void on_humidityGaugeButton_released();
86 74 void on_heatGaugeButton_pressed();
87 75 void on_heatGaugeButton_released();
88   - void showCurrentHumidity();
89   - void showCurrentTemp();
  76 + void on_backButton_clicked();
  77 + void on_showPrevStepButton_clicked();
  78 + void on_showNextStepButton_clicked();
90 79 };
91 80  
92 81 #endif // AUTOCOOKWINDOW_H
... ...
app/gui/oven_control/autocookwindow.ui
... ... @@ -16,57 +16,11 @@
16 16 <property name="styleSheet">
17 17 <string notr="true">#centralwidget { background-image: url(:/images/background/auto_steps.png); }
18 18 #bottomBar { background-image: url(:/images/bottom_bar/background.png); }
19   -#configPage { background-image: url(:/images/background/auto.png); }
20   -#cookPage { background-image: url(:/images/background/auto_steps.png); }
21   -
22   -QSlider::groove {
23   -background-image: url(:/images/slider/groove.png);
24   -background-repeat: no-repeat;
25   -background-position: center;
26   -}
27   -
28   -QSlider::sub-page {
29   -background-repeat: no-repeat;
30   -background-position: left center;
31   -margin: 0px 5px;
32   -}
33   -
34   -QSlider[sliderColor=&quot;red&quot;]::sub-page {
35   -background-image: url(:/images/slider/sub_red.png);
36   -}
37   -
38   -QSlider[sliderColor=&quot;yellow&quot;]::sub-page {
39   -background-image: url(:/images/slider/sub_yellow.png);
40   -}
41   -
42   -QSlider[sliderColor=&quot;white&quot;]::sub-page {
43   -background-image: url(:/images/slider/sub_white.png);
44   -}
45   -
46   -QSlider[sliderColor=&quot;blue&quot;]::sub-page {
47   -background-image: url(:/images/slider/sub_blue.png);
48   -}
49   -
50   -QSlider[sliderColor=&quot;green&quot;]::sub-page {
51   -background-image: url(:/images/slider/sub_green.png);
52   -}
53   -
54   -QSlider::handle {
55   -background-image: url(:/images/slider/handle_big.png);
56   -background-repeat: no-repeat;
57   -background-position: center;
58   -width: 23px;
59   -height: 33px;
60   -}
61 19  
62 20 QPushButton {
63 21 background-repeat: no-repeat;
64 22 background-position: center;
65 23 border: none;
66   -}
67   -
68   -QPushButton[style=&quot;icon&quot;] {
69   -background-image: url(:/images/slider_icon/background.png);
70 24 }</string>
71 25 </property>
72 26 <widget class="QWidget" name="centralwidget">
... ... @@ -96,2318 +50,1292 @@ background-image: url(:/images/slider_icon/background.png);
96 50 </widget>
97 51 <widget class="QWidget" name="page_2"/>
98 52 </widget>
99   - <widget class="QStackedWidget" name="stackedWidget">
  53 + <widget class="QWidget" name="bottomBar" native="true">
100 54 <property name="geometry">
101 55 <rect>
102 56 <x>0</x>
103   - <y>0</y>
  57 + <y>1450</y>
104 58 <width>900</width>
105   - <height>1450</height>
  59 + <height>150</height>
106 60 </rect>
107 61 </property>
108   - <widget class="QWidget" name="configPage">
109   - <widget class="QLabel" name="cookTypeIcon_1">
110   - <property name="geometry">
111   - <rect>
112   - <x>0</x>
113   - <y>430</y>
114   - <width>250</width>
115   - <height>150</height>
116   - </rect>
117   - </property>
118   - <property name="text">
119   - <string/>
120   - </property>
121   - <property name="pixmap">
122   - <pixmap>:/images/images/auto/005_auto_icon_01_ov.png</pixmap>
123   - </property>
124   - <property name="alignment">
125   - <set>Qt::AlignCenter</set>
126   - </property>
127   - </widget>
128   - <widget class="QPushButton" name="selectCookButton_1">
129   - <property name="geometry">
130   - <rect>
131   - <x>420</x>
132   - <y>480</y>
133   - <width>288</width>
134   - <height>70</height>
135   - </rect>
136   - </property>
137   - <property name="font">
138   - <font>
139   - <family>Roboto</family>
140   - <pointsize>10</pointsize>
141   - <weight>75</weight>
142   - <bold>true</bold>
143   - </font>
144   - </property>
145   - <property name="styleSheet">
146   - <string notr="true">QPushButton {
147   -border-image: url(:/images/button/288.png);
148   -}
149   -QPushButton::pressed {
150   -border-image: url(:/images/button/288_ov.png);
151   -}</string>
152   - </property>
153   - <property name="text">
154   - <string/>
155   - </property>
156   - </widget>
157   - <widget class="QPushButton" name="pushButton_4">
158   - <property name="geometry">
159   - <rect>
160   - <x>720</x>
161   - <y>480</y>
162   - <width>152</width>
163   - <height>70</height>
164   - </rect>
165   - </property>
166   - <property name="styleSheet">
167   - <string notr="true">QPushButton {
168   -border-image: url(:/images/button/152.png);
169   -}
170   -QPushButton::pressed {
171   -border-image: url(:/images/button/152_ov.png);
172   -}</string>
173   - </property>
174   - <property name="text">
175   - <string/>
176   - </property>
177   - <property name="icon">
178   - <iconset resource="resources.qrc">
179   - <normaloff>:/images/auto_button/btn_icon_01.png</normaloff>:/images/auto_button/btn_icon_01.png</iconset>
180   - </property>
181   - <property name="iconSize">
182   - <size>
183   - <width>40</width>
184   - <height>51</height>
185   - </size>
186   - </property>
187   - </widget>
188   - <widget class="QSlider" name="configSlider_1">
189   - <property name="geometry">
190   - <rect>
191   - <x>185</x>
192   - <y>663</y>
193   - <width>666</width>
194   - <height>33</height>
195   - </rect>
196   - </property>
197   - <property name="pageStep">
198   - <number>1</number>
199   - </property>
200   - <property name="tracking">
201   - <bool>true</bool>
202   - </property>
203   - <property name="orientation">
204   - <enum>Qt::Horizontal</enum>
205   - </property>
206   - </widget>
207   - <widget class="QLabel" name="configCurrentLabel_1">
208   - <property name="enabled">
209   - <bool>true</bool>
210   - </property>
211   - <property name="geometry">
212   - <rect>
213   - <x>199</x>
214   - <y>690</y>
215   - <width>641</width>
216   - <height>51</height>
217   - </rect>
218   - </property>
219   - <property name="palette">
220   - <palette>
221   - <active>
222   - <colorrole role="WindowText">
223   - <brush brushstyle="SolidPattern">
224   - <color alpha="255">
225   - <red>255</red>
226   - <green>255</green>
227   - <blue>255</blue>
228   - </color>
229   - </brush>
230   - </colorrole>
231   - </active>
232   - <inactive>
233   - <colorrole role="WindowText">
234   - <brush brushstyle="SolidPattern">
235   - <color alpha="255">
236   - <red>255</red>
237   - <green>255</green>
238   - <blue>255</blue>
239   - </color>
240   - </brush>
241   - </colorrole>
242   - </inactive>
243   - <disabled>
244   - <colorrole role="WindowText">
245   - <brush brushstyle="SolidPattern">
246   - <color alpha="255">
247   - <red>123</red>
248   - <green>123</green>
249   - <blue>123</blue>
250   - </color>
251   - </brush>
252   - </colorrole>
253   - </disabled>
254   - </palette>
255   - </property>
256   - <property name="font">
257   - <font>
258   - <family>Roboto</family>
259   - <pointsize>16</pointsize>
260   - <weight>75</weight>
261   - <bold>true</bold>
262   - </font>
263   - </property>
264   - <property name="text">
265   - <string>스팀</string>
266   - </property>
267   - <property name="alignment">
268   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
269   - </property>
270   - </widget>
271   - <widget class="QLabel" name="configMinLabel_1">
272   - <property name="enabled">
273   - <bool>true</bool>
274   - </property>
275   - <property name="geometry">
276   - <rect>
277   - <x>185</x>
278   - <y>620</y>
279   - <width>151</width>
280   - <height>51</height>
281   - </rect>
282   - </property>
283   - <property name="palette">
284   - <palette>
285   - <active>
286   - <colorrole role="WindowText">
287   - <brush brushstyle="SolidPattern">
288   - <color alpha="255">
289   - <red>255</red>
290   - <green>255</green>
291   - <blue>255</blue>
292   - </color>
293   - </brush>
294   - </colorrole>
295   - </active>
296   - <inactive>
297   - <colorrole role="WindowText">
298   - <brush brushstyle="SolidPattern">
299   - <color alpha="255">
300   - <red>255</red>
301   - <green>255</green>
302   - <blue>255</blue>
303   - </color>
304   - </brush>
305   - </colorrole>
306   - </inactive>
307   - <disabled>
308   - <colorrole role="WindowText">
309   - <brush brushstyle="SolidPattern">
310   - <color alpha="255">
311   - <red>123</red>
312   - <green>123</green>
313   - <blue>123</blue>
314   - </color>
315   - </brush>
316   - </colorrole>
317   - </disabled>
318   - </palette>
319   - </property>
320   - <property name="font">
321   - <font>
322   - <family>Malgun Gothic</family>
323   - <pointsize>9</pointsize>
324   - </font>
325   - </property>
326   - <property name="text">
327   - <string>감소</string>
328   - </property>
329   - <property name="alignment">
330   - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
331   - </property>
332   - </widget>
333   - <widget class="QPushButton" name="configButton_1">
334   - <property name="geometry">
335   - <rect>
336   - <x>27</x>
337   - <y>605</y>
338   - <width>140</width>
339   - <height>140</height>
340   - </rect>
341   - </property>
342   - <property name="styleSheet">
343   - <string notr="true">QPushButton { image: url(:/images/slider_icon/gau_icon_01.png); }
344   -QPushButton:pressed { image: url(:/images/slider_icon/gau_icon_01_ov.png); }</string>
345   - </property>
346   - <property name="text">
347   - <string/>
348   - </property>
349   - <property name="style" stdset="0">
350   - <string>icon</string>
351   - </property>
352   - </widget>
353   - <widget class="QLabel" name="configMaxLabel_1">
354   - <property name="enabled">
355   - <bool>true</bool>
356   - </property>
357   - <property name="geometry">
358   - <rect>
359   - <x>700</x>
360   - <y>620</y>
361   - <width>151</width>
362   - <height>51</height>
363   - </rect>
364   - </property>
365   - <property name="palette">
366   - <palette>
367   - <active>
368   - <colorrole role="WindowText">
369   - <brush brushstyle="SolidPattern">
370   - <color alpha="255">
371   - <red>255</red>
372   - <green>255</green>
373   - <blue>255</blue>
374   - </color>
375   - </brush>
376   - </colorrole>
377   - </active>
378   - <inactive>
379   - <colorrole role="WindowText">
380   - <brush brushstyle="SolidPattern">
381   - <color alpha="255">
382   - <red>255</red>
383   - <green>255</green>
384   - <blue>255</blue>
385   - </color>
386   - </brush>
387   - </colorrole>
388   - </inactive>
389   - <disabled>
390   - <colorrole role="WindowText">
391   - <brush brushstyle="SolidPattern">
392   - <color alpha="255">
393   - <red>123</red>
394   - <green>123</green>
395   - <blue>123</blue>
396   - </color>
397   - </brush>
398   - </colorrole>
399   - </disabled>
400   - </palette>
401   - </property>
402   - <property name="font">
403   - <font>
404   - <family>Malgun Gothic</family>
405   - <pointsize>9</pointsize>
406   - </font>
407   - </property>
408   - <property name="text">
409   - <string>증가</string>
410   - </property>
411   - <property name="alignment">
412   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
413   - </property>
414   - </widget>
415   - <widget class="QLabel" name="configMaxLabel_2">
416   - <property name="enabled">
417   - <bool>true</bool>
418   - </property>
419   - <property name="geometry">
420   - <rect>
421   - <x>700</x>
422   - <y>780</y>
423   - <width>151</width>
424   - <height>51</height>
425   - </rect>
426   - </property>
427   - <property name="palette">
428   - <palette>
429   - <active>
430   - <colorrole role="WindowText">
431   - <brush brushstyle="SolidPattern">
432   - <color alpha="255">
433   - <red>255</red>
434   - <green>255</green>
435   - <blue>255</blue>
436   - </color>
437   - </brush>
438   - </colorrole>
439   - </active>
440   - <inactive>
441   - <colorrole role="WindowText">
442   - <brush brushstyle="SolidPattern">
443   - <color alpha="255">
444   - <red>255</red>
445   - <green>255</green>
446   - <blue>255</blue>
447   - </color>
448   - </brush>
449   - </colorrole>
450   - </inactive>
451   - <disabled>
452   - <colorrole role="WindowText">
453   - <brush brushstyle="SolidPattern">
454   - <color alpha="255">
455   - <red>123</red>
456   - <green>123</green>
457   - <blue>123</blue>
458   - </color>
459   - </brush>
460   - </colorrole>
461   - </disabled>
462   - </palette>
463   - </property>
464   - <property name="font">
465   - <font>
466   - <family>Malgun Gothic</family>
467   - <pointsize>9</pointsize>
468   - </font>
469   - </property>
470   - <property name="text">
471   - <string>증가</string>
472   - </property>
473   - <property name="alignment">
474   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
475   - </property>
476   - </widget>
477   - <widget class="QLabel" name="configMinLabel_2">
478   - <property name="enabled">
479   - <bool>true</bool>
480   - </property>
481   - <property name="geometry">
482   - <rect>
483   - <x>185</x>
484   - <y>780</y>
485   - <width>151</width>
486   - <height>51</height>
487   - </rect>
488   - </property>
489   - <property name="palette">
490   - <palette>
491   - <active>
492   - <colorrole role="WindowText">
493   - <brush brushstyle="SolidPattern">
494   - <color alpha="255">
495   - <red>255</red>
496   - <green>255</green>
497   - <blue>255</blue>
498   - </color>
499   - </brush>
500   - </colorrole>
501   - </active>
502   - <inactive>
503   - <colorrole role="WindowText">
504   - <brush brushstyle="SolidPattern">
505   - <color alpha="255">
506   - <red>255</red>
507   - <green>255</green>
508   - <blue>255</blue>
509   - </color>
510   - </brush>
511   - </colorrole>
512   - </inactive>
513   - <disabled>
514   - <colorrole role="WindowText">
515   - <brush brushstyle="SolidPattern">
516   - <color alpha="255">
517   - <red>123</red>
518   - <green>123</green>
519   - <blue>123</blue>
520   - </color>
521   - </brush>
522   - </colorrole>
523   - </disabled>
524   - </palette>
525   - </property>
526   - <property name="font">
527   - <font>
528   - <family>Malgun Gothic</family>
529   - <pointsize>9</pointsize>
530   - </font>
531   - </property>
532   - <property name="text">
533   - <string>감소</string>
534   - </property>
535   - <property name="alignment">
536   - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
537   - </property>
538   - </widget>
539   - <widget class="QPushButton" name="configButton_2">
540   - <property name="geometry">
541   - <rect>
542   - <x>27</x>
543   - <y>765</y>
544   - <width>140</width>
545   - <height>140</height>
546   - </rect>
547   - </property>
548   - <property name="styleSheet">
549   - <string notr="true">QPushButton { image: url(:/images/slider_icon/gau_icon_01.png); }
550   -QPushButton:pressed { image: url(:/images/slider_icon/gau_icon_01_ov.png); }</string>
551   - </property>
552   - <property name="text">
553   - <string/>
554   - </property>
555   - <property name="style" stdset="0">
556   - <string>icon</string>
557   - </property>
558   - </widget>
559   - <widget class="QLabel" name="configCurrentLabel_2">
560   - <property name="enabled">
561   - <bool>true</bool>
562   - </property>
563   - <property name="geometry">
564   - <rect>
565   - <x>199</x>
566   - <y>850</y>
567   - <width>641</width>
568   - <height>51</height>
569   - </rect>
570   - </property>
571   - <property name="palette">
572   - <palette>
573   - <active>
574   - <colorrole role="WindowText">
575   - <brush brushstyle="SolidPattern">
576   - <color alpha="255">
577   - <red>255</red>
578   - <green>255</green>
579   - <blue>255</blue>
580   - </color>
581   - </brush>
582   - </colorrole>
583   - </active>
584   - <inactive>
585   - <colorrole role="WindowText">
586   - <brush brushstyle="SolidPattern">
587   - <color alpha="255">
588   - <red>255</red>
589   - <green>255</green>
590   - <blue>255</blue>
591   - </color>
592   - </brush>
593   - </colorrole>
594   - </inactive>
595   - <disabled>
596   - <colorrole role="WindowText">
597   - <brush brushstyle="SolidPattern">
598   - <color alpha="255">
599   - <red>123</red>
600   - <green>123</green>
601   - <blue>123</blue>
602   - </color>
603   - </brush>
604   - </colorrole>
605   - </disabled>
606   - </palette>
607   - </property>
608   - <property name="font">
609   - <font>
610   - <family>Roboto</family>
611   - <pointsize>16</pointsize>
612   - <weight>75</weight>
613   - <bold>true</bold>
614   - </font>
615   - </property>
616   - <property name="text">
617   - <string>스팀</string>
618   - </property>
619   - <property name="alignment">
620   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
621   - </property>
622   - </widget>
623   - <widget class="QSlider" name="configSlider_2">
624   - <property name="geometry">
625   - <rect>
626   - <x>185</x>
627   - <y>823</y>
628   - <width>666</width>
629   - <height>33</height>
630   - </rect>
631   - </property>
632   - <property name="pageStep">
633   - <number>1</number>
634   - </property>
635   - <property name="tracking">
636   - <bool>true</bool>
637   - </property>
638   - <property name="orientation">
639   - <enum>Qt::Horizontal</enum>
640   - </property>
641   - </widget>
642   - <widget class="QLabel" name="configMaxLabel_3">
643   - <property name="enabled">
644   - <bool>true</bool>
645   - </property>
646   - <property name="geometry">
647   - <rect>
648   - <x>700</x>
649   - <y>950</y>
650   - <width>151</width>
651   - <height>51</height>
652   - </rect>
653   - </property>
654   - <property name="palette">
655   - <palette>
656   - <active>
657   - <colorrole role="WindowText">
658   - <brush brushstyle="SolidPattern">
659   - <color alpha="255">
660   - <red>255</red>
661   - <green>255</green>
662   - <blue>255</blue>
663   - </color>
664   - </brush>
665   - </colorrole>
666   - </active>
667   - <inactive>
668   - <colorrole role="WindowText">
669   - <brush brushstyle="SolidPattern">
670   - <color alpha="255">
671   - <red>255</red>
672   - <green>255</green>
673   - <blue>255</blue>
674   - </color>
675   - </brush>
676   - </colorrole>
677   - </inactive>
678   - <disabled>
679   - <colorrole role="WindowText">
680   - <brush brushstyle="SolidPattern">
681   - <color alpha="255">
682   - <red>123</red>
683   - <green>123</green>
684   - <blue>123</blue>
685   - </color>
686   - </brush>
687   - </colorrole>
688   - </disabled>
689   - </palette>
690   - </property>
691   - <property name="font">
692   - <font>
693   - <family>Malgun Gothic</family>
694   - <pointsize>9</pointsize>
695   - </font>
696   - </property>
697   - <property name="text">
698   - <string>증가</string>
699   - </property>
700   - <property name="alignment">
701   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
702   - </property>
703   - </widget>
704   - <widget class="QLabel" name="configMinLabel_3">
705   - <property name="enabled">
706   - <bool>true</bool>
707   - </property>
708   - <property name="geometry">
709   - <rect>
710   - <x>185</x>
711   - <y>950</y>
712   - <width>151</width>
713   - <height>51</height>
714   - </rect>
715   - </property>
716   - <property name="palette">
717   - <palette>
718   - <active>
719   - <colorrole role="WindowText">
720   - <brush brushstyle="SolidPattern">
721   - <color alpha="255">
722   - <red>255</red>
723   - <green>255</green>
724   - <blue>255</blue>
725   - </color>
726   - </brush>
727   - </colorrole>
728   - </active>
729   - <inactive>
730   - <colorrole role="WindowText">
731   - <brush brushstyle="SolidPattern">
732   - <color alpha="255">
733   - <red>255</red>
734   - <green>255</green>
735   - <blue>255</blue>
736   - </color>
737   - </brush>
738   - </colorrole>
739   - </inactive>
740   - <disabled>
741   - <colorrole role="WindowText">
742   - <brush brushstyle="SolidPattern">
743   - <color alpha="255">
744   - <red>123</red>
745   - <green>123</green>
746   - <blue>123</blue>
747   - </color>
748   - </brush>
749   - </colorrole>
750   - </disabled>
751   - </palette>
752   - </property>
753   - <property name="font">
754   - <font>
755   - <family>Malgun Gothic</family>
756   - <pointsize>9</pointsize>
757   - </font>
758   - </property>
759   - <property name="text">
760   - <string>감소</string>
761   - </property>
762   - <property name="alignment">
763   - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
764   - </property>
765   - </widget>
766   - <widget class="QPushButton" name="configButton_3">
767   - <property name="geometry">
768   - <rect>
769   - <x>27</x>
770   - <y>935</y>
771   - <width>140</width>
772   - <height>140</height>
773   - </rect>
774   - </property>
775   - <property name="styleSheet">
776   - <string notr="true">QPushButton { image: url(:/images/slider_icon/gau_icon_01.png); }
777   -QPushButton:pressed { image: url(:/images/slider_icon/gau_icon_01_ov.png); }</string>
778   - </property>
779   - <property name="text">
780   - <string/>
781   - </property>
782   - <property name="style" stdset="0">
783   - <string>icon</string>
784   - </property>
785   - </widget>
786   - <widget class="QLabel" name="configCurrentLabel_3">
787   - <property name="enabled">
788   - <bool>true</bool>
789   - </property>
790   - <property name="geometry">
791   - <rect>
792   - <x>199</x>
793   - <y>1020</y>
794   - <width>641</width>
795   - <height>51</height>
796   - </rect>
797   - </property>
798   - <property name="palette">
799   - <palette>
800   - <active>
801   - <colorrole role="WindowText">
802   - <brush brushstyle="SolidPattern">
803   - <color alpha="255">
804   - <red>255</red>
805   - <green>255</green>
806   - <blue>255</blue>
807   - </color>
808   - </brush>
809   - </colorrole>
810   - </active>
811   - <inactive>
812   - <colorrole role="WindowText">
813   - <brush brushstyle="SolidPattern">
814   - <color alpha="255">
815   - <red>255</red>
816   - <green>255</green>
817   - <blue>255</blue>
818   - </color>
819   - </brush>
820   - </colorrole>
821   - </inactive>
822   - <disabled>
823   - <colorrole role="WindowText">
824   - <brush brushstyle="SolidPattern">
825   - <color alpha="255">
826   - <red>123</red>
827   - <green>123</green>
828   - <blue>123</blue>
829   - </color>
830   - </brush>
831   - </colorrole>
832   - </disabled>
833   - </palette>
834   - </property>
835   - <property name="font">
836   - <font>
837   - <family>Roboto</family>
838   - <pointsize>16</pointsize>
839   - <weight>75</weight>
840   - <bold>true</bold>
841   - </font>
842   - </property>
843   - <property name="text">
844   - <string>스팀</string>
845   - </property>
846   - <property name="alignment">
847   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
848   - </property>
849   - </widget>
850   - <widget class="QSlider" name="configSlider_3">
851   - <property name="geometry">
852   - <rect>
853   - <x>185</x>
854   - <y>993</y>
855   - <width>666</width>
856   - <height>33</height>
857   - </rect>
858   - </property>
859   - <property name="pageStep">
860   - <number>1</number>
861   - </property>
862   - <property name="tracking">
863   - <bool>true</bool>
864   - </property>
865   - <property name="orientation">
866   - <enum>Qt::Horizontal</enum>
867   - </property>
868   - </widget>
869   - <widget class="QLabel" name="configMaxLabel_4">
870   - <property name="enabled">
871   - <bool>true</bool>
872   - </property>
873   - <property name="geometry">
874   - <rect>
875   - <x>700</x>
876   - <y>1130</y>
877   - <width>151</width>
878   - <height>51</height>
879   - </rect>
880   - </property>
881   - <property name="palette">
882   - <palette>
883   - <active>
884   - <colorrole role="WindowText">
885   - <brush brushstyle="SolidPattern">
886   - <color alpha="255">
887   - <red>255</red>
888   - <green>255</green>
889   - <blue>255</blue>
890   - </color>
891   - </brush>
892   - </colorrole>
893   - </active>
894   - <inactive>
895   - <colorrole role="WindowText">
896   - <brush brushstyle="SolidPattern">
897   - <color alpha="255">
898   - <red>255</red>
899   - <green>255</green>
900   - <blue>255</blue>
901   - </color>
902   - </brush>
903   - </colorrole>
904   - </inactive>
905   - <disabled>
906   - <colorrole role="WindowText">
907   - <brush brushstyle="SolidPattern">
908   - <color alpha="255">
909   - <red>123</red>
910   - <green>123</green>
911   - <blue>123</blue>
912   - </color>
913   - </brush>
914   - </colorrole>
915   - </disabled>
916   - </palette>
917   - </property>
918   - <property name="font">
919   - <font>
920   - <family>Malgun Gothic</family>
921   - <pointsize>9</pointsize>
922   - </font>
923   - </property>
924   - <property name="text">
925   - <string>증가</string>
926   - </property>
927   - <property name="alignment">
928   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
929   - </property>
930   - </widget>
931   - <widget class="QLabel" name="configMinLabel_4">
932   - <property name="enabled">
933   - <bool>true</bool>
934   - </property>
935   - <property name="geometry">
936   - <rect>
937   - <x>185</x>
938   - <y>1130</y>
939   - <width>151</width>
940   - <height>51</height>
941   - </rect>
942   - </property>
943   - <property name="palette">
944   - <palette>
945   - <active>
946   - <colorrole role="WindowText">
947   - <brush brushstyle="SolidPattern">
948   - <color alpha="255">
949   - <red>255</red>
950   - <green>255</green>
951   - <blue>255</blue>
952   - </color>
953   - </brush>
954   - </colorrole>
955   - </active>
956   - <inactive>
957   - <colorrole role="WindowText">
958   - <brush brushstyle="SolidPattern">
959   - <color alpha="255">
960   - <red>255</red>
961   - <green>255</green>
962   - <blue>255</blue>
963   - </color>
964   - </brush>
965   - </colorrole>
966   - </inactive>
967   - <disabled>
968   - <colorrole role="WindowText">
969   - <brush brushstyle="SolidPattern">
970   - <color alpha="255">
971   - <red>123</red>
972   - <green>123</green>
973   - <blue>123</blue>
974   - </color>
975   - </brush>
976   - </colorrole>
977   - </disabled>
978   - </palette>
979   - </property>
980   - <property name="font">
981   - <font>
982   - <family>Malgun Gothic</family>
983   - <pointsize>9</pointsize>
984   - </font>
985   - </property>
986   - <property name="text">
987   - <string>감소</string>
988   - </property>
989   - <property name="alignment">
990   - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
991   - </property>
992   - </widget>
993   - <widget class="QPushButton" name="configButton_4">
994   - <property name="geometry">
995   - <rect>
996   - <x>27</x>
997   - <y>1115</y>
998   - <width>140</width>
999   - <height>140</height>
1000   - </rect>
1001   - </property>
1002   - <property name="styleSheet">
1003   - <string notr="true">QPushButton { image: url(:/images/slider_icon/gau_icon_01.png); }
1004   -QPushButton:pressed { image: url(:/images/slider_icon/gau_icon_01_ov.png); }</string>
1005   - </property>
1006   - <property name="text">
1007   - <string/>
1008   - </property>
1009   - <property name="style" stdset="0">
1010   - <string>icon</string>
1011   - </property>
1012   - </widget>
1013   - <widget class="QLabel" name="configCurrentLabel_4">
1014   - <property name="enabled">
1015   - <bool>true</bool>
1016   - </property>
1017   - <property name="geometry">
1018   - <rect>
1019   - <x>199</x>
1020   - <y>1200</y>
1021   - <width>641</width>
1022   - <height>51</height>
1023   - </rect>
1024   - </property>
1025   - <property name="palette">
1026   - <palette>
1027   - <active>
1028   - <colorrole role="WindowText">
1029   - <brush brushstyle="SolidPattern">
1030   - <color alpha="255">
1031   - <red>255</red>
1032   - <green>255</green>
1033   - <blue>255</blue>
1034   - </color>
1035   - </brush>
1036   - </colorrole>
1037   - </active>
1038   - <inactive>
1039   - <colorrole role="WindowText">
1040   - <brush brushstyle="SolidPattern">
1041   - <color alpha="255">
1042   - <red>255</red>
1043   - <green>255</green>
1044   - <blue>255</blue>
1045   - </color>
1046   - </brush>
1047   - </colorrole>
1048   - </inactive>
1049   - <disabled>
1050   - <colorrole role="WindowText">
1051   - <brush brushstyle="SolidPattern">
1052   - <color alpha="255">
1053   - <red>123</red>
1054   - <green>123</green>
1055   - <blue>123</blue>
1056   - </color>
1057   - </brush>
1058   - </colorrole>
1059   - </disabled>
1060   - </palette>
1061   - </property>
1062   - <property name="font">
1063   - <font>
1064   - <family>Roboto</family>
1065   - <pointsize>16</pointsize>
1066   - <weight>75</weight>
1067   - <bold>true</bold>
1068   - </font>
1069   - </property>
1070   - <property name="text">
1071   - <string>스팀</string>
1072   - </property>
1073   - <property name="alignment">
1074   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
1075   - </property>
1076   - </widget>
1077   - <widget class="QSlider" name="configSlider_4">
1078   - <property name="geometry">
1079   - <rect>
1080   - <x>185</x>
1081   - <y>1173</y>
1082   - <width>666</width>
1083   - <height>33</height>
1084   - </rect>
1085   - </property>
1086   - <property name="pageStep">
1087   - <number>1</number>
1088   - </property>
1089   - <property name="tracking">
1090   - <bool>true</bool>
1091   - </property>
1092   - <property name="orientation">
1093   - <enum>Qt::Horizontal</enum>
1094   - </property>
1095   - </widget>
1096   - <widget class="QLabel" name="configMaxLabel_5">
1097   - <property name="enabled">
1098   - <bool>true</bool>
1099   - </property>
1100   - <property name="geometry">
1101   - <rect>
1102   - <x>700</x>
1103   - <y>1300</y>
1104   - <width>151</width>
1105   - <height>51</height>
1106   - </rect>
1107   - </property>
1108   - <property name="palette">
1109   - <palette>
1110   - <active>
1111   - <colorrole role="WindowText">
1112   - <brush brushstyle="SolidPattern">
1113   - <color alpha="255">
1114   - <red>255</red>
1115   - <green>255</green>
1116   - <blue>255</blue>
1117   - </color>
1118   - </brush>
1119   - </colorrole>
1120   - </active>
1121   - <inactive>
1122   - <colorrole role="WindowText">
1123   - <brush brushstyle="SolidPattern">
1124   - <color alpha="255">
1125   - <red>255</red>
1126   - <green>255</green>
1127   - <blue>255</blue>
1128   - </color>
1129   - </brush>
1130   - </colorrole>
1131   - </inactive>
1132   - <disabled>
1133   - <colorrole role="WindowText">
1134   - <brush brushstyle="SolidPattern">
1135   - <color alpha="255">
1136   - <red>123</red>
1137   - <green>123</green>
1138   - <blue>123</blue>
1139   - </color>
1140   - </brush>
1141   - </colorrole>
1142   - </disabled>
1143   - </palette>
1144   - </property>
1145   - <property name="font">
1146   - <font>
1147   - <family>Malgun Gothic</family>
1148   - <pointsize>9</pointsize>
1149   - </font>
1150   - </property>
1151   - <property name="text">
1152   - <string>증가</string>
1153   - </property>
1154   - <property name="alignment">
1155   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
1156   - </property>
1157   - </widget>
1158   - <widget class="QLabel" name="configMinLabel_5">
1159   - <property name="enabled">
1160   - <bool>true</bool>
1161   - </property>
1162   - <property name="geometry">
1163   - <rect>
1164   - <x>185</x>
1165   - <y>1300</y>
1166   - <width>151</width>
1167   - <height>51</height>
1168   - </rect>
1169   - </property>
1170   - <property name="palette">
1171   - <palette>
1172   - <active>
1173   - <colorrole role="WindowText">
1174   - <brush brushstyle="SolidPattern">
1175   - <color alpha="255">
1176   - <red>255</red>
1177   - <green>255</green>
1178   - <blue>255</blue>
1179   - </color>
1180   - </brush>
1181   - </colorrole>
1182   - </active>
1183   - <inactive>
1184   - <colorrole role="WindowText">
1185   - <brush brushstyle="SolidPattern">
1186   - <color alpha="255">
1187   - <red>255</red>
1188   - <green>255</green>
1189   - <blue>255</blue>
1190   - </color>
1191   - </brush>
1192   - </colorrole>
1193   - </inactive>
1194   - <disabled>
1195   - <colorrole role="WindowText">
1196   - <brush brushstyle="SolidPattern">
1197   - <color alpha="255">
1198   - <red>123</red>
1199   - <green>123</green>
1200   - <blue>123</blue>
1201   - </color>
1202   - </brush>
1203   - </colorrole>
1204   - </disabled>
1205   - </palette>
1206   - </property>
1207   - <property name="font">
1208   - <font>
1209   - <family>Malgun Gothic</family>
1210   - <pointsize>9</pointsize>
1211   - </font>
1212   - </property>
1213   - <property name="text">
1214   - <string>감소</string>
1215   - </property>
1216   - <property name="alignment">
1217   - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
1218   - </property>
1219   - </widget>
1220   - <widget class="QPushButton" name="configButton_5">
1221   - <property name="geometry">
1222   - <rect>
1223   - <x>27</x>
1224   - <y>1285</y>
1225   - <width>140</width>
1226   - <height>140</height>
1227   - </rect>
1228   - </property>
1229   - <property name="styleSheet">
1230   - <string notr="true">QPushButton { image: url(:/images/slider_icon/gau_icon_01.png); }
1231   -QPushButton:pressed { image: url(:/images/slider_icon/gau_icon_01_ov.png); }</string>
1232   - </property>
1233   - <property name="text">
1234   - <string/>
1235   - </property>
1236   - <property name="style" stdset="0">
1237   - <string>icon</string>
1238   - </property>
1239   - </widget>
1240   - <widget class="QLabel" name="configCurrentLabel_5">
1241   - <property name="enabled">
1242   - <bool>true</bool>
1243   - </property>
1244   - <property name="geometry">
1245   - <rect>
1246   - <x>189</x>
1247   - <y>1370</y>
1248   - <width>651</width>
1249   - <height>51</height>
1250   - </rect>
1251   - </property>
1252   - <property name="palette">
1253   - <palette>
1254   - <active>
1255   - <colorrole role="WindowText">
1256   - <brush brushstyle="SolidPattern">
1257   - <color alpha="255">
1258   - <red>255</red>
1259   - <green>255</green>
1260   - <blue>255</blue>
1261   - </color>
1262   - </brush>
1263   - </colorrole>
1264   - </active>
1265   - <inactive>
1266   - <colorrole role="WindowText">
1267   - <brush brushstyle="SolidPattern">
1268   - <color alpha="255">
1269   - <red>255</red>
1270   - <green>255</green>
1271   - <blue>255</blue>
1272   - </color>
1273   - </brush>
1274   - </colorrole>
1275   - </inactive>
1276   - <disabled>
1277   - <colorrole role="WindowText">
1278   - <brush brushstyle="SolidPattern">
1279   - <color alpha="255">
1280   - <red>123</red>
1281   - <green>123</green>
1282   - <blue>123</blue>
1283   - </color>
1284   - </brush>
1285   - </colorrole>
1286   - </disabled>
1287   - </palette>
1288   - </property>
1289   - <property name="font">
1290   - <font>
1291   - <family>Roboto</family>
1292   - <pointsize>16</pointsize>
1293   - <weight>75</weight>
1294   - <bold>true</bold>
1295   - </font>
1296   - </property>
1297   - <property name="text">
1298   - <string>스팀</string>
1299   - </property>
1300   - <property name="alignment">
1301   - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
1302   - </property>
1303   - </widget>
1304   - <widget class="QSlider" name="configSlider_5">
1305   - <property name="geometry">
1306   - <rect>
1307   - <x>185</x>
1308   - <y>1343</y>
1309   - <width>666</width>
1310   - <height>33</height>
1311   - </rect>
1312   - </property>
1313   - <property name="pageStep">
1314   - <number>1</number>
1315   - </property>
1316   - <property name="tracking">
1317   - <bool>true</bool>
1318   - </property>
1319   - <property name="orientation">
1320   - <enum>Qt::Horizontal</enum>
1321   - </property>
1322   - </widget>
  62 + <widget class="QPushButton" name="backButton">
  63 + <property name="geometry">
  64 + <rect>
  65 + <x>175</x>
  66 + <y>26</y>
  67 + <width>97</width>
  68 + <height>97</height>
  69 + </rect>
  70 + </property>
  71 + <property name="sizePolicy">
  72 + <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
  73 + <horstretch>0</horstretch>
  74 + <verstretch>0</verstretch>
  75 + </sizepolicy>
  76 + </property>
  77 + <property name="styleSheet">
  78 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/back.png); }
  79 +QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</string>
  80 + </property>
  81 + <property name="text">
  82 + <string/>
  83 + </property>
1323 84 </widget>
1324   - <widget class="QWidget" name="cookPage">
1325   - <widget class="QPushButton" name="configCookButton">
1326   - <property name="geometry">
1327   - <rect>
1328   - <x>720</x>
1329   - <y>480</y>
1330   - <width>152</width>
1331   - <height>70</height>
1332   - </rect>
1333   - </property>
1334   - <property name="styleSheet">
1335   - <string notr="true">QPushButton { border-image: url(:/images/button/152.png); }
1336   -QPushButton::pressed { border-image: url(:/images/button/152_ov.png); }</string>
1337   - </property>
1338   - <property name="text">
1339   - <string/>
1340   - </property>
1341   - <property name="icon">
1342   - <iconset resource="resources.qrc">
1343   - <normaloff>:/images/auto_button/btn_icon_03.png</normaloff>:/images/auto_button/btn_icon_03.png</iconset>
1344   - </property>
1345   - <property name="iconSize">
1346   - <size>
1347   - <width>38</width>
1348   - <height>37</height>
1349   - </size>
1350   - </property>
1351   - </widget>
1352   - <widget class="QPushButton" name="autoCookButton">
1353   - <property name="geometry">
1354   - <rect>
1355   - <x>559</x>
1356   - <y>480</y>
1357   - <width>152</width>
1358   - <height>70</height>
1359   - </rect>
1360   - </property>
1361   - <property name="styleSheet">
1362   - <string notr="true">QPushButton { border-image: url(:/images/button/152.png); }
1363   -QPushButton::pressed { border-image: url(:/images/button/152_ov.png); }</string>
1364   - </property>
1365   - <property name="text">
1366   - <string/>
1367   - </property>
1368   - <property name="icon">
1369   - <iconset resource="resources.qrc">
1370   - <normaloff>:/images/auto_button/btn_icon_02.png</normaloff>:/images/auto_button/btn_icon_02.png</iconset>
1371   - </property>
1372   - <property name="iconSize">
1373   - <size>
1374   - <width>40</width>
1375   - <height>51</height>
1376   - </size>
1377   - </property>
1378   - </widget>
1379   - <widget class="QPushButton" name="selectCookButton_2">
1380   - <property name="geometry">
1381   - <rect>
1382   - <x>259</x>
1383   - <y>480</y>
1384   - <width>288</width>
1385   - <height>70</height>
1386   - </rect>
1387   - </property>
1388   - <property name="font">
1389   - <font>
1390   - <family>Roboto</family>
1391   - <pointsize>10</pointsize>
1392   - <weight>75</weight>
1393   - <bold>true</bold>
1394   - </font>
1395   - </property>
1396   - <property name="styleSheet">
1397   - <string notr="true">QPushButton { border-image: url(:/images/button/288.png); }
1398   -QPushButton::pressed { border-image: url(:/images/button/288_ov.png); }</string>
1399   - </property>
1400   - <property name="text">
1401   - <string/>
1402   - </property>
1403   - </widget>
1404   - <widget class="QLabel" name="cookTypeIcon_2">
1405   - <property name="geometry">
1406   - <rect>
1407   - <x>0</x>
1408   - <y>430</y>
1409   - <width>250</width>
1410   - <height>150</height>
1411   - </rect>
1412   - </property>
1413   - <property name="text">
1414   - <string/>
1415   - </property>
1416   - <property name="pixmap">
1417   - <pixmap>:/images/images/auto/005_auto_icon_01_ov.png</pixmap>
1418   - </property>
1419   - <property name="alignment">
1420   - <set>Qt::AlignCenter</set>
1421   - </property>
1422   - </widget>
1423   - <widget class="QPushButton" name="showPrevStepButton">
1424   - <property name="geometry">
1425   - <rect>
1426   - <x>10</x>
1427   - <y>715</y>
1428   - <width>60</width>
1429   - <height>400</height>
1430   - </rect>
1431   - </property>
1432   - <property name="styleSheet">
1433   - <string notr="true">QPushButton { background-image: url(:/images/auto_button/prev_step.png); }
1434   -QPushButton::pressed { background-image: url(:/images/auto_button/prev_step_ov.png); }</string>
1435   - </property>
1436   - <property name="text">
1437   - <string/>
1438   - </property>
1439   - </widget>
1440   - <widget class="QPushButton" name="showNextStepButton">
1441   - <property name="geometry">
1442   - <rect>
1443   - <x>830</x>
1444   - <y>715</y>
1445   - <width>60</width>
1446   - <height>400</height>
1447   - </rect>
1448   - </property>
1449   - <property name="styleSheet">
1450   - <string notr="true">QPushButton { background-image: url(:/images/auto_button/next_step.png); }
1451   -QPushButton::pressed { background-image: url(:/images/auto_button/next_step_ov.png); }</string>
1452   - </property>
1453   - <property name="text">
1454   - <string/>
1455   - </property>
1456   - </widget>
1457   - <widget class="QLabel" name="label_3">
1458   - <property name="geometry">
1459   - <rect>
1460   - <x>130</x>
1461   - <y>600</y>
1462   - <width>100</width>
1463   - <height>100</height>
1464   - </rect>
1465   - </property>
1466   - <property name="text">
1467   - <string/>
1468   - </property>
1469   - <property name="pixmap">
1470   - <pixmap resource="resources.qrc">:/images/symbol/time.png</pixmap>
1471   - </property>
1472   - <property name="alignment">
1473   - <set>Qt::AlignCenter</set>
1474   - </property>
1475   - </widget>
1476   - <widget class="QLabel" name="label_4">
1477   - <property name="geometry">
1478   - <rect>
1479   - <x>460</x>
1480   - <y>600</y>
1481   - <width>100</width>
1482   - <height>100</height>
1483   - </rect>
1484   - </property>
1485   - <property name="text">
1486   - <string/>
1487   - </property>
1488   - <property name="pixmap">
1489   - <pixmap resource="resources.qrc">:/images/symbol/core_temp.png</pixmap>
1490   - </property>
1491   - <property name="alignment">
1492   - <set>Qt::AlignCenter</set>
1493   - </property>
1494   - </widget>
1495   - <widget class="QPushButton" name="infoButton">
1496   - <property name="geometry">
1497   - <rect>
1498   - <x>730</x>
1499   - <y>730</y>
1500   - <width>63</width>
1501   - <height>63</height>
1502   - </rect>
1503   - </property>
1504   - <property name="styleSheet">
1505   - <string notr="true">QPushButton { border-image: url(:/images/symbol/info.png); }
1506   -QPushButton::pressed { border-image: url(:/images/symbol/info_ov.png); }</string>
1507   - </property>
1508   - <property name="text">
1509   - <string/>
1510   - </property>
1511   - </widget>
1512   - <widget class="QLabel" name="cookStepIcon">
1513   - <property name="geometry">
1514   - <rect>
1515   - <x>80</x>
1516   - <y>710</y>
1517   - <width>100</width>
1518   - <height>100</height>
1519   - </rect>
1520   - </property>
1521   - <property name="palette">
1522   - <palette>
1523   - <active>
1524   - <colorrole role="WindowText">
1525   - <brush brushstyle="SolidPattern">
1526   - <color alpha="255">
1527   - <red>255</red>
1528   - <green>255</green>
1529   - <blue>255</blue>
1530   - </color>
1531   - </brush>
1532   - </colorrole>
1533   - </active>
1534   - <inactive>
1535   - <colorrole role="WindowText">
1536   - <brush brushstyle="SolidPattern">
1537   - <color alpha="255">
1538   - <red>255</red>
1539   - <green>255</green>
1540   - <blue>255</blue>
1541   - </color>
1542   - </brush>
1543   - </colorrole>
1544   - </inactive>
1545   - <disabled>
1546   - <colorrole role="WindowText">
1547   - <brush brushstyle="SolidPattern">
1548   - <color alpha="255">
1549   - <red>123</red>
1550   - <green>123</green>
1551   - <blue>123</blue>
1552   - </color>
1553   - </brush>
1554   - </colorrole>
1555   - </disabled>
1556   - </palette>
1557   - </property>
1558   - <property name="font">
1559   - <font>
1560   - <family>Malgun Gothic</family>
1561   - <pointsize>14</pointsize>
1562   - </font>
1563   - </property>
1564   - <property name="text">
1565   - <string/>
1566   - </property>
1567   - <property name="pixmap">
1568   - <pixmap resource="resources.qrc">:/images/cook_step_type/sys_icon_05.png</pixmap>
1569   - </property>
1570   - <property name="alignment">
1571   - <set>Qt::AlignCenter</set>
1572   - </property>
1573   - </widget>
1574   - <widget class="QLabel" name="cookStepLabel">
1575   - <property name="geometry">
1576   - <rect>
1577   - <x>180</x>
1578   - <y>710</y>
1579   - <width>541</width>
1580   - <height>100</height>
1581   - </rect>
1582   - </property>
1583   - <property name="palette">
1584   - <palette>
1585   - <active>
1586   - <colorrole role="WindowText">
1587   - <brush brushstyle="SolidPattern">
1588   - <color alpha="255">
1589   - <red>255</red>
1590   - <green>255</green>
1591   - <blue>255</blue>
1592   - </color>
1593   - </brush>
1594   - </colorrole>
1595   - </active>
1596   - <inactive>
1597   - <colorrole role="WindowText">
1598   - <brush brushstyle="SolidPattern">
1599   - <color alpha="255">
1600   - <red>255</red>
1601   - <green>255</green>
1602   - <blue>255</blue>
1603   - </color>
1604   - </brush>
1605   - </colorrole>
1606   - </inactive>
1607   - <disabled>
1608   - <colorrole role="WindowText">
1609   - <brush brushstyle="SolidPattern">
1610   - <color alpha="255">
1611   - <red>123</red>
1612   - <green>123</green>
1613   - <blue>123</blue>
1614   - </color>
1615   - </brush>
1616   - </colorrole>
1617   - </disabled>
1618   - </palette>
1619   - </property>
1620   - <property name="font">
1621   - <font>
1622   - <family>Malgun Gothic</family>
1623   - <pointsize>14</pointsize>
1624   - </font>
1625   - </property>
1626   - <property name="text">
1627   - <string>Preheat</string>
1628   - </property>
1629   - </widget>
1630   - <widget class="QLabel" name="cookModeIcon">
1631   - <property name="geometry">
1632   - <rect>
1633   - <x>80</x>
1634   - <y>1020</y>
1635   - <width>741</width>
1636   - <height>81</height>
1637   - </rect>
1638   - </property>
1639   - <property name="text">
1640   - <string/>
1641   - </property>
1642   - <property name="pixmap">
1643   - <pixmap>:/images/images/auto/window_icon_06.png</pixmap>
1644   - </property>
1645   - <property name="alignment">
1646   - <set>Qt::AlignCenter</set>
1647   - </property>
1648   - </widget>
1649   - <widget class="AnimatedImageBox" name="openDoorAnimation">
1650   - <property name="geometry">
1651   - <rect>
1652   - <x>40</x>
1653   - <y>1220</y>
1654   - <width>251</width>
1655   - <height>201</height>
1656   - </rect>
1657   - </property>
1658   - <property name="text">
1659   - <string>TextLabel</string>
1660   - </property>
1661   - </widget>
1662   - <widget class="HumidityCircularGauge" name="humidityGauge" native="true">
1663   - <property name="geometry">
1664   - <rect>
1665   - <x>100</x>
1666   - <y>810</y>
1667   - <width>291</width>
1668   - <height>290</height>
1669   - </rect>
1670   - </property>
1671   - <property name="palette">
1672   - <palette>
1673   - <active>
1674   - <colorrole role="WindowText">
1675   - <brush brushstyle="SolidPattern">
1676   - <color alpha="255">
1677   - <red>255</red>
1678   - <green>255</green>
1679   - <blue>255</blue>
1680   - </color>
1681   - </brush>
1682   - </colorrole>
1683   - </active>
1684   - <inactive>
1685   - <colorrole role="WindowText">
1686   - <brush brushstyle="SolidPattern">
1687   - <color alpha="255">
1688   - <red>255</red>
1689   - <green>255</green>
1690   - <blue>255</blue>
1691   - </color>
1692   - </brush>
1693   - </colorrole>
1694   - </inactive>
1695   - <disabled>
1696   - <colorrole role="WindowText">
1697   - <brush brushstyle="SolidPattern">
1698   - <color alpha="255">
1699   - <red>123</red>
1700   - <green>123</green>
1701   - <blue>123</blue>
1702   - </color>
1703   - </brush>
1704   - </colorrole>
1705   - </disabled>
1706   - </palette>
1707   - </property>
1708   - </widget>
1709   - <widget class="HeatCircularGauge" name="heatGauge" native="true">
1710   - <property name="geometry">
1711   - <rect>
1712   - <x>510</x>
1713   - <y>810</y>
1714   - <width>291</width>
1715   - <height>290</height>
1716   - </rect>
1717   - </property>
1718   - <property name="palette">
1719   - <palette>
1720   - <active>
1721   - <colorrole role="WindowText">
1722   - <brush brushstyle="SolidPattern">
1723   - <color alpha="255">
1724   - <red>255</red>
1725   - <green>255</green>
1726   - <blue>255</blue>
1727   - </color>
1728   - </brush>
1729   - </colorrole>
1730   - </active>
1731   - <inactive>
1732   - <colorrole role="WindowText">
1733   - <brush brushstyle="SolidPattern">
1734   - <color alpha="255">
1735   - <red>255</red>
1736   - <green>255</green>
1737   - <blue>255</blue>
1738   - </color>
1739   - </brush>
1740   - </colorrole>
1741   - </inactive>
1742   - <disabled>
1743   - <colorrole role="WindowText">
1744   - <brush brushstyle="SolidPattern">
1745   - <color alpha="255">
1746   - <red>123</red>
1747   - <green>123</green>
1748   - <blue>123</blue>
1749   - </color>
1750   - </brush>
1751   - </colorrole>
1752   - </disabled>
1753   - </palette>
1754   - </property>
1755   - </widget>
1756   - <widget class="AnimatedImageBox" name="cookStepAnimation">
1757   - <property name="geometry">
1758   - <rect>
1759   - <x>340</x>
1760   - <y>800</y>
1761   - <width>231</width>
1762   - <height>281</height>
1763   - </rect>
1764   - </property>
1765   - <property name="text">
1766   - <string/>
1767   - </property>
1768   - </widget>
1769   - <widget class="QLabel" name="humidityLabel">
1770   - <property name="geometry">
1771   - <rect>
1772   - <x>90</x>
1773   - <y>960</y>
1774   - <width>321</width>
1775   - <height>100</height>
1776   - </rect>
1777   - </property>
1778   - <property name="palette">
1779   - <palette>
1780   - <active>
1781   - <colorrole role="WindowText">
1782   - <brush brushstyle="SolidPattern">
1783   - <color alpha="255">
1784   - <red>255</red>
1785   - <green>255</green>
1786   - <blue>255</blue>
1787   - </color>
1788   - </brush>
1789   - </colorrole>
1790   - </active>
1791   - <inactive>
1792   - <colorrole role="WindowText">
1793   - <brush brushstyle="SolidPattern">
1794   - <color alpha="255">
1795   - <red>255</red>
1796   - <green>255</green>
1797   - <blue>255</blue>
1798   - </color>
1799   - </brush>
1800   - </colorrole>
1801   - </inactive>
1802   - <disabled>
1803   - <colorrole role="WindowText">
1804   - <brush brushstyle="SolidPattern">
1805   - <color alpha="255">
1806   - <red>123</red>
1807   - <green>123</green>
1808   - <blue>123</blue>
1809   - </color>
1810   - </brush>
1811   - </colorrole>
1812   - </disabled>
1813   - </palette>
1814   - </property>
1815   - <property name="font">
1816   - <font>
1817   - <family>Roboto</family>
1818   - <pointsize>16</pointsize>
1819   - <weight>75</weight>
1820   - <bold>true</bold>
1821   - </font>
1822   - </property>
1823   - <property name="text">
1824   - <string>10</string>
1825   - </property>
1826   - <property name="alignment">
1827   - <set>Qt::AlignCenter</set>
1828   - </property>
1829   - </widget>
1830   - <widget class="QLabel" name="heatLabel">
1831   - <property name="geometry">
1832   - <rect>
1833   - <x>490</x>
1834   - <y>960</y>
1835   - <width>321</width>
1836   - <height>100</height>
1837   - </rect>
1838   - </property>
1839   - <property name="palette">
1840   - <palette>
1841   - <active>
1842   - <colorrole role="WindowText">
1843   - <brush brushstyle="SolidPattern">
1844   - <color alpha="255">
1845   - <red>255</red>
1846   - <green>255</green>
1847   - <blue>255</blue>
1848   - </color>
1849   - </brush>
1850   - </colorrole>
1851   - </active>
1852   - <inactive>
1853   - <colorrole role="WindowText">
1854   - <brush brushstyle="SolidPattern">
1855   - <color alpha="255">
1856   - <red>255</red>
1857   - <green>255</green>
1858   - <blue>255</blue>
1859   - </color>
1860   - </brush>
1861   - </colorrole>
1862   - </inactive>
1863   - <disabled>
1864   - <colorrole role="WindowText">
1865   - <brush brushstyle="SolidPattern">
1866   - <color alpha="255">
1867   - <red>123</red>
1868   - <green>123</green>
1869   - <blue>123</blue>
1870   - </color>
1871   - </brush>
1872   - </colorrole>
1873   - </disabled>
1874   - </palette>
1875   - </property>
1876   - <property name="font">
1877   - <font>
1878   - <family>Roboto</family>
1879   - <pointsize>16</pointsize>
1880   - <weight>75</weight>
1881   - <bold>true</bold>
1882   - </font>
1883   - </property>
1884   - <property name="text">
1885   - <string>10</string>
1886   - </property>
1887   - <property name="alignment">
1888   - <set>Qt::AlignCenter</set>
1889   - </property>
1890   - </widget>
1891   - <widget class="QLabel" name="timeLabel">
1892   - <property name="geometry">
1893   - <rect>
1894   - <x>230</x>
1895   - <y>600</y>
1896   - <width>231</width>
1897   - <height>100</height>
1898   - </rect>
1899   - </property>
1900   - <property name="palette">
1901   - <palette>
1902   - <active>
1903   - <colorrole role="WindowText">
1904   - <brush brushstyle="SolidPattern">
1905   - <color alpha="255">
1906   - <red>255</red>
1907   - <green>255</green>
1908   - <blue>255</blue>
1909   - </color>
1910   - </brush>
1911   - </colorrole>
1912   - </active>
1913   - <inactive>
1914   - <colorrole role="WindowText">
1915   - <brush brushstyle="SolidPattern">
1916   - <color alpha="255">
1917   - <red>255</red>
1918   - <green>255</green>
1919   - <blue>255</blue>
1920   - </color>
1921   - </brush>
1922   - </colorrole>
1923   - </inactive>
1924   - <disabled>
1925   - <colorrole role="WindowText">
1926   - <brush brushstyle="SolidPattern">
1927   - <color alpha="255">
1928   - <red>123</red>
1929   - <green>123</green>
1930   - <blue>123</blue>
1931   - </color>
1932   - </brush>
1933   - </colorrole>
1934   - </disabled>
1935   - </palette>
1936   - </property>
1937   - <property name="font">
1938   - <font>
1939   - <family>Roboto</family>
1940   - <pointsize>16</pointsize>
1941   - <weight>75</weight>
1942   - <bold>true</bold>
1943   - </font>
1944   - </property>
1945   - <property name="text">
1946   - <string>00:00</string>
1947   - </property>
1948   - </widget>
1949   - <widget class="QLabel" name="interTempLabel">
1950   - <property name="geometry">
1951   - <rect>
1952   - <x>560</x>
1953   - <y>600</y>
1954   - <width>231</width>
1955   - <height>100</height>
1956   - </rect>
1957   - </property>
1958   - <property name="palette">
1959   - <palette>
1960   - <active>
1961   - <colorrole role="WindowText">
1962   - <brush brushstyle="SolidPattern">
1963   - <color alpha="255">
1964   - <red>255</red>
1965   - <green>255</green>
1966   - <blue>255</blue>
1967   - </color>
1968   - </brush>
1969   - </colorrole>
1970   - </active>
1971   - <inactive>
1972   - <colorrole role="WindowText">
1973   - <brush brushstyle="SolidPattern">
1974   - <color alpha="255">
1975   - <red>255</red>
1976   - <green>255</green>
1977   - <blue>255</blue>
1978   - </color>
1979   - </brush>
1980   - </colorrole>
1981   - </inactive>
1982   - <disabled>
1983   - <colorrole role="WindowText">
1984   - <brush brushstyle="SolidPattern">
1985   - <color alpha="255">
1986   - <red>123</red>
1987   - <green>123</green>
1988   - <blue>123</blue>
1989   - </color>
1990   - </brush>
1991   - </colorrole>
1992   - </disabled>
1993   - </palette>
1994   - </property>
1995   - <property name="font">
1996   - <font>
1997   - <family>Roboto</family>
1998   - <pointsize>16</pointsize>
1999   - <weight>75</weight>
2000   - <bold>true</bold>
2001   - </font>
2002   - </property>
2003   - <property name="text">
2004   - <string>000/000</string>
2005   - </property>
2006   - </widget>
2007   - <widget class="QLabel" name="doorStepLabel">
2008   - <property name="geometry">
2009   - <rect>
2010   - <x>110</x>
2011   - <y>710</y>
2012   - <width>541</width>
2013   - <height>100</height>
2014   - </rect>
2015   - </property>
2016   - <property name="palette">
2017   - <palette>
2018   - <active>
2019   - <colorrole role="WindowText">
2020   - <brush brushstyle="SolidPattern">
2021   - <color alpha="255">
2022   - <red>255</red>
2023   - <green>255</green>
2024   - <blue>255</blue>
2025   - </color>
2026   - </brush>
2027   - </colorrole>
2028   - </active>
2029   - <inactive>
2030   - <colorrole role="WindowText">
2031   - <brush brushstyle="SolidPattern">
2032   - <color alpha="255">
2033   - <red>255</red>
2034   - <green>255</green>
2035   - <blue>255</blue>
2036   - </color>
2037   - </brush>
2038   - </colorrole>
2039   - </inactive>
2040   - <disabled>
2041   - <colorrole role="WindowText">
2042   - <brush brushstyle="SolidPattern">
2043   - <color alpha="255">
2044   - <red>123</red>
2045   - <green>123</green>
2046   - <blue>123</blue>
2047   - </color>
2048   - </brush>
2049   - </colorrole>
2050   - </disabled>
2051   - </palette>
2052   - </property>
2053   - <property name="font">
2054   - <font>
2055   - <family>Malgun Gothic</family>
2056   - <pointsize>14</pointsize>
2057   - </font>
2058   - </property>
2059   - <property name="text">
2060   - <string>Preheat</string>
2061   - </property>
2062   - </widget>
2063   - <widget class="QPushButton" name="humidityGaugeButton">
2064   - <property name="geometry">
2065   - <rect>
2066   - <x>100</x>
2067   - <y>810</y>
2068   - <width>291</width>
2069   - <height>290</height>
2070   - </rect>
2071   - </property>
2072   - <property name="styleSheet">
2073   - <string notr="true">border: #000000</string>
2074   - </property>
2075   - <property name="text">
2076   - <string/>
2077   - </property>
2078   - </widget>
2079   - <widget class="QPushButton" name="heatGaugeButton">
2080   - <property name="geometry">
2081   - <rect>
2082   - <x>510</x>
2083   - <y>810</y>
2084   - <width>291</width>
2085   - <height>290</height>
2086   - </rect>
2087   - </property>
2088   - <property name="styleSheet">
2089   - <string notr="true">border: #000000</string>
2090   - </property>
2091   - <property name="text">
2092   - <string/>
2093   - </property>
2094   - </widget>
2095   - <widget class="PreheatTempGauge" name="preheatGauge" native="true">
2096   - <property name="geometry">
2097   - <rect>
2098   - <x>460</x>
2099   - <y>1360</y>
2100   - <width>415</width>
2101   - <height>58</height>
2102   - </rect>
2103   - </property>
2104   - </widget>
2105   - <widget class="QLabel" name="preheatIcon">
2106   - <property name="geometry">
2107   - <rect>
2108   - <x>260</x>
2109   - <y>1370</y>
2110   - <width>100</width>
2111   - <height>48</height>
2112   - </rect>
2113   - </property>
2114   - <property name="palette">
2115   - <palette>
2116   - <active>
2117   - <colorrole role="WindowText">
2118   - <brush brushstyle="SolidPattern">
2119   - <color alpha="255">
2120   - <red>255</red>
2121   - <green>255</green>
2122   - <blue>255</blue>
2123   - </color>
2124   - </brush>
2125   - </colorrole>
2126   - </active>
2127   - <inactive>
2128   - <colorrole role="WindowText">
2129   - <brush brushstyle="SolidPattern">
2130   - <color alpha="255">
2131   - <red>255</red>
2132   - <green>255</green>
2133   - <blue>255</blue>
2134   - </color>
2135   - </brush>
2136   - </colorrole>
2137   - </inactive>
2138   - <disabled>
2139   - <colorrole role="WindowText">
2140   - <brush brushstyle="SolidPattern">
2141   - <color alpha="255">
2142   - <red>123</red>
2143   - <green>123</green>
2144   - <blue>123</blue>
2145   - </color>
2146   - </brush>
2147   - </colorrole>
2148   - </disabled>
2149   - </palette>
2150   - </property>
2151   - <property name="font">
2152   - <font>
2153   - <family>Malgun Gothic</family>
2154   - <pointsize>14</pointsize>
2155   - </font>
2156   - </property>
2157   - <property name="text">
2158   - <string/>
2159   - </property>
2160   - <property name="pixmap">
2161   - <pixmap resource="resources.qrc">:/images/cook_step_type/sys_icon_05.png</pixmap>
2162   - </property>
2163   - <property name="alignment">
2164   - <set>Qt::AlignCenter</set>
2165   - </property>
2166   - </widget>
2167   - <widget class="QLabel" name="preheatLabel">
2168   - <property name="geometry">
2169   - <rect>
2170   - <x>330</x>
2171   - <y>1370</y>
2172   - <width>131</width>
2173   - <height>48</height>
2174   - </rect>
2175   - </property>
2176   - <property name="palette">
2177   - <palette>
2178   - <active>
2179   - <colorrole role="WindowText">
2180   - <brush brushstyle="SolidPattern">
2181   - <color alpha="255">
2182   - <red>255</red>
2183   - <green>255</green>
2184   - <blue>255</blue>
2185   - </color>
2186   - </brush>
2187   - </colorrole>
2188   - </active>
2189   - <inactive>
2190   - <colorrole role="WindowText">
2191   - <brush brushstyle="SolidPattern">
2192   - <color alpha="255">
2193   - <red>255</red>
2194   - <green>255</green>
2195   - <blue>255</blue>
2196   - </color>
2197   - </brush>
2198   - </colorrole>
2199   - </inactive>
2200   - <disabled>
2201   - <colorrole role="WindowText">
2202   - <brush brushstyle="SolidPattern">
2203   - <color alpha="255">
2204   - <red>123</red>
2205   - <green>123</green>
2206   - <blue>123</blue>
2207   - </color>
2208   - </brush>
2209   - </colorrole>
2210   - </disabled>
2211   - </palette>
2212   - </property>
2213   - <property name="font">
2214   - <font>
2215   - <family>Malgun Gothic</family>
2216   - <pointsize>14</pointsize>
2217   - </font>
2218   - </property>
2219   - <property name="text">
2220   - <string>예열 중</string>
2221   - </property>
2222   - <property name="alignment">
2223   - <set>Qt::AlignCenter</set>
2224   - </property>
2225   - </widget>
2226   - <widget class="AnimatedImageBox" name="closeDoorAnimation">
2227   - <property name="geometry">
2228   - <rect>
2229   - <x>40</x>
2230   - <y>1220</y>
2231   - <width>251</width>
2232   - <height>201</height>
2233   - </rect>
2234   - </property>
2235   - <property name="text">
2236   - <string/>
2237   - </property>
2238   - <property name="pixmap">
2239   - <pixmap>:/images/images/auto/ani_04.png</pixmap>
2240   - </property>
2241   - </widget>
2242   - <widget class="QLabel" name="closeDoorArrow">
2243   - <property name="geometry">
2244   - <rect>
2245   - <x>80</x>
2246   - <y>1320</y>
2247   - <width>85</width>
2248   - <height>24</height>
2249   - </rect>
2250   - </property>
2251   - <property name="text">
2252   - <string/>
2253   - </property>
2254   - <property name="pixmap">
2255   - <pixmap resource="resources.qrc">:/images/animation/close_door_arrow.png</pixmap>
2256   - </property>
2257   - </widget>
2258   - <widget class="QLabel" name="openDoorArrow">
2259   - <property name="geometry">
2260   - <rect>
2261   - <x>80</x>
2262   - <y>1320</y>
2263   - <width>85</width>
2264   - <height>24</height>
2265   - </rect>
2266   - </property>
2267   - <property name="text">
2268   - <string/>
2269   - </property>
2270   - <property name="pixmap">
2271   - <pixmap resource="resources.qrc">:/images/animation/open_door_arrow.png</pixmap>
2272   - </property>
2273   - </widget>
  85 + <widget class="QPushButton" name="washButton">
  86 + <property name="geometry">
  87 + <rect>
  88 + <x>514</x>
  89 + <y>26</y>
  90 + <width>97</width>
  91 + <height>97</height>
  92 + </rect>
  93 + </property>
  94 + <property name="sizePolicy">
  95 + <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
  96 + <horstretch>0</horstretch>
  97 + <verstretch>0</verstretch>
  98 + </sizepolicy>
  99 + </property>
  100 + <property name="styleSheet">
  101 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/wash.png); }
  102 +QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); }</string>
  103 + </property>
  104 + <property name="text">
  105 + <string/>
  106 + </property>
2274 107 </widget>
2275   - <widget class="QWidget" name="selectionPage">
  108 + <widget class="QPushButton" name="configButton">
  109 + <property name="geometry">
  110 + <rect>
  111 + <x>288</x>
  112 + <y>26</y>
  113 + <width>97</width>
  114 + <height>97</height>
  115 + </rect>
  116 + </property>
  117 + <property name="sizePolicy">
  118 + <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
  119 + <horstretch>0</horstretch>
  120 + <verstretch>0</verstretch>
  121 + </sizepolicy>
  122 + </property>
2276 123 <property name="styleSheet">
2277   - <string notr="true">QWidget#selectionPage {
2278   -background-image: url(:/images/images/auto/ba_ground_set);
2279   -}</string>
  124 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/config.png); }
  125 +QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</string>
  126 + </property>
  127 + <property name="text">
  128 + <string/>
  129 + </property>
  130 + </widget>
  131 + <widget class="QPushButton" name="helpButton">
  132 + <property name="geometry">
  133 + <rect>
  134 + <x>627</x>
  135 + <y>26</y>
  136 + <width>97</width>
  137 + <height>97</height>
  138 + </rect>
  139 + </property>
  140 + <property name="sizePolicy">
  141 + <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
  142 + <horstretch>0</horstretch>
  143 + <verstretch>0</verstretch>
  144 + </sizepolicy>
  145 + </property>
  146 + <property name="styleSheet">
  147 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/help.png); }
  148 +QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</string>
  149 + </property>
  150 + <property name="text">
  151 + <string/>
2280 152 </property>
2281 153 </widget>
  154 + <widget class="QPushButton" name="favoritesButton">
  155 + <property name="geometry">
  156 + <rect>
  157 + <x>401</x>
  158 + <y>26</y>
  159 + <width>97</width>
  160 + <height>97</height>
  161 + </rect>
  162 + </property>
  163 + <property name="sizePolicy">
  164 + <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
  165 + <horstretch>0</horstretch>
  166 + <verstretch>0</verstretch>
  167 + </sizepolicy>
  168 + </property>
  169 + <property name="styleSheet">
  170 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/favorites.png); }
  171 +QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); }</string>
  172 + </property>
  173 + <property name="text">
  174 + <string/>
  175 + </property>
  176 + </widget>
  177 + </widget>
  178 + <widget class="QPushButton" name="configCookButton">
  179 + <property name="geometry">
  180 + <rect>
  181 + <x>720</x>
  182 + <y>480</y>
  183 + <width>152</width>
  184 + <height>70</height>
  185 + </rect>
  186 + </property>
  187 + <property name="styleSheet">
  188 + <string notr="true">QPushButton { border-image: url(:/images/button/152.png); }
  189 +QPushButton::pressed { border-image: url(:/images/button/152_ov.png); }</string>
  190 + </property>
  191 + <property name="text">
  192 + <string/>
  193 + </property>
  194 + <property name="icon">
  195 + <iconset resource="resources.qrc">
  196 + <normaloff>:/images/auto_button/btn_icon_03.png</normaloff>:/images/auto_button/btn_icon_03.png</iconset>
  197 + </property>
  198 + <property name="iconSize">
  199 + <size>
  200 + <width>38</width>
  201 + <height>37</height>
  202 + </size>
  203 + </property>
  204 + </widget>
  205 + <widget class="QLabel" name="doorStepLabel">
  206 + <property name="geometry">
  207 + <rect>
  208 + <x>110</x>
  209 + <y>710</y>
  210 + <width>541</width>
  211 + <height>100</height>
  212 + </rect>
  213 + </property>
  214 + <property name="palette">
  215 + <palette>
  216 + <active>
  217 + <colorrole role="WindowText">
  218 + <brush brushstyle="SolidPattern">
  219 + <color alpha="255">
  220 + <red>255</red>
  221 + <green>255</green>
  222 + <blue>255</blue>
  223 + </color>
  224 + </brush>
  225 + </colorrole>
  226 + </active>
  227 + <inactive>
  228 + <colorrole role="WindowText">
  229 + <brush brushstyle="SolidPattern">
  230 + <color alpha="255">
  231 + <red>255</red>
  232 + <green>255</green>
  233 + <blue>255</blue>
  234 + </color>
  235 + </brush>
  236 + </colorrole>
  237 + </inactive>
  238 + <disabled>
  239 + <colorrole role="WindowText">
  240 + <brush brushstyle="SolidPattern">
  241 + <color alpha="255">
  242 + <red>123</red>
  243 + <green>123</green>
  244 + <blue>123</blue>
  245 + </color>
  246 + </brush>
  247 + </colorrole>
  248 + </disabled>
  249 + </palette>
  250 + </property>
  251 + <property name="font">
  252 + <font>
  253 + <family>Malgun Gothic</family>
  254 + <pointsize>14</pointsize>
  255 + </font>
  256 + </property>
  257 + <property name="text">
  258 + <string>Preheat</string>
  259 + </property>
  260 + </widget>
  261 + <widget class="QPushButton" name="autoCookButton">
  262 + <property name="geometry">
  263 + <rect>
  264 + <x>559</x>
  265 + <y>480</y>
  266 + <width>152</width>
  267 + <height>70</height>
  268 + </rect>
  269 + </property>
  270 + <property name="styleSheet">
  271 + <string notr="true">QPushButton { border-image: url(:/images/button/152.png); }
  272 +QPushButton::pressed { border-image: url(:/images/button/152_ov.png); }</string>
  273 + </property>
  274 + <property name="text">
  275 + <string/>
  276 + </property>
  277 + <property name="icon">
  278 + <iconset resource="resources.qrc">
  279 + <normaloff>:/images/auto_button/btn_icon_02.png</normaloff>:/images/auto_button/btn_icon_02.png</iconset>
  280 + </property>
  281 + <property name="iconSize">
  282 + <size>
  283 + <width>40</width>
  284 + <height>51</height>
  285 + </size>
  286 + </property>
  287 + </widget>
  288 + <widget class="QLabel" name="cookModeIcon">
  289 + <property name="geometry">
  290 + <rect>
  291 + <x>80</x>
  292 + <y>1020</y>
  293 + <width>741</width>
  294 + <height>81</height>
  295 + </rect>
  296 + </property>
  297 + <property name="text">
  298 + <string/>
  299 + </property>
  300 + <property name="pixmap">
  301 + <pixmap>:/images/images/auto/window_icon_06.png</pixmap>
  302 + </property>
  303 + <property name="alignment">
  304 + <set>Qt::AlignCenter</set>
  305 + </property>
  306 + </widget>
  307 + <widget class="HumidityCircularGauge" name="humidityGauge" native="true">
  308 + <property name="geometry">
  309 + <rect>
  310 + <x>100</x>
  311 + <y>810</y>
  312 + <width>291</width>
  313 + <height>290</height>
  314 + </rect>
  315 + </property>
  316 + <property name="palette">
  317 + <palette>
  318 + <active>
  319 + <colorrole role="WindowText">
  320 + <brush brushstyle="SolidPattern">
  321 + <color alpha="255">
  322 + <red>255</red>
  323 + <green>255</green>
  324 + <blue>255</blue>
  325 + </color>
  326 + </brush>
  327 + </colorrole>
  328 + </active>
  329 + <inactive>
  330 + <colorrole role="WindowText">
  331 + <brush brushstyle="SolidPattern">
  332 + <color alpha="255">
  333 + <red>255</red>
  334 + <green>255</green>
  335 + <blue>255</blue>
  336 + </color>
  337 + </brush>
  338 + </colorrole>
  339 + </inactive>
  340 + <disabled>
  341 + <colorrole role="WindowText">
  342 + <brush brushstyle="SolidPattern">
  343 + <color alpha="255">
  344 + <red>123</red>
  345 + <green>123</green>
  346 + <blue>123</blue>
  347 + </color>
  348 + </brush>
  349 + </colorrole>
  350 + </disabled>
  351 + </palette>
  352 + </property>
  353 + </widget>
  354 + <widget class="QLabel" name="humidityLabel">
  355 + <property name="geometry">
  356 + <rect>
  357 + <x>90</x>
  358 + <y>960</y>
  359 + <width>321</width>
  360 + <height>100</height>
  361 + </rect>
  362 + </property>
  363 + <property name="palette">
  364 + <palette>
  365 + <active>
  366 + <colorrole role="WindowText">
  367 + <brush brushstyle="SolidPattern">
  368 + <color alpha="255">
  369 + <red>255</red>
  370 + <green>255</green>
  371 + <blue>255</blue>
  372 + </color>
  373 + </brush>
  374 + </colorrole>
  375 + </active>
  376 + <inactive>
  377 + <colorrole role="WindowText">
  378 + <brush brushstyle="SolidPattern">
  379 + <color alpha="255">
  380 + <red>255</red>
  381 + <green>255</green>
  382 + <blue>255</blue>
  383 + </color>
  384 + </brush>
  385 + </colorrole>
  386 + </inactive>
  387 + <disabled>
  388 + <colorrole role="WindowText">
  389 + <brush brushstyle="SolidPattern">
  390 + <color alpha="255">
  391 + <red>123</red>
  392 + <green>123</green>
  393 + <blue>123</blue>
  394 + </color>
  395 + </brush>
  396 + </colorrole>
  397 + </disabled>
  398 + </palette>
  399 + </property>
  400 + <property name="font">
  401 + <font>
  402 + <family>Roboto</family>
  403 + <pointsize>16</pointsize>
  404 + <weight>75</weight>
  405 + <bold>true</bold>
  406 + </font>
  407 + </property>
  408 + <property name="text">
  409 + <string>10</string>
  410 + </property>
  411 + <property name="alignment">
  412 + <set>Qt::AlignCenter</set>
  413 + </property>
  414 + </widget>
  415 + <widget class="QLabel" name="cookStepLabel">
  416 + <property name="geometry">
  417 + <rect>
  418 + <x>180</x>
  419 + <y>710</y>
  420 + <width>541</width>
  421 + <height>100</height>
  422 + </rect>
  423 + </property>
  424 + <property name="palette">
  425 + <palette>
  426 + <active>
  427 + <colorrole role="WindowText">
  428 + <brush brushstyle="SolidPattern">
  429 + <color alpha="255">
  430 + <red>255</red>
  431 + <green>255</green>
  432 + <blue>255</blue>
  433 + </color>
  434 + </brush>
  435 + </colorrole>
  436 + </active>
  437 + <inactive>
  438 + <colorrole role="WindowText">
  439 + <brush brushstyle="SolidPattern">
  440 + <color alpha="255">
  441 + <red>255</red>
  442 + <green>255</green>
  443 + <blue>255</blue>
  444 + </color>
  445 + </brush>
  446 + </colorrole>
  447 + </inactive>
  448 + <disabled>
  449 + <colorrole role="WindowText">
  450 + <brush brushstyle="SolidPattern">
  451 + <color alpha="255">
  452 + <red>123</red>
  453 + <green>123</green>
  454 + <blue>123</blue>
  455 + </color>
  456 + </brush>
  457 + </colorrole>
  458 + </disabled>
  459 + </palette>
  460 + </property>
  461 + <property name="font">
  462 + <font>
  463 + <family>Malgun Gothic</family>
  464 + <pointsize>14</pointsize>
  465 + </font>
  466 + </property>
  467 + <property name="text">
  468 + <string>Preheat</string>
  469 + </property>
2282 470 </widget>
2283   - <widget class="QWidget" name="bottomBar" native="true">
  471 + <widget class="QLabel" name="heatLabel">
  472 + <property name="geometry">
  473 + <rect>
  474 + <x>490</x>
  475 + <y>960</y>
  476 + <width>321</width>
  477 + <height>100</height>
  478 + </rect>
  479 + </property>
  480 + <property name="palette">
  481 + <palette>
  482 + <active>
  483 + <colorrole role="WindowText">
  484 + <brush brushstyle="SolidPattern">
  485 + <color alpha="255">
  486 + <red>255</red>
  487 + <green>255</green>
  488 + <blue>255</blue>
  489 + </color>
  490 + </brush>
  491 + </colorrole>
  492 + </active>
  493 + <inactive>
  494 + <colorrole role="WindowText">
  495 + <brush brushstyle="SolidPattern">
  496 + <color alpha="255">
  497 + <red>255</red>
  498 + <green>255</green>
  499 + <blue>255</blue>
  500 + </color>
  501 + </brush>
  502 + </colorrole>
  503 + </inactive>
  504 + <disabled>
  505 + <colorrole role="WindowText">
  506 + <brush brushstyle="SolidPattern">
  507 + <color alpha="255">
  508 + <red>123</red>
  509 + <green>123</green>
  510 + <blue>123</blue>
  511 + </color>
  512 + </brush>
  513 + </colorrole>
  514 + </disabled>
  515 + </palette>
  516 + </property>
  517 + <property name="font">
  518 + <font>
  519 + <family>Roboto</family>
  520 + <pointsize>16</pointsize>
  521 + <weight>75</weight>
  522 + <bold>true</bold>
  523 + </font>
  524 + </property>
  525 + <property name="text">
  526 + <string>10</string>
  527 + </property>
  528 + <property name="alignment">
  529 + <set>Qt::AlignCenter</set>
  530 + </property>
  531 + </widget>
  532 + <widget class="QPushButton" name="heatGaugeButton">
  533 + <property name="geometry">
  534 + <rect>
  535 + <x>510</x>
  536 + <y>810</y>
  537 + <width>291</width>
  538 + <height>290</height>
  539 + </rect>
  540 + </property>
  541 + <property name="styleSheet">
  542 + <string notr="true">border: #000000</string>
  543 + </property>
  544 + <property name="text">
  545 + <string/>
  546 + </property>
  547 + </widget>
  548 + <widget class="QLabel" name="cookTypeIcon">
2284 549 <property name="geometry">
2285 550 <rect>
2286 551 <x>0</x>
2287   - <y>1450</y>
2288   - <width>900</width>
  552 + <y>430</y>
  553 + <width>250</width>
2289 554 <height>150</height>
2290 555 </rect>
2291 556 </property>
2292   - <widget class="QPushButton" name="backButton">
  557 + <property name="text">
  558 + <string/>
  559 + </property>
  560 + <property name="pixmap">
  561 + <pixmap>:/images/images/auto/005_auto_icon_01_ov.png</pixmap>
  562 + </property>
  563 + <property name="alignment">
  564 + <set>Qt::AlignCenter</set>
  565 + </property>
  566 + </widget>
  567 + <widget class="QLabel" name="interTempLabel">
  568 + <property name="geometry">
  569 + <rect>
  570 + <x>560</x>
  571 + <y>600</y>
  572 + <width>231</width>
  573 + <height>100</height>
  574 + </rect>
  575 + </property>
  576 + <property name="palette">
  577 + <palette>
  578 + <active>
  579 + <colorrole role="WindowText">
  580 + <brush brushstyle="SolidPattern">
  581 + <color alpha="255">
  582 + <red>255</red>
  583 + <green>255</green>
  584 + <blue>255</blue>
  585 + </color>
  586 + </brush>
  587 + </colorrole>
  588 + </active>
  589 + <inactive>
  590 + <colorrole role="WindowText">
  591 + <brush brushstyle="SolidPattern">
  592 + <color alpha="255">
  593 + <red>255</red>
  594 + <green>255</green>
  595 + <blue>255</blue>
  596 + </color>
  597 + </brush>
  598 + </colorrole>
  599 + </inactive>
  600 + <disabled>
  601 + <colorrole role="WindowText">
  602 + <brush brushstyle="SolidPattern">
  603 + <color alpha="255">
  604 + <red>123</red>
  605 + <green>123</green>
  606 + <blue>123</blue>
  607 + </color>
  608 + </brush>
  609 + </colorrole>
  610 + </disabled>
  611 + </palette>
  612 + </property>
  613 + <property name="font">
  614 + <font>
  615 + <family>Roboto</family>
  616 + <pointsize>16</pointsize>
  617 + <weight>75</weight>
  618 + <bold>true</bold>
  619 + </font>
  620 + </property>
  621 + <property name="text">
  622 + <string>000/000</string>
  623 + </property>
  624 + </widget>
  625 + <widget class="QLabel" name="closeDoorArrow">
  626 + <property name="geometry">
  627 + <rect>
  628 + <x>80</x>
  629 + <y>1320</y>
  630 + <width>85</width>
  631 + <height>24</height>
  632 + </rect>
  633 + </property>
  634 + <property name="text">
  635 + <string/>
  636 + </property>
  637 + <property name="pixmap">
  638 + <pixmap resource="resources.qrc">:/images/animation/close_door_arrow.png</pixmap>
  639 + </property>
  640 + </widget>
  641 + <widget class="QLabel" name="timeLabel">
  642 + <property name="geometry">
  643 + <rect>
  644 + <x>230</x>
  645 + <y>600</y>
  646 + <width>231</width>
  647 + <height>100</height>
  648 + </rect>
  649 + </property>
  650 + <property name="palette">
  651 + <palette>
  652 + <active>
  653 + <colorrole role="WindowText">
  654 + <brush brushstyle="SolidPattern">
  655 + <color alpha="255">
  656 + <red>255</red>
  657 + <green>255</green>
  658 + <blue>255</blue>
  659 + </color>
  660 + </brush>
  661 + </colorrole>
  662 + </active>
  663 + <inactive>
  664 + <colorrole role="WindowText">
  665 + <brush brushstyle="SolidPattern">
  666 + <color alpha="255">
  667 + <red>255</red>
  668 + <green>255</green>
  669 + <blue>255</blue>
  670 + </color>
  671 + </brush>
  672 + </colorrole>
  673 + </inactive>
  674 + <disabled>
  675 + <colorrole role="WindowText">
  676 + <brush brushstyle="SolidPattern">
  677 + <color alpha="255">
  678 + <red>123</red>
  679 + <green>123</green>
  680 + <blue>123</blue>
  681 + </color>
  682 + </brush>
  683 + </colorrole>
  684 + </disabled>
  685 + </palette>
  686 + </property>
  687 + <property name="font">
  688 + <font>
  689 + <family>Roboto</family>
  690 + <pointsize>16</pointsize>
  691 + <weight>75</weight>
  692 + <bold>true</bold>
  693 + </font>
  694 + </property>
  695 + <property name="text">
  696 + <string>00:00</string>
  697 + </property>
  698 + </widget>
  699 + <widget class="QLabel" name="preheatIcon">
  700 + <property name="geometry">
  701 + <rect>
  702 + <x>260</x>
  703 + <y>1370</y>
  704 + <width>100</width>
  705 + <height>48</height>
  706 + </rect>
  707 + </property>
  708 + <property name="palette">
  709 + <palette>
  710 + <active>
  711 + <colorrole role="WindowText">
  712 + <brush brushstyle="SolidPattern">
  713 + <color alpha="255">
  714 + <red>255</red>
  715 + <green>255</green>
  716 + <blue>255</blue>
  717 + </color>
  718 + </brush>
  719 + </colorrole>
  720 + </active>
  721 + <inactive>
  722 + <colorrole role="WindowText">
  723 + <brush brushstyle="SolidPattern">
  724 + <color alpha="255">
  725 + <red>255</red>
  726 + <green>255</green>
  727 + <blue>255</blue>
  728 + </color>
  729 + </brush>
  730 + </colorrole>
  731 + </inactive>
  732 + <disabled>
  733 + <colorrole role="WindowText">
  734 + <brush brushstyle="SolidPattern">
  735 + <color alpha="255">
  736 + <red>123</red>
  737 + <green>123</green>
  738 + <blue>123</blue>
  739 + </color>
  740 + </brush>
  741 + </colorrole>
  742 + </disabled>
  743 + </palette>
  744 + </property>
  745 + <property name="font">
  746 + <font>
  747 + <family>Malgun Gothic</family>
  748 + <pointsize>14</pointsize>
  749 + </font>
  750 + </property>
  751 + <property name="text">
  752 + <string/>
  753 + </property>
  754 + <property name="pixmap">
  755 + <pixmap resource="resources.qrc">:/images/cook_step_type/sys_icon_05.png</pixmap>
  756 + </property>
  757 + <property name="alignment">
  758 + <set>Qt::AlignCenter</set>
  759 + </property>
  760 + </widget>
  761 + <widget class="QPushButton" name="infoButton">
  762 + <property name="geometry">
  763 + <rect>
  764 + <x>730</x>
  765 + <y>730</y>
  766 + <width>63</width>
  767 + <height>63</height>
  768 + </rect>
  769 + </property>
  770 + <property name="styleSheet">
  771 + <string notr="true">QPushButton { border-image: url(:/images/symbol/info.png); }
  772 +QPushButton::pressed { border-image: url(:/images/symbol/info_ov.png); }</string>
  773 + </property>
  774 + <property name="text">
  775 + <string/>
  776 + </property>
  777 + </widget>
  778 + <widget class="QPushButton" name="humidityGaugeButton">
  779 + <property name="geometry">
  780 + <rect>
  781 + <x>100</x>
  782 + <y>810</y>
  783 + <width>291</width>
  784 + <height>290</height>
  785 + </rect>
  786 + </property>
  787 + <property name="styleSheet">
  788 + <string notr="true">border: #000000</string>
  789 + </property>
  790 + <property name="text">
  791 + <string/>
  792 + </property>
  793 + </widget>
  794 + <widget class="QPushButton" name="showNextStepButton">
  795 + <property name="geometry">
  796 + <rect>
  797 + <x>830</x>
  798 + <y>715</y>
  799 + <width>60</width>
  800 + <height>400</height>
  801 + </rect>
  802 + </property>
  803 + <property name="styleSheet">
  804 + <string notr="true">QPushButton { background-image: url(:/images/auto_button/next_step.png); }
  805 +QPushButton::pressed { background-image: url(:/images/auto_button/next_step_ov.png); }</string>
  806 + </property>
  807 + <property name="text">
  808 + <string/>
  809 + </property>
  810 + </widget>
  811 + <widget class="QLabel" name="label_4">
  812 + <property name="geometry">
  813 + <rect>
  814 + <x>460</x>
  815 + <y>600</y>
  816 + <width>100</width>
  817 + <height>100</height>
  818 + </rect>
  819 + </property>
  820 + <property name="text">
  821 + <string/>
  822 + </property>
  823 + <property name="pixmap">
  824 + <pixmap resource="resources.qrc">:/images/symbol/core_temp.png</pixmap>
  825 + </property>
  826 + <property name="alignment">
  827 + <set>Qt::AlignCenter</set>
  828 + </property>
  829 + </widget>
  830 + <widget class="QLabel" name="cookStepIcon">
  831 + <property name="geometry">
  832 + <rect>
  833 + <x>80</x>
  834 + <y>710</y>
  835 + <width>100</width>
  836 + <height>100</height>
  837 + </rect>
  838 + </property>
  839 + <property name="palette">
  840 + <palette>
  841 + <active>
  842 + <colorrole role="WindowText">
  843 + <brush brushstyle="SolidPattern">
  844 + <color alpha="255">
  845 + <red>255</red>
  846 + <green>255</green>
  847 + <blue>255</blue>
  848 + </color>
  849 + </brush>
  850 + </colorrole>
  851 + </active>
  852 + <inactive>
  853 + <colorrole role="WindowText">
  854 + <brush brushstyle="SolidPattern">
  855 + <color alpha="255">
  856 + <red>255</red>
  857 + <green>255</green>
  858 + <blue>255</blue>
  859 + </color>
  860 + </brush>
  861 + </colorrole>
  862 + </inactive>
  863 + <disabled>
  864 + <colorrole role="WindowText">
  865 + <brush brushstyle="SolidPattern">
  866 + <color alpha="255">
  867 + <red>123</red>
  868 + <green>123</green>
  869 + <blue>123</blue>
  870 + </color>
  871 + </brush>
  872 + </colorrole>
  873 + </disabled>
  874 + </palette>
  875 + </property>
  876 + <property name="font">
  877 + <font>
  878 + <family>Malgun Gothic</family>
  879 + <pointsize>14</pointsize>
  880 + </font>
  881 + </property>
  882 + <property name="text">
  883 + <string/>
  884 + </property>
  885 + <property name="pixmap">
  886 + <pixmap resource="resources.qrc">:/images/cook_step_type/sys_icon_05.png</pixmap>
  887 + </property>
  888 + <property name="alignment">
  889 + <set>Qt::AlignCenter</set>
  890 + </property>
  891 + </widget>
  892 + <widget class="QLabel" name="preheatLabel">
  893 + <property name="geometry">
  894 + <rect>
  895 + <x>330</x>
  896 + <y>1370</y>
  897 + <width>131</width>
  898 + <height>48</height>
  899 + </rect>
  900 + </property>
  901 + <property name="palette">
  902 + <palette>
  903 + <active>
  904 + <colorrole role="WindowText">
  905 + <brush brushstyle="SolidPattern">
  906 + <color alpha="255">
  907 + <red>255</red>
  908 + <green>255</green>
  909 + <blue>255</blue>
  910 + </color>
  911 + </brush>
  912 + </colorrole>
  913 + </active>
  914 + <inactive>
  915 + <colorrole role="WindowText">
  916 + <brush brushstyle="SolidPattern">
  917 + <color alpha="255">
  918 + <red>255</red>
  919 + <green>255</green>
  920 + <blue>255</blue>
  921 + </color>
  922 + </brush>
  923 + </colorrole>
  924 + </inactive>
  925 + <disabled>
  926 + <colorrole role="WindowText">
  927 + <brush brushstyle="SolidPattern">
  928 + <color alpha="255">
  929 + <red>123</red>
  930 + <green>123</green>
  931 + <blue>123</blue>
  932 + </color>
  933 + </brush>
  934 + </colorrole>
  935 + </disabled>
  936 + </palette>
  937 + </property>
  938 + <property name="font">
  939 + <font>
  940 + <family>Malgun Gothic</family>
  941 + <pointsize>14</pointsize>
  942 + </font>
  943 + </property>
  944 + <property name="text">
  945 + <string>예열 중</string>
  946 + </property>
  947 + <property name="alignment">
  948 + <set>Qt::AlignCenter</set>
  949 + </property>
  950 + </widget>
  951 + <widget class="QPushButton" name="showPrevStepButton">
  952 + <property name="geometry">
  953 + <rect>
  954 + <x>10</x>
  955 + <y>715</y>
  956 + <width>60</width>
  957 + <height>400</height>
  958 + </rect>
  959 + </property>
  960 + <property name="styleSheet">
  961 + <string notr="true">QPushButton { background-image: url(:/images/auto_button/prev_step.png); }
  962 +QPushButton::pressed { background-image: url(:/images/auto_button/prev_step_ov.png); }</string>
  963 + </property>
  964 + <property name="text">
  965 + <string/>
  966 + </property>
  967 + </widget>
  968 + <widget class="AnimatedImageBox" name="openDoorAnimation">
  969 + <property name="geometry">
  970 + <rect>
  971 + <x>40</x>
  972 + <y>1220</y>
  973 + <width>251</width>
  974 + <height>201</height>
  975 + </rect>
  976 + </property>
  977 + <property name="text">
  978 + <string/>
  979 + </property>
  980 + <property name="pixmap">
  981 + <pixmap resource="resources.qrc">:/images/animation/door_09.png</pixmap>
  982 + </property>
  983 + </widget>
  984 + <widget class="AnimatedImageBox" name="cookStepAnimation">
  985 + <property name="geometry">
  986 + <rect>
  987 + <x>340</x>
  988 + <y>800</y>
  989 + <width>231</width>
  990 + <height>281</height>
  991 + </rect>
  992 + </property>
  993 + <property name="text">
  994 + <string/>
  995 + </property>
  996 + </widget>
  997 + <widget class="QPushButton" name="selectCookButton">
  998 + <property name="geometry">
  999 + <rect>
  1000 + <x>259</x>
  1001 + <y>480</y>
  1002 + <width>288</width>
  1003 + <height>70</height>
  1004 + </rect>
  1005 + </property>
  1006 + <property name="font">
  1007 + <font>
  1008 + <family>Roboto</family>
  1009 + <pointsize>10</pointsize>
  1010 + <weight>75</weight>
  1011 + <bold>true</bold>
  1012 + </font>
  1013 + </property>
  1014 + <property name="styleSheet">
  1015 + <string notr="true">QPushButton { border-image: url(:/images/button/288.png); }
  1016 +QPushButton::pressed { border-image: url(:/images/button/288_ov.png); }</string>
  1017 + </property>
  1018 + <property name="text">
  1019 + <string/>
  1020 + </property>
  1021 + </widget>
  1022 + <widget class="QLabel" name="label_3">
  1023 + <property name="geometry">
  1024 + <rect>
  1025 + <x>130</x>
  1026 + <y>600</y>
  1027 + <width>100</width>
  1028 + <height>100</height>
  1029 + </rect>
  1030 + </property>
  1031 + <property name="text">
  1032 + <string/>
  1033 + </property>
  1034 + <property name="pixmap">
  1035 + <pixmap resource="resources.qrc">:/images/symbol/time.png</pixmap>
  1036 + </property>
  1037 + <property name="alignment">
  1038 + <set>Qt::AlignCenter</set>
  1039 + </property>
  1040 + </widget>
  1041 + <widget class="HeatCircularGauge" name="heatGauge" native="true">
  1042 + <property name="geometry">
  1043 + <rect>
  1044 + <x>510</x>
  1045 + <y>810</y>
  1046 + <width>291</width>
  1047 + <height>290</height>
  1048 + </rect>
  1049 + </property>
  1050 + <property name="palette">
  1051 + <palette>
  1052 + <active>
  1053 + <colorrole role="WindowText">
  1054 + <brush brushstyle="SolidPattern">
  1055 + <color alpha="255">
  1056 + <red>255</red>
  1057 + <green>255</green>
  1058 + <blue>255</blue>
  1059 + </color>
  1060 + </brush>
  1061 + </colorrole>
  1062 + </active>
  1063 + <inactive>
  1064 + <colorrole role="WindowText">
  1065 + <brush brushstyle="SolidPattern">
  1066 + <color alpha="255">
  1067 + <red>255</red>
  1068 + <green>255</green>
  1069 + <blue>255</blue>
  1070 + </color>
  1071 + </brush>
  1072 + </colorrole>
  1073 + </inactive>
  1074 + <disabled>
  1075 + <colorrole role="WindowText">
  1076 + <brush brushstyle="SolidPattern">
  1077 + <color alpha="255">
  1078 + <red>123</red>
  1079 + <green>123</green>
  1080 + <blue>123</blue>
  1081 + </color>
  1082 + </brush>
  1083 + </colorrole>
  1084 + </disabled>
  1085 + </palette>
  1086 + </property>
  1087 + </widget>
  1088 + <widget class="PreheatTempGauge" name="preheatGauge" native="true">
  1089 + <property name="geometry">
  1090 + <rect>
  1091 + <x>460</x>
  1092 + <y>1360</y>
  1093 + <width>415</width>
  1094 + <height>58</height>
  1095 + </rect>
  1096 + </property>
  1097 + </widget>
  1098 + <widget class="QLabel" name="openDoorArrow">
  1099 + <property name="geometry">
  1100 + <rect>
  1101 + <x>80</x>
  1102 + <y>1320</y>
  1103 + <width>85</width>
  1104 + <height>24</height>
  1105 + </rect>
  1106 + </property>
  1107 + <property name="text">
  1108 + <string/>
  1109 + </property>
  1110 + <property name="pixmap">
  1111 + <pixmap resource="resources.qrc">:/images/animation/open_door_arrow.png</pixmap>
  1112 + </property>
  1113 + </widget>
  1114 + <widget class="AnimatedImageBox" name="closeDoorAnimation">
  1115 + <property name="geometry">
  1116 + <rect>
  1117 + <x>40</x>
  1118 + <y>1220</y>
  1119 + <width>251</width>
  1120 + <height>201</height>
  1121 + </rect>
  1122 + </property>
  1123 + <property name="text">
  1124 + <string/>
  1125 + </property>
  1126 + <property name="pixmap">
  1127 + <pixmap resource="resources.qrc">:/images/animation/door_09.png</pixmap>
  1128 + </property>
  1129 + </widget>
  1130 + <widget class="QWidget" name="processContainer" native="true">
  1131 + <property name="geometry">
  1132 + <rect>
  1133 + <x>260</x>
  1134 + <y>1200</y>
  1135 + <width>640</width>
  1136 + <height>250</height>
  1137 + </rect>
  1138 + </property>
  1139 + <widget class="QLabel" name="processTitleLabel">
2293 1140 <property name="geometry">
2294 1141 <rect>
2295   - <x>175</x>
2296   - <y>26</y>
2297   - <width>97</width>
2298   - <height>97</height>
  1142 + <x>0</x>
  1143 + <y>0</y>
  1144 + <width>640</width>
  1145 + <height>50</height>
2299 1146 </rect>
2300 1147 </property>
2301   - <property name="sizePolicy">
2302   - <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
2303   - <horstretch>0</horstretch>
2304   - <verstretch>0</verstretch>
2305   - </sizepolicy>
  1148 + <property name="palette">
  1149 + <palette>
  1150 + <active>
  1151 + <colorrole role="WindowText">
  1152 + <brush brushstyle="SolidPattern">
  1153 + <color alpha="255">
  1154 + <red>255</red>
  1155 + <green>255</green>
  1156 + <blue>255</blue>
  1157 + </color>
  1158 + </brush>
  1159 + </colorrole>
  1160 + </active>
  1161 + <inactive>
  1162 + <colorrole role="WindowText">
  1163 + <brush brushstyle="SolidPattern">
  1164 + <color alpha="255">
  1165 + <red>255</red>
  1166 + <green>255</green>
  1167 + <blue>255</blue>
  1168 + </color>
  1169 + </brush>
  1170 + </colorrole>
  1171 + </inactive>
  1172 + <disabled>
  1173 + <colorrole role="WindowText">
  1174 + <brush brushstyle="SolidPattern">
  1175 + <color alpha="255">
  1176 + <red>123</red>
  1177 + <green>123</green>
  1178 + <blue>123</blue>
  1179 + </color>
  1180 + </brush>
  1181 + </colorrole>
  1182 + </disabled>
  1183 + </palette>
2306 1184 </property>
2307   - <property name="styleSheet">
2308   - <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/back.png); }
2309   -QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</string>
  1185 + <property name="font">
  1186 + <font>
  1187 + <family>Malgun Gothic</family>
  1188 + <pointsize>14</pointsize>
  1189 + <weight>75</weight>
  1190 + <bold>true</bold>
  1191 + </font>
2310 1192 </property>
2311 1193 <property name="text">
2312   - <string/>
  1194 + <string>후속 과정 옵션</string>
2313 1195 </property>
2314 1196 </widget>
2315   - <widget class="QPushButton" name="washButton">
  1197 + <widget class="QLabel" name="processTypeLabel">
2316 1198 <property name="geometry">
2317 1199 <rect>
2318   - <x>514</x>
2319   - <y>26</y>
2320   - <width>97</width>
2321   - <height>97</height>
  1200 + <x>0</x>
  1201 + <y>50</y>
  1202 + <width>640</width>
  1203 + <height>50</height>
2322 1204 </rect>
2323 1205 </property>
2324   - <property name="sizePolicy">
2325   - <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
2326   - <horstretch>0</horstretch>
2327   - <verstretch>0</verstretch>
2328   - </sizepolicy>
  1206 + <property name="palette">
  1207 + <palette>
  1208 + <active>
  1209 + <colorrole role="WindowText">
  1210 + <brush brushstyle="SolidPattern">
  1211 + <color alpha="255">
  1212 + <red>255</red>
  1213 + <green>255</green>
  1214 + <blue>255</blue>
  1215 + </color>
  1216 + </brush>
  1217 + </colorrole>
  1218 + </active>
  1219 + <inactive>
  1220 + <colorrole role="WindowText">
  1221 + <brush brushstyle="SolidPattern">
  1222 + <color alpha="255">
  1223 + <red>255</red>
  1224 + <green>255</green>
  1225 + <blue>255</blue>
  1226 + </color>
  1227 + </brush>
  1228 + </colorrole>
  1229 + </inactive>
  1230 + <disabled>
  1231 + <colorrole role="WindowText">
  1232 + <brush brushstyle="SolidPattern">
  1233 + <color alpha="255">
  1234 + <red>123</red>
  1235 + <green>123</green>
  1236 + <blue>123</blue>
  1237 + </color>
  1238 + </brush>
  1239 + </colorrole>
  1240 + </disabled>
  1241 + </palette>
2329 1242 </property>
2330   - <property name="styleSheet">
2331   - <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/wash.png); }
2332   -QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); }</string>
  1243 + <property name="font">
  1244 + <font>
  1245 + <family>Malgun Gothic</family>
  1246 + <pointsize>12</pointsize>
  1247 + <weight>50</weight>
  1248 + <bold>false</bold>
  1249 + </font>
2333 1250 </property>
2334 1251 <property name="text">
2335   - <string/>
  1252 + <string>새로운 재료 넣기</string>
2336 1253 </property>
2337 1254 </widget>
2338   - <widget class="QPushButton" name="configButton">
  1255 + <widget class="QPushButton" name="processButton_1">
2339 1256 <property name="geometry">
2340 1257 <rect>
2341   - <x>288</x>
2342   - <y>26</y>
2343   - <width>97</width>
2344   - <height>97</height>
  1258 + <x>0</x>
  1259 + <y>130</y>
  1260 + <width>152</width>
  1261 + <height>70</height>
2345 1262 </rect>
2346 1263 </property>
2347   - <property name="sizePolicy">
2348   - <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
2349   - <horstretch>0</horstretch>
2350   - <verstretch>0</verstretch>
2351   - </sizepolicy>
2352   - </property>
2353 1264 <property name="styleSheet">
2354   - <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/config.png); }
2355   -QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</string>
  1265 + <string notr="true">QPushButton { border-image: url(:/images/button/152.png); }
  1266 +QPushButton:pressed { border-image: url(:/images/button/152_ov.png); }</string>
2356 1267 </property>
2357 1268 <property name="text">
2358 1269 <string/>
2359 1270 </property>
2360 1271 </widget>
2361   - <widget class="QPushButton" name="helpButton">
  1272 + <widget class="QPushButton" name="processButton_2">
2362 1273 <property name="geometry">
2363 1274 <rect>
2364   - <x>627</x>
2365   - <y>26</y>
2366   - <width>97</width>
2367   - <height>97</height>
  1275 + <x>150</x>
  1276 + <y>130</y>
  1277 + <width>152</width>
  1278 + <height>70</height>
2368 1279 </rect>
2369 1280 </property>
2370   - <property name="sizePolicy">
2371   - <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
2372   - <horstretch>0</horstretch>
2373   - <verstretch>0</verstretch>
2374   - </sizepolicy>
2375   - </property>
2376 1281 <property name="styleSheet">
2377   - <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/help.png); }
2378   -QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</string>
  1282 + <string notr="true">QPushButton { border-image: url(:/images/button/152.png); }
  1283 +QPushButton:pressed { border-image: url(:/images/button/152_ov.png); }</string>
2379 1284 </property>
2380 1285 <property name="text">
2381 1286 <string/>
2382 1287 </property>
2383 1288 </widget>
2384   - <widget class="QPushButton" name="favoritesButton">
  1289 + <widget class="QPushButton" name="processButton_3">
2385 1290 <property name="geometry">
2386 1291 <rect>
2387   - <x>401</x>
2388   - <y>26</y>
2389   - <width>97</width>
2390   - <height>97</height>
  1292 + <x>300</x>
  1293 + <y>130</y>
  1294 + <width>152</width>
  1295 + <height>70</height>
2391 1296 </rect>
2392 1297 </property>
2393   - <property name="sizePolicy">
2394   - <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
2395   - <horstretch>0</horstretch>
2396   - <verstretch>0</verstretch>
2397   - </sizepolicy>
2398   - </property>
2399 1298 <property name="styleSheet">
2400   - <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/favorites.png); }
2401   -QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); }</string>
  1299 + <string notr="true">QPushButton { border-image: url(:/images/button/152.png); }
  1300 +QPushButton:pressed { border-image: url(:/images/button/152_ov.png); }</string>
2402 1301 </property>
2403 1302 <property name="text">
2404 1303 <string/>
2405 1304 </property>
2406 1305 </widget>
2407 1306 </widget>
2408   - <zorder>stackedWidget</zorder>
  1307 + <zorder>openDoorAnimation</zorder>
  1308 + <zorder>closeDoorAnimation</zorder>
2409 1309 <zorder>upperStack</zorder>
2410 1310 <zorder>bottomBar</zorder>
  1311 + <zorder>configCookButton</zorder>
  1312 + <zorder>doorStepLabel</zorder>
  1313 + <zorder>autoCookButton</zorder>
  1314 + <zorder>cookModeIcon</zorder>
  1315 + <zorder>humidityGauge</zorder>
  1316 + <zorder>humidityLabel</zorder>
  1317 + <zorder>cookStepLabel</zorder>
  1318 + <zorder>heatLabel</zorder>
  1319 + <zorder>cookTypeIcon</zorder>
  1320 + <zorder>interTempLabel</zorder>
  1321 + <zorder>closeDoorArrow</zorder>
  1322 + <zorder>timeLabel</zorder>
  1323 + <zorder>preheatIcon</zorder>
  1324 + <zorder>infoButton</zorder>
  1325 + <zorder>humidityGaugeButton</zorder>
  1326 + <zorder>showNextStepButton</zorder>
  1327 + <zorder>label_4</zorder>
  1328 + <zorder>cookStepIcon</zorder>
  1329 + <zorder>preheatLabel</zorder>
  1330 + <zorder>showPrevStepButton</zorder>
  1331 + <zorder>cookStepAnimation</zorder>
  1332 + <zorder>selectCookButton</zorder>
  1333 + <zorder>label_3</zorder>
  1334 + <zorder>heatGauge</zorder>
  1335 + <zorder>preheatGauge</zorder>
  1336 + <zorder>openDoorArrow</zorder>
  1337 + <zorder>heatGaugeButton</zorder>
  1338 + <zorder>processContainer</zorder>
2411 1339 </widget>
2412 1340 </widget>
2413 1341 <customwidgets>
... ... @@ -2418,6 +1346,11 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); }
2418 1346 <container>1</container>
2419 1347 </customwidget>
2420 1348 <customwidget>
  1349 + <class>AnimatedImageBox</class>
  1350 + <extends>QLabel</extends>
  1351 + <header>animatedimagebox.h</header>
  1352 + </customwidget>
  1353 + <customwidget>
2421 1354 <class>HumidityCircularGauge</class>
2422 1355 <extends>QWidget</extends>
2423 1356 <header>humiditycirculargauge.h</header>
... ... @@ -2430,11 +1363,6 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); }
2430 1363 <container>1</container>
2431 1364 </customwidget>
2432 1365 <customwidget>
2433   - <class>AnimatedImageBox</class>
2434   - <extends>QLabel</extends>
2435   - <header>animatedimagebox.h</header>
2436   - </customwidget>
2437   - <customwidget>
2438 1366 <class>PreheatTempGauge</class>
2439 1367 <extends>QWidget</extends>
2440 1368 <header>preheattempgauge.h</header>
... ...
app/gui/oven_control/cook.cpp
1 1 #include "cook.h"
2 2  
3   -#include <QtCore>
4   -#include <QtDebug>
  3 +#include <QErrorMessage>
5 4  
6   -#include <cmath>
7   -
8   -AbstractCook::~AbstractCook()
  5 +static QErrorMessage *errorDialog = NULL;
  6 +static void showError(QString errorMessage)
9 7 {
10   - for (int idx = 0; idx < 5; idx++)
11   - if (configurations[idx] != NULL)
12   - {
13   - delete configurations[idx];
14   - configurations[idx] = NULL;
15   - }
16   -}
  8 + if (errorDialog == NULL)
  9 + {
  10 + errorDialog = new QErrorMessage;
  11 + errorDialog->setWindowModality(Qt::ApplicationModal);
  12 + errorDialog->setGeometry(QRect(0, 426, 900, 426));
  13 + }
17 14  
18   -Cook::CookType AbstractCook::type()
19   -{
20   - return type_;
  15 + errorDialog->showMessage(errorMessage);
  16 + errorDialog->exec();
21 17 }
22 18  
23   -QString AbstractCook::name()
  19 +Cook::Cook()
  20 + : type(Define::InvalidCookType),
  21 + isInitialized_(false), isLoaded_(false), isCoreTempValid_(false),
  22 + time_(0), coreTemp_(0)
24 23 {
25   - return name_;
  24 + for (int i = 0; i < 5; i++)
  25 + configs[i].type = Define::InvalidConfig;
26 26 }
27 27  
28   -int AbstractCook::time()
  28 +Cook::Cook(Define::CookType type, QString root, QString name)
  29 + : Cook()
29 30 {
30   - int t = time_;
31   - for (int idx = 0; idx < 5; idx++)
32   - if (configurations[idx] != NULL)
33   - t = configurations[idx]->configureTime(t);
34   -
35   - return t;
36   -}
  31 + if (!root.endsWith("/"))
  32 + root += "/";
37 33  
38   -bool AbstractCook::interTempEnabled()
39   -{
40   - return interTempEnabled_;
41   -}
  34 + this->type = type;
  35 + this->root = root;
  36 + this->name = name;
42 37  
43   -void AbstractCook::setInterTempEnabled(bool enabled)
44   -{
45   - interTempEnabled_ = enabled;
  38 + initialize();
46 39 }
47 40  
48   -int AbstractCook::interTemp()
  41 +void Cook::initialize()
49 42 {
50   - int t = interTemp_;
51   - for (int idx = 0; idx < 5; idx++)
52   - if (configurations[idx] != NULL)
53   - t = configurations[idx]->configureInterTemp(t);
  43 + if (type == Define::InvalidCookType || root.isEmpty() || name.isEmpty())
  44 + return;
54 45  
55   - return t;
56   -}
  46 + QFile file(root + "config.csv");
  47 + if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
  48 + {
  49 + showError("File not found: " + file.fileName());
  50 + return;
  51 + }
57 52  
58   -Cook::Step AbstractCook::currentStep()
59   -{
60   - return step(currentStepIndex());
61   -}
  53 + int lineCount = 0;
  54 + int configIndex = 0;
  55 + while (!file.atEnd())
  56 + {
  57 + if (configIndex == 5)
  58 + break;
62 59  
63   -int AbstractCook::currentStepIndex()
64   -{
65   - return currentStep_;
66   -}
  60 + lineCount++;
67 61  
68   -void AbstractCook::setCurrentStepIndex(int index)
69   -{
70   - if (index < stepCount_ && index >= 0)
71   - currentStep_ = index;
72   -}
  62 + QString line = QString::fromUtf8(file.readLine()).trimmed();
  63 + if (line.isEmpty())
  64 + continue;
73 65  
74   -int AbstractCook::stepCount()
75   -{
76   - return stepCount_;
77   -}
  66 + if (line.startsWith("use"))
  67 + continue;
78 68  
79   -Cook::Step AbstractCook::step(int index)
80   -{
81   - if (index < stepCount_)
82   - {
83   - Cook::Step s = stepList[index];
84   - for (int idx = 0; idx < 5; idx++)
85   - if (configurations[idx] != NULL)
86   - s = configurations[idx]->configureStep(s);
  69 + QString errorMessage = QString("%3: %1, line %2").arg(file.fileName()).arg(lineCount);
87 70  
88   - return s;
89   - }
90   - else
91   - return Cook::Step { Cook::Invalid, Cook::SteamMode, 0, 0 };
92   -}
  71 + QString use = line.section(',', 0, 0).trimmed();
  72 + if (use.isEmpty())
  73 + {
  74 + showError(errorMessage.arg("Use column must be filled"));
  75 + file.close();
  76 + return;
  77 + }
93 78  
94   -Cook::StepClass Cook::classify(Cook::StepType type)
95   -{
96   - switch (type)
97   - {
98   - case Preheat:
99   - return PreheatClass;
100   - case PutThermometer:
101   - case Load:
102   - case Cut:
103   - case Pour:
104   - return DoorClass;
105   - case Bake:
106   - case Dry:
107   - case Ferment:
108   - case BlowSteam:
109   - case CoolDown:
110   - case Steam:
111   - case Roast:
112   - case Boil:
113   - case Thicken:
114   - case WarmUp:
115   - case MakeCrispy:
116   - case Finish:
117   - case Damp:
118   - case Defer:
119   - case Grill:
120   - case End:
121   - case Burn:
122   - case Fry:
123   - case HeatUp:
124   - case Ripen:
125   - case RipenKeep:
126   - case BoilSteadily:
127   - case CookGratin:
128   - case Brown:
129   - case Simmer:
130   - case Moisten:
131   - return CookClass;
132   - default:
133   - return InvalidClass;
  79 + if (use == "yes")
  80 + {
  81 + CookConfig config;
  82 +
  83 + config.type = Define::identifyConfigType(line.section(',', 1, 1).trimmed());
  84 + if (config.type == Define::InvalidConfig)
  85 + {
  86 + showError(errorMessage.arg("Invalid configuration type"));
  87 + file.close();
  88 + return;
  89 + }
  90 +
  91 + bool ok;
  92 + config.maximum = line.section(',', 2, 2).trimmed().toInt(&ok);
  93 + if (!ok)
  94 + {
  95 + showError(errorMessage.arg("Invalid count"));
  96 + file.close();
  97 + return;
  98 + }
  99 +
  100 + config.current = line.section(',', 3, 3).trimmed().toInt(&ok);
  101 + if (!ok)
  102 + {
  103 + showError(errorMessage.arg("Invalid default"));
  104 + file.close();
  105 + return;
  106 + }
  107 +
  108 + configs[configIndex++] = config;
  109 + }
  110 + else
  111 + configs[configIndex++] = CookConfig { Define::ConfigNotUsed, 0, 0 };
134 112 }
135   -}
136 113  
137   -Cook::Configuration AbstractCookConfig::type()
138   -{
139   - return type_;
140   -}
  114 + file.close();
141 115  
142   -QString AbstractCookConfig::icon()
143   -{
144   - return icon_;
145   -}
  116 + for (int i = configIndex; i < 5; i++)
  117 + configs[configIndex++] = CookConfig { Define::ConfigNotUsed, 0, 0 };
146 118  
147   -QString AbstractCookConfig::overlayIcon()
148   -{
149   - return overayIcon_;
  119 + isInitialized_ = true;
150 120 }
151 121  
152   -QString AbstractCookConfig::minLabel()
  122 +void Cook::setConfig(int first, int second, int third, int fourth, int fifth)
153 123 {
154   - return minLabel_;
155   -}
  124 + if (!isInitialized())
  125 + return;
156 126  
157   -QString AbstractCookConfig::maxLabel()
158   -{
159   - return maxLabel_;
160   -}
  127 + int currents[5] = { first, second, third, fourth, fifth };
  128 + for (int i = 0; i < 5; i++)
  129 + {
  130 + if (configs[i].type == Define::ConfigNotUsed)
  131 + continue;
161 132  
162   -QString AbstractCookConfig::currentLabel()
163   -{
164   - return currentLabel_;
  133 + if (configs[i].current != currents[i])
  134 + {
  135 + configs[i].current = currents[i];
  136 + isLoaded_ = false;
  137 + }
  138 + }
165 139 }
166 140  
167   -int AbstractCookConfig::count()
  141 +void Cook::load()
168 142 {
169   - return count_;
170   -}
  143 + if (!isInitialized())
  144 + return;
171 145  
172   -void AbstractCookConfig::setCount(int value)
173   -{
174   - count_ = value;
175   - if (current_ > count_)
176   - current_ = count_;
177   -}
  146 + QString selection;
  147 + for (int i = 0; i < 5; i++)
  148 + {
  149 + if (configs[i].type == Define::ConfigNotUsed)
  150 + continue;
178 151  
179   -int AbstractCookConfig::current()
180   -{
181   - return current_;
182   -}
  152 + selection += QString::number(configs[i].current);
  153 + }
183 154  
184   -void AbstractCookConfig::setCurrent(int value)
185   -{
186   - current_ = qBound(1, value, count_);
187   -}
  155 + QFile dataFile(root + "data." + selection + ".csv");
  156 + if (!dataFile.open(QIODevice::ReadOnly | QIODevice::Text))
  157 + {
  158 + showError("File not found: " + dataFile.fileName());
  159 + return;
  160 + }
188 161  
189   -int AbstractCookConfig::standard()
190   -{
191   - return standard_;
192   -}
  162 + steps.clear();
193 163  
194   -void AbstractCookConfig::setStandard(int value)
195   -{
196   - standard_ = qBound(1, value, count_);
197   - setCurrent(standard_);
198   -}
  164 + int lineCount = 0;
  165 + while (!dataFile.atEnd())
  166 + {
  167 + lineCount++;
199 168  
200   -int AbstractCookConfig::configureTime(int standardTime)
201   -{
202   - return standardTime;
203   -}
  169 + QString line = QString::fromUtf8(dataFile.readLine()).trimmed();
  170 + if (line.isEmpty())
  171 + continue;
204 172  
205   -int AbstractCookConfig::configureInterTemp(int standardInterTemp)
206   -{
207   - return standardInterTemp;
208   -}
  173 + if (line.startsWith("type"))
  174 + continue;
209 175  
210   -Cook::Step AbstractCookConfig::configureStep(Cook::Step standardStep)
211   -{
212   - return standardStep;
213   -}
  176 + QString errorMessage = QString("%3: %1, line %2").arg(dataFile.fileName()).arg(lineCount);
214 177  
215   -BrightnessConfig::BrightnessConfig()
216   -{
217   - type_ = Cook::Brightness;
218   - icon_ = ":/images/slider_icon/gau_icon_01.png";
219   - overayIcon_ = ":/images/slider_icon/gau_icon_01_ov.png";
220   - minLabel_ = "연한색";
221   - maxLabel_ = "진한색";
222   -}
  178 + CookStep step;
  179 + bzero(&step, sizeof(step));
223 180  
224   -Cook::Step BrightnessConfig::configureStep(Cook::Step standardStep)
225   -{
226   - int dVal = current_ - standard_;
227   - qreal m = 1.0 - 0.05 * dVal;
  181 + step.type = Define::identifyStepType(line.section(',', 0, 0).trimmed());
  182 + switch (Define::classify(step.type))
  183 + {
  184 + case Define::InvalidClass:
  185 + showError(errorMessage.arg("Invalid type"));
  186 + continue;
  187 + case Define::DoorClass:
  188 + steps.append(step);
  189 + continue;
  190 + default:
  191 + break;
  192 + }
228 193  
229   - standardStep.humidity =
230   - qBound(0, (int) round(standardStep.humidity * m), 100);
  194 + step.mode = Define::identifyMode(line.section(',', 1, 1).trimmed());
  195 + if (step.mode == Define::InvalidMode)
  196 + {
  197 + showError(errorMessage.arg("Invalid mode"));
  198 + continue;
  199 + }
231 200  
232   - return standardStep;
233   -}
  201 + bool ok;
234 202  
235   -TimeConfig::TimeConfig()
236   -{
237   - type_ = Cook::Time;
238   - icon_ = ":/images/slider_icon/time.png";
239   - overayIcon_ = ":/images/slider_icon/time_ov.png";
240   - minLabel_ = "단시간";
241   - maxLabel_ = "장시간";
242   -}
  203 + step.humidity = line.section(',', 3, 3).trimmed().toInt(&ok);
  204 + if (!ok || step.humidity < 0 || step.humidity > 100)
  205 + {
  206 + showError(errorMessage.arg("Invalid humidity"));
  207 + continue;
  208 + }
243 209  
244   -int TimeConfig::configureTime(int standardTime)
245   -{
246   - int dVal = current_ - standard_;
247   - qreal m = 1.0 + 0.1 * dVal;
  210 + step.temp = line.section(',', 4, 4).trimmed().toInt(&ok);
  211 + if (!ok || step.temp < 30 || step.temp > 300)
  212 + {
  213 + showError(errorMessage.arg("Invalid temperature"));
  214 + continue;
  215 + }
248 216  
249   - standardTime = qBound(0, (int) round(standardTime * m), 24 * 60 * 60);
  217 + step.fan = line.section(',', 6, 6).trimmed().toInt(&ok);
  218 + if (!ok || step.fan < 1 || step.fan > 5)
  219 + {
  220 + showError(errorMessage.arg("Invalid fan level"));
  221 + continue;
  222 + }
250 223  
251   - return standardTime;
252   -}
  224 + if (step.type == Define::Preheat)
  225 + {
  226 + steps.append(step);
  227 + continue;
  228 + }
253 229  
254   -BurnDegreeConfig::BurnDegreeConfig()
255   -{
256   - type_ = Cook::BurnDegree;
257   - icon_ = ":/images/slider_icon/gau_icon_02.png";
258   - overayIcon_ = ":/images/slider_icon/gau_icon_02_ov.png";
259   - minLabel_ = "중간 익힘";
260   - maxLabel_ = "완전 익힘";
261   -}
  230 + step.time = line.section(',', 2, 2).trimmed().toInt(&ok);
  231 + if (!ok || step.time <= 0)
  232 + {
  233 + showError(errorMessage.arg("Invalid time"));
  234 + continue;
  235 + }
262 236  
263   -Cook::Step BurnDegreeConfig::configureStep(Cook::Step standardStep)
264   -{
265   - int dVal = current_ - standard_;
266   - qreal m = 1.0 + 0.03 * dVal;
  237 + int tInt = line.section(',', 5, 5).trimmed().toInt(&ok);
  238 + if (ok)
  239 + {
  240 + if (tInt < 0 || tInt > 100)
  241 + {
  242 + showError(errorMessage.arg("Invalid coreTemperature"));
  243 + continue;
  244 + }
267 245  
268   - standardStep.temp =
269   - qBound(30, (int) round(standardStep.temp * m), 300);
  246 + step.coreTemp = tInt;
  247 + }
270 248  
271   - return standardStep;
272   -}
  249 + tInt = line.section(',', 7, 7).trimmed().toInt(&ok);
  250 + if (ok)
  251 + {
  252 + if (tInt < 0)
  253 + {
  254 + showError(errorMessage.arg("Invalid damper"));
  255 + continue;
  256 + }
  257 +
  258 + step.dehumidification = tInt;
  259 +
  260 + tInt = line.section(',', 9, 9).trimmed().toInt(&ok);
  261 + if (ok)
  262 + {
  263 + if (tInt < 0)
  264 + {
  265 + showError(errorMessage.arg("Invalid damperRepeat"));
  266 + continue;
  267 + }
  268 +
  269 + step.dehumidificationRepeatDelay = tInt;
  270 +
  271 + tInt = line.section(',', 11, 11).trimmed().toInt(&ok);
  272 + if (ok)
  273 + {
  274 + if (tInt < 0)
  275 + {
  276 + showError(errorMessage.arg("Invalid damperRepeatCount"));
  277 + continue;
  278 + }
  279 +
  280 + step.dehumidificationRepeatCount = tInt;
  281 + }
  282 + }
  283 + }
273 284  
274   -int BurnDegreeConfig::configureInterTemp(int standardInterTemp)
275   -{
276   - int dVal = current_ - standard_;
277   - qreal m = 1.0 + 0.03 * dVal;
  285 + tInt = line.section(',', 8, 8).trimmed().toInt(&ok);
  286 + if (ok)
  287 + {
  288 + if (tInt < 0)
  289 + {
  290 + showError(errorMessage.arg("Invalid sideNozzle"));
  291 + continue;
  292 + }
  293 +
  294 + step.humidification = tInt;
  295 +
  296 + tInt = line.section(',', 10, 10).trimmed().toInt(&ok);
  297 + if (ok)
  298 + {
  299 + if (tInt < 0)
  300 + {
  301 + showError(errorMessage.arg("Invalid sideNozzleRepeat"));
  302 + continue;
  303 + }
  304 +
  305 + step.humidificationRepeatDelay = tInt;
  306 +
  307 + tInt = line.section(',', 12, 12).trimmed().toInt(&ok);
  308 + if (ok)
  309 + {
  310 + if (tInt < 0)
  311 + {
  312 + showError(errorMessage.arg("Invalid sideNozzleRepeatCount"));
  313 + continue;
  314 + }
  315 +
  316 + step.humidificationRepeatCount = tInt;
  317 + }
  318 + }
  319 + }
278 320  
279   - standardInterTemp = qBound(0, (int) round(standardInterTemp * m), 99);
  321 + steps.append(step);
  322 + }
280 323  
281   - return standardInterTemp;
282   -}
  324 + dataFile.close();
283 325  
284   -QString Cook::name(Cook::StepType type)
285   -{
286   - switch (type)
  326 + QFile processFile(root + "process.csv");
  327 + if (!processFile.open(QIODevice::ReadOnly | QIODevice::Text))
287 328 {
288   - case Cook::Roast:
289   - return "로스팅";
290   - case Cook::Grill:
291   - return "그릴";
292   - case Cook::Boil:
293   - return "끓이기";
294   - case Cook::BoilSteadily:
295   - return "뭉근하게 끓이기";
296   - case Cook::HeatUp:
297   - return "온도 높이기";
298   - case Cook::Thicken:
299   - return "걸쭉하게 만들기";
300   - case Cook::WarmUp:
301   - return "데우기";
302   - case Cook::Simmer:
303   - return "약한 불로 끓이기";
304   - case Cook::End:
305   - return "종료";
306   - case Cook::MakeCrispy:
307   - return "바삭함 주기";
308   - case Cook::Brown:
309   - return "브라우닝(갈색 내기)";
310   - case Cook::BlowSteam:
311   - return "스팀 쏘이기";
312   - case Cook::Damp:
313   - return "습윤 주기";
314   - case Cook::Finish:
315   - return "피니싱";
316   - case Cook::Burn:
317   - return "그을리기";
318   - case Cook::CookGratin:
319   - return "그라탱 요리";
320   - case Cook::CoolDown:
321   - return "식히기";
322   - case Cook::Defer:
323   - return "보류";
324   - case Cook::RipenKeep:
325   - return "숙성 & 보존";
326   - case Cook::Bake:
327   - return "베이킹";
328   - case Cook::Fry:
329   - return "기름에 재빨리 볶기";
330   - case Cook::Steam:
331   - return "찌기";
332   - case Cook::Ripen:
333   - return "촉촉하게";
334   - case Cook::Ferment:
335   - return "숙성";
336   - case Cook::Moisten:
337   - return "발효";
338   - case Cook::Dry:
339   - return "건조시키기";
340   - default:
341   - return "";
  329 + showError("File not found: " + processFile.fileName());
  330 + return;
342 331 }
343   -}
344 332  
345   -QString Cook::icon(Cook::StepType type)
346   -{
347   - switch (type)
  333 + lineCount = 0;
  334 + while (!processFile.atEnd())
348 335 {
349   - case Cook::Roast:
350   - case Cook::Grill:
351   - return ":/images/cook_step_type/sys_icon_01.png";
352   - case Cook::Boil:
353   - case Cook::BoilSteadily:
354   - case Cook::HeatUp:
355   - case Cook::Thicken:
356   - case Cook::WarmUp:
357   - case Cook::Simmer:
358   - return ":/images/cook_step_type/sys_icon_02.png";
359   - case Cook::End:
360   - return ":/images/cook_step_type/sys_icon_03.png";
361   - case Cook::MakeCrispy:
362   - case Cook::Brown:
363   - case Cook::BlowSteam:
364   - case Cook::Damp:
365   - return ":/images/cook_step_type/sys_icon_04.png";
366   - case Cook::Finish:
367   - return ":/images/cook_step_type/sys_icon_05.png";
368   - case Cook::Burn:
369   - case Cook::CookGratin:
370   - return ":/images/cook_step_type/sys_icon_06.png";
371   - case Cook::CoolDown:
372   - return ":/images/cook_step_type/sys_icon_07.png";
373   - case Cook::Defer:
374   - case Cook::RipenKeep:
375   - return ":/images/cook_step_type/sys_icon_08.png";
376   - case Cook::Bake:
377   - return ":/images/cook_step_type/sys_icon_09.png";
378   - case Cook::Fry:
379   - case Cook::Steam:
380   - return ":/images/cook_step_type/sys_icon_10.png";
381   - case Cook::Ripen:
382   - case Cook::Ferment:
383   - case Cook::Moisten:
384   - return ":/images/cook_step_type/sys_icon_11.png";
385   - case Cook::Dry:
386   - return ":/images/cook_step_type/sys_icon_12.png";
387   - default:
388   - return "";
  336 + lineCount++;
  337 +
  338 + QString line = QString::fromUtf8(processFile.readLine()).trimmed();
  339 + if (line.isEmpty())
  340 + continue;
  341 +
  342 + if (line.startsWith("type"))
  343 + continue;
  344 +
  345 + QString errorMessage = QString("%3: %1, line %2").arg(processFile.fileName()).arg(lineCount);
  346 +
  347 + Define::Process process = Define::identifyProcess(line);
  348 + if (process == Define::InvalidProcess)
  349 + {
  350 + showError(errorMessage.arg("Invalid type"));
  351 + continue;
  352 + }
  353 +
  354 + processes.append(process);
389 355 }
390   -}
391 356  
392   -QString Cook::icon(Cook::CookType type)
393   -{
394   - switch (type)
  357 + isLoaded_ = true;
  358 +
  359 + isCoreTempValid_ = false;
  360 + time_ = 0;
  361 + coreTemp_ = 0;
  362 + foreach (CookStep s, steps)
395 363 {
396   - case Poultry:
397   - return ":/images/cook_type/poultry_ov.png";
398   - case Meat:
399   - return ":/images/cook_type/meat_ov.png";
400   - case Fish:
401   - return ":/images/cook_type/fish_ov.png";
402   - case Desert:
403   - return ":/images/cook_type/desert_ov.png";
404   - case Vegetable:
405   - return ":/images/cook_type/vegetable_ov.png";
406   - case Bread:
407   - return ":/images/cook_type/bread_ov.png";
408   - case Etc:
409   - return ":/images/cook_type/etc_ov.png";
410   - default:
411   - return "";
  364 + if (s.coreTemp)
  365 + {
  366 + isCoreTempValid_ = true;
  367 + coreTemp_ = s.coreTemp;
  368 + }
  369 +
  370 + time_ += s.time;
412 371 }
413 372 }
414 373  
415   -FriedRice::FriedRice()
  374 +bool Cook::isCoreTempValid()
416 375 {
417   - name_ = QCoreApplication::tr("볶음밥");
418   - currentStep_ = 0;
419   - stepCount_ = 4;
420   -
421   - stepList[0] = { Cook::Preheat, Cook::CombiMode, 100, 150 };
422   - stepList[1] = { Cook::Load, Cook::CombiMode, 0, 0 };
423   - stepList[2] = { Cook::Roast, Cook::CombiMode, 80, 130 };
424   - stepList[3] = { Cook::Roast, Cook::DryMode, 30, 170 };
425   -}
  376 + if (!isLoaded())
  377 + load();
426 378  
427   -ChickenCook::ChickenCook()
428   -{
429   - type_ = Cook::Poultry;
430   - name_ = QCoreApplication::tr("닭고기 요리");
431   - currentStep_ = 0;
432   - stepCount_ = 5;
433   -
434   - stepList[0] = { Cook::Preheat, Cook::CombiMode, 100, 230 };
435   - stepList[1] = { Cook::Load, Cook::CombiMode, 0, 0 };
436   - stepList[2] = { Cook::Roast, Cook::CombiMode, 90, 210 };
437   - stepList[3] = { Cook::Roast, Cook::CombiMode, 50, 173 };
438   - stepList[4] = { Cook::Roast, Cook::DryMode, 50, 200 };
439   -
440   - time_ = 39 * 60;
441   - interTempEnabled_ = true;
442   - interTemp_ = 88;
443   -
444   - BrightnessConfig *brightness = new BrightnessConfig;
445   - brightness->setCount(5);
446   - brightness->setStandard(3);
447   - brightness->setCurrent(3);
448   - configurations[0] = brightness;
449   -
450   - BurnDegreeConfig *burnDegree = new BurnDegreeConfig;
451   - burnDegree->setCount(3);
452   - burnDegree->setStandard(3);
453   - burnDegree->setCurrent(3);
454   - configurations[1] = burnDegree;
  379 + return isCoreTempValid_;
455 380 }
456 381  
457   -MeatPie::MeatPie()
  382 +int Cook::time()
458 383 {
459   - type_ = Cook::Meat;
460   - name_ = QCoreApplication::tr("고기 파이");
461   - currentStep_ = 0;
462   - stepCount_ = 5;
463   -
464   - stepList[0] = { Cook::Preheat, Cook::DryMode, 100, 211 };
465   - stepList[1] = { Cook::Load, Cook::DryMode, 0, 0 };
466   - stepList[2] = { Cook::Bake, Cook::DryMode, 100, 191 };
467   - stepList[3] = { Cook::CoolDown, Cook::DryMode, 100, 120 };
468   - stepList[4] = { Cook::Bake, Cook::DryMode, 40, 120 };
469   -
470   - time_ = (1 * 60 + 17) * 60;
471   - interTempEnabled_ = true;
472   - interTemp_ = 62;
473   -
474   - BrightnessConfig *brightness = new BrightnessConfig;
475   - brightness->setCount(5);
476   - brightness->setStandard(3);
477   - brightness->setCurrent(3);
478   - configurations[0] = brightness;
479   -
480   - BurnDegreeConfig *burnDegree = new BurnDegreeConfig;
481   - burnDegree->setCount(3);
482   - burnDegree->setStandard(2);
483   - burnDegree->setCurrent(2);
484   - configurations[1] = burnDegree;
  384 + if (!isLoaded())
  385 + load();
  386 +
  387 + return time_;
485 388 }
486 389  
487   -Croissant::Croissant()
  390 +int Cook::coreTemp()
488 391 {
489   - type_ = Cook::Bread;
490   - name_ = QCoreApplication::tr("크로와상/페이스트리");
491   - currentStep_ = 0;
492   - stepCount_ = 6;
493   -
494   - stepList[0] = { Cook::Preheat, Cook::CombiMode, 100, 180 };
495   - stepList[1] = { Cook::Load, Cook::DryMode, 0, 0 };
496   - stepList[2] = { Cook::BlowSteam, Cook::SteamMode, 100, 98 };
497   - stepList[3] = { Cook::Bake, Cook::DryMode, 100, 170 };
498   - stepList[4] = { Cook::Bake, Cook::DryMode, 70, 170 };
499   - stepList[5] = { Cook::Bake, Cook::DryMode, 20, 170 };
500   -
501   - time_ = 18 * 60;
502   - interTempEnabled_ = false;
503   - interTemp_ = 0;
504   -
505   - BrightnessConfig *brightness = new BrightnessConfig;
506   - brightness->setCount(5);
507   - brightness->setStandard(3);
508   - brightness->setCurrent(3);
509   - configurations[0] = brightness;
510   -
511   - TimeConfig *timeConf = new TimeConfig;
512   - timeConf->setCount(3);
513   - timeConf->setStandard(2);
514   - timeConf->setCurrent(2);
515   - configurations[4] = timeConf;
  392 + if (!isLoaded())
  393 + load();
  394 +
  395 + return coreTemp_;
516 396 }
... ...
app/gui/oven_control/cook.h
1 1 #ifndef COOK_H
2 2 #define COOK_H
3 3  
4   -#include <QObject>
5   -#include <QTimer>
6   -#include <QList>
  4 +#include "define.h"
7 5  
8   -namespace Cook {
9   - enum CookType
10   - {
11   - Poultry,
12   - Meat,
13   - Fish,
14   - Desert,
15   - Vegetable,
16   - Bread,
17   - Etc
18   - };
19   -
20   - enum StepClass
21   - {
22   - InvalidClass,
23   - PreheatClass,
24   - DoorClass,
25   - CookClass
26   - };
27   -
28   - enum StepType
29   - {
30   - Invalid,
31   -
32   - Preheat, // 예열
33   - PutThermometer, // 중심 온도계 삽입
34   - Load, // 식재료 적재
35   - Cut, // 자르기
36   - Pour, // 물 붓기
37   -
38   - Bake, // 베이킹
39   - Dry, // 건조
40   - Ferment, // 발효
41   - BlowSteam, // 스팀 쏘이기
42   - CoolDown, // 식히기
43   - Steam, // 찌기
44   - Roast, // 로스팅
45   - Boil, // 끓이기
46   - Thicken, // 걸쭉하게 만들기
47   - WarmUp, // 데우기
48   - MakeCrispy, // 바삭하게 만들기
49   - Finish, // 피니싱
50   - Damp, // 습윤하게 만들기
51   - Defer, // 보류
52   - Grill, // 그릴
53   - End, // 종료
54   - Burn, // 그을리기
55   - Fry, // 기름에 볶기
56   - HeatUp, // 온도 높이기
57   - Ripen, // 숙성
58   - RipenKeep, // 숙성 & 보존
59   - BoilSteadily, // 뭉근하게 끓이기
60   - CookGratin, // 그라탱 요리
61   - Brown, // 브라우닝
62   - Simmer, // 약한 불로 끓이기
63   - Moisten // 촉촉하게
64   - };
65   -
66   - enum Mode {
67   - SteamMode, DryMode, CombiMode
68   - };
69   -
70   - struct Step {
71   - StepType type;
72   - Mode mode;
73   - int humidity;
74   - int temp;
75   - };
76   -
77   - enum Configuration {
78   - Brightness,
79   - Time,
80   - BurnDegree
81   - };
82   -
83   - StepClass classify(StepType type);
84   - QString name(StepType type);
85   - QString icon(CookType type);
86   - QString icon(StepType type);
87   -}
88   -
89   -class AbstractCookConfig
  6 +struct CookConfig
90 7 {
91   -public:
92   - Cook::Configuration type();
93   - QString icon();
94   - QString overlayIcon();
95   - QString minLabel();
96   - QString maxLabel();
97   - virtual QString currentLabel();
98   -
99   - int count();
100   - int current();
101   - int standard();
102   -
103   - virtual int configureTime(int standardTime);
104   - virtual int configureInterTemp(int standardInterTemp);
105   - virtual Cook::Step configureStep(Cook::Step standardStep);
106   -
107   -public slots:
108   - void setCount(int value);
109   - void setCurrent(int value);
110   - void setStandard(int value);
111   -
112   -protected:
113   - Cook::Configuration type_;
114   - QString icon_;
115   - QString overayIcon_;
116   - QString minLabel_;
117   - QString maxLabel_;
118   - QString currentLabel_;
119   -
120   - int standard_;
121   - int current_;
122   - int count_;
  8 + Define::ConfigType type;
  9 + int maximum;
  10 + int current;
123 11 };
124 12  
125   -class AbstractCook
  13 +struct CookStep
126 14 {
127   -public:
128   - AbstractCook() { for (int idx = 0; idx < 5; idx++) configurations[idx] = NULL; }
129   - ~AbstractCook();
130   -
131   - Cook::CookType type();
132   - QString name();
133   - int time();
134   - bool interTempEnabled();
135   - void setInterTempEnabled(bool enabled);
136   - int interTemp();
137   -
138   - Cook::Step currentStep();
139   - Cook::Step step(int index);
140   -
141   - int currentStepIndex();
142   - void setCurrentStepIndex(int index);
143   -
144   - int stepCount();
145   -
146   - AbstractCookConfig *configurations[5];
147   -
148   -protected:
149   - Cook::CookType type_;
150   - QString name_;
151   - int time_;
152   - bool interTempEnabled_;
153   - int interTemp_;
154   - int currentStep_;
155   - int stepCount_;
156   - Cook::Step stepList[10];
  15 + Define::StepType type;
  16 + Define::Mode mode;
  17 + int humidity;
  18 + int temp;
  19 + int time;
  20 + int fan;
  21 + int coreTemp;
  22 + int dehumidification;
  23 + int humidification;
  24 + int dehumidificationRepeatDelay;
  25 + int humidificationRepeatDelay;
  26 + int dehumidificationRepeatCount;
  27 + int humidificationRepeatCount;
157 28 };
158 29  
159   -class BrightnessConfig : public AbstractCookConfig
  30 +class Cook
160 31 {
161 32 public:
162   - BrightnessConfig();
163   - Cook::Step configureStep(Cook::Step standardStep);
164   -};
  33 + Cook();
  34 + Cook(Define::CookType type, QString root, QString name);
165 35  
166   -class TimeConfig : public AbstractCookConfig
167   -{
168   -public:
169   - TimeConfig();
170   - int configureTime(int standardTime);
171   -};
  36 + Define::CookType type;
  37 + QString name;
  38 + QString root;
172 39  
173   -class BurnDegreeConfig : public AbstractCookConfig
174   -{
175   -public:
176   - BurnDegreeConfig();
177   - Cook::Step configureStep(Cook::Step standardStep);
178   - int configureInterTemp(int standardInterTemp);
179   -};
  40 + CookConfig configs[5];
  41 + QList<CookStep> steps;
  42 + QList<Define::Process> processes;
180 43  
181   -class FriedRice : public AbstractCook
182   -{
183   -public:
184   - FriedRice();
185   -};
  44 + void setConfig(int first, int second, int third, int fourth, int fifth);
186 45  
187   -class ChickenCook : public AbstractCook
188   -{
189   -public:
190   - ChickenCook();
191   -};
  46 + bool isInitialized() { return isInitialized_; }
  47 + bool isLoaded() { return isLoaded_; }
  48 + void load();
192 49  
193   -class MeatPie : public AbstractCook
194   -{
195   -public:
196   - MeatPie();
197   -};
  50 + bool isCoreTempValid();
  51 + int time();
  52 + int coreTemp();
198 53  
199   -class Croissant : public AbstractCook
200   -{
201   -public:
202   - Croissant();
  54 +private:
  55 + bool isInitialized_;
  56 + bool isLoaded_;
  57 + bool isCoreTempValid_;
  58 + int time_;
  59 + int coreTemp_;
  60 +
  61 + void initialize();
203 62 };
204 63  
205 64 #endif // COOK_H
... ...
app/gui/oven_control/cookbook.cpp
... ... @@ -0,0 +1,102 @@
  1 +#include "cookbook.h"
  2 +
  3 +#include <QApplication>
  4 +#include <QErrorMessage>
  5 +
  6 +static QErrorMessage *errorDialog = NULL;
  7 +static void showError(QString errorMessage)
  8 +{
  9 + if (errorDialog == NULL)
  10 + {
  11 + errorDialog = new QErrorMessage;
  12 + errorDialog->setWindowModality(Qt::ApplicationModal);
  13 + errorDialog->setGeometry(QRect(0, 426, 900, 426));
  14 + }
  15 +
  16 + errorDialog->showMessage(errorMessage);
  17 + errorDialog->exec();
  18 +}
  19 +
  20 +CookBook::CookBook(Define::CookType type)
  21 + : type(type)
  22 +{
  23 + switch (type)
  24 + {
  25 + case Define::Poultry:
  26 + root = QString("/prime/cookbook/poultry/");
  27 + break;
  28 + case Define::Meat:
  29 + root = QString("/prime/cookbook/meat/");
  30 + break;
  31 + case Define::Fish:
  32 + root = QString("/prime/cookbook/fish/");
  33 + break;
  34 + case Define::Desert:
  35 + root = QString("/prime/cookbook/desert/");
  36 + break;
  37 + case Define::Vegetable:
  38 + root = QString("/prime/cookbook/vegetable/");
  39 + break;
  40 + case Define::Bread:
  41 + root = QString("/prime/cookbook/bread/");
  42 + break;
  43 + case Define::Etc:
  44 + root = QString("/prime/cookbook/etc/");
  45 + break;
  46 + default:
  47 + return;
  48 + }
  49 +
  50 + QFile file(root + "list.csv");
  51 + if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
  52 + {
  53 + showError("File not found: " + file.fileName());
  54 + return;
  55 + }
  56 +
  57 + int lineCount = 0;
  58 + while (!file.atEnd())
  59 + {
  60 + lineCount++;
  61 +
  62 + QString line = QString::fromUtf8(file.readLine()).trimmed();
  63 + if (line.isEmpty())
  64 + continue;
  65 +
  66 + if (line.startsWith("directory"))
  67 + continue;
  68 +
  69 + QString errorMessage = QString("%3: %1, line %2").arg(file.fileName()).arg(lineCount);
  70 +
  71 + QString directory = line.section(',', 0, 0).trimmed();
  72 + if (directory.isEmpty())
  73 + {
  74 + showError(errorMessage.arg("Directory name is missed"));
  75 + continue;
  76 + }
  77 +
  78 + QString cookname = line.section(',', 1, 1).trimmed();
  79 + if (cookname.isEmpty())
  80 + {
  81 + showError(errorMessage.arg("Cook name is missed"));
  82 + continue;
  83 + }
  84 +
  85 + list.append(cookname);
  86 + book.append(ListEntity { directory, cookname });
  87 + }
  88 +
  89 + file.close();
  90 +}
  91 +
  92 +Cook CookBook::get(int index)
  93 +{
  94 + if (index < book.size())
  95 + {
  96 + ListEntity e = book.at(index);
  97 + return Cook(type, root + e.directory, e.name);
  98 + }
  99 +
  100 + return Cook();
  101 +}
  102 +
... ...
app/gui/oven_control/cookbook.h
... ... @@ -0,0 +1,29 @@
  1 +#ifndef COOKBOOK_H
  2 +#define COOKBOOK_H
  3 +
  4 +#include <QtCore>
  5 +#include <QList>
  6 +
  7 +#include "define.h"
  8 +#include "cook.h"
  9 +
  10 +class CookBook
  11 +{
  12 +public:
  13 + CookBook() {}
  14 + CookBook(Define::CookType type);
  15 + QList<QString> list;
  16 + Cook get(int index);
  17 +
  18 +private:
  19 + struct ListEntity {
  20 + QString directory;
  21 + QString name;
  22 + };
  23 +
  24 + Define::CookType type;
  25 + QString root;
  26 + QList<ListEntity> book;
  27 +};
  28 +
  29 +#endif // COOKBOOK_H
... ...
app/gui/oven_control/define.cpp
... ... @@ -0,0 +1,495 @@
  1 +#include "define.h"
  2 +
  3 +Define::ConfigType Define::identifyConfigType(QString type)
  4 +{
  5 + if (type == "brightness")
  6 + return Brightness;
  7 + else if (type == "cookinglevel")
  8 + return BurnDegree;
  9 + else if (type == "boiledlevel")
  10 + return SoftBoilDegree;
  11 + else if (type == "size")
  12 + return PieceSize;
  13 + else if (type == "crispy1")
  14 + return CrispyDegree;
  15 + else if (type == "moisten1")
  16 + return MoistDegree;
  17 + else if (type == "thickness")
  18 + return Thickness;
  19 + else if (type == "humidity")
  20 + return Humidity;
  21 + else if (type == "temperature")
  22 + return Temperature;
  23 + else if (type == "cookingtime")
  24 + return Time;
  25 + else if (type == "coretemperature")
  26 + return CoreTemperature;
  27 + else if (type == "coretemperaturesensor")
  28 + return Thermometer;
  29 + else
  30 + return InvalidConfig;
  31 +}
  32 +
  33 +Define::StepType Define::identifyStepType(QString type)
  34 +{
  35 + if (type == "preheat")
  36 + return Preheat;
  37 + else if (type == "load") //
  38 + return Load;
  39 + else if (type == "therometer") //
  40 + return PutThermometer;
  41 + else if (type == "cut") //
  42 + return Cut;
  43 + else if (type == "pour") //
  44 + return Pour;
  45 + else if (type == "bake")
  46 + return Bake;
  47 + else if (type == "dry")
  48 + return Dry;
  49 + else if (type == "ferment")
  50 + return Ferment;
  51 + else if (type == "steaming")
  52 + return BlowSteam;
  53 + else if (type == "cooldown")
  54 + return CoolDown;
  55 + else if (type == "steam")
  56 + return Steam;
  57 + else if (type == "roasting")
  58 + return Roast;
  59 + else if (type == "boil")
  60 + return Boil;
  61 + else if (type == "thicken")
  62 + return Thicken;
  63 + else if (type == "warmup")
  64 + return WarmUp;
  65 + else if (type == "crispy2")
  66 + return MakeCrispy;
  67 + else if (type == "finish")
  68 + return Finish;
  69 + else if (type == "damp")
  70 + return Damp;
  71 + else if (type == "defer")
  72 + return Defer;
  73 + else if (type == "grill")
  74 + return Grill;
  75 + else if (type == "end")
  76 + return End;
  77 + else if (type == "burn")
  78 + return Burn;
  79 + else if (type == "fry")
  80 + return Fry;
  81 + else if (type == "heatup")
  82 + return HeatUp;
  83 + else if (type == "ripen")
  84 + return Ripen;
  85 + else if (type == "ripenkeep")
  86 + return RipenKeep;
  87 + else if (type == "boilsteadily")
  88 + return BoilSteadily;
  89 + else if (type == "cookgratin")
  90 + return CookGratin;
  91 + else if (type == "brown")
  92 + return Brown;
  93 + else if (type == "simmer")
  94 + return Simmer;
  95 + else if (type == "moisten2")
  96 + return Moisten;
  97 + else
  98 + return Invalid;
  99 +}
  100 +
  101 +Define::StepClass Define::classify(Define::StepType type)
  102 +{
  103 + switch (type)
  104 + {
  105 + case Invalid:
  106 + return InvalidClass;
  107 + case Preheat:
  108 + return PreheatClass;
  109 + case PutThermometer:
  110 + case Load:
  111 + case Cut:
  112 + case Pour:
  113 + return DoorClass;
  114 + case Bake:
  115 + case Dry:
  116 + case Ferment:
  117 + case BlowSteam:
  118 + case CoolDown:
  119 + case Steam:
  120 + case Roast:
  121 + case Boil:
  122 + case Thicken:
  123 + case WarmUp:
  124 + case MakeCrispy:
  125 + case Finish:
  126 + case Damp:
  127 + case Defer:
  128 + case Grill:
  129 + case End:
  130 + case Burn:
  131 + case Fry:
  132 + case HeatUp:
  133 + case Ripen:
  134 + case RipenKeep:
  135 + case BoilSteadily:
  136 + case CookGratin:
  137 + case Brown:
  138 + case Simmer:
  139 + case Moisten:
  140 + return CookClass;
  141 + }
  142 +
  143 + return InvalidClass;
  144 +}
  145 +
  146 +Define::Mode Define::identifyMode(QString mode)
  147 +{
  148 + if (mode == "combi")
  149 + return CombiMode;
  150 + else if (mode == "dry")
  151 + return DryMode;
  152 + else if (mode == "steam")
  153 + return SteamMode;
  154 + else
  155 + return InvalidMode;
  156 +}
  157 +
  158 +QString Define::icon(Define::CookType type)
  159 +{
  160 + switch (type)
  161 + {
  162 + case Poultry:
  163 + return ":/images/cook_type/poultry_ov.png";
  164 + case Meat:
  165 + return ":/images/cook_type/meat_ov.png";
  166 + case Fish:
  167 + return ":/images/cook_type/fish_ov.png";
  168 + case Desert:
  169 + return ":/images/cook_type/desert_ov.png";
  170 + case Vegetable:
  171 + return ":/images/cook_type/vegetable_ov.png";
  172 + case Bread:
  173 + return ":/images/cook_type/bread_ov.png";
  174 + case Etc:
  175 + return ":/images/cook_type/etc_ov.png";
  176 + default:
  177 + return "";
  178 + }
  179 +}
  180 +
  181 +QString Define::icon(Define::ConfigType type)
  182 +{
  183 + switch (type)
  184 + {
  185 + case Brightness:
  186 + return ":/images/slider_icon/gau_icon_01.png";
  187 + case BurnDegree:
  188 + return ":/images/slider_icon/gau_icon_02.png";
  189 + case SoftBoilDegree:
  190 + return ":/images/slider_icon/gau_icon_03.png";
  191 + case PieceSize:
  192 + return ":/images/slider_icon/gau_icon_04.png";
  193 + case CrispyDegree:
  194 + return ":/images/slider_icon/gau_icon_05.png";
  195 + case MoistDegree:
  196 + return ":/images/slider_icon/gau_icon_06.png";
  197 + case Thickness:
  198 + return ":/images/slider_icon/gau_icon_07.png";
  199 + case Humidity:
  200 + return ":/images/slider_icon/humidity.png";
  201 + case Temperature:
  202 + return ":/images/slider_icon/temp.png";
  203 + case Time:
  204 + return ":/images/slider_icon/time.png";
  205 + case CoreTemperature:
  206 + return ":/images/slider_icon/core_temp_enabled.png";
  207 + case Thermometer:
  208 + return ":/images/slider_icon/thermometer_enabled.png";
  209 + case InvalidConfig:
  210 + case ConfigNotUsed:
  211 + default:
  212 + return "";
  213 + }
  214 +}
  215 +
  216 +QString Define::iconOverlay(Define::ConfigType type)
  217 +{
  218 + switch (type)
  219 + {
  220 + case Brightness:
  221 + return ":/images/slider_icon/gau_icon_01_ov.png";
  222 + case BurnDegree:
  223 + return ":/images/slider_icon/gau_icon_02_ov.png";
  224 + case SoftBoilDegree:
  225 + return ":/images/slider_icon/gau_icon_03_ov.png";
  226 + case PieceSize:
  227 + return ":/images/slider_icon/gau_icon_04_ov.png";
  228 + case CrispyDegree:
  229 + return ":/images/slider_icon/gau_icon_05_ov.png";
  230 + case MoistDegree:
  231 + return ":/images/slider_icon/gau_icon_06_ov.png";
  232 + case Thickness:
  233 + return ":/images/slider_icon/gau_icon_07_ov.png";
  234 + case Humidity:
  235 + return ":/images/slider_icon/humidity_ov.png";
  236 + case Temperature:
  237 + return ":/images/slider_icon/temp_ov.png";
  238 + case Time:
  239 + return ":/images/slider_icon/time_ov.png";
  240 + case CoreTemperature:
  241 + return ":/images/slider_icon/core_temp_ov.png";
  242 + case Thermometer:
  243 + return ":/images/slider_icon/thermometer_ov.png";
  244 + case InvalidConfig:
  245 + case ConfigNotUsed:
  246 + default:
  247 + return "";
  248 + }
  249 +}
  250 +
  251 +QString Define::minimum(Define::ConfigType type)
  252 +{
  253 + switch (type)
  254 + {
  255 + case Brightness:
  256 + return "연한색";
  257 + case BurnDegree:
  258 + return "중간익힘";
  259 + case SoftBoilDegree:
  260 + return "반숙";
  261 + case PieceSize:
  262 + return "작은조각";
  263 + case CrispyDegree:
  264 + return "연한색";
  265 + case MoistDegree:
  266 + return "촉촉하게";
  267 + case Thickness:
  268 + return "얇음";
  269 + case Humidity:
  270 + return "건조함";
  271 + case Temperature:
  272 + return "약";
  273 + case Time:
  274 + return "단시간";
  275 + case CoreTemperature:
  276 + return "따뜻함";
  277 + case Thermometer:
  278 + return "있음";
  279 + case InvalidConfig:
  280 + case ConfigNotUsed:
  281 + default:
  282 + return "";
  283 + }
  284 +}
  285 +
  286 +QString Define::maximum(Define::ConfigType type)
  287 +{
  288 + switch (type)
  289 + {
  290 + case Brightness:
  291 + return "진한색";
  292 + case BurnDegree:
  293 + return "완전익힘";
  294 + case SoftBoilDegree:
  295 + return "완숙";
  296 + case PieceSize:
  297 + return "큰조각";
  298 + case CrispyDegree:
  299 + return "진한색";
  300 + case MoistDegree:
  301 + return "완전익힘";
  302 + case Thickness:
  303 + return "두꺼움";
  304 + case Humidity:
  305 + return "습윤";
  306 + case Temperature:
  307 + return "강";
  308 + case Time:
  309 + return "장시간";
  310 + case CoreTemperature:
  311 + return "뜨거움";
  312 + case Thermometer:
  313 + return "없음";
  314 + case InvalidConfig:
  315 + case ConfigNotUsed:
  316 + default:
  317 + return "";
  318 + }
  319 +}
  320 +
  321 +QString Define::icon(Define::StepType type)
  322 +{
  323 + switch (type)
  324 + {
  325 + case Roast:
  326 + case Grill:
  327 + return ":/images/cook_step_type/sys_icon_01.png";
  328 + case Boil:
  329 + case BoilSteadily:
  330 + case HeatUp:
  331 + case Thicken:
  332 + case WarmUp:
  333 + case Simmer:
  334 + return ":/images/cook_step_type/sys_icon_02.png";
  335 + case End:
  336 + return ":/images/cook_step_type/sys_icon_03.png";
  337 + case MakeCrispy:
  338 + case Brown:
  339 + case BlowSteam:
  340 + case Damp:
  341 + return ":/images/cook_step_type/sys_icon_04.png";
  342 + case Preheat:
  343 + case Finish:
  344 + return ":/images/cook_step_type/sys_icon_05.png";
  345 + case Burn:
  346 + case CookGratin:
  347 + return ":/images/cook_step_type/sys_icon_06.png";
  348 + case CoolDown:
  349 + return ":/images/cook_step_type/sys_icon_07.png";
  350 + case Defer:
  351 + case RipenKeep:
  352 + return ":/images/cook_step_type/sys_icon_08.png";
  353 + case Bake:
  354 + return ":/images/cook_step_type/sys_icon_09.png";
  355 + case Fry:
  356 + case Steam:
  357 + return ":/images/cook_step_type/sys_icon_10.png";
  358 + case Ripen:
  359 + case Ferment:
  360 + case Moisten:
  361 + return ":/images/cook_step_type/sys_icon_11.png";
  362 + case Dry:
  363 + return ":/images/cook_step_type/sys_icon_12.png";
  364 + default:
  365 + return "";
  366 + }
  367 +}
  368 +
  369 +QString Define::name(Define::StepType type)
  370 +{
  371 + switch (type)
  372 + {
  373 + case Preheat:
  374 + return "예열";
  375 + case PutThermometer:
  376 + return "중심 온도계 삽입";
  377 + case Load:
  378 + return "식재료 적재";
  379 + case Cut:
  380 + return "자르기";
  381 + case Pour:
  382 + return "물 붓기";
  383 + case Bake:
  384 + return "베이킹";
  385 + case Dry:
  386 + return "건조";
  387 + case Ferment:
  388 + return "발효";
  389 + case BlowSteam:
  390 + return "스팀 쏘이기";
  391 + case CoolDown:
  392 + return "식히기";
  393 + case Steam:
  394 + return "찌기";
  395 + case Roast:
  396 + return "로스팅";
  397 + case Boil:
  398 + return "끓이기";
  399 + case Thicken:
  400 + return "걸쭉하게 만들기";
  401 + case WarmUp:
  402 + return "데우기";
  403 + case MakeCrispy:
  404 + return "바삭하게 만들기";
  405 + case Finish:
  406 + return "피니싱";
  407 + case Damp:
  408 + return "습윤하게 만들기";
  409 + case Defer:
  410 + return "보류";
  411 + case Grill:
  412 + return "그릴";
  413 + case End:
  414 + return "종료";
  415 + case Burn:
  416 + return "그을리기";
  417 + case Fry:
  418 + return "기름에 재빨리 볶기";
  419 + case HeatUp:
  420 + return "온도 높이기";
  421 + case Ripen:
  422 + return "숙성";
  423 + case RipenKeep:
  424 + return "숙성 & 보존";
  425 + case BoilSteadily:
  426 + return "뭉근하게 끓이기";
  427 + case CookGratin:
  428 + return "그라탱 요리";
  429 + case Brown:
  430 + return "브라우닝";
  431 + case Simmer:
  432 + return "약한 불로 끓이기";
  433 + case Moisten:
  434 + return "촉촉하게";
  435 + default:
  436 + return "";
  437 + }
  438 +}
  439 +
  440 +Define::Process Define::identifyProcess(QString type)
  441 +{
  442 + if (type == "again")
  443 + return CookAgain;
  444 + else if (type == "crispy3")
  445 + return MakeCrisper;
  446 + else if (type == "heatreserve")
  447 + return KeepWarm;
  448 + else
  449 + return InvalidProcess;
  450 +}
  451 +
  452 +QString Define::icon(Define::Process type)
  453 +{
  454 + switch (type)
  455 + {
  456 + case CookAgain:
  457 + return ":/images/auto_button/option_btn_01.png";
  458 + case MakeCrisper:
  459 + return ":/images/auto_button/option_btn_01.png";
  460 + case KeepWarm:
  461 + return ":/images/auto_button/option_btn_01.png";
  462 + default:
  463 + return ":/images/button/152.png";
  464 + }
  465 +}
  466 +
  467 +QString Define::iconOverlay(Define::Process type)
  468 +{
  469 + switch (type)
  470 + {
  471 + case CookAgain:
  472 + return ":/images/auto_button/option_btn_01_ov.png";
  473 + case MakeCrisper:
  474 + return ":/images/auto_button/option_btn_01_ov.png";
  475 + case KeepWarm:
  476 + return ":/images/auto_button/option_btn_01_ov.png";
  477 + default:
  478 + return ":/images/button/152_ov.png";
  479 + }
  480 +}
  481 +
  482 +QString Define::name(Define::Process type)
  483 +{
  484 + switch (type)
  485 + {
  486 + case CookAgain:
  487 + return "새로운 재료 넣기";
  488 + case MakeCrisper:
  489 + return "바삭함 주기";
  490 + case KeepWarm:
  491 + return "보온 유지";
  492 + default:
  493 + return "";
  494 + }
  495 +}
... ...
app/gui/oven_control/define.h
... ... @@ -0,0 +1,118 @@
  1 +#ifndef DEFINE_H
  2 +#define DEFINE_H
  3 +
  4 +#include <QtCore>
  5 +
  6 +namespace Define
  7 +{
  8 + enum CookType
  9 + {
  10 + InvalidCookType,
  11 + Poultry,
  12 + Meat,
  13 + Fish,
  14 + Desert,
  15 + Vegetable,
  16 + Bread,
  17 + Etc
  18 + };
  19 +
  20 + QString icon(CookType type);
  21 +
  22 + enum ConfigType
  23 + {
  24 + InvalidConfig,
  25 + ConfigNotUsed,
  26 + Brightness,
  27 + BurnDegree,
  28 + SoftBoilDegree,
  29 + PieceSize,
  30 + CrispyDegree,
  31 + MoistDegree,
  32 + Thickness,
  33 + Humidity,
  34 + Temperature,
  35 + Time,
  36 + CoreTemperature,
  37 + Thermometer
  38 + };
  39 +
  40 + ConfigType identifyConfigType(QString type);
  41 + QString icon(ConfigType type);
  42 + QString iconOverlay(ConfigType type);
  43 + QString minimum(ConfigType type);
  44 + QString maximum(ConfigType type);
  45 +
  46 + enum StepClass
  47 + {
  48 + InvalidClass,
  49 + PreheatClass,
  50 + DoorClass,
  51 + CookClass
  52 + };
  53 +
  54 + enum StepType
  55 + {
  56 + Invalid,
  57 +
  58 + Preheat, // 예열
  59 +
  60 + PutThermometer, // 중심 온도계 삽입
  61 + Load, // 식재료 적재
  62 + Cut, // 자르기
  63 + Pour, // 물 붓기
  64 +
  65 + Bake, // 베이킹
  66 + Dry, // 건조
  67 + Ferment, // 발효
  68 + BlowSteam, // 스팀 쏘이기
  69 + CoolDown, // 식히기
  70 + Steam, // 찌기
  71 + Roast, // 로스팅
  72 + Boil, // 끓이기
  73 + Thicken, // 걸쭉하게 만들기
  74 + WarmUp, // 데우기
  75 + MakeCrispy, // 바삭하게 만들기
  76 + Finish, // 피니싱
  77 + Damp, // 습윤하게 만들기
  78 + Defer, // 보류
  79 + Grill, // 그릴
  80 + End, // 종료
  81 + Burn, // 그을리기
  82 + Fry, // 기름에 볶기
  83 + HeatUp, // 온도 높이기
  84 + Ripen, // 숙성
  85 + RipenKeep, // 숙성 & 보존
  86 + BoilSteadily, // 뭉근하게 끓이기
  87 + CookGratin, // 그라탱 요리
  88 + Brown, // 브라우닝
  89 + Simmer, // 약한 불로 끓이기
  90 + Moisten // 촉촉하게
  91 + };
  92 +
  93 + StepType identifyStepType(QString type);
  94 + StepClass classify(StepType type);
  95 + QString icon(StepType type);
  96 + QString name(StepType type);
  97 +
  98 + enum Mode {
  99 + InvalidMode, SteamMode, DryMode, CombiMode
  100 + };
  101 +
  102 + Mode identifyMode(QString mode);
  103 +
  104 + enum Process
  105 + {
  106 + InvalidProcess,
  107 + CookAgain,
  108 + MakeCrisper,
  109 + KeepWarm
  110 + };
  111 +
  112 + Process identifyProcess(QString type);
  113 + QString icon(Process type);
  114 + QString iconOverlay(Process type);
  115 + QString name(Process type);
  116 +}
  117 +
  118 +#endif // DEFINE_H
... ...
app/gui/oven_control/keepwarmpopup.cpp
... ... @@ -0,0 +1,34 @@
  1 +#include "keepwarmpopup.h"
  2 +#include "ui_keepwarmpopup.h"
  3 +
  4 +KeepWarmPopup::KeepWarmPopup(QWidget *parent) :
  5 + QWidget(parent),
  6 + ui(new Ui::KeepWarmPopup)
  7 +{
  8 + ui->setupUi(this);
  9 +
  10 + setAttribute(Qt::WA_DeleteOnClose);
  11 +
  12 + connect(&updateViewTimer, SIGNAL(timeout()), SLOT(updateView()));
  13 + updateViewTimer.start(100);
  14 +
  15 + startTime.start();
  16 +}
  17 +
  18 +KeepWarmPopup::~KeepWarmPopup()
  19 +{
  20 + delete ui;
  21 +}
  22 +
  23 +void KeepWarmPopup::updateView()
  24 +{
  25 + int elapsed = startTime.elapsed() / 1000;
  26 + ui->timeLabel->setText(QString("%1:%2")
  27 + .arg(elapsed / 60, 2, 10, QLatin1Char('0'))
  28 + .arg(elapsed % 60, 2, 10, QLatin1Char('0')));
  29 +}
  30 +
  31 +void KeepWarmPopup::on_stopButton_clicked()
  32 +{
  33 + close();
  34 +}
... ...
app/gui/oven_control/keepwarmpopup.h
... ... @@ -0,0 +1,32 @@
  1 +#ifndef KEEPWARMPOPUP_H
  2 +#define KEEPWARMPOPUP_H
  3 +
  4 +#include <QWidget>
  5 +#include <QTime>
  6 +#include <QTimer>
  7 +
  8 +namespace Ui {
  9 +class KeepWarmPopup;
  10 +}
  11 +
  12 +class KeepWarmPopup : public QWidget
  13 +{
  14 + Q_OBJECT
  15 +
  16 +public:
  17 + explicit KeepWarmPopup(QWidget *parent = 0);
  18 + ~KeepWarmPopup();
  19 +
  20 +private:
  21 + Ui::KeepWarmPopup *ui;
  22 +
  23 + QTime startTime;
  24 + QTimer updateViewTimer;
  25 +
  26 +
  27 +private slots:
  28 + void updateView();
  29 + void on_stopButton_clicked();
  30 +};
  31 +
  32 +#endif // KEEPWARMPOPUP_H
... ...
app/gui/oven_control/keepwarmpopup.ui
... ... @@ -0,0 +1,362 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<ui version="4.0">
  3 + <class>KeepWarmPopup</class>
  4 + <widget class="QWidget" name="KeepWarmPopup">
  5 + <property name="geometry">
  6 + <rect>
  7 + <x>0</x>
  8 + <y>0</y>
  9 + <width>900</width>
  10 + <height>1600</height>
  11 + </rect>
  12 + </property>
  13 + <property name="windowTitle">
  14 + <string>Form</string>
  15 + </property>
  16 + <property name="styleSheet">
  17 + <string notr="true">QPushButton { border: none; }</string>
  18 + </property>
  19 + <widget class="QWidget" name="background" native="true">
  20 + <property name="geometry">
  21 + <rect>
  22 + <x>21</x>
  23 + <y>446</y>
  24 + <width>858</width>
  25 + <height>984</height>
  26 + </rect>
  27 + </property>
  28 + <property name="styleSheet">
  29 + <string notr="true">#background {
  30 +background-image: url(:/images/background/original.png);
  31 +margin: -446px -170px -21px -21px;
  32 +padding: 446px 170px 21px 21px;
  33 +image: url(:/images/background/popup/error.png);
  34 +}</string>
  35 + </property>
  36 + <widget class="QLabel" name="label">
  37 + <property name="geometry">
  38 + <rect>
  39 + <x>0</x>
  40 + <y>0</y>
  41 + <width>858</width>
  42 + <height>227</height>
  43 + </rect>
  44 + </property>
  45 + <property name="palette">
  46 + <palette>
  47 + <active>
  48 + <colorrole role="WindowText">
  49 + <brush brushstyle="SolidPattern">
  50 + <color alpha="255">
  51 + <red>255</red>
  52 + <green>255</green>
  53 + <blue>255</blue>
  54 + </color>
  55 + </brush>
  56 + </colorrole>
  57 + </active>
  58 + <inactive>
  59 + <colorrole role="WindowText">
  60 + <brush brushstyle="SolidPattern">
  61 + <color alpha="255">
  62 + <red>255</red>
  63 + <green>255</green>
  64 + <blue>255</blue>
  65 + </color>
  66 + </brush>
  67 + </colorrole>
  68 + </inactive>
  69 + <disabled>
  70 + <colorrole role="WindowText">
  71 + <brush brushstyle="SolidPattern">
  72 + <color alpha="255">
  73 + <red>123</red>
  74 + <green>123</green>
  75 + <blue>123</blue>
  76 + </color>
  77 + </brush>
  78 + </colorrole>
  79 + </disabled>
  80 + </palette>
  81 + </property>
  82 + <property name="font">
  83 + <font>
  84 + <family>NanumGothic</family>
  85 + <pointsize>18</pointsize>
  86 + <weight>75</weight>
  87 + <bold>true</bold>
  88 + </font>
  89 + </property>
  90 + <property name="text">
  91 + <string>보온 유지</string>
  92 + </property>
  93 + <property name="alignment">
  94 + <set>Qt::AlignCenter</set>
  95 + </property>
  96 + </widget>
  97 + <widget class="QLabel" name="label_2">
  98 + <property name="geometry">
  99 + <rect>
  100 + <x>0</x>
  101 + <y>227</y>
  102 + <width>858</width>
  103 + <height>252</height>
  104 + </rect>
  105 + </property>
  106 + <property name="palette">
  107 + <palette>
  108 + <active>
  109 + <colorrole role="WindowText">
  110 + <brush brushstyle="SolidPattern">
  111 + <color alpha="255">
  112 + <red>255</red>
  113 + <green>255</green>
  114 + <blue>255</blue>
  115 + </color>
  116 + </brush>
  117 + </colorrole>
  118 + </active>
  119 + <inactive>
  120 + <colorrole role="WindowText">
  121 + <brush brushstyle="SolidPattern">
  122 + <color alpha="255">
  123 + <red>255</red>
  124 + <green>255</green>
  125 + <blue>255</blue>
  126 + </color>
  127 + </brush>
  128 + </colorrole>
  129 + </inactive>
  130 + <disabled>
  131 + <colorrole role="WindowText">
  132 + <brush brushstyle="SolidPattern">
  133 + <color alpha="255">
  134 + <red>123</red>
  135 + <green>123</green>
  136 + <blue>123</blue>
  137 + </color>
  138 + </brush>
  139 + </colorrole>
  140 + </disabled>
  141 + </palette>
  142 + </property>
  143 + <property name="font">
  144 + <font>
  145 + <family>NanumGothic</family>
  146 + <pointsize>14</pointsize>
  147 + <weight>75</weight>
  148 + <bold>true</bold>
  149 + </font>
  150 + </property>
  151 + <property name="text">
  152 + <string>보온 유지 중입니다</string>
  153 + </property>
  154 + <property name="alignment">
  155 + <set>Qt::AlignCenter</set>
  156 + </property>
  157 + </widget>
  158 + <widget class="QLabel" name="timeLabel">
  159 + <property name="geometry">
  160 + <rect>
  161 + <x>0</x>
  162 + <y>479</y>
  163 + <width>858</width>
  164 + <height>252</height>
  165 + </rect>
  166 + </property>
  167 + <property name="palette">
  168 + <palette>
  169 + <active>
  170 + <colorrole role="WindowText">
  171 + <brush brushstyle="SolidPattern">
  172 + <color alpha="255">
  173 + <red>255</red>
  174 + <green>255</green>
  175 + <blue>255</blue>
  176 + </color>
  177 + </brush>
  178 + </colorrole>
  179 + </active>
  180 + <inactive>
  181 + <colorrole role="WindowText">
  182 + <brush brushstyle="SolidPattern">
  183 + <color alpha="255">
  184 + <red>255</red>
  185 + <green>255</green>
  186 + <blue>255</blue>
  187 + </color>
  188 + </brush>
  189 + </colorrole>
  190 + </inactive>
  191 + <disabled>
  192 + <colorrole role="WindowText">
  193 + <brush brushstyle="SolidPattern">
  194 + <color alpha="255">
  195 + <red>123</red>
  196 + <green>123</green>
  197 + <blue>123</blue>
  198 + </color>
  199 + </brush>
  200 + </colorrole>
  201 + </disabled>
  202 + </palette>
  203 + </property>
  204 + <property name="font">
  205 + <font>
  206 + <family>NanumGothic</family>
  207 + <pointsize>22</pointsize>
  208 + <weight>75</weight>
  209 + <bold>true</bold>
  210 + </font>
  211 + </property>
  212 + <property name="text">
  213 + <string>00:00</string>
  214 + </property>
  215 + <property name="alignment">
  216 + <set>Qt::AlignCenter</set>
  217 + </property>
  218 + </widget>
  219 + <widget class="QPushButton" name="stopButton">
  220 + <property name="geometry">
  221 + <rect>
  222 + <x>0</x>
  223 + <y>731</y>
  224 + <width>858</width>
  225 + <height>252</height>
  226 + </rect>
  227 + </property>
  228 + <property name="font">
  229 + <font>
  230 + <pointsize>10</pointsize>
  231 + </font>
  232 + </property>
  233 + <property name="styleSheet">
  234 + <string notr="true">QPushButton { color: white; }
  235 +QPushButton:pressed { color: yellow; }</string>
  236 + </property>
  237 + <property name="text">
  238 + <string>중단</string>
  239 + </property>
  240 + </widget>
  241 + </widget>
  242 + <widget class="QPushButton" name="upperCloseButton">
  243 + <property name="geometry">
  244 + <rect>
  245 + <x>0</x>
  246 + <y>0</y>
  247 + <width>900</width>
  248 + <height>446</height>
  249 + </rect>
  250 + </property>
  251 + <property name="text">
  252 + <string/>
  253 + </property>
  254 + </widget>
  255 + <widget class="QPushButton" name="leftCloseButton">
  256 + <property name="geometry">
  257 + <rect>
  258 + <x>0</x>
  259 + <y>446</y>
  260 + <width>21</width>
  261 + <height>984</height>
  262 + </rect>
  263 + </property>
  264 + <property name="text">
  265 + <string/>
  266 + </property>
  267 + </widget>
  268 + <widget class="QPushButton" name="rightCloseButton">
  269 + <property name="geometry">
  270 + <rect>
  271 + <x>879</x>
  272 + <y>446</y>
  273 + <width>130</width>
  274 + <height>984</height>
  275 + </rect>
  276 + </property>
  277 + <property name="text">
  278 + <string/>
  279 + </property>
  280 + </widget>
  281 + <widget class="QPushButton" name="bottomCloseButton">
  282 + <property name="geometry">
  283 + <rect>
  284 + <x>0</x>
  285 + <y>1430</y>
  286 + <width>900</width>
  287 + <height>170</height>
  288 + </rect>
  289 + </property>
  290 + <property name="text">
  291 + <string/>
  292 + </property>
  293 + </widget>
  294 + </widget>
  295 + <resources/>
  296 + <connections>
  297 + <connection>
  298 + <sender>upperCloseButton</sender>
  299 + <signal>clicked()</signal>
  300 + <receiver>KeepWarmPopup</receiver>
  301 + <slot>close()</slot>
  302 + <hints>
  303 + <hint type="sourcelabel">
  304 + <x>449</x>
  305 + <y>222</y>
  306 + </hint>
  307 + <hint type="destinationlabel">
  308 + <x>449</x>
  309 + <y>799</y>
  310 + </hint>
  311 + </hints>
  312 + </connection>
  313 + <connection>
  314 + <sender>leftCloseButton</sender>
  315 + <signal>clicked()</signal>
  316 + <receiver>KeepWarmPopup</receiver>
  317 + <slot>close()</slot>
  318 + <hints>
  319 + <hint type="sourcelabel">
  320 + <x>10</x>
  321 + <y>937</y>
  322 + </hint>
  323 + <hint type="destinationlabel">
  324 + <x>449</x>
  325 + <y>799</y>
  326 + </hint>
  327 + </hints>
  328 + </connection>
  329 + <connection>
  330 + <sender>rightCloseButton</sender>
  331 + <signal>clicked()</signal>
  332 + <receiver>KeepWarmPopup</receiver>
  333 + <slot>close()</slot>
  334 + <hints>
  335 + <hint type="sourcelabel">
  336 + <x>943</x>
  337 + <y>937</y>
  338 + </hint>
  339 + <hint type="destinationlabel">
  340 + <x>449</x>
  341 + <y>799</y>
  342 + </hint>
  343 + </hints>
  344 + </connection>
  345 + <connection>
  346 + <sender>bottomCloseButton</sender>
  347 + <signal>clicked()</signal>
  348 + <receiver>KeepWarmPopup</receiver>
  349 + <slot>close()</slot>
  350 + <hints>
  351 + <hint type="sourcelabel">
  352 + <x>449</x>
  353 + <y>1514</y>
  354 + </hint>
  355 + <hint type="destinationlabel">
  356 + <x>449</x>
  357 + <y>799</y>
  358 + </hint>
  359 + </hints>
  360 + </connection>
  361 + </connections>
  362 +</ui>
... ...
app/gui/oven_control/oven_control.pro
... ... @@ -14,7 +14,7 @@ TEMPLATE = app
14 14  
15 15  
16 16 SOURCES += main.cpp\
17   - mainwindow.cpp \
  17 + mainwindow.cpp \
18 18 cook.cpp \
19 19 oven.cpp \
20 20 abstractoveninterface.cpp \
... ... @@ -46,7 +46,11 @@ SOURCES += main.cpp\
46 46 engineermenuwindow.cpp \
47 47 ovenstatics.cpp \
48 48 servicedatas.cpp \
49   - popupwindow.cpp
  49 + popupwindow.cpp \
  50 + cookbook.cpp \
  51 + define.cpp \
  52 + autocook.cpp \
  53 + keepwarmpopup.cpp
50 54  
51 55 HEADERS += mainwindow.h \
52 56 cook.h \
... ... @@ -81,7 +85,11 @@ HEADERS += mainwindow.h \
81 85 engineermenuwindow.h \
82 86 ovenstatics.h \
83 87 servicedatas.h \
84   - popupwindow.h
  88 + popupwindow.h \
  89 + cookbook.h \
  90 + define.h \
  91 + autocook.h \
  92 + keepwarmpopup.h
85 93  
86 94 FORMS += mainwindow.ui \
87 95 manualcookwindow.ui \
... ... @@ -100,7 +108,8 @@ FORMS += mainwindow.ui \
100 108 preheatpopup.ui \
101 109 cooldownpopup.ui \
102 110 engineermenuwindow.ui \
103   - popupwindow.ui
  111 + popupwindow.ui \
  112 + keepwarmpopup.ui
104 113  
105 114 RESOURCES += \
106 115 resources.qrc
... ...
app/gui/oven_control/preheattempgauge.cpp
... ... @@ -9,32 +9,41 @@ PreheatTempGauge::PreheatTempGauge(QWidget *parent) : QWidget(parent)
9 9 indicator.load(":/images/gauge/bar_indicator.png");
10 10 body.load(":/images/gauge/bar_short_red.png");
11 11  
12   - value = 0;
  12 + val = 0;
13 13 min = 0;
14 14 max = 1;
15 15 }
16 16  
17 17 void PreheatTempGauge::setValue(int value)
18 18 {
19   - this->value = qBound(min, value, max);
  19 + if (value == val)
  20 + return;
  21 +
  22 + val = qBound(min, value, max);
20 23  
21 24 update();
22 25 }
23 26  
24 27 void PreheatTempGauge::setMinimum(int minimum)
25 28 {
  29 + if (minimum == min)
  30 + return;
  31 +
26 32 min = minimum;
27 33 max = qMax(min, max);
28   - value = qBound(min, value, max);
  34 + val = qBound(min, val, max);
29 35  
30 36 update();
31 37 }
32 38  
33 39 void PreheatTempGauge::setMaximum(int maximum)
34 40 {
  41 + if (maximum == max)
  42 + return;
  43 +
35 44 max = maximum;
36 45 min = qMin(min, max);
37   - value = qBound(min, value, max);
  46 + val = qBound(min, val, max);
38 47  
39 48 update();
40 49 }
... ... @@ -45,7 +54,7 @@ void PreheatTempGauge::paintEvent(QPaintEvent */*event*/)
45 54 painter.setBrush(Qt::NoBrush);
46 55 painter.setPen(Qt::NoPen);
47 56  
48   - qreal percentage = (qreal) (value - min) / qMax(max - min, 1);
  57 + qreal percentage = (qreal) (val - min) / qMax(max - min, 1);
49 58 percentage = qBound((qreal) 0.0, percentage, (qreal) 1.0);
50 59  
51 60 QRect targetRect(
... ...
app/gui/oven_control/preheattempgauge.h
... ... @@ -13,7 +13,7 @@ public:
13 13 signals:
14 14  
15 15 public slots:
16   - void setValue(int value);
  16 + void setValue(int val);
17 17 void setMinimum(int minimum);
18 18 void setMaximum(int maximum);
19 19  
... ... @@ -25,7 +25,7 @@ protected:
25 25 QPixmap border;
26 26 QPixmap indicator;
27 27  
28   - int value;
  28 + int val;
29 29 int min;
30 30 int max;
31 31 };
... ...