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 @@ @@ -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 @@ @@ -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 #include "autocookconfigwindow.h" 1 #include "autocookconfigwindow.h"
2 #include "ui_autocookconfigwindow.h" 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 QMainWindow(parent), 7 QMainWindow(parent),
6 ui(new Ui::AutoCookConfigWindow), 8 ui(new Ui::AutoCookConfigWindow),
7 oven(oven), 9 oven(oven),
@@ -12,13 +14,9 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract @@ -12,13 +14,9 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
12 ui->clockContainer->setParent(ui->upperStack); 14 ui->clockContainer->setParent(ui->upperStack);
13 setAttribute(Qt::WA_DeleteOnClose); 15 setAttribute(Qt::WA_DeleteOnClose);
14 16
15 - ui->cookTypeIcon->setPixmap(Cook::icon(cook->type()));  
16 - ui->selectCookButton->setText(cook->name());  
17 -  
18 configWidgets.append( 17 configWidgets.append(
19 ConfigWidget { 18 ConfigWidget {
20 ui->configButton_1, 19 ui->configButton_1,
21 - ui->configBlock_1,  
22 ui->configMinLabel_1, 20 ui->configMinLabel_1,
23 ui->configMaxLabel_1, 21 ui->configMaxLabel_1,
24 ui->configCurrentLabel_1, 22 ui->configCurrentLabel_1,
@@ -27,7 +25,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract @@ -27,7 +25,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
27 configWidgets.append( 25 configWidgets.append(
28 ConfigWidget { 26 ConfigWidget {
29 ui->configButton_2, 27 ui->configButton_2,
30 - ui->configBlock_2,  
31 ui->configMinLabel_2, 28 ui->configMinLabel_2,
32 ui->configMaxLabel_2, 29 ui->configMaxLabel_2,
33 ui->configCurrentLabel_2, 30 ui->configCurrentLabel_2,
@@ -36,7 +33,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract @@ -36,7 +33,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
36 configWidgets.append( 33 configWidgets.append(
37 ConfigWidget { 34 ConfigWidget {
38 ui->configButton_3, 35 ui->configButton_3,
39 - ui->configBlock_3,  
40 ui->configMinLabel_3, 36 ui->configMinLabel_3,
41 ui->configMaxLabel_3, 37 ui->configMaxLabel_3,
42 ui->configCurrentLabel_3, 38 ui->configCurrentLabel_3,
@@ -45,7 +41,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract @@ -45,7 +41,6 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
45 configWidgets.append( 41 configWidgets.append(
46 ConfigWidget { 42 ConfigWidget {
47 ui->configButton_4, 43 ui->configButton_4,
48 - ui->configBlock_4,  
49 ui->configMinLabel_4, 44 ui->configMinLabel_4,
50 ui->configMaxLabel_4, 45 ui->configMaxLabel_4,
51 ui->configCurrentLabel_4, 46 ui->configCurrentLabel_4,
@@ -54,21 +49,46 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract @@ -54,21 +49,46 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
54 configWidgets.append( 49 configWidgets.append(
55 ConfigWidget { 50 ConfigWidget {
56 ui->configButton_5, 51 ui->configButton_5,
57 - ui->configBlock_5,  
58 ui->configMinLabel_5, 52 ui->configMinLabel_5,
59 ui->configMaxLabel_5, 53 ui->configMaxLabel_5,
60 ui->configCurrentLabel_5, 54 ui->configCurrentLabel_5,
61 ui->configSlider_5 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 for (int idx = 0; idx < 5; idx++) 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 ConfigWidget cw = configWidgets.at(idx); 90 ConfigWidget cw = configWidgets.at(idx);
70 cw.button->hide(); 91 cw.button->hide();
71 - cw.block->hide();  
72 cw.minimum->hide(); 92 cw.minimum->hide();
73 cw.maximum->hide(); 93 cw.maximum->hide();
74 cw.current->hide(); 94 cw.current->hide();
@@ -78,29 +98,29 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract @@ -78,29 +98,29 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
78 { 98 {
79 ConfigWidget cw = configWidgets.at(idx); 99 ConfigWidget cw = configWidgets.at(idx);
80 cw.button->setStyleSheet( 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 cw.slider->blockSignals(true); 109 cw.slider->blockSignals(true);
90 cw.slider->setMinimum(1); 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 cw.slider->blockSignals(false); 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 cw.slider->setProperty("sliderColor", "white"); 118 cw.slider->setProperty("sliderColor", "white");
99 break; 119 break;
100 - case Cook::BurnDegree: 120 + case Define::BurnDegree:
101 cw.slider->setProperty("sliderColor", "yellow"); 121 cw.slider->setProperty("sliderColor", "yellow");
102 break; 122 break;
103 - case Cook::Brightness: 123 + case Define::Brightness:
104 cw.slider->setProperty("sliderColor", "red"); 124 cw.slider->setProperty("sliderColor", "red");
105 break; 125 break;
106 default: 126 default:
@@ -108,61 +128,32 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract @@ -108,61 +128,32 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Oven *oven, Abstract
108 break; 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 connect(cw.slider, SIGNAL(valueChanged(int)), SLOT(updateConfig())); 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 void AutoCookConfigWindow::updateView() 142 void AutoCookConfigWindow::updateView()
149 { 143 {
150 for (int idx = 0; idx < 5; idx++) 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 continue; 148 continue;
158 149
159 ConfigWidget cw = configWidgets.at(idx); 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 if (time >= 3600) 157 if (time >= 3600)
167 cw.current->setText(QString().sprintf( 158 cw.current->setText(QString().sprintf(
168 "%d" 159 "%d"
@@ -186,43 +177,54 @@ void AutoCookConfigWindow::updateView() @@ -186,43 +177,54 @@ void AutoCookConfigWindow::updateView()
186 time)); 177 time));
187 break; 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 break; 185 break;
195 default: 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 break; 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 void AutoCookConfigWindow::updateConfig() 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,7 +8,8 @@
8 #include <QSlider> 8 #include <QSlider>
9 9
10 #include "oven.h" 10 #include "oven.h"
11 -#include "cook.h" 11 +//#include "cook.h"
  12 +#include "cookbook.h"
12 13
13 namespace Ui { 14 namespace Ui {
14 class AutoCookConfigWindow; 15 class AutoCookConfigWindow;
@@ -19,20 +20,19 @@ class AutoCookConfigWindow : public QMainWindow @@ -19,20 +20,19 @@ class AutoCookConfigWindow : public QMainWindow
19 Q_OBJECT 20 Q_OBJECT
20 21
21 public: 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 ~AutoCookConfigWindow(); 25 ~AutoCookConfigWindow();
24 26
25 private: 27 private:
26 Ui::AutoCookConfigWindow *ui; 28 Ui::AutoCookConfigWindow *ui;
27 Oven *oven; 29 Oven *oven;
28 - AbstractCook *cook; 30 + Cook cook;
29 31
30 QTimer cookStartTimer; 32 QTimer cookStartTimer;
31 - bool interTempEnabled;  
32 33
33 struct ConfigWidget { 34 struct ConfigWidget {
34 QPushButton *button; 35 QPushButton *button;
35 - QWidget *block;  
36 QLabel *minimum; 36 QLabel *minimum;
37 QLabel *maximum; 37 QLabel *maximum;
38 QLabel *current; 38 QLabel *current;
@@ -42,9 +42,14 @@ private: @@ -42,9 +42,14 @@ private:
42 QList<ConfigWidget> configWidgets; 42 QList<ConfigWidget> configWidgets;
43 43
44 private slots: 44 private slots:
  45 + void setupUi();
45 void updateView(); 46 void updateView();
46 void updateConfig(); 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 #endif // AUTOCOOKCONFIGWINDOW_H 55 #endif // AUTOCOOKCONFIGWINDOW_H
app/gui/oven_control/autocookconfigwindow.ui
@@ -14,11 +14,11 @@ @@ -14,11 +14,11 @@
14 <string>MainWindow</string> 14 <string>MainWindow</string>
15 </property> 15 </property>
16 <property name="styleSheet"> 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 #bottomBar { background-image: url(:/images/bottom_bar/background.png); } 18 #bottomBar { background-image: url(:/images/bottom_bar/background.png); }
19 19
20 QSlider::groove { 20 QSlider::groove {
21 -background-image: url(:/images/images/auto/gau_04.png); 21 +background-image: url(:/images/slider/groove.png);
22 background-repeat: no-repeat; 22 background-repeat: no-repeat;
23 background-position: center; 23 background-position: center;
24 } 24 }
@@ -30,31 +30,38 @@ margin: 0px 5px; @@ -30,31 +30,38 @@ margin: 0px 5px;
30 } 30 }
31 31
32 QSlider[sliderColor=&quot;red&quot;]::sub-page { 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 QSlider[sliderColor=&quot;yellow&quot;]::sub-page { 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 QSlider[sliderColor=&quot;white&quot;]::sub-page { 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 QSlider[sliderColor=&quot;blue&quot;]::sub-page { 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 QSlider[sliderColor=&quot;green&quot;]::sub-page { 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 QSlider::handle { 52 QSlider::handle {
53 -background-image: url(:/images/images/manual/graphe_BTN_Bigsize.png); 53 +background-image: url(:/images/slider/handle_big.png);
54 background-repeat: no-repeat; 54 background-repeat: no-repeat;
55 background-position: center; 55 background-position: center;
56 width: 23px; 56 width: 23px;
57 height: 33px; 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 }</string> 65 }</string>
59 </property> 66 </property>
60 <widget class="QWidget" name="centralwidget"> 67 <widget class="QWidget" name="centralwidget">
@@ -109,14 +116,14 @@ height: 33px; @@ -109,14 +116,14 @@ height: 33px;
109 </sizepolicy> 116 </sizepolicy>
110 </property> 117 </property>
111 <property name="styleSheet"> 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 </property> 121 </property>
115 <property name="text"> 122 <property name="text">
116 <string/> 123 <string/>
117 </property> 124 </property>
118 </widget> 125 </widget>
119 - <widget class="QPushButton" name="backButton_3"> 126 + <widget class="QPushButton" name="washButton">
120 <property name="geometry"> 127 <property name="geometry">
121 <rect> 128 <rect>
122 <x>514</x> 129 <x>514</x>
@@ -132,14 +139,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_03_ov. @@ -132,14 +139,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_03_ov.
132 </sizepolicy> 139 </sizepolicy>
133 </property> 140 </property>
134 <property name="styleSheet"> 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 </property> 144 </property>
138 <property name="text"> 145 <property name="text">
139 <string/> 146 <string/>
140 </property> 147 </property>
141 </widget> 148 </widget>
142 - <widget class="QPushButton" name="backButton_2"> 149 + <widget class="QPushButton" name="configButton">
143 <property name="geometry"> 150 <property name="geometry">
144 <rect> 151 <rect>
145 <x>288</x> 152 <x>288</x>
@@ -155,14 +162,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_05_ov. @@ -155,14 +162,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_05_ov.
155 </sizepolicy> 162 </sizepolicy>
156 </property> 163 </property>
157 <property name="styleSheet"> 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 </property> 167 </property>
161 <property name="text"> 168 <property name="text">
162 <string/> 169 <string/>
163 </property> 170 </property>
164 </widget> 171 </widget>
165 - <widget class="QPushButton" name="backButton_4"> 172 + <widget class="QPushButton" name="helpButton">
166 <property name="geometry"> 173 <property name="geometry">
167 <rect> 174 <rect>
168 <x>627</x> 175 <x>627</x>
@@ -178,14 +185,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_01_ov. @@ -178,14 +185,14 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_01_ov.
178 </sizepolicy> 185 </sizepolicy>
179 </property> 186 </property>
180 <property name="styleSheet"> 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 </property> 190 </property>
184 <property name="text"> 191 <property name="text">
185 <string/> 192 <string/>
186 </property> 193 </property>
187 </widget> 194 </widget>
188 - <widget class="QPushButton" name="backButton_5"> 195 + <widget class="QPushButton" name="favoritesButton">
189 <property name="geometry"> 196 <property name="geometry">
190 <rect> 197 <rect>
191 <x>401</x> 198 <x>401</x>
@@ -201,7 +208,8 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_02_ov. @@ -201,7 +208,8 @@ QPushButton:pressed { border-image: url(:/images/images/auto/006_sys_icon_02_ov.
201 </sizepolicy> 208 </sizepolicy>
202 </property> 209 </property>
203 <property name="styleSheet"> 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 </property> 213 </property>
206 <property name="text"> 214 <property name="text">
207 <string/> 215 <string/>
@@ -632,8 +640,8 @@ border-image: url(:/images/button/152_ov.png); @@ -632,8 +640,8 @@ border-image: url(:/images/button/152_ov.png);
632 <string/> 640 <string/>
633 </property> 641 </property>
634 <property name="icon"> 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 </property> 645 </property>
638 <property name="iconSize"> 646 <property name="iconSize">
639 <size> 647 <size>
@@ -645,25 +653,18 @@ border-image: url(:/images/button/152_ov.png); @@ -645,25 +653,18 @@ border-image: url(:/images/button/152_ov.png);
645 <widget class="QPushButton" name="configButton_1"> 653 <widget class="QPushButton" name="configButton_1">
646 <property name="geometry"> 654 <property name="geometry">
647 <rect> 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 </rect> 660 </rect>
653 </property> 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 <property name="text"> 662 <property name="text">
665 <string/> 663 <string/>
666 </property> 664 </property>
  665 + <property name="style" stdset="0">
  666 + <string notr="true">icon</string>
  667 + </property>
667 </widget> 668 </widget>
668 <widget class="QSlider" name="configSlider_4"> 669 <widget class="QSlider" name="configSlider_4">
669 <property name="geometry"> 670 <property name="geometry">
@@ -693,25 +694,18 @@ QPushButton:pressed { @@ -693,25 +694,18 @@ QPushButton:pressed {
693 <widget class="QPushButton" name="configButton_4"> 694 <widget class="QPushButton" name="configButton_4">
694 <property name="geometry"> 695 <property name="geometry">
695 <rect> 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 </rect> 701 </rect>
701 </property> 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 <property name="text"> 703 <property name="text">
713 <string/> 704 <string/>
714 </property> 705 </property>
  706 + <property name="style" stdset="0">
  707 + <string notr="true">icon</string>
  708 + </property>
715 </widget> 709 </widget>
716 <widget class="QLabel" name="configMaxLabel_2"> 710 <widget class="QLabel" name="configMaxLabel_2">
717 <property name="enabled"> 711 <property name="enabled">
@@ -775,32 +769,6 @@ QPushButton:pressed { @@ -775,32 +769,6 @@ QPushButton:pressed {
775 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> 769 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
776 </property> 770 </property>
777 </widget> 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 <widget class="QSlider" name="configSlider_2"> 772 <widget class="QSlider" name="configSlider_2">
805 <property name="geometry"> 773 <property name="geometry">
806 <rect> 774 <rect>
@@ -1042,25 +1010,18 @@ QPushButton:pressed { @@ -1042,25 +1010,18 @@ QPushButton:pressed {
1042 <widget class="QPushButton" name="configButton_2"> 1010 <widget class="QPushButton" name="configButton_2">
1043 <property name="geometry"> 1011 <property name="geometry">
1044 <rect> 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 </rect> 1017 </rect>
1050 </property> 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 <property name="text"> 1019 <property name="text">
1062 <string/> 1020 <string/>
1063 </property> 1021 </property>
  1022 + <property name="style" stdset="0">
  1023 + <string notr="true">icon</string>
  1024 + </property>
1064 </widget> 1025 </widget>
1065 <widget class="QLabel" name="configMinLabel_1"> 1026 <widget class="QLabel" name="configMinLabel_1">
1066 <property name="enabled"> 1027 <property name="enabled">
@@ -1124,19 +1085,6 @@ QPushButton:pressed { @@ -1124,19 +1085,6 @@ QPushButton:pressed {
1124 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> 1085 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
1125 </property> 1086 </property>
1126 </widget> 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 <widget class="QLabel" name="configMaxLabel_1"> 1088 <widget class="QLabel" name="configMaxLabel_1">
1141 <property name="enabled"> 1089 <property name="enabled">
1142 <bool>true</bool> 1090 <bool>true</bool>
@@ -1346,20 +1294,7 @@ QPushButton:pressed { @@ -1346,20 +1294,7 @@ QPushButton:pressed {
1346 <set>Qt::AlignCenter</set> 1294 <set>Qt::AlignCenter</set>
1347 </property> 1295 </property>
1348 </widget> 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 <property name="geometry"> 1298 <property name="geometry">
1364 <rect> 1299 <rect>
1365 <x>27</x> 1300 <x>27</x>
@@ -1368,32 +1303,12 @@ QPushButton:pressed { @@ -1368,32 +1303,12 @@ QPushButton:pressed {
1368 <height>140</height> 1303 <height>140</height>
1369 </rect> 1304 </rect>
1370 </property> 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 <property name="text"> 1306 <property name="text">
1395 <string/> 1307 <string/>
1396 </property> 1308 </property>
  1309 + <property name="style" stdset="0">
  1310 + <string notr="true">icon</string>
  1311 + </property>
1397 </widget> 1312 </widget>
1398 <widget class="QSlider" name="configSlider_5"> 1313 <widget class="QSlider" name="configSlider_5">
1399 <property name="geometry"> 1314 <property name="geometry">
@@ -1487,25 +1402,18 @@ QPushButton:pressed { @@ -1487,25 +1402,18 @@ QPushButton:pressed {
1487 <widget class="QPushButton" name="configButton_3"> 1402 <widget class="QPushButton" name="configButton_3">
1488 <property name="geometry"> 1403 <property name="geometry">
1489 <rect> 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 </rect> 1409 </rect>
1495 </property> 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 <property name="text"> 1411 <property name="text">
1507 <string/> 1412 <string/>
1508 </property> 1413 </property>
  1414 + <property name="style" stdset="0">
  1415 + <string notr="true">icon</string>
  1416 + </property>
1509 </widget> 1417 </widget>
1510 <widget class="QSlider" name="configSlider_1"> 1418 <widget class="QSlider" name="configSlider_1">
1511 <property name="geometry"> 1419 <property name="geometry">
@@ -1538,41 +1446,6 @@ QPushButton:pressed { @@ -1538,41 +1446,6 @@ QPushButton:pressed {
1538 <number>1</number> 1446 <number>1</number>
1539 </property> 1447 </property>
1540 </widget> 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 </widget> 1449 </widget>
1577 </widget> 1450 </widget>
1578 <customwidgets> 1451 <customwidgets>
@@ -1583,6 +1456,8 @@ QPushButton:pressed { @@ -1583,6 +1456,8 @@ QPushButton:pressed {
1583 <container>1</container> 1456 <container>1</container>
1584 </customwidget> 1457 </customwidget>
1585 </customwidgets> 1458 </customwidgets>
1586 - <resources/> 1459 + <resources>
  1460 + <include location="resources.qrc"/>
  1461 + </resources>
1587 <connections/> 1462 <connections/>
1588 </ui> 1463 </ui>
app/gui/oven_control/autocookselectionwindow.cpp
@@ -4,9 +4,10 @@ @@ -4,9 +4,10 @@
4 #include <QSignalMapper> 4 #include <QSignalMapper>
5 #include <QtDebug> 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 QMainWindow(parent), 11 QMainWindow(parent),
11 ui(new Ui::AutoCookSelectionWindow), 12 ui(new Ui::AutoCookSelectionWindow),
12 oven(oven), type(type), autoCookWindowOpened(false) 13 oven(oven), type(type), autoCookWindowOpened(false)
@@ -16,20 +17,9 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co @@ -16,20 +17,9 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co
16 ui->clockContainer->setParent(ui->upperStack); 17 ui->clockContainer->setParent(ui->upperStack);
17 setAttribute(Qt::WA_DeleteOnClose); 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 QSignalMapper *sm = new QSignalMapper(this); 24 QSignalMapper *sm = new QSignalMapper(this);
35 connect(sm, SIGNAL(mapped(int)), SLOT(onCookSelected(int))); 25 connect(sm, SIGNAL(mapped(int)), SLOT(onCookSelected(int)));
@@ -47,7 +37,7 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co @@ -47,7 +37,7 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co
47 "border-image: url(:/images/button/288_ov.png);\n" 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 int x = 12 + (idx % 3) * 294; 42 int x = 12 + (idx % 3) * 294;
53 int y = 615 + (idx / 3) * 80; 43 int y = 615 + (idx / 3) * 80;
@@ -56,7 +46,7 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co @@ -56,7 +46,7 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co
56 pb->setGeometry(QRect(x, y, 288, 70)); 46 pb->setGeometry(QRect(x, y, 288, 70));
57 pb->setFont(font); 47 pb->setFont(font);
58 pb->setStyleSheet(stylesheet); 48 pb->setStyleSheet(stylesheet);
59 - pb->setText(cookList.at(idx)->name()); 49 + pb->setText(book.list.at(idx));
60 50
61 sm->setMapping(pb, idx); 51 sm->setMapping(pb, idx);
62 connect(pb, SIGNAL(clicked()), sm, SLOT(map())); 52 connect(pb, SIGNAL(clicked()), sm, SLOT(map()));
@@ -66,9 +56,6 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co @@ -66,9 +56,6 @@ AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Oven *oven, Co
66 AutoCookSelectionWindow::~AutoCookSelectionWindow() 56 AutoCookSelectionWindow::~AutoCookSelectionWindow()
67 { 57 {
68 delete ui; 58 delete ui;
69 -  
70 - foreach (AbstractCook *cook, cookList)  
71 - delete cook;  
72 } 59 }
73 60
74 void AutoCookSelectionWindow::onCookSelected(int idx) 61 void AutoCookSelectionWindow::onCookSelected(int idx)
@@ -78,11 +65,12 @@ void AutoCookSelectionWindow::onCookSelected(int idx) @@ -78,11 +65,12 @@ void AutoCookSelectionWindow::onCookSelected(int idx)
78 65
79 autoCookWindowOpened = true; 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 w->setWindowModality(Qt::WindowModal); 71 w->setWindowModality(Qt::WindowModal);
83 w->showFullScreen(); 72 w->showFullScreen();
84 -  
85 - close(); 73 + w->raise();
86 } 74 }
87 75
88 void AutoCookSelectionWindow::on_backButton_clicked() 76 void AutoCookSelectionWindow::on_backButton_clicked()
app/gui/oven_control/autocookselectionwindow.h
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 #include <QMainWindow> 4 #include <QMainWindow>
5 5
6 #include "oven.h" 6 #include "oven.h"
7 -#include "cook.h" 7 +#include "cookbook.h"
8 8
9 namespace Ui { 9 namespace Ui {
10 class AutoCookSelectionWindow; 10 class AutoCookSelectionWindow;
@@ -15,7 +15,7 @@ class AutoCookSelectionWindow : public QMainWindow @@ -15,7 +15,7 @@ class AutoCookSelectionWindow : public QMainWindow
15 Q_OBJECT 15 Q_OBJECT
16 16
17 public: 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 ~AutoCookSelectionWindow(); 19 ~AutoCookSelectionWindow();
20 20
21 private slots: 21 private slots:
@@ -26,8 +26,9 @@ private slots: @@ -26,8 +26,9 @@ private slots:
26 private: 26 private:
27 Ui::AutoCookSelectionWindow *ui; 27 Ui::AutoCookSelectionWindow *ui;
28 Oven *oven; 28 Oven *oven;
29 - Cook::CookType type;  
30 - QList<AbstractCook *> cookList; 29 + Define::CookType type;
  30 + CookBook book;
  31 +
31 bool autoCookWindowOpened; 32 bool autoCookWindowOpened;
32 }; 33 };
33 34
app/gui/oven_control/autocookwindow.cpp
1 #include "autocookwindow.h" 1 #include "autocookwindow.h"
2 #include "ui_autocookwindow.h" 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 QMainWindow(parent), 7 QMainWindow(parent),
6 ui(new Ui::AutoCookWindow), 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 ui->setupUi(this); 11 ui->setupUi(this);
14 12
15 ui->clockContainer->setParent(ui->upperStack); 13 ui->clockContainer->setParent(ui->upperStack);
16 setAttribute(Qt::WA_DeleteOnClose); 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 returnToCurrentStepTimer.setSingleShot(true); 24 returnToCurrentStepTimer.setSingleShot(true);
78 returnToCurrentStepTimer.setInterval(3000); 25 returnToCurrentStepTimer.setInterval(3000);
79 connect(&returnToCurrentStepTimer, SIGNAL(timeout()), SLOT(returnToCurrentStep())); 26 connect(&returnToCurrentStepTimer, SIGNAL(timeout()), SLOT(returnToCurrentStep()));
80 27
81 -  
82 - showingCurrentHumidity = false;  
83 showCurrentHumidityTimer.setSingleShot(true); 28 showCurrentHumidityTimer.setSingleShot(true);
84 showCurrentHumidityTimer.setInterval(3000); 29 showCurrentHumidityTimer.setInterval(3000);
85 connect(&showCurrentHumidityTimer, SIGNAL(timeout()), SLOT(showCurrentHumidity())); 30 connect(&showCurrentHumidityTimer, SIGNAL(timeout()), SLOT(showCurrentHumidity()));
86 31
87 - showingCurrentTemp = false;  
88 showCurrentTempTimer.setSingleShot(true); 32 showCurrentTempTimer.setSingleShot(true);
89 showCurrentTempTimer.setInterval(3000); 33 showCurrentTempTimer.setInterval(3000);
90 connect(&showCurrentTempTimer, SIGNAL(timeout()), SLOT(showCurrentTemp())); 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 AutoCookWindow::~AutoCookWindow() 42 AutoCookWindow::~AutoCookWindow()
98 { 43 {
99 delete ui; 44 delete ui;
100 -  
101 - delete cook;  
102 } 45 }
103 46
104 void AutoCookWindow::setupUi() 47 void AutoCookWindow::setupUi()
@@ -109,137 +52,14 @@ void AutoCookWindow::setupUi() @@ -109,137 +52,14 @@ void AutoCookWindow::setupUi()
109 dryModeIcon.load(":/images/cook_mode/small_dryheat.png"); 52 dryModeIcon.load(":/images/cook_mode/small_dryheat.png");
110 combiModeIcon.load(":/images/cook_mode/small_combi.png"); 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 int offsetY = 1150; 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 bullet->setPixmap(bulletPixmap); 63 bullet->setPixmap(bulletPixmap);
244 bullet->setGeometry(offsetX + 19 * 2 * idx, offsetY, 19, 19); 64 bullet->setGeometry(offsetX + 19 * 2 * idx, offsetY, 19, 19);
245 bullets.append(bullet); 65 bullets.append(bullet);
@@ -281,588 +101,533 @@ void AutoCookWindow::setupUi() @@ -281,588 +101,533 @@ void AutoCookWindow::setupUi()
281 ui->closeDoorAnimation->hide(); 101 ui->closeDoorAnimation->hide();
282 ui->closeDoorArrow->hide(); 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 else 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 case 0: 131 case 0:
365 - l = ui->configCurrentLabel_1;  
366 - s = ui->configSlider_1; 132 + pb = ui->processButton_1;
367 break; 133 break;
368 case 1: 134 case 1:
369 - l = ui->configCurrentLabel_2;  
370 - s = ui->configSlider_2; 135 + pb = ui->processButton_2;
371 break; 136 break;
372 case 2: 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 break; 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 else 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 void AutoCookWindow::checkCook() 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 updateView(); 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 void AutoCookWindow::on_humidityGaugeButton_pressed() 633 void AutoCookWindow::on_humidityGaugeButton_pressed()
@@ -872,7 +637,8 @@ void AutoCookWindow::on_humidityGaugeButton_pressed() @@ -872,7 +637,8 @@ void AutoCookWindow::on_humidityGaugeButton_pressed()
872 637
873 void AutoCookWindow::on_humidityGaugeButton_released() 638 void AutoCookWindow::on_humidityGaugeButton_released()
874 { 639 {
875 - showCurrentHumidityTimer.stop(); 640 + if (showCurrentHumidityTimer.isActive())
  641 + showCurrentHumidityTimer.stop();
876 642
877 if (showingCurrentHumidity) 643 if (showingCurrentHumidity)
878 { 644 {
@@ -888,7 +654,8 @@ void AutoCookWindow::on_heatGaugeButton_pressed() @@ -888,7 +654,8 @@ void AutoCookWindow::on_heatGaugeButton_pressed()
888 654
889 void AutoCookWindow::on_heatGaugeButton_released() 655 void AutoCookWindow::on_heatGaugeButton_released()
890 { 656 {
891 - showCurrentTempTimer.stop(); 657 + if (showCurrentTempTimer.isActive())
  658 + showCurrentTempTimer.stop();
892 659
893 if (showingCurrentTemp) 660 if (showingCurrentTemp)
894 { 661 {
@@ -897,16 +664,30 @@ void AutoCookWindow::on_heatGaugeButton_released() @@ -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,12 +2,10 @@
2 #define AUTOCOOKWINDOW_H 2 #define AUTOCOOKWINDOW_H
3 3
4 #include <QMainWindow> 4 #include <QMainWindow>
5 -#include <QTimer>  
6 -#include <QPixmap>  
7 #include <QLabel> 5 #include <QLabel>
  6 +#include <QTimer>
8 7
9 -#include "oven.h"  
10 -#include "cook.h" 8 +#include "autocook.h"
11 9
12 namespace Ui { 10 namespace Ui {
13 class AutoCookWindow; 11 class AutoCookWindow;
@@ -17,76 +15,67 @@ class AutoCookWindow : public QMainWindow @@ -17,76 +15,67 @@ class AutoCookWindow : public QMainWindow
17 { 15 {
18 Q_OBJECT 16 Q_OBJECT
19 17
20 -signals:  
21 - void startCookStartTimer();  
22 - void stopCookStartTimer();  
23 -  
24 public: 18 public:
25 - explicit AutoCookWindow(QWidget *parent = 0, Oven *oven = 0, AbstractCook *cook = 0); 19 + explicit AutoCookWindow(QWidget *parent, Cook cook);
26 ~AutoCookWindow(); 20 ~AutoCookWindow();
27 21
28 private: 22 private:
29 Ui::AutoCookWindow *ui; 23 Ui::AutoCookWindow *ui;
  24 +
  25 + Cook cook;
  26 + AutoCook autocook;
  27 +
30 QTimer checkCookTimer; 28 QTimer checkCookTimer;
31 - Oven *oven;  
32 - AbstractCook *cook;  
33 - bool started;  
34 - bool done;  
35 - bool opened;  
36 - bool interTempEnabled;  
37 29
38 QPixmap bulletPixmap; 30 QPixmap bulletPixmap;
39 QPixmap selectedBulletPixmap; 31 QPixmap selectedBulletPixmap;
40 QList<QLabel *> bullets; 32 QList<QLabel *> bullets;
41 - int selectedStepIndex;  
42 - QTimer returnToCurrentStepTimer;  
43 33
44 QPixmap steamModeIcon; 34 QPixmap steamModeIcon;
45 QPixmap dryModeIcon; 35 QPixmap dryModeIcon;
46 QPixmap combiModeIcon; 36 QPixmap combiModeIcon;
47 37
  38 + int selectedStepIndex;
  39 + int lastViewStepIndex;
  40 + bool showingDifferentStep;
  41 + QTimer returnToCurrentStepTimer;
  42 +
48 bool showingCurrentHumidity; 43 bool showingCurrentHumidity;
49 bool showingCurrentTemp; 44 bool showingCurrentTemp;
50 QTimer showCurrentHumidityTimer; 45 QTimer showCurrentHumidityTimer;
51 QTimer showCurrentTempTimer; 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 void setupUi(); 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 private slots: 63 private slots:
71 void updateView(); 64 void updateView();
72 - void start();  
73 - void stop();  
74 - void doStep();  
75 void checkCook(); 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 void on_humidityGaugeButton_pressed(); 72 void on_humidityGaugeButton_pressed();
85 void on_humidityGaugeButton_released(); 73 void on_humidityGaugeButton_released();
86 void on_heatGaugeButton_pressed(); 74 void on_heatGaugeButton_pressed();
87 void on_heatGaugeButton_released(); 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 #endif // AUTOCOOKWINDOW_H 81 #endif // AUTOCOOKWINDOW_H
app/gui/oven_control/autocookwindow.ui
@@ -16,57 +16,11 @@ @@ -16,57 +16,11 @@
16 <property name="styleSheet"> 16 <property name="styleSheet">
17 <string notr="true">#centralwidget { background-image: url(:/images/background/auto_steps.png); } 17 <string notr="true">#centralwidget { background-image: url(:/images/background/auto_steps.png); }
18 #bottomBar { background-image: url(:/images/bottom_bar/background.png); } 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 QPushButton { 20 QPushButton {
63 background-repeat: no-repeat; 21 background-repeat: no-repeat;
64 background-position: center; 22 background-position: center;
65 border: none; 23 border: none;
66 -}  
67 -  
68 -QPushButton[style=&quot;icon&quot;] {  
69 -background-image: url(:/images/slider_icon/background.png);  
70 }</string> 24 }</string>
71 </property> 25 </property>
72 <widget class="QWidget" name="centralwidget"> 26 <widget class="QWidget" name="centralwidget">
@@ -96,2318 +50,1292 @@ background-image: url(:/images/slider_icon/background.png); @@ -96,2318 +50,1292 @@ background-image: url(:/images/slider_icon/background.png);
96 </widget> 50 </widget>
97 <widget class="QWidget" name="page_2"/> 51 <widget class="QWidget" name="page_2"/>
98 </widget> 52 </widget>
99 - <widget class="QStackedWidget" name="stackedWidget"> 53 + <widget class="QWidget" name="bottomBar" native="true">
100 <property name="geometry"> 54 <property name="geometry">
101 <rect> 55 <rect>
102 <x>0</x> 56 <x>0</x>
103 - <y>0</y> 57 + <y>1450</y>
104 <width>900</width> 58 <width>900</width>
105 - <height>1450</height> 59 + <height>150</height>
106 </rect> 60 </rect>
107 </property> 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 </widget> 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 </widget> 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 <property name="styleSheet"> 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 </property> 152 </property>
2281 </widget> 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 </widget> 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 <property name="geometry"> 549 <property name="geometry">
2285 <rect> 550 <rect>
2286 <x>0</x> 551 <x>0</x>
2287 - <y>1450</y>  
2288 - <width>900</width> 552 + <y>430</y>
  553 + <width>250</width>
2289 <height>150</height> 554 <height>150</height>
2290 </rect> 555 </rect>
2291 </property> 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 <property name="geometry"> 1140 <property name="geometry">
2294 <rect> 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 </rect> 1146 </rect>
2300 </property> 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 </property> 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 </property> 1192 </property>
2311 <property name="text"> 1193 <property name="text">
2312 - <string/> 1194 + <string>후속 과정 옵션</string>
2313 </property> 1195 </property>
2314 </widget> 1196 </widget>
2315 - <widget class="QPushButton" name="washButton"> 1197 + <widget class="QLabel" name="processTypeLabel">
2316 <property name="geometry"> 1198 <property name="geometry">
2317 <rect> 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 </rect> 1204 </rect>
2323 </property> 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 </property> 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 </property> 1250 </property>
2334 <property name="text"> 1251 <property name="text">
2335 - <string/> 1252 + <string>새로운 재료 넣기</string>
2336 </property> 1253 </property>
2337 </widget> 1254 </widget>
2338 - <widget class="QPushButton" name="configButton"> 1255 + <widget class="QPushButton" name="processButton_1">
2339 <property name="geometry"> 1256 <property name="geometry">
2340 <rect> 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 </rect> 1262 </rect>
2346 </property> 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 <property name="styleSheet"> 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 </property> 1267 </property>
2357 <property name="text"> 1268 <property name="text">
2358 <string/> 1269 <string/>
2359 </property> 1270 </property>
2360 </widget> 1271 </widget>
2361 - <widget class="QPushButton" name="helpButton"> 1272 + <widget class="QPushButton" name="processButton_2">
2362 <property name="geometry"> 1273 <property name="geometry">
2363 <rect> 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 </rect> 1279 </rect>
2369 </property> 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 <property name="styleSheet"> 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 </property> 1284 </property>
2380 <property name="text"> 1285 <property name="text">
2381 <string/> 1286 <string/>
2382 </property> 1287 </property>
2383 </widget> 1288 </widget>
2384 - <widget class="QPushButton" name="favoritesButton"> 1289 + <widget class="QPushButton" name="processButton_3">
2385 <property name="geometry"> 1290 <property name="geometry">
2386 <rect> 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 </rect> 1296 </rect>
2392 </property> 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 <property name="styleSheet"> 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 </property> 1301 </property>
2403 <property name="text"> 1302 <property name="text">
2404 <string/> 1303 <string/>
2405 </property> 1304 </property>
2406 </widget> 1305 </widget>
2407 </widget> 1306 </widget>
2408 - <zorder>stackedWidget</zorder> 1307 + <zorder>openDoorAnimation</zorder>
  1308 + <zorder>closeDoorAnimation</zorder>
2409 <zorder>upperStack</zorder> 1309 <zorder>upperStack</zorder>
2410 <zorder>bottomBar</zorder> 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 </widget> 1339 </widget>
2412 </widget> 1340 </widget>
2413 <customwidgets> 1341 <customwidgets>
@@ -2418,6 +1346,11 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); } @@ -2418,6 +1346,11 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); }
2418 <container>1</container> 1346 <container>1</container>
2419 </customwidget> 1347 </customwidget>
2420 <customwidget> 1348 <customwidget>
  1349 + <class>AnimatedImageBox</class>
  1350 + <extends>QLabel</extends>
  1351 + <header>animatedimagebox.h</header>
  1352 + </customwidget>
  1353 + <customwidget>
2421 <class>HumidityCircularGauge</class> 1354 <class>HumidityCircularGauge</class>
2422 <extends>QWidget</extends> 1355 <extends>QWidget</extends>
2423 <header>humiditycirculargauge.h</header> 1356 <header>humiditycirculargauge.h</header>
@@ -2430,11 +1363,6 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); } @@ -2430,11 +1363,6 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); }
2430 <container>1</container> 1363 <container>1</container>
2431 </customwidget> 1364 </customwidget>
2432 <customwidget> 1365 <customwidget>
2433 - <class>AnimatedImageBox</class>  
2434 - <extends>QLabel</extends>  
2435 - <header>animatedimagebox.h</header>  
2436 - </customwidget>  
2437 - <customwidget>  
2438 <class>PreheatTempGauge</class> 1366 <class>PreheatTempGauge</class>
2439 <extends>QWidget</extends> 1367 <extends>QWidget</extends>
2440 <header>preheattempgauge.h</header> 1368 <header>preheattempgauge.h</header>
app/gui/oven_control/cook.cpp
1 #include "cook.h" 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 #ifndef COOK_H 1 #ifndef COOK_H
2 #define COOK_H 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 public: 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 #endif // COOK_H 64 #endif // COOK_H
app/gui/oven_control/cookbook.cpp
@@ -0,0 +1,102 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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,7 +14,7 @@ TEMPLATE = app
14 14
15 15
16 SOURCES += main.cpp\ 16 SOURCES += main.cpp\
17 - mainwindow.cpp \ 17 + mainwindow.cpp \
18 cook.cpp \ 18 cook.cpp \
19 oven.cpp \ 19 oven.cpp \
20 abstractoveninterface.cpp \ 20 abstractoveninterface.cpp \
@@ -46,7 +46,11 @@ SOURCES += main.cpp\ @@ -46,7 +46,11 @@ SOURCES += main.cpp\
46 engineermenuwindow.cpp \ 46 engineermenuwindow.cpp \
47 ovenstatics.cpp \ 47 ovenstatics.cpp \
48 servicedatas.cpp \ 48 servicedatas.cpp \
49 - popupwindow.cpp 49 + popupwindow.cpp \
  50 + cookbook.cpp \
  51 + define.cpp \
  52 + autocook.cpp \
  53 + keepwarmpopup.cpp
50 54
51 HEADERS += mainwindow.h \ 55 HEADERS += mainwindow.h \
52 cook.h \ 56 cook.h \
@@ -81,7 +85,11 @@ HEADERS += mainwindow.h \ @@ -81,7 +85,11 @@ HEADERS += mainwindow.h \
81 engineermenuwindow.h \ 85 engineermenuwindow.h \
82 ovenstatics.h \ 86 ovenstatics.h \
83 servicedatas.h \ 87 servicedatas.h \
84 - popupwindow.h 88 + popupwindow.h \
  89 + cookbook.h \
  90 + define.h \
  91 + autocook.h \
  92 + keepwarmpopup.h
85 93
86 FORMS += mainwindow.ui \ 94 FORMS += mainwindow.ui \
87 manualcookwindow.ui \ 95 manualcookwindow.ui \
@@ -100,7 +108,8 @@ FORMS += mainwindow.ui \ @@ -100,7 +108,8 @@ FORMS += mainwindow.ui \
100 preheatpopup.ui \ 108 preheatpopup.ui \
101 cooldownpopup.ui \ 109 cooldownpopup.ui \
102 engineermenuwindow.ui \ 110 engineermenuwindow.ui \
103 - popupwindow.ui 111 + popupwindow.ui \
  112 + keepwarmpopup.ui
104 113
105 RESOURCES += \ 114 RESOURCES += \
106 resources.qrc 115 resources.qrc
app/gui/oven_control/preheattempgauge.cpp
@@ -9,32 +9,41 @@ PreheatTempGauge::PreheatTempGauge(QWidget *parent) : QWidget(parent) @@ -9,32 +9,41 @@ PreheatTempGauge::PreheatTempGauge(QWidget *parent) : QWidget(parent)
9 indicator.load(":/images/gauge/bar_indicator.png"); 9 indicator.load(":/images/gauge/bar_indicator.png");
10 body.load(":/images/gauge/bar_short_red.png"); 10 body.load(":/images/gauge/bar_short_red.png");
11 11
12 - value = 0; 12 + val = 0;
13 min = 0; 13 min = 0;
14 max = 1; 14 max = 1;
15 } 15 }
16 16
17 void PreheatTempGauge::setValue(int value) 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 update(); 24 update();
22 } 25 }
23 26
24 void PreheatTempGauge::setMinimum(int minimum) 27 void PreheatTempGauge::setMinimum(int minimum)
25 { 28 {
  29 + if (minimum == min)
  30 + return;
  31 +
26 min = minimum; 32 min = minimum;
27 max = qMax(min, max); 33 max = qMax(min, max);
28 - value = qBound(min, value, max); 34 + val = qBound(min, val, max);
29 35
30 update(); 36 update();
31 } 37 }
32 38
33 void PreheatTempGauge::setMaximum(int maximum) 39 void PreheatTempGauge::setMaximum(int maximum)
34 { 40 {
  41 + if (maximum == max)
  42 + return;
  43 +
35 max = maximum; 44 max = maximum;
36 min = qMin(min, max); 45 min = qMin(min, max);
37 - value = qBound(min, value, max); 46 + val = qBound(min, val, max);
38 47
39 update(); 48 update();
40 } 49 }
@@ -45,7 +54,7 @@ void PreheatTempGauge::paintEvent(QPaintEvent */*event*/) @@ -45,7 +54,7 @@ void PreheatTempGauge::paintEvent(QPaintEvent */*event*/)
45 painter.setBrush(Qt::NoBrush); 54 painter.setBrush(Qt::NoBrush);
46 painter.setPen(Qt::NoPen); 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 percentage = qBound((qreal) 0.0, percentage, (qreal) 1.0); 58 percentage = qBound((qreal) 0.0, percentage, (qreal) 1.0);
50 59
51 QRect targetRect( 60 QRect targetRect(
app/gui/oven_control/preheattempgauge.h
@@ -13,7 +13,7 @@ public: @@ -13,7 +13,7 @@ public:
13 signals: 13 signals:
14 14
15 public slots: 15 public slots:
16 - void setValue(int value); 16 + void setValue(int val);
17 void setMinimum(int minimum); 17 void setMinimum(int minimum);
18 void setMaximum(int maximum); 18 void setMaximum(int maximum);
19 19
@@ -25,7 +25,7 @@ protected: @@ -25,7 +25,7 @@ protected:
25 QPixmap border; 25 QPixmap border;
26 QPixmap indicator; 26 QPixmap indicator;
27 27
28 - int value; 28 + int val;
29 int min; 29 int min;
30 int max; 30 int max;
31 }; 31 };