Commit dcfd897f3155f978bea1e94259a2de7bed87534e

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

수동 요리 만들기 추가

app/gui/oven_control/cookprogram.cpp
@@ -0,0 +1,714 @@ @@ -0,0 +1,714 @@
  1 +#include "cookprogram.h"
  2 +
  3 +#include <QTimer>
  4 +
  5 +#include "cookbook.h"
  6 +
  7 +namespace {
  8 +Define::CookType toCookType(QString type)
  9 +{
  10 + if (type == "poutry")
  11 + return Define::Poultry;
  12 + if (type == "meat")
  13 + return Define::Meat;
  14 + if (type == "fish")
  15 + return Define::Fish;
  16 + if (type == "desert")
  17 + return Define::Desert;
  18 + if (type == "vegetable")
  19 + return Define::Vegetable;
  20 + if (type == "bread")
  21 + return Define::Bread;
  22 + if (type == "etc")
  23 + return Define::Etc;
  24 +
  25 + return Define::InvalidCookType;
  26 +}
  27 +
  28 +QString toString(Define::CookType type)
  29 +{
  30 + switch (type)
  31 + {
  32 + case Define::Poultry:
  33 + return "poultry";
  34 + case Define::Meat:
  35 + return "meat";
  36 + case Define::Fish:
  37 + return "fish";
  38 + case Define::Desert:
  39 + return "desert";
  40 + case Define::Vegetable:
  41 + return "vegetable";
  42 + case Define::Bread:
  43 + return "bread";
  44 + case Define::Etc:
  45 + return "etc";
  46 + default:
  47 + return QString();
  48 + }
  49 +}
  50 +
  51 +Define::Mode toMode(QString mode)
  52 +{
  53 + if (mode == "steam")
  54 + return Define::SteamMode;
  55 + if (mode == "combi")
  56 + return Define::CombiMode;
  57 + if (mode == "dry")
  58 + return Define::DryMode;
  59 +
  60 + return Define::InvalidMode;
  61 +}
  62 +
  63 +QString toString(Define::Mode mode)
  64 +{
  65 + switch (mode)
  66 + {
  67 + case Define::SteamMode:
  68 + return "steam";
  69 + case Define::CombiMode:
  70 + return "combi";
  71 + case Define::DryMode:
  72 + return "dry";
  73 + default:
  74 + return QString();
  75 + }
  76 +}
  77 +
  78 +QString name(Define::CookType type, QString root)
  79 +{
  80 + CookBook book(type);
  81 + return book.name(root);
  82 +}
  83 +}
  84 +
  85 +namespace {
  86 +
  87 +const int maxAuto = 20;
  88 +const int maxManual = 20;
  89 +
  90 +struct AutoEntry
  91 +{
  92 + int id;
  93 + QString name;
  94 + Define::CookType type;
  95 + QString root;
  96 + int configs[5];
  97 +
  98 + bool operator==(const AutoEntry &other)
  99 + {
  100 + for (int i = 0; i < 5; i++)
  101 + if (configs[i] != other.configs[i])
  102 + return false;
  103 +
  104 + return id == other.id
  105 + && name == other.name
  106 + && type == other.type
  107 + && root == other.root;
  108 + }
  109 +};
  110 +
  111 +struct ManualEntry
  112 +{
  113 + int id;
  114 + QString name;
  115 + Define::Mode mode;
  116 + int humidity;
  117 + int temp;
  118 + int time;
  119 + int fan;
  120 + int coreTemp;
  121 +
  122 + bool operator==(const ManualEntry &other)
  123 + {
  124 + return id == other.id
  125 + && name == other.name
  126 + && mode == other.mode
  127 + && humidity == other.humidity
  128 + && temp == other.temp
  129 + && time == other.time
  130 + && fan == other.fan
  131 + && coreTemp == other.coreTemp;
  132 + }
  133 +};
  134 +
  135 +QList<AutoEntry> savedAutoList;
  136 +QList<ManualEntry> savedManualList;
  137 +QList<AutoEntry> currentAutoList;
  138 +QList<ManualEntry> currentManualList;
  139 +
  140 +void readAuto()
  141 +{
  142 + QFile file("/prime/program/auto.csv");
  143 + if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
  144 + {
  145 + qDebug() << "File not found: " + file.fileName();
  146 + return;
  147 + }
  148 +
  149 + QString errorMessage = QString("%3: %1, line %2").arg(file.fileName());
  150 + int lineCount = 0;
  151 + while (!file.atEnd())
  152 + {
  153 + lineCount++;
  154 +
  155 + QString line = QString::fromUtf8(file.readLine()).trimmed();
  156 + if (line.isEmpty())
  157 + continue;
  158 +
  159 + QString error = errorMessage.arg(lineCount);
  160 +
  161 + QString id = line.section(',', 0, 0).trimmed();
  162 + if (id.isEmpty())
  163 + {
  164 + qDebug() << error.arg("Invalid id");
  165 + continue;
  166 + }
  167 +
  168 + QString name = line.section(',', 1, 1).trimmed();
  169 + if (name.isEmpty())
  170 + {
  171 + qDebug() << error.arg("Invalid name");
  172 + continue;
  173 + }
  174 +
  175 + QString type = line.section(',', 2, 2).trimmed();
  176 + if (type.isEmpty())
  177 + {
  178 + qDebug() << error.arg("Invalid type");
  179 + continue;
  180 + }
  181 +
  182 + QString root = line.section(',', 3, 3).trimmed();
  183 + if (root.isEmpty())
  184 + {
  185 + qDebug() << error.arg("Invalid root");
  186 + continue;
  187 + }
  188 +
  189 + QString config1 = line.section(',', 4, 4).trimmed();
  190 + if (config1.isEmpty())
  191 + {
  192 + qDebug() << error.arg("Invalid config1");
  193 + continue;
  194 + }
  195 +
  196 + QString config2 = line.section(',', 5, 5).trimmed();
  197 + if (config2.isEmpty())
  198 + {
  199 + qDebug() << error.arg("Invalid config2");
  200 + continue;
  201 + }
  202 +
  203 + QString config3 = line.section(',', 6, 6).trimmed();
  204 + if (config3.isEmpty())
  205 + {
  206 + qDebug() << error.arg("Invalid config3");
  207 + continue;
  208 + }
  209 +
  210 + QString config4 = line.section(',', 7, 7).trimmed();
  211 + if (config4.isEmpty())
  212 + {
  213 + qDebug() << error.arg("Invalid config4");
  214 + continue;
  215 + }
  216 +
  217 + QString config5 = line.section(',', 8, 8).trimmed();
  218 + if (config5.isEmpty())
  219 + {
  220 + qDebug() << error.arg("Invalid config5");
  221 + continue;
  222 + }
  223 +
  224 + AutoEntry e;
  225 +
  226 + bool ok;
  227 + e.id = id.toInt(&ok);
  228 + if (!ok)
  229 + {
  230 + qDebug() << error.arg("Invalid id");
  231 + continue;
  232 + }
  233 +
  234 + e.name = name.replace("\\c", ",");
  235 +
  236 + e.type = toCookType(type);
  237 + if (e.type == Define::InvalidCookType)
  238 + {
  239 + qDebug() << error.arg("Invalid type");
  240 + continue;
  241 + }
  242 +
  243 + e.root = root;
  244 +
  245 + e.configs[0] = config1.toInt(&ok);
  246 + if (!ok)
  247 + {
  248 + qDebug() << error.arg("Invalid config1");
  249 + continue;
  250 + }
  251 +
  252 + e.configs[1] = config2.toInt(&ok);
  253 + if (!ok)
  254 + {
  255 + qDebug() << error.arg("Invalid config2");
  256 + continue;
  257 + }
  258 +
  259 + e.configs[2] = config3.toInt(&ok);
  260 + if (!ok)
  261 + {
  262 + qDebug() << error.arg("Invalid config3");
  263 + continue;
  264 + }
  265 +
  266 + e.configs[3] = config4.toInt(&ok);
  267 + if (!ok)
  268 + {
  269 + qDebug() << error.arg("Invalid config4");
  270 + continue;
  271 + }
  272 +
  273 + e.configs[4] = config5.toInt(&ok);
  274 + if (!ok)
  275 + {
  276 + qDebug() << error.arg("Invalid config5");
  277 + continue;
  278 + }
  279 +
  280 + savedAutoList.append(e);
  281 + }
  282 +
  283 + currentAutoList = savedAutoList;
  284 +}
  285 +
  286 +void readManual()
  287 +{
  288 + QFile file("/prime/program/manual.csv");
  289 + if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
  290 + {
  291 + qDebug() << "File not found: " + file.fileName();
  292 + return;
  293 + }
  294 +
  295 + QString errorMessage = QString("%3: %1, line %2").arg(file.fileName());
  296 + int lineCount = 0;
  297 + while (!file.atEnd())
  298 + {
  299 + lineCount++;
  300 +
  301 + QString line = QString::fromUtf8(file.readLine()).trimmed();
  302 + if (line.isEmpty())
  303 + continue;
  304 +
  305 + QString error = errorMessage.arg(lineCount);
  306 +
  307 + QString id = line.section(',', 0, 0).trimmed();
  308 + if (id.isEmpty())
  309 + {
  310 + qDebug() << error.arg("Invalid id");
  311 + continue;
  312 + }
  313 +
  314 + QString name = line.section(',', 1, 1).trimmed();
  315 + if (name.isEmpty())
  316 + {
  317 + qDebug() << error.arg("Invalid name");
  318 + continue;
  319 + }
  320 +
  321 + QString mode = line.section(',', 2, 2).trimmed();
  322 + if (mode.isEmpty())
  323 + {
  324 + qDebug() << error.arg("Invalid mode");
  325 + continue;
  326 + }
  327 +
  328 + QString humidity = line.section(',', 3, 3).trimmed();
  329 + if (humidity.isEmpty())
  330 + {
  331 + qDebug() << error.arg("Invalid humidity");
  332 + continue;
  333 + }
  334 +
  335 + QString temp = line.section(',', 4, 4).trimmed();
  336 + if (temp.isEmpty())
  337 + {
  338 + qDebug() << error.arg("Invalid temp");
  339 + continue;
  340 + }
  341 +
  342 + QString time = line.section(',', 5, 5).trimmed();
  343 + if (time.isEmpty())
  344 + {
  345 + qDebug() << error.arg("Invalid time");
  346 + continue;
  347 + }
  348 +
  349 + QString fan = line.section(',', 6, 6).trimmed();
  350 + if (fan.isEmpty())
  351 + {
  352 + qDebug() << error.arg("Invalid fan");
  353 + continue;
  354 + }
  355 +
  356 + QString coreTemp = line.section(',', 7, 7).trimmed();
  357 + if (coreTemp.isEmpty())
  358 + {
  359 + qDebug() << error.arg("Invalid coreTemp");
  360 + continue;
  361 + }
  362 +
  363 + ManualEntry e;
  364 +
  365 + bool ok;
  366 + e.id = id.toInt(&ok);
  367 + if (!ok)
  368 + {
  369 + qDebug() << error.arg("Invalid id");
  370 + continue;
  371 + }
  372 +
  373 + e.name = name.replace("\\c", ",");
  374 +
  375 + e.mode = toMode(mode);
  376 + if (e.mode == Define::InvalidMode)
  377 + {
  378 + qDebug() << error.arg("Invalid mode");
  379 + continue;
  380 + }
  381 +
  382 + e.humidity = humidity.toInt(&ok);
  383 + if (!ok)
  384 + {
  385 + qDebug() << error.arg("Invalid humidity");
  386 + continue;
  387 + }
  388 +
  389 + e.temp = temp.toInt(&ok);
  390 + if (!ok)
  391 + {
  392 + qDebug() << error.arg("Invalid temp");
  393 + continue;
  394 + }
  395 +
  396 + e.time = time.toInt(&ok);
  397 + if (!ok)
  398 + {
  399 + qDebug() << error.arg("Invalid time");
  400 + continue;
  401 + }
  402 +
  403 + e.fan = fan.toInt(&ok);
  404 + if (!ok)
  405 + {
  406 + qDebug() << error.arg("Invalid fan");
  407 + continue;
  408 + }
  409 +
  410 + e.coreTemp = coreTemp.toInt(&ok);
  411 + if (!ok)
  412 + {
  413 + qDebug() << error.arg("Invalid coreTemp");
  414 + continue;
  415 + }
  416 +
  417 + savedManualList.append(e);
  418 + }
  419 +
  420 + currentManualList = savedManualList;
  421 +}
  422 +
  423 +void writeAuto()
  424 +{
  425 + QFile file("/prime/program/auto.csv");
  426 + if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
  427 + {
  428 + qDebug() << "File not opened: " + file.fileName();
  429 + return;
  430 + }
  431 +
  432 + QTextStream stream(&file);
  433 + stream.setCodec("UTF-8");
  434 + foreach (AutoEntry e, savedAutoList)
  435 + {
  436 + stream << e.id << ","
  437 + << e.name.replace(",", "\\c").toUtf8() << ","
  438 + << toString(e.type) << ","
  439 + << e.root;
  440 + for (int i = 0; i < 5; i++)
  441 + stream << "," << e.configs[i];
  442 +
  443 + stream << "\n";
  444 + }
  445 +}
  446 +
  447 +void writeManual()
  448 +{
  449 + QFile file("/prime/program/manual.csv");
  450 + if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
  451 + {
  452 + qDebug() << "File not opened: " + file.fileName();
  453 + return;
  454 + }
  455 +
  456 + QTextStream stream(&file);
  457 + stream.setCodec("UTF-8");
  458 + foreach (ManualEntry e, savedManualList)
  459 + {
  460 + stream << e.id << ","
  461 + << e.name.replace(",", "\\c").toUtf8() << ","
  462 + << toString(e.mode) << ","
  463 + << e.humidity << ","
  464 + << e.temp << ","
  465 + << e.time << ","
  466 + << e.fan << ","
  467 + << e.coreTemp << "\n";
  468 + }
  469 +}
  470 +
  471 +bool initialized = false;
  472 +void initialize()
  473 +{
  474 + initialized = true;
  475 +
  476 + readAuto();
  477 + readManual();
  478 +}
  479 +
  480 +void checkInitialized()
  481 +{
  482 + if (!initialized)
  483 + initialize();
  484 +}
  485 +
  486 +int newAutoId()
  487 +{
  488 + for (int i = 0; i < 1000; i++)
  489 + {
  490 + bool absent = true;
  491 + foreach (AutoEntry e, currentAutoList)
  492 + if (e.id == i)
  493 + {
  494 + absent = false;
  495 + break;
  496 + }
  497 +
  498 + if (absent)
  499 + return i;
  500 + }
  501 +
  502 + return -1;
  503 +}
  504 +
  505 +int newManualId()
  506 +{
  507 + for (int i = 0; i < 1000; i++)
  508 + {
  509 + bool absent = true;
  510 + foreach (ManualEntry e, currentManualList)
  511 + if (e.id == i)
  512 + {
  513 + absent = false;
  514 + break;
  515 + }
  516 +
  517 + if (absent)
  518 + return i;
  519 + }
  520 +
  521 + return -1;
  522 +}
  523 +}
  524 +
  525 +void CookProgram::add(AutoCookSetting cook)
  526 +{
  527 + checkInitialized();
  528 +
  529 + AutoEntry e;
  530 + e.id = newAutoId();
  531 + e.name = cook.name;
  532 + e.type = cook.type;
  533 + e.root = cook.root;
  534 +
  535 + for (int i = 0; i < 5; i++)
  536 + e.configs[i] = cook.configs[i];
  537 +
  538 + currentAutoList.append(e);
  539 +}
  540 +
  541 +void CookProgram::add(ManualCookSetting cook)
  542 +{
  543 + checkInitialized();
  544 +
  545 + ManualEntry e;
  546 + e.id = newManualId();
  547 + e.name = "Manual";
  548 + e.mode = cook.mode;
  549 + e.humidity = cook.humidity;
  550 + e.temp = cook.temp;
  551 + e.time = cook.time;
  552 + e.fan = cook.fan;
  553 + e.coreTemp = cook.coreTempEnabled ? cook.coreTemp : -1;
  554 +
  555 + currentManualList.append(e);
  556 +}
  557 +
  558 +void CookProgram::remove(CookRecord record)
  559 +{
  560 + checkInitialized();
  561 +
  562 + switch (record.type)
  563 + {
  564 + case CookRecord::Auto:
  565 + {
  566 + AutoEntry e;
  567 + e.id = record.id;
  568 + e.name = record.name;
  569 + e.type = record.autoRecord.setting.type;
  570 + e.root = record.autoRecord.setting.root;
  571 + for (int i = 0; i < 5; i++)
  572 + e.configs[i] = record.autoRecord.setting.configs[i];
  573 +
  574 + currentAutoList.removeAll(e);
  575 + }
  576 + break;
  577 + case CookRecord::Manual:
  578 + {
  579 + ManualEntry e;
  580 + e.id = record.id;
  581 + e.name = record.name;
  582 + e.mode = record.manualRecord.setting.mode;
  583 + e.humidity = record.manualRecord.setting.humidity;
  584 + e.temp = record.manualRecord.setting.temp;
  585 + e.time = record.manualRecord.setting.time;
  586 + e.fan = record.manualRecord.setting.fan;
  587 + e.coreTemp = record.manualRecord.setting.coreTempEnabled ? record.manualRecord.setting.coreTemp : -1;
  588 +
  589 + currentManualList.removeAll(e);
  590 + }
  591 + break;
  592 + }
  593 +}
  594 +
  595 +QList<CookRecord> CookProgram::listAuto()
  596 +{
  597 + checkInitialized();
  598 +
  599 + QList<CookRecord> list;
  600 + foreach (AutoEntry e, currentAutoList)
  601 + {
  602 + CookRecord r;
  603 + r.type = CookRecord::Auto;
  604 + r.id = e.id;
  605 + r.name = e.name;
  606 + r.autoRecord.setting.name = name(e.type, e.root);
  607 + r.autoRecord.setting.type = e.type;
  608 + r.autoRecord.setting.root = e.root;
  609 +
  610 + for (int i = 0; i < 5; i++)
  611 + r.autoRecord.setting.configs[i] = e.configs[i];
  612 +
  613 + list.append(r);
  614 + }
  615 +
  616 + return list;
  617 +}
  618 +
  619 +QList<CookRecord> CookProgram::listManual()
  620 +{
  621 + checkInitialized();
  622 +
  623 + QList<CookRecord> list;
  624 + foreach (ManualEntry e, currentManualList)
  625 + {
  626 + CookRecord r;
  627 + r.type = CookRecord::Manual;
  628 + r.id = e.id;
  629 + r.name = e.name;
  630 + r.manualRecord.setting.mode = e.mode;
  631 + r.manualRecord.setting.humidity = e.humidity;
  632 + r.manualRecord.setting.temp = e.temp;
  633 + r.manualRecord.setting.time = e.time;
  634 + r.manualRecord.setting.fan = e.fan;
  635 + r.manualRecord.setting.coreTempEnabled = e.coreTemp > 0;
  636 + r.manualRecord.setting.coreTemp = e.coreTemp;
  637 +
  638 + list.append(r);
  639 + }
  640 +
  641 + return list;
  642 +}
  643 +
  644 +void CookProgram::rename(CookRecord record, QString name)
  645 +{
  646 + checkInitialized();
  647 +
  648 + switch (record.type)
  649 + {
  650 + case CookRecord::Auto:
  651 + {
  652 + AutoEntry e;
  653 + e.id = record.id;
  654 + e.name = record.name;
  655 + e.type = record.autoRecord.setting.type;
  656 + e.root = record.autoRecord.setting.root;
  657 + for (int i = 0; i < 5; i++)
  658 + e.configs[i] = record.autoRecord.setting.configs[i];
  659 +
  660 + int index = currentAutoList.indexOf(e);
  661 + if (index != -1)
  662 + {
  663 + AutoEntry &e = currentAutoList[index];
  664 + e.name = name;
  665 + }
  666 + }
  667 + break;
  668 + case CookRecord::Manual:
  669 + {
  670 + ManualEntry e;
  671 + e.id = record.id;
  672 + e.name = record.name;
  673 + e.mode = record.manualRecord.setting.mode;
  674 + e.humidity = record.manualRecord.setting.humidity;
  675 + e.temp = record.manualRecord.setting.temp;
  676 + e.time = record.manualRecord.setting.time;
  677 + e.fan = record.manualRecord.setting.fan;
  678 + e.coreTemp = record.manualRecord.setting.coreTempEnabled ? record.manualRecord.setting.coreTemp : -1;
  679 +
  680 + int index = currentManualList.indexOf(e);
  681 + if (index != -1)
  682 + {
  683 + ManualEntry &e = currentManualList[index];
  684 + e.name = name;
  685 + }
  686 + }
  687 + break;
  688 + }
  689 +}
  690 +
  691 +void CookProgram::save()
  692 +{
  693 + checkInitialized();
  694 +
  695 + if (currentAutoList != savedAutoList)
  696 + {
  697 + savedAutoList = currentAutoList;
  698 + writeAuto();
  699 + }
  700 +
  701 + if (currentManualList != savedManualList)
  702 + {
  703 + savedManualList = currentManualList;
  704 + writeManual();
  705 + }
  706 +}
  707 +
  708 +void CookProgram::discard()
  709 +{
  710 + checkInitialized();
  711 +
  712 + currentAutoList = savedAutoList;
  713 + currentManualList = savedManualList;
  714 +}
app/gui/oven_control/cookprogram.h
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +#ifndef COOKPROGRAM_H
  2 +#define COOKPROGRAM_H
  3 +
  4 +
  5 +#include "cookhistory.h"
  6 +
  7 +namespace CookProgram
  8 +{
  9 +void add(AutoCookSetting cook);
  10 +void add(ManualCookSetting cook);
  11 +void remove(CookRecord record);
  12 +void rename(CookRecord record, QString name);
  13 +void save();
  14 +void discard();
  15 +
  16 +QList<CookRecord> listAuto();
  17 +QList<CookRecord> listManual();
  18 +}
  19 +
  20 +#endif // COOKPROGRAM_H
app/gui/oven_control/oven_control.pro
@@ -106,7 +106,11 @@ SOURCES += main.cpp\ @@ -106,7 +106,11 @@ SOURCES += main.cpp\
106 coretempsettingpopup.cpp \ 106 coretempsettingpopup.cpp \
107 fileprocessor.cpp \ 107 fileprocessor.cpp \
108 fileprocessgauge.cpp \ 108 fileprocessgauge.cpp \
109 - fileprocessdlg.cpp 109 + fileprocessdlg.cpp \
  110 + programmingselectionwindow.cpp \
  111 + programmingmanualwindow.cpp \
  112 + programmingmanualcoretemppopup.cpp \
  113 + cookprogram.cpp
110 114
111 HEADERS += mainwindow.h \ 115 HEADERS += mainwindow.h \
112 cook.h \ 116 cook.h \
@@ -202,7 +206,11 @@ HEADERS += mainwindow.h \ @@ -202,7 +206,11 @@ HEADERS += mainwindow.h \
202 coretempsettingpopup.h \ 206 coretempsettingpopup.h \
203 fileprocessor.h \ 207 fileprocessor.h \
204 fileprocessgauge.h \ 208 fileprocessgauge.h \
205 - fileprocessdlg.h 209 + fileprocessdlg.h \
  210 + programmingselectionwindow.h \
  211 + programmingmanualwindow.h \
  212 + programmingmanualcoretemppopup.h \
  213 + cookprogram.h
206 214
207 FORMS += mainwindow.ui \ 215 FORMS += mainwindow.ui \
208 manualcookwindow.ui \ 216 manualcookwindow.ui \
@@ -266,7 +274,10 @@ FORMS += mainwindow.ui \ @@ -266,7 +274,10 @@ FORMS += mainwindow.ui \
266 electricmodelsettingwindow.ui \ 274 electricmodelsettingwindow.ui \
267 servicepassinputdlg.ui \ 275 servicepassinputdlg.ui \
268 coretempsettingpopup.ui \ 276 coretempsettingpopup.ui \
269 - fileprocessdlg.ui 277 + fileprocessdlg.ui \
  278 + programmingselectionwindow.ui \
  279 + programmingmanualwindow.ui \
  280 + programmingmanualcoretemppopup.ui
270 281
271 RESOURCES += \ 282 RESOURCES += \
272 resources.qrc 283 resources.qrc
app/gui/oven_control/programmingmanualcoretemppopup.cpp
1 #include "programmingmanualcoretemppopup.h" 1 #include "programmingmanualcoretemppopup.h"
2 #include "ui_programmingmanualcoretemppopup.h" 2 #include "ui_programmingmanualcoretemppopup.h"
3 3
  4 +#include "stringer.h"
  5 +
4 ProgrammingManualCoreTempPopup::ProgrammingManualCoreTempPopup(QWidget *parent) : 6 ProgrammingManualCoreTempPopup::ProgrammingManualCoreTempPopup(QWidget *parent) :
5 QWidget(parent), 7 QWidget(parent),
6 ui(new Ui::ProgrammingManualCoreTempPopup) 8 ui(new Ui::ProgrammingManualCoreTempPopup)
7 { 9 {
8 ui->setupUi(this); 10 ui->setupUi(this);
  11 +
  12 + setAttribute(Qt::WA_DeleteOnClose);
  13 +
  14 + connect(ui->coreTempSlider, SIGNAL(valueChanged(int)), SLOT(updateCoreTempLabel()));
  15 +
  16 + updateCoreTempLabel();
9 } 17 }
10 18
11 ProgrammingManualCoreTempPopup::~ProgrammingManualCoreTempPopup() 19 ProgrammingManualCoreTempPopup::~ProgrammingManualCoreTempPopup()
12 { 20 {
13 delete ui; 21 delete ui;
14 } 22 }
  23 +
  24 +void ProgrammingManualCoreTempPopup::updateCoreTempLabel()
  25 +{
  26 + ui->coreTempLabel->setText(Stringer::temperature(ui->coreTempSlider->value(), Stringer::fontSize14));
  27 +}
  28 +
  29 +void ProgrammingManualCoreTempPopup::on_coreTempButton_clicked()
  30 +{
  31 +
  32 +}
  33 +
  34 +void ProgrammingManualCoreTempPopup::on_cancelButton_clicked()
  35 +{
  36 + close();
  37 +}
  38 +
  39 +void ProgrammingManualCoreTempPopup::on_applyButton_clicked()
  40 +{
  41 + emit coreTempEnabled(ui->coreTempSlider->value());
  42 +
  43 + close();
  44 +}
app/gui/oven_control/programmingmanualcoretemppopup.h
@@ -15,8 +15,18 @@ public: @@ -15,8 +15,18 @@ public:
15 explicit ProgrammingManualCoreTempPopup(QWidget *parent = 0); 15 explicit ProgrammingManualCoreTempPopup(QWidget *parent = 0);
16 ~ProgrammingManualCoreTempPopup(); 16 ~ProgrammingManualCoreTempPopup();
17 17
  18 +private slots:
  19 + void updateCoreTempLabel();
  20 +
  21 + void on_coreTempButton_clicked();
  22 + void on_cancelButton_clicked();
  23 + void on_applyButton_clicked();
  24 +
18 private: 25 private:
19 Ui::ProgrammingManualCoreTempPopup *ui; 26 Ui::ProgrammingManualCoreTempPopup *ui;
  27 +
  28 +signals:
  29 + void coreTempEnabled(int);
20 }; 30 };
21 31
22 #endif // PROGRAMMINGMANUALCORETEMPPOPUP_H 32 #endif // PROGRAMMINGMANUALCORETEMPPOPUP_H
app/gui/oven_control/programmingmanualcoretemppopup.ui
  1 +<?xml version="1.0" encoding="UTF-8"?>
1 <ui version="4.0"> 2 <ui version="4.0">
2 - <author/>  
3 - <comment/>  
4 - <exportmacro/>  
5 <class>ProgrammingManualCoreTempPopup</class> 3 <class>ProgrammingManualCoreTempPopup</class>
6 <widget class="QWidget" name="ProgrammingManualCoreTempPopup"> 4 <widget class="QWidget" name="ProgrammingManualCoreTempPopup">
7 <property name="geometry"> 5 <property name="geometry">
8 <rect> 6 <rect>
9 <x>0</x> 7 <x>0</x>
10 <y>0</y> 8 <y>0</y>
11 - <width>400</width>  
12 - <height>300</height> 9 + <width>900</width>
  10 + <height>1600</height>
13 </rect> 11 </rect>
14 </property> 12 </property>
15 <property name="windowTitle"> 13 <property name="windowTitle">
16 <string>Form</string> 14 <string>Form</string>
17 </property> 15 </property>
  16 + <property name="styleSheet">
  17 + <string notr="true">#background {
  18 +background-image: url(:/images/background/manual_core.png);
  19 +margin-top: -720px;
  20 +}
  21 +
  22 +QPushButton[style=&quot;icon&quot;] {
  23 +background-image: url(:/images/slider_icon/background.png);
  24 +background-repeat: no-repeat;
  25 +background-position: center;
  26 +border: none;
  27 +}
  28 +
  29 +QPushButton[style=&quot;interTemp&quot;] {
  30 +background-repeat: no-repeat;
  31 +background-position: center;
  32 +background-clip: border;
  33 +background-origin: border;
  34 +
  35 +border-top: 130px;
  36 +border-style: hidden;
  37 +color: white;
  38 +font-size: 30px;
  39 +}
  40 +
  41 +QSlider::groove {
  42 +background-image: url(:/images/slider/groove_ticks.png);
  43 +background-repeat: no-repeat;
  44 +}
  45 +
  46 +QSlider::sub-page {
  47 +background-repeat: no-repeat;
  48 +margin: 5px;
  49 +}
  50 +
  51 +QSlider::handle {
  52 +background-image: url(:/images/slider/handle_big.png);
  53 +background-repeat: no-repeat;
  54 +width: 23px;
  55 +height: 33px;
  56 +}</string>
  57 + </property>
  58 + <widget class="QSlider" name="coreTempSlider">
  59 + <property name="geometry">
  60 + <rect>
  61 + <x>185</x>
  62 + <y>1012</y>
  63 + <width>666</width>
  64 + <height>33</height>
  65 + </rect>
  66 + </property>
  67 + <property name="styleSheet">
  68 + <string notr="true">QSlider::sub-page { background-image: url(:/images/slider/core.png); }</string>
  69 + </property>
  70 + <property name="minimum">
  71 + <number>30</number>
  72 + </property>
  73 + <property name="maximum">
  74 + <number>99</number>
  75 + </property>
  76 + <property name="value">
  77 + <number>30</number>
  78 + </property>
  79 + <property name="tracking">
  80 + <bool>true</bool>
  81 + </property>
  82 + <property name="orientation">
  83 + <enum>Qt::Horizontal</enum>
  84 + </property>
  85 + </widget>
  86 + <widget class="QPushButton" name="coreTempButton">
  87 + <property name="geometry">
  88 + <rect>
  89 + <x>27</x>
  90 + <y>954</y>
  91 + <width>140</width>
  92 + <height>140</height>
  93 + </rect>
  94 + </property>
  95 + <property name="styleSheet">
  96 + <string notr="true">QPushButton { image: url(:/images/slider_icon/core_temp_enabled.png); }
  97 +QPushButton:pressed { image: url(:/images/slider_icon/core_temp_ov.png); }</string>
  98 + </property>
  99 + <property name="style" stdset="0">
  100 + <string>icon</string>
  101 + </property>
  102 + </widget>
  103 + <widget class="QPushButton" name="cancelButton">
  104 + <property name="geometry">
  105 + <rect>
  106 + <x>200</x>
  107 + <y>1260</y>
  108 + <width>250</width>
  109 + <height>190</height>
  110 + </rect>
  111 + </property>
  112 + <property name="styleSheet">
  113 + <string notr="true">QPushButton { background-image: url(:/images/manual_button/back.png); }
  114 +QPushButton:pressed { background-image: url(:/images/manual_button/back_ov.png); }</string>
  115 + </property>
  116 + <property name="text">
  117 + <string>이전으로</string>
  118 + </property>
  119 + <property name="style" stdset="0">
  120 + <string notr="true">interTemp</string>
  121 + </property>
  122 + </widget>
  123 + <widget class="QPushButton" name="applyButton">
  124 + <property name="geometry">
  125 + <rect>
  126 + <x>450</x>
  127 + <y>1260</y>
  128 + <width>250</width>
  129 + <height>190</height>
  130 + </rect>
  131 + </property>
  132 + <property name="styleSheet">
  133 + <string notr="true">QPushButton { background-image: url(:/images/manual_button/ok.png); }
  134 +QPushButton:pressed { background-image: url(:/images/manual_button/ok_ov.png); }</string>
  135 + </property>
  136 + <property name="text">
  137 + <string>확인/적용하기</string>
  138 + </property>
  139 + <property name="style" stdset="0">
  140 + <string notr="true">interTemp</string>
  141 + </property>
  142 + </widget>
  143 + <widget class="QLabel" name="background">
  144 + <property name="geometry">
  145 + <rect>
  146 + <x>0</x>
  147 + <y>720</y>
  148 + <width>900</width>
  149 + <height>730</height>
  150 + </rect>
  151 + </property>
  152 + </widget>
  153 + <widget class="QLabel" name="coreTempLabel">
  154 + <property name="enabled">
  155 + <bool>true</bool>
  156 + </property>
  157 + <property name="geometry">
  158 + <rect>
  159 + <x>690</x>
  160 + <y>1038</y>
  161 + <width>150</width>
  162 + <height>50</height>
  163 + </rect>
  164 + </property>
  165 + <property name="palette">
  166 + <palette>
  167 + <active>
  168 + <colorrole role="WindowText">
  169 + <brush brushstyle="SolidPattern">
  170 + <color alpha="255">
  171 + <red>255</red>
  172 + <green>255</green>
  173 + <blue>255</blue>
  174 + </color>
  175 + </brush>
  176 + </colorrole>
  177 + </active>
  178 + <inactive>
  179 + <colorrole role="WindowText">
  180 + <brush brushstyle="SolidPattern">
  181 + <color alpha="255">
  182 + <red>255</red>
  183 + <green>255</green>
  184 + <blue>255</blue>
  185 + </color>
  186 + </brush>
  187 + </colorrole>
  188 + </inactive>
  189 + <disabled>
  190 + <colorrole role="WindowText">
  191 + <brush brushstyle="SolidPattern">
  192 + <color alpha="255">
  193 + <red>123</red>
  194 + <green>123</green>
  195 + <blue>123</blue>
  196 + </color>
  197 + </brush>
  198 + </colorrole>
  199 + </disabled>
  200 + </palette>
  201 + </property>
  202 + <property name="font">
  203 + <font>
  204 + <family>Roboto</family>
  205 + <pointsize>16</pointsize>
  206 + <weight>75</weight>
  207 + <bold>true</bold>
  208 + </font>
  209 + </property>
  210 + <property name="text">
  211 + <string>℃</string>
  212 + </property>
  213 + <property name="alignment">
  214 + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
  215 + </property>
  216 + </widget>
  217 + <zorder>background</zorder>
  218 + <zorder>coreTempSlider</zorder>
  219 + <zorder>coreTempButton</zorder>
  220 + <zorder>cancelButton</zorder>
  221 + <zorder>applyButton</zorder>
  222 + <zorder>coreTempLabel</zorder>
18 </widget> 223 </widget>
19 - <pixmapfunction/> 224 + <resources>
  225 + <include location="resources.qrc"/>
  226 + </resources>
20 <connections/> 227 <connections/>
21 </ui> 228 </ui>
app/gui/oven_control/programmingmanualwindow.cpp
1 #include "programmingmanualwindow.h" 1 #include "programmingmanualwindow.h"
2 #include "ui_programmingmanualwindow.h" 2 #include "ui_programmingmanualwindow.h"
3 3
4 -ProgrammingManualWindow::ProgrammingManualWindow(QWidget *parent) : 4 +#include "stringer.h"
  5 +#include "programmingmanualcoretemppopup.h"
  6 +#include "cookprogram.h"
  7 +
  8 +ProgrammingManualWindow::ProgrammingManualWindow(QWidget *parent, Define::Mode mode) :
5 QMainWindow(parent), 9 QMainWindow(parent),
6 ui(new Ui::ProgrammingManualWindow) 10 ui(new Ui::ProgrammingManualWindow)
7 { 11 {
8 ui->setupUi(this); 12 ui->setupUi(this);
  13 +
  14 + ui->clockContainer->setParent(ui->upperStack);
  15 + setAttribute(Qt::WA_DeleteOnClose);
  16 +
  17 + connect(ui->humiditySlider, SIGNAL(valueChanged(int)), SLOT(updateHumidityLabel()));
  18 + connect(ui->tempSlider, SIGNAL(valueChanged(int)), SLOT(updateTempLabel()));
  19 + connect(ui->timeSlider, SIGNAL(valueChanged(int)), SLOT(updateTimeLabel()));
  20 + connect(ui->interTempSlider, SIGNAL(valueChanged(int)), SLOT(updateCoreTempLabel()));
  21 +
  22 + setDefault(mode);
9 } 23 }
10 24
11 ProgrammingManualWindow::~ProgrammingManualWindow() 25 ProgrammingManualWindow::~ProgrammingManualWindow()
12 { 26 {
13 delete ui; 27 delete ui;
14 } 28 }
  29 +
  30 +void ProgrammingManualWindow::setDefault(Define::Mode mode)
  31 +{
  32 + switch (mode)
  33 + {
  34 + case Define::SteamMode:
  35 + ui->steamButton->setChecked(true);
  36 + ui->humiditySlider->setEnabled(false);
  37 + ui->humiditySlider->setValue(100);
  38 + ui->tempSlider->setRange(30, 130);
  39 + ui->tempSlider->setValue(100);
  40 + ui->timeSlider->setValue(0);
  41 + ui->interTempSlider->setEnabled(false);
  42 + ui->interTempSlider->setValue(30);
  43 + setFan(4);
  44 + updateCoreTempButton();
  45 + updateCoreTempLabel();
  46 + this->mode = mode;
  47 + break;
  48 + case Define::CombiMode:
  49 + ui->combiButton->setChecked(true);
  50 + ui->humiditySlider->setEnabled(true);
  51 + ui->humiditySlider->setValue(50);
  52 + ui->tempSlider->setRange(30, 300);
  53 + ui->tempSlider->setValue(100);
  54 + ui->timeSlider->setValue(0);
  55 + ui->interTempSlider->setEnabled(false);
  56 + ui->interTempSlider->setValue(30);
  57 + setFan(4);
  58 + updateCoreTempButton();
  59 + updateCoreTempLabel();
  60 + this->mode = mode;
  61 + break;
  62 + case Define::DryMode:
  63 + ui->dryheatButton->setChecked(true);
  64 + ui->humiditySlider->setEnabled(false);
  65 + ui->humiditySlider->setValue(0);
  66 + ui->tempSlider->setRange(30, 300);
  67 + ui->tempSlider->setValue(160);
  68 + ui->timeSlider->setValue(0);
  69 + ui->interTempSlider->setEnabled(false);
  70 + ui->interTempSlider->setValue(30);
  71 + setFan(4);
  72 + updateCoreTempButton();
  73 + updateCoreTempLabel();
  74 + this->mode = mode;
  75 + break;
  76 + default:
  77 + return;
  78 + }
  79 +}
  80 +
  81 +void ProgrammingManualWindow::setFan(int level)
  82 +{
  83 + fan = level;
  84 +
  85 + updateFanButton();
  86 +}
  87 +
  88 +void ProgrammingManualWindow::updateHumidityLabel()
  89 +{
  90 +// ui->humidityLabel->setText(QString::number(ui->humiditySlider->value()));
  91 + ui->humidityLabel->setText(QString("%1%").arg(ui->humiditySlider->value()));
  92 +}
  93 +
  94 +void ProgrammingManualWindow::updateTempLabel()
  95 +{
  96 + ui->tempLabel->setText(Stringer::temperature(ui->tempSlider->value(), Stringer::fontSize14));
  97 +}
  98 +
  99 +void ProgrammingManualWindow::updateTimeLabel()
  100 +{
  101 + ui->timeLabel->setText(Stringer::remainingTime(ui->timeSlider->value() * 1000, Stringer::fontSize14));
  102 +}
  103 +
  104 +void ProgrammingManualWindow::updateCoreTempButton()
  105 +{
  106 + if (ui->interTempSlider->isEnabled())
  107 + ui->interTempButton->setStyleSheet("\
  108 +QPushButton {\
  109 + image: url(:/images/slider_icon/core_temp_enabled.png);\
  110 +}\
  111 +QPushButton:pressed {\
  112 + image: url(:/images/slider_icon/core_temp_ov.png);\
  113 +}");
  114 + else
  115 + ui->interTempButton->setStyleSheet("\
  116 +QPushButton {\
  117 + image: url(:/images/slider_icon/core_temp.png);\
  118 +}\
  119 +QPushButton:pressed {\
  120 + image: url(:/images/slider_icon/core_temp_ov.png);\
  121 +}");
  122 +}
  123 +
  124 +void ProgrammingManualWindow::updateCoreTempLabel()
  125 +{
  126 + if (ui->interTempSlider->isEnabled())
  127 + ui->interTempLabel->setText(Stringer::temperature(ui->interTempSlider->value(), Stringer::fontSize14));
  128 + else
  129 + ui->interTempLabel->setText(Stringer::unusedTemperature(Stringer::fontSize14));
  130 +}
  131 +
  132 +void ProgrammingManualWindow::updateFanButton()
  133 +{
  134 + switch (fan)
  135 + {
  136 + case 1:
  137 + ui->fanButton->setStyleSheet(
  138 + "background-image: url(:/images/manual_button/fan_1.png)");
  139 + break;
  140 + case 2:
  141 + ui->fanButton->setStyleSheet(
  142 + "background-image: url(:/images/manual_button/fan_2.png)");
  143 + break;
  144 + case 3:
  145 + ui->fanButton->setStyleSheet(
  146 + "background-image: url(:/images/manual_button/fan_3.png)");
  147 + break;
  148 + case 4:
  149 + ui->fanButton->setStyleSheet(
  150 + "background-image: url(:/images/manual_button/fan_4.png)");
  151 + break;
  152 + case 5:
  153 + ui->fanButton->setStyleSheet(
  154 + "background-image: url(:/images/manual_button/fan_5.png)");
  155 + break;
  156 + default:
  157 + ui->fanButton->setStyleSheet(
  158 + "background-image: url(:/images/manual_button/fan_1.png)");
  159 + break;
  160 + }
  161 +}
  162 +
  163 +void ProgrammingManualWindow::onCoreTempEnabled(int celsius)
  164 +{
  165 + ui->interTempSlider->setEnabled(true);
  166 + ui->interTempSlider->setValue(celsius);
  167 + updateCoreTempButton();
  168 + updateCoreTempLabel();
  169 +}
  170 +
  171 +void ProgrammingManualWindow::on_steamButton_clicked()
  172 +{
  173 + setDefault(Define::SteamMode);
  174 +}
  175 +
  176 +void ProgrammingManualWindow::on_combiButton_clicked()
  177 +{
  178 + setDefault(Define::CombiMode);
  179 +}
  180 +
  181 +void ProgrammingManualWindow::on_dryheatButton_clicked()
  182 +{
  183 + setDefault(Define::DryMode);
  184 +}
  185 +
  186 +void ProgrammingManualWindow::on_interTempButton_clicked()
  187 +{
  188 + if (ui->interTempSlider->isEnabled())
  189 + {
  190 + ui->interTempSlider->setEnabled(false);
  191 + updateCoreTempButton();
  192 + updateCoreTempLabel();
  193 + }
  194 + else
  195 + {
  196 + ProgrammingManualCoreTempPopup *p = new ProgrammingManualCoreTempPopup(this);
  197 + connect(p, SIGNAL(coreTempEnabled(int)), SLOT(onCoreTempEnabled(int)));
  198 + p->showFullScreen();
  199 + }
  200 +}
  201 +
  202 +void ProgrammingManualWindow::on_fanButton_clicked()
  203 +{
  204 + fan++;
  205 + if (fan > 5)
  206 + fan = 1;
  207 +
  208 + updateFanButton();
  209 +}
  210 +
  211 +void ProgrammingManualWindow::on_backButton_clicked()
  212 +{
  213 + close();
  214 +}
  215 +
  216 +void ProgrammingManualWindow::on_configButton_clicked()
  217 +{
  218 +
  219 +}
  220 +
  221 +void ProgrammingManualWindow::on_helpButton_clicked()
  222 +{
  223 +
  224 +}
  225 +
  226 +void ProgrammingManualWindow::on_okButton_clicked()
  227 +{
  228 + ManualCookSetting s;
  229 + s.mode = mode;
  230 + s.humidity = ui->humiditySlider->value();
  231 + s.temp = ui->tempSlider->value();
  232 + s.time = ui->timeSlider->value();
  233 + s.coreTempEnabled = ui->interTempSlider->isEnabled();
  234 + s.coreTemp = ui->interTempSlider->value();
  235 + s.fan = fan;
  236 +
  237 + CookProgram::add(s);
  238 +
  239 + emit added();
  240 + close();
  241 +}
app/gui/oven_control/programmingmanualwindow.h
@@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
3 3
4 #include <QMainWindow> 4 #include <QMainWindow>
5 5
  6 +#include "define.h"
  7 +
6 namespace Ui { 8 namespace Ui {
7 class ProgrammingManualWindow; 9 class ProgrammingManualWindow;
8 } 10 }
@@ -12,11 +14,39 @@ class ProgrammingManualWindow : public QMainWindow @@ -12,11 +14,39 @@ class ProgrammingManualWindow : public QMainWindow
12 Q_OBJECT 14 Q_OBJECT
13 15
14 public: 16 public:
15 - explicit ProgrammingManualWindow(QWidget *parent = 0); 17 + explicit ProgrammingManualWindow(QWidget *parent, Define::Mode mode);
16 ~ProgrammingManualWindow(); 18 ~ProgrammingManualWindow();
17 19
18 private: 20 private:
19 Ui::ProgrammingManualWindow *ui; 21 Ui::ProgrammingManualWindow *ui;
  22 +
  23 + Define::Mode mode;
  24 + int fan;
  25 +
  26 +private slots:
  27 + void setDefault(Define::Mode mode);
  28 + void setFan(int level);
  29 + void updateHumidityLabel();
  30 + void updateTempLabel();
  31 + void updateTimeLabel();
  32 + void updateCoreTempButton();
  33 + void updateCoreTempLabel();
  34 + void updateFanButton();
  35 +
  36 + void onCoreTempEnabled(int celsius);
  37 +
  38 + void on_steamButton_clicked();
  39 + void on_combiButton_clicked();
  40 + void on_dryheatButton_clicked();
  41 + void on_interTempButton_clicked();
  42 + void on_fanButton_clicked();
  43 + void on_backButton_clicked();
  44 + void on_configButton_clicked();
  45 + void on_helpButton_clicked();
  46 + void on_okButton_clicked();
  47 +
  48 +signals:
  49 + void added();
20 }; 50 };
21 51
22 #endif // PROGRAMMINGMANUALWINDOW_H 52 #endif // PROGRAMMINGMANUALWINDOW_H
app/gui/oven_control/programmingmanualwindow.ui
  1 +<?xml version="1.0" encoding="UTF-8"?>
1 <ui version="4.0"> 2 <ui version="4.0">
2 - <author/>  
3 - <comment/>  
4 - <exportmacro/>  
5 <class>ProgrammingManualWindow</class> 3 <class>ProgrammingManualWindow</class>
6 <widget class="QMainWindow" name="ProgrammingManualWindow"> 4 <widget class="QMainWindow" name="ProgrammingManualWindow">
7 <property name="geometry"> 5 <property name="geometry">
8 <rect> 6 <rect>
9 <x>0</x> 7 <x>0</x>
10 <y>0</y> 8 <y>0</y>
11 - <width>800</width>  
12 - <height>600</height> 9 + <width>900</width>
  10 + <height>1600</height>
13 </rect> 11 </rect>
14 </property> 12 </property>
15 <property name="windowTitle"> 13 <property name="windowTitle">
16 <string>MainWindow</string> 14 <string>MainWindow</string>
17 </property> 15 </property>
18 - <widget class="QMenuBar" name="menubar"/>  
19 - <widget class="QWidget" name="centralwidget"/>  
20 - <widget class="QStatusBar" name="statusbar"/> 16 + <property name="styleSheet">
  17 + <string notr="true">#bottomBar { background-image: url(:/images/bottom_bar/background.png); }
  18 +#centralwidget { background-image: url(:/images/background/manual.png); }
  19 +
  20 +QPushButton {
  21 +background-repeat: no-repeat;
  22 +background-position: center;
  23 +border: none;
  24 +}
  25 +
  26 +QPushButton[style=&quot;mode&quot;] {
  27 +background-clip: border;
  28 +background-origin: border;
  29 +margin-bottom: 50px;
  30 +
  31 +border-top: 200px;
  32 +border-bottom: -50px;
  33 +border-style: hidden;
  34 +color: #7B7B7B;
  35 +font-size: 40px;
  36 +}
  37 +
  38 +QPushButton[style=&quot;mode&quot;]:checked {
  39 +color: white;
  40 +image: url(:/images/cook_mode/indicator.png);
  41 +image-position: bottom;
  42 +}
  43 +
  44 +QPushButton[style=&quot;icon&quot;] {
  45 +background-image: url(:/images/slider_icon/background.png);
  46 +}
  47 +
  48 +QSlider::groove {
  49 +background-image: url(:/images/slider/groove_ticks.png);
  50 +background-repeat: no-repeat;
  51 +}
  52 +
  53 +QSlider::sub-page {
  54 +background-repeat: no-repeat;
  55 +margin: 5px;
  56 +}
  57 +
  58 +QSlider::handle {
  59 +background-image: url(:/images/slider/handle_big.png);
  60 +background-repeat: no-repeat;
  61 +width: 23px;
  62 +height: 33px;
  63 +}</string>
  64 + </property>
  65 + <widget class="QWidget" name="centralwidget">
  66 + <widget class="QLabel" name="humidityLabel">
  67 + <property name="enabled">
  68 + <bool>true</bool>
  69 + </property>
  70 + <property name="geometry">
  71 + <rect>
  72 + <x>690</x>
  73 + <y>810</y>
  74 + <width>150</width>
  75 + <height>51</height>
  76 + </rect>
  77 + </property>
  78 + <property name="palette">
  79 + <palette>
  80 + <active>
  81 + <colorrole role="WindowText">
  82 + <brush brushstyle="SolidPattern">
  83 + <color alpha="255">
  84 + <red>255</red>
  85 + <green>255</green>
  86 + <blue>255</blue>
  87 + </color>
  88 + </brush>
  89 + </colorrole>
  90 + </active>
  91 + <inactive>
  92 + <colorrole role="WindowText">
  93 + <brush brushstyle="SolidPattern">
  94 + <color alpha="255">
  95 + <red>255</red>
  96 + <green>255</green>
  97 + <blue>255</blue>
  98 + </color>
  99 + </brush>
  100 + </colorrole>
  101 + </inactive>
  102 + <disabled>
  103 + <colorrole role="WindowText">
  104 + <brush brushstyle="SolidPattern">
  105 + <color alpha="255">
  106 + <red>123</red>
  107 + <green>123</green>
  108 + <blue>123</blue>
  109 + </color>
  110 + </brush>
  111 + </colorrole>
  112 + </disabled>
  113 + </palette>
  114 + </property>
  115 + <property name="font">
  116 + <font>
  117 + <family>Roboto</family>
  118 + <pointsize>16</pointsize>
  119 + <weight>75</weight>
  120 + <bold>true</bold>
  121 + </font>
  122 + </property>
  123 + <property name="text">
  124 + <string>0%</string>
  125 + </property>
  126 + <property name="alignment">
  127 + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
  128 + </property>
  129 + </widget>
  130 + <widget class="QStackedWidget" name="upperStack">
  131 + <property name="geometry">
  132 + <rect>
  133 + <x>0</x>
  134 + <y>0</y>
  135 + <width>900</width>
  136 + <height>426</height>
  137 + </rect>
  138 + </property>
  139 + <widget class="QWidget" name="clockContainer">
  140 + <property name="styleSheet">
  141 + <string notr="true">#clockContainer { background-image: url(:/images/clock/background.png); }</string>
  142 + </property>
  143 + <widget class="Clock" name="clock" native="true">
  144 + <property name="geometry">
  145 + <rect>
  146 + <x>272</x>
  147 + <y>36</y>
  148 + <width>356</width>
  149 + <height>355</height>
  150 + </rect>
  151 + </property>
  152 + </widget>
  153 + <widget class="WashWarnIcon" name="label_6">
  154 + <property name="geometry">
  155 + <rect>
  156 + <x>800</x>
  157 + <y>320</y>
  158 + <width>80</width>
  159 + <height>84</height>
  160 + </rect>
  161 + </property>
  162 + </widget>
  163 + </widget>
  164 + <widget class="QWidget" name="closeDoorWidget">
  165 + <property name="styleSheet">
  166 + <string notr="true">#closeDoorWidget { background-image: url(:/images/clock/background.png); }</string>
  167 + </property>
  168 + <widget class="AnimatedImageBox" name="openDoorAnimation">
  169 + <property name="geometry">
  170 + <rect>
  171 + <x>366</x>
  172 + <y>20</y>
  173 + <width>251</width>
  174 + <height>292</height>
  175 + </rect>
  176 + </property>
  177 + </widget>
  178 + <widget class="QLabel" name="label_5">
  179 + <property name="geometry">
  180 + <rect>
  181 + <x>430</x>
  182 + <y>170</y>
  183 + <width>85</width>
  184 + <height>24</height>
  185 + </rect>
  186 + </property>
  187 + <property name="pixmap">
  188 + <pixmap resource="resources.qrc">:/images/animation/close_door_arrow.png</pixmap>
  189 + </property>
  190 + </widget>
  191 + </widget>
  192 + </widget>
  193 + <widget class="QPushButton" name="dryheatButton">
  194 + <property name="geometry">
  195 + <rect>
  196 + <x>600</x>
  197 + <y>426</y>
  198 + <width>300</width>
  199 + <height>293</height>
  200 + </rect>
  201 + </property>
  202 + <property name="styleSheet">
  203 + <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_dryheat_hide.png); }
  204 +QPushButton:pressed { background-image: url(:/images/cook_mode/big_dryheat_ov.png); }
  205 +QPushButton:checked { background-image: url(:/images/cook_mode/big_dryheat.png); }</string>
  206 + </property>
  207 + <property name="text">
  208 + <string>건열</string>
  209 + </property>
  210 + <property name="checkable">
  211 + <bool>true</bool>
  212 + </property>
  213 + <property name="autoExclusive">
  214 + <bool>true</bool>
  215 + </property>
  216 + <property name="style" stdset="0">
  217 + <string notr="true">mode</string>
  218 + </property>
  219 + </widget>
  220 + <widget class="QPushButton" name="timeButton">
  221 + <property name="geometry">
  222 + <rect>
  223 + <x>27</x>
  224 + <y>1025</y>
  225 + <width>140</width>
  226 + <height>140</height>
  227 + </rect>
  228 + </property>
  229 + <property name="styleSheet">
  230 + <string notr="true">QPushButton { image: url(:/images/slider_icon/time.png); }
  231 +QPushButton:pressed { image: url(:/images/slider_icon/time_ov.png); }</string>
  232 + </property>
  233 + <property name="style" stdset="0">
  234 + <string notr="true">icon</string>
  235 + </property>
  236 + </widget>
  237 + <widget class="QLabel" name="steamLabel_3">
  238 + <property name="enabled">
  239 + <bool>true</bool>
  240 + </property>
  241 + <property name="geometry">
  242 + <rect>
  243 + <x>780</x>
  244 + <y>740</y>
  245 + <width>91</width>
  246 + <height>51</height>
  247 + </rect>
  248 + </property>
  249 + <property name="palette">
  250 + <palette>
  251 + <active>
  252 + <colorrole role="WindowText">
  253 + <brush brushstyle="SolidPattern">
  254 + <color alpha="255">
  255 + <red>255</red>
  256 + <green>255</green>
  257 + <blue>255</blue>
  258 + </color>
  259 + </brush>
  260 + </colorrole>
  261 + </active>
  262 + <inactive>
  263 + <colorrole role="WindowText">
  264 + <brush brushstyle="SolidPattern">
  265 + <color alpha="255">
  266 + <red>255</red>
  267 + <green>255</green>
  268 + <blue>255</blue>
  269 + </color>
  270 + </brush>
  271 + </colorrole>
  272 + </inactive>
  273 + <disabled>
  274 + <colorrole role="WindowText">
  275 + <brush brushstyle="SolidPattern">
  276 + <color alpha="255">
  277 + <red>123</red>
  278 + <green>123</green>
  279 + <blue>123</blue>
  280 + </color>
  281 + </brush>
  282 + </colorrole>
  283 + </disabled>
  284 + </palette>
  285 + </property>
  286 + <property name="font">
  287 + <font>
  288 + <family>Malgun Gothic</family>
  289 + <pointsize>9</pointsize>
  290 + </font>
  291 + </property>
  292 + <property name="text">
  293 + <string>증가</string>
  294 + </property>
  295 + <property name="alignment">
  296 + <set>Qt::AlignCenter</set>
  297 + </property>
  298 + </widget>
  299 + <widget class="QSlider" name="timeSlider">
  300 + <property name="geometry">
  301 + <rect>
  302 + <x>185</x>
  303 + <y>1083</y>
  304 + <width>666</width>
  305 + <height>33</height>
  306 + </rect>
  307 + </property>
  308 + <property name="styleSheet">
  309 + <string notr="true">QSlider::sub-page { background-image: url(:/images/slider/time.png); }</string>
  310 + </property>
  311 + <property name="maximum">
  312 + <number>86400</number>
  313 + </property>
  314 + <property name="singleStep">
  315 + <number>60</number>
  316 + </property>
  317 + <property name="pageStep">
  318 + <number>3600</number>
  319 + </property>
  320 + <property name="value">
  321 + <number>0</number>
  322 + </property>
  323 + <property name="orientation">
  324 + <enum>Qt::Horizontal</enum>
  325 + </property>
  326 + </widget>
  327 + <widget class="QSlider" name="interTempSlider">
  328 + <property name="enabled">
  329 + <bool>false</bool>
  330 + </property>
  331 + <property name="geometry">
  332 + <rect>
  333 + <x>185</x>
  334 + <y>1233</y>
  335 + <width>666</width>
  336 + <height>33</height>
  337 + </rect>
  338 + </property>
  339 + <property name="styleSheet">
  340 + <string notr="true">QSlider::sub-page { background-image: url(:/images/slider/core.png); }
  341 +QSlider::sub-page:disabled { background: #00000000; }
  342 +QSlider::handle:disabled { background: #00000000; }</string>
  343 + </property>
  344 + <property name="minimum">
  345 + <number>30</number>
  346 + </property>
  347 + <property name="maximum">
  348 + <number>99</number>
  349 + </property>
  350 + <property name="value">
  351 + <number>30</number>
  352 + </property>
  353 + <property name="orientation">
  354 + <enum>Qt::Horizontal</enum>
  355 + </property>
  356 + </widget>
  357 + <widget class="QLabel" name="interTempLabel">
  358 + <property name="enabled">
  359 + <bool>true</bool>
  360 + </property>
  361 + <property name="geometry">
  362 + <rect>
  363 + <x>690</x>
  364 + <y>1260</y>
  365 + <width>150</width>
  366 + <height>50</height>
  367 + </rect>
  368 + </property>
  369 + <property name="palette">
  370 + <palette>
  371 + <active>
  372 + <colorrole role="WindowText">
  373 + <brush brushstyle="SolidPattern">
  374 + <color alpha="255">
  375 + <red>255</red>
  376 + <green>255</green>
  377 + <blue>255</blue>
  378 + </color>
  379 + </brush>
  380 + </colorrole>
  381 + </active>
  382 + <inactive>
  383 + <colorrole role="WindowText">
  384 + <brush brushstyle="SolidPattern">
  385 + <color alpha="255">
  386 + <red>255</red>
  387 + <green>255</green>
  388 + <blue>255</blue>
  389 + </color>
  390 + </brush>
  391 + </colorrole>
  392 + </inactive>
  393 + <disabled>
  394 + <colorrole role="WindowText">
  395 + <brush brushstyle="SolidPattern">
  396 + <color alpha="255">
  397 + <red>123</red>
  398 + <green>123</green>
  399 + <blue>123</blue>
  400 + </color>
  401 + </brush>
  402 + </colorrole>
  403 + </disabled>
  404 + </palette>
  405 + </property>
  406 + <property name="font">
  407 + <font>
  408 + <family>Roboto</family>
  409 + <pointsize>16</pointsize>
  410 + <weight>75</weight>
  411 + <bold>true</bold>
  412 + </font>
  413 + </property>
  414 + <property name="text">
  415 + <string>&lt;span style=&quot;font-size:11pt;&quot;&gt;℃&lt;/span&gt;</string>
  416 + </property>
  417 + <property name="alignment">
  418 + <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
  419 + </property>
  420 + </widget>
  421 + <widget class="QLabel" name="steamLabel_5">
  422 + <property name="enabled">
  423 + <bool>true</bool>
  424 + </property>
  425 + <property name="geometry">
  426 + <rect>
  427 + <x>780</x>
  428 + <y>890</y>
  429 + <width>91</width>
  430 + <height>51</height>
  431 + </rect>
  432 + </property>
  433 + <property name="palette">
  434 + <palette>
  435 + <active>
  436 + <colorrole role="WindowText">
  437 + <brush brushstyle="SolidPattern">
  438 + <color alpha="255">
  439 + <red>255</red>
  440 + <green>255</green>
  441 + <blue>255</blue>
  442 + </color>
  443 + </brush>
  444 + </colorrole>
  445 + </active>
  446 + <inactive>
  447 + <colorrole role="WindowText">
  448 + <brush brushstyle="SolidPattern">
  449 + <color alpha="255">
  450 + <red>255</red>
  451 + <green>255</green>
  452 + <blue>255</blue>
  453 + </color>
  454 + </brush>
  455 + </colorrole>
  456 + </inactive>
  457 + <disabled>
  458 + <colorrole role="WindowText">
  459 + <brush brushstyle="SolidPattern">
  460 + <color alpha="255">
  461 + <red>123</red>
  462 + <green>123</green>
  463 + <blue>123</blue>
  464 + </color>
  465 + </brush>
  466 + </colorrole>
  467 + </disabled>
  468 + </palette>
  469 + </property>
  470 + <property name="font">
  471 + <font>
  472 + <family>Malgun Gothic</family>
  473 + <pointsize>9</pointsize>
  474 + </font>
  475 + </property>
  476 + <property name="text">
  477 + <string>증가</string>
  478 + </property>
  479 + <property name="alignment">
  480 + <set>Qt::AlignCenter</set>
  481 + </property>
  482 + </widget>
  483 + <widget class="QLabel" name="steamLabel_4">
  484 + <property name="enabled">
  485 + <bool>true</bool>
  486 + </property>
  487 + <property name="geometry">
  488 + <rect>
  489 + <x>160</x>
  490 + <y>890</y>
  491 + <width>91</width>
  492 + <height>51</height>
  493 + </rect>
  494 + </property>
  495 + <property name="palette">
  496 + <palette>
  497 + <active>
  498 + <colorrole role="WindowText">
  499 + <brush brushstyle="SolidPattern">
  500 + <color alpha="255">
  501 + <red>255</red>
  502 + <green>255</green>
  503 + <blue>255</blue>
  504 + </color>
  505 + </brush>
  506 + </colorrole>
  507 + </active>
  508 + <inactive>
  509 + <colorrole role="WindowText">
  510 + <brush brushstyle="SolidPattern">
  511 + <color alpha="255">
  512 + <red>255</red>
  513 + <green>255</green>
  514 + <blue>255</blue>
  515 + </color>
  516 + </brush>
  517 + </colorrole>
  518 + </inactive>
  519 + <disabled>
  520 + <colorrole role="WindowText">
  521 + <brush brushstyle="SolidPattern">
  522 + <color alpha="255">
  523 + <red>123</red>
  524 + <green>123</green>
  525 + <blue>123</blue>
  526 + </color>
  527 + </brush>
  528 + </colorrole>
  529 + </disabled>
  530 + </palette>
  531 + </property>
  532 + <property name="font">
  533 + <font>
  534 + <family>Malgun Gothic</family>
  535 + <pointsize>9</pointsize>
  536 + </font>
  537 + </property>
  538 + <property name="text">
  539 + <string>감소</string>
  540 + </property>
  541 + <property name="alignment">
  542 + <set>Qt::AlignCenter</set>
  543 + </property>
  544 + </widget>
  545 + <widget class="QWidget" name="bottomBar" native="true">
  546 + <property name="geometry">
  547 + <rect>
  548 + <x>0</x>
  549 + <y>1450</y>
  550 + <width>900</width>
  551 + <height>150</height>
  552 + </rect>
  553 + </property>
  554 + <widget class="QPushButton" name="backButton">
  555 + <property name="geometry">
  556 + <rect>
  557 + <x>232</x>
  558 + <y>26</y>
  559 + <width>97</width>
  560 + <height>97</height>
  561 + </rect>
  562 + </property>
  563 + <property name="styleSheet">
  564 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/back.png); }
  565 +QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</string>
  566 + </property>
  567 + <property name="text">
  568 + <string/>
  569 + </property>
  570 + </widget>
  571 + <widget class="QPushButton" name="configButton">
  572 + <property name="geometry">
  573 + <rect>
  574 + <x>345</x>
  575 + <y>26</y>
  576 + <width>97</width>
  577 + <height>97</height>
  578 + </rect>
  579 + </property>
  580 + <property name="styleSheet">
  581 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/config.png); }
  582 +QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</string>
  583 + </property>
  584 + <property name="text">
  585 + <string/>
  586 + </property>
  587 + </widget>
  588 + <widget class="QPushButton" name="okButton">
  589 + <property name="geometry">
  590 + <rect>
  591 + <x>571</x>
  592 + <y>26</y>
  593 + <width>97</width>
  594 + <height>97</height>
  595 + </rect>
  596 + </property>
  597 + <property name="styleSheet">
  598 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/006_sys_icon_16.png); }
  599 +QPushButton:pressed { border-image: url(:/images/bottom_bar/006_sys_icon_16_ov.png); }</string>
  600 + </property>
  601 + <property name="text">
  602 + <string/>
  603 + </property>
  604 + </widget>
  605 + <widget class="QPushButton" name="helpButton">
  606 + <property name="geometry">
  607 + <rect>
  608 + <x>458</x>
  609 + <y>26</y>
  610 + <width>97</width>
  611 + <height>97</height>
  612 + </rect>
  613 + </property>
  614 + <property name="styleSheet">
  615 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/help.png); }
  616 +QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</string>
  617 + </property>
  618 + <property name="text">
  619 + <string/>
  620 + </property>
  621 + </widget>
  622 + </widget>
  623 + <widget class="QPushButton" name="tempButton">
  624 + <property name="geometry">
  625 + <rect>
  626 + <x>27</x>
  627 + <y>875</y>
  628 + <width>140</width>
  629 + <height>140</height>
  630 + </rect>
  631 + </property>
  632 + <property name="styleSheet">
  633 + <string notr="true">QPushButton { image: url(:/images/slider_icon/temp.png); }
  634 +QPushButton:pressed { image: url(:/images/slider_icon/temp_ov.png); }</string>
  635 + </property>
  636 + <property name="style" stdset="0">
  637 + <string notr="true">icon</string>
  638 + </property>
  639 + </widget>
  640 + <widget class="QSlider" name="tempSlider">
  641 + <property name="geometry">
  642 + <rect>
  643 + <x>185</x>
  644 + <y>933</y>
  645 + <width>666</width>
  646 + <height>33</height>
  647 + </rect>
  648 + </property>
  649 + <property name="styleSheet">
  650 + <string notr="true">QSlider::sub-page { background-image: url(:/images/slider/temp.png); }</string>
  651 + </property>
  652 + <property name="maximum">
  653 + <number>6</number>
  654 + </property>
  655 + <property name="value">
  656 + <number>0</number>
  657 + </property>
  658 + <property name="orientation">
  659 + <enum>Qt::Horizontal</enum>
  660 + </property>
  661 + </widget>
  662 + <widget class="QPushButton" name="steamButton">
  663 + <property name="geometry">
  664 + <rect>
  665 + <x>0</x>
  666 + <y>426</y>
  667 + <width>300</width>
  668 + <height>293</height>
  669 + </rect>
  670 + </property>
  671 + <property name="styleSheet">
  672 + <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_steam_hide.png); }
  673 +QPushButton:pressed { background-image: url(:/images/cook_mode/big_steam_ov.png); }
  674 +QPushButton:checked { background-image: url(:/images/cook_mode/big_steam.png); }</string>
  675 + </property>
  676 + <property name="text">
  677 + <string>스팀</string>
  678 + </property>
  679 + <property name="checkable">
  680 + <bool>true</bool>
  681 + </property>
  682 + <property name="autoExclusive">
  683 + <bool>true</bool>
  684 + </property>
  685 + <property name="style" stdset="0">
  686 + <string notr="true">mode</string>
  687 + </property>
  688 + </widget>
  689 + <widget class="QLabel" name="tempLabel">
  690 + <property name="enabled">
  691 + <bool>true</bool>
  692 + </property>
  693 + <property name="geometry">
  694 + <rect>
  695 + <x>690</x>
  696 + <y>960</y>
  697 + <width>150</width>
  698 + <height>51</height>
  699 + </rect>
  700 + </property>
  701 + <property name="palette">
  702 + <palette>
  703 + <active>
  704 + <colorrole role="WindowText">
  705 + <brush brushstyle="SolidPattern">
  706 + <color alpha="255">
  707 + <red>255</red>
  708 + <green>255</green>
  709 + <blue>255</blue>
  710 + </color>
  711 + </brush>
  712 + </colorrole>
  713 + </active>
  714 + <inactive>
  715 + <colorrole role="WindowText">
  716 + <brush brushstyle="SolidPattern">
  717 + <color alpha="255">
  718 + <red>255</red>
  719 + <green>255</green>
  720 + <blue>255</blue>
  721 + </color>
  722 + </brush>
  723 + </colorrole>
  724 + </inactive>
  725 + <disabled>
  726 + <colorrole role="WindowText">
  727 + <brush brushstyle="SolidPattern">
  728 + <color alpha="255">
  729 + <red>123</red>
  730 + <green>123</green>
  731 + <blue>123</blue>
  732 + </color>
  733 + </brush>
  734 + </colorrole>
  735 + </disabled>
  736 + </palette>
  737 + </property>
  738 + <property name="font">
  739 + <font>
  740 + <family>Roboto</family>
  741 + <pointsize>16</pointsize>
  742 + <weight>75</weight>
  743 + <bold>true</bold>
  744 + </font>
  745 + </property>
  746 + <property name="text">
  747 + <string>30&lt;span style=&quot;font-size:11pt;&quot;&gt;℃&lt;/span&gt;</string>
  748 + </property>
  749 + <property name="alignment">
  750 + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
  751 + </property>
  752 + </widget>
  753 + <widget class="QLabel" name="steamLabel_2">
  754 + <property name="enabled">
  755 + <bool>true</bool>
  756 + </property>
  757 + <property name="geometry">
  758 + <rect>
  759 + <x>160</x>
  760 + <y>740</y>
  761 + <width>91</width>
  762 + <height>51</height>
  763 + </rect>
  764 + </property>
  765 + <property name="palette">
  766 + <palette>
  767 + <active>
  768 + <colorrole role="WindowText">
  769 + <brush brushstyle="SolidPattern">
  770 + <color alpha="255">
  771 + <red>255</red>
  772 + <green>255</green>
  773 + <blue>255</blue>
  774 + </color>
  775 + </brush>
  776 + </colorrole>
  777 + </active>
  778 + <inactive>
  779 + <colorrole role="WindowText">
  780 + <brush brushstyle="SolidPattern">
  781 + <color alpha="255">
  782 + <red>255</red>
  783 + <green>255</green>
  784 + <blue>255</blue>
  785 + </color>
  786 + </brush>
  787 + </colorrole>
  788 + </inactive>
  789 + <disabled>
  790 + <colorrole role="WindowText">
  791 + <brush brushstyle="SolidPattern">
  792 + <color alpha="255">
  793 + <red>123</red>
  794 + <green>123</green>
  795 + <blue>123</blue>
  796 + </color>
  797 + </brush>
  798 + </colorrole>
  799 + </disabled>
  800 + </palette>
  801 + </property>
  802 + <property name="font">
  803 + <font>
  804 + <family>Malgun Gothic</family>
  805 + <pointsize>9</pointsize>
  806 + </font>
  807 + </property>
  808 + <property name="text">
  809 + <string>감소</string>
  810 + </property>
  811 + <property name="alignment">
  812 + <set>Qt::AlignCenter</set>
  813 + </property>
  814 + </widget>
  815 + <widget class="QSlider" name="humiditySlider">
  816 + <property name="geometry">
  817 + <rect>
  818 + <x>185</x>
  819 + <y>783</y>
  820 + <width>666</width>
  821 + <height>33</height>
  822 + </rect>
  823 + </property>
  824 + <property name="styleSheet">
  825 + <string notr="true">QSlider::sub-page { background-image: url(:/images/slider/humidity.png); }</string>
  826 + </property>
  827 + <property name="maximum">
  828 + <number>100</number>
  829 + </property>
  830 + <property name="orientation">
  831 + <enum>Qt::Horizontal</enum>
  832 + </property>
  833 + </widget>
  834 + <widget class="QPushButton" name="humidityButton">
  835 + <property name="geometry">
  836 + <rect>
  837 + <x>27</x>
  838 + <y>725</y>
  839 + <width>140</width>
  840 + <height>140</height>
  841 + </rect>
  842 + </property>
  843 + <property name="styleSheet">
  844 + <string notr="true">QPushButton { image: url(:/images/slider_icon/humidity.png); }
  845 +QPushButton:pressed { image: url(:/images/slider_icon/humidity_ov.png); }</string>
  846 + </property>
  847 + <property name="style" stdset="0">
  848 + <string notr="true">icon</string>
  849 + </property>
  850 + </widget>
  851 + <widget class="QPushButton" name="interTempButton">
  852 + <property name="geometry">
  853 + <rect>
  854 + <x>27</x>
  855 + <y>1175</y>
  856 + <width>140</width>
  857 + <height>140</height>
  858 + </rect>
  859 + </property>
  860 + <property name="styleSheet">
  861 + <string notr="true">QPushButton { image: url(:/images/slider_icon/core_temp.png); }
  862 +QPushButton:pressed { image: url(:/images/slider_icon/core_temp_ov.png); }</string>
  863 + </property>
  864 + <property name="style" stdset="0">
  865 + <string notr="true">icon</string>
  866 + </property>
  867 + </widget>
  868 + <widget class="QPushButton" name="combiButton">
  869 + <property name="geometry">
  870 + <rect>
  871 + <x>300</x>
  872 + <y>426</y>
  873 + <width>300</width>
  874 + <height>293</height>
  875 + </rect>
  876 + </property>
  877 + <property name="styleSheet">
  878 + <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_combi_hide.png); }
  879 +QPushButton:pressed { background-image: url(:/images/cook_mode/big_combi_ov.png); }
  880 +QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); }</string>
  881 + </property>
  882 + <property name="text">
  883 + <string>콤비</string>
  884 + </property>
  885 + <property name="checkable">
  886 + <bool>true</bool>
  887 + </property>
  888 + <property name="autoExclusive">
  889 + <bool>true</bool>
  890 + </property>
  891 + <property name="style" stdset="0">
  892 + <string notr="true">mode</string>
  893 + </property>
  894 + </widget>
  895 + <widget class="QLabel" name="timeLabel">
  896 + <property name="enabled">
  897 + <bool>true</bool>
  898 + </property>
  899 + <property name="geometry">
  900 + <rect>
  901 + <x>539</x>
  902 + <y>1110</y>
  903 + <width>301</width>
  904 + <height>51</height>
  905 + </rect>
  906 + </property>
  907 + <property name="palette">
  908 + <palette>
  909 + <active>
  910 + <colorrole role="WindowText">
  911 + <brush brushstyle="SolidPattern">
  912 + <color alpha="255">
  913 + <red>255</red>
  914 + <green>255</green>
  915 + <blue>255</blue>
  916 + </color>
  917 + </brush>
  918 + </colorrole>
  919 + </active>
  920 + <inactive>
  921 + <colorrole role="WindowText">
  922 + <brush brushstyle="SolidPattern">
  923 + <color alpha="255">
  924 + <red>255</red>
  925 + <green>255</green>
  926 + <blue>255</blue>
  927 + </color>
  928 + </brush>
  929 + </colorrole>
  930 + </inactive>
  931 + <disabled>
  932 + <colorrole role="WindowText">
  933 + <brush brushstyle="SolidPattern">
  934 + <color alpha="255">
  935 + <red>123</red>
  936 + <green>123</green>
  937 + <blue>123</blue>
  938 + </color>
  939 + </brush>
  940 + </colorrole>
  941 + </disabled>
  942 + </palette>
  943 + </property>
  944 + <property name="font">
  945 + <font>
  946 + <family>Roboto</family>
  947 + <pointsize>16</pointsize>
  948 + <weight>75</weight>
  949 + <bold>true</bold>
  950 + </font>
  951 + </property>
  952 + <property name="text">
  953 + <string>0&lt;span style=&quot;font-size:11pt;&quot;&gt;초&lt;/span&gt;</string>
  954 + </property>
  955 + <property name="alignment">
  956 + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
  957 + </property>
  958 + </widget>
  959 + <widget class="QPushButton" name="fanButton">
  960 + <property name="geometry">
  961 + <rect>
  962 + <x>449</x>
  963 + <y>1319</y>
  964 + <width>112</width>
  965 + <height>131</height>
  966 + </rect>
  967 + </property>
  968 + <property name="styleSheet">
  969 + <string notr="true">QPushButton { background-image: url(:/images/manual_button/fan_4.png); }</string>
  970 + </property>
  971 + </widget>
  972 + </widget>
21 </widget> 973 </widget>
22 - <pixmapfunction/> 974 + <customwidgets>
  975 + <customwidget>
  976 + <class>Clock</class>
  977 + <extends>QWidget</extends>
  978 + <header>clock.h</header>
  979 + <container>1</container>
  980 + </customwidget>
  981 + <customwidget>
  982 + <class>WashWarnIcon</class>
  983 + <extends>QLabel</extends>
  984 + <header>washwarnicon.h</header>
  985 + </customwidget>
  986 + <customwidget>
  987 + <class>AnimatedImageBox</class>
  988 + <extends>QLabel</extends>
  989 + <header>animatedimagebox.h</header>
  990 + </customwidget>
  991 + </customwidgets>
  992 + <resources>
  993 + <include location="resources.qrc"/>
  994 + </resources>
23 <connections/> 995 <connections/>
24 </ui> 996 </ui>
app/gui/oven_control/programmingselectionwindow.cpp
1 #include "programmingselectionwindow.h" 1 #include "programmingselectionwindow.h"
2 #include "ui_programmingselectionwindow.h" 2 #include "ui_programmingselectionwindow.h"
3 3
  4 +#include "programmingmanualwindow.h"
  5 +
4 ProgrammingSelectionWindow::ProgrammingSelectionWindow(QWidget *parent) : 6 ProgrammingSelectionWindow::ProgrammingSelectionWindow(QWidget *parent) :
5 QMainWindow(parent), 7 QMainWindow(parent),
6 ui(new Ui::ProgrammingSelectionWindow) 8 ui(new Ui::ProgrammingSelectionWindow)
7 { 9 {
8 ui->setupUi(this); 10 ui->setupUi(this);
  11 +
  12 +// ui->clockContainer->setParent(ui->upperStack);
  13 + setAttribute(Qt::WA_DeleteOnClose);
  14 +
  15 + setFocus();
9 } 16 }
10 17
11 ProgrammingSelectionWindow::~ProgrammingSelectionWindow() 18 ProgrammingSelectionWindow::~ProgrammingSelectionWindow()
12 { 19 {
13 delete ui; 20 delete ui;
14 } 21 }
  22 +
  23 +void ProgrammingSelectionWindow::setModeEnabled(bool enabled)
  24 +{
  25 + ui->steamButton->setEnabled(enabled);
  26 + ui->combiButton->setEnabled(enabled);
  27 + ui->dryheatButton->setEnabled(enabled);
  28 +}
  29 +
  30 +void ProgrammingSelectionWindow::setCookTypeEnabled(bool enabled)
  31 +{
  32 + ui->poultryButton->setEnabled(enabled);
  33 + ui->meatButton->setEnabled(enabled);
  34 + ui->fishButton->setEnabled(enabled);
  35 + ui->dessertButton->setEnabled(enabled);
  36 + ui->grainButton->setEnabled(enabled);
  37 + ui->breadButton->setEnabled(enabled);
  38 + ui->etcButton->setEnabled(enabled);
  39 +}
  40 +
  41 +void ProgrammingSelectionWindow::onModeClicked(Define::Mode mode)
  42 +{
  43 + ProgrammingManualWindow *w = new ProgrammingManualWindow(this, mode);
  44 + connect(w, SIGNAL(added()), SIGNAL(added()));
  45 + connect(w, SIGNAL(destroyed(QObject*)), SLOT(deleteLater()));
  46 + w->setWindowModality(Qt::WindowModal);
  47 + w->showFullScreen();
  48 + w->raise();
  49 +
  50 + hide();
  51 +}
  52 +
  53 +void ProgrammingSelectionWindow::onCookTypeClicked(Define::CookType type)
  54 +{
  55 + emit cookTypeSelected(type);
  56 + close();
  57 +}
  58 +
  59 +void ProgrammingSelectionWindow::on_steamButton_clicked()
  60 +{
  61 + onModeClicked(Define::SteamMode);
  62 +}
  63 +
  64 +void ProgrammingSelectionWindow::on_combiButton_clicked()
  65 +{
  66 + onModeClicked(Define::CombiMode);
  67 +}
  68 +
  69 +void ProgrammingSelectionWindow::on_dryheatButton_clicked()
  70 +{
  71 + onModeClicked(Define::DryMode);
  72 +}
  73 +
  74 +void ProgrammingSelectionWindow::on_poultryButton_clicked()
  75 +{
  76 + onCookTypeClicked(Define::Poultry);
  77 +}
  78 +
  79 +void ProgrammingSelectionWindow::on_meatButton_clicked()
  80 +{
  81 + onCookTypeClicked(Define::Meat);
  82 +}
  83 +
  84 +void ProgrammingSelectionWindow::on_fishButton_clicked()
  85 +{
  86 + onCookTypeClicked(Define::Fish);
  87 +}
  88 +
  89 +void ProgrammingSelectionWindow::on_dessertButton_clicked()
  90 +{
  91 + onCookTypeClicked(Define::Desert);
  92 +}
  93 +
  94 +void ProgrammingSelectionWindow::on_grainButton_clicked()
  95 +{
  96 + onCookTypeClicked(Define::Vegetable);
  97 +}
  98 +
  99 +void ProgrammingSelectionWindow::on_breadButton_clicked()
  100 +{
  101 + onCookTypeClicked(Define::Bread);
  102 +}
  103 +
  104 +void ProgrammingSelectionWindow::on_etcButton_clicked()
  105 +{
  106 + onCookTypeClicked(Define::Etc);
  107 +}
app/gui/oven_control/programmingselectionwindow.h
@@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
3 3
4 #include <QMainWindow> 4 #include <QMainWindow>
5 5
  6 +#include "define.h"
  7 +
6 namespace Ui { 8 namespace Ui {
7 class ProgrammingSelectionWindow; 9 class ProgrammingSelectionWindow;
8 } 10 }
@@ -15,8 +17,31 @@ public: @@ -15,8 +17,31 @@ public:
15 explicit ProgrammingSelectionWindow(QWidget *parent = 0); 17 explicit ProgrammingSelectionWindow(QWidget *parent = 0);
16 ~ProgrammingSelectionWindow(); 18 ~ProgrammingSelectionWindow();
17 19
  20 + void setModeEnabled(bool enabled);
  21 + void setCookTypeEnabled(bool enabled);
  22 +
18 private: 23 private:
19 Ui::ProgrammingSelectionWindow *ui; 24 Ui::ProgrammingSelectionWindow *ui;
  25 +
  26 +signals:
  27 + void added();
  28 + void modeSelected(Define::Mode);
  29 + void cookTypeSelected(Define::CookType);
  30 +
  31 +private slots:
  32 + void onModeClicked(Define::Mode mode);
  33 + void onCookTypeClicked(Define::CookType type);
  34 +
  35 + void on_steamButton_clicked();
  36 + void on_combiButton_clicked();
  37 + void on_dryheatButton_clicked();
  38 + void on_poultryButton_clicked();
  39 + void on_meatButton_clicked();
  40 + void on_fishButton_clicked();
  41 + void on_dessertButton_clicked();
  42 + void on_grainButton_clicked();
  43 + void on_breadButton_clicked();
  44 + void on_etcButton_clicked();
20 }; 45 };
21 46
22 #endif // PROGRAMMINGSELECTIONWINDOW_H 47 #endif // PROGRAMMINGSELECTIONWINDOW_H
app/gui/oven_control/programmingselectionwindow.ui
  1 +<?xml version="1.0" encoding="UTF-8"?>
1 <ui version="4.0"> 2 <ui version="4.0">
2 - <author/>  
3 - <comment/>  
4 - <exportmacro/>  
5 <class>ProgrammingSelectionWindow</class> 3 <class>ProgrammingSelectionWindow</class>
6 <widget class="QMainWindow" name="ProgrammingSelectionWindow"> 4 <widget class="QMainWindow" name="ProgrammingSelectionWindow">
7 <property name="geometry"> 5 <property name="geometry">
8 <rect> 6 <rect>
9 <x>0</x> 7 <x>0</x>
10 <y>0</y> 8 <y>0</y>
11 - <width>800</width>  
12 - <height>600</height> 9 + <width>900</width>
  10 + <height>1600</height>
13 </rect> 11 </rect>
14 </property> 12 </property>
15 <property name="windowTitle"> 13 <property name="windowTitle">
16 <string>MainWindow</string> 14 <string>MainWindow</string>
17 </property> 15 </property>
18 - <widget class="QMenuBar" name="menubar"/>  
19 - <widget class="QWidget" name="centralwidget"/>  
20 - <widget class="QStatusBar" name="statusbar"/> 16 + <property name="styleSheet">
  17 + <string notr="true">#centralwidget { background-image: url(:/images/background/main.png); }
  18 +#bottomBar { background-image: url(:/images/bottom_bar/background.png); }
  19 +
  20 +QWidget { outline: none; }
  21 +
  22 +QPushButton[style=&quot;mode&quot;] {
  23 +background-repeat: no-repeat;
  24 +background-position: center;
  25 +background-clip: border;
  26 +background-origin: border;
  27 +margin-bottom: 50px;
  28 +
  29 +border-top: 200px;
  30 +border-bottom: -50px;
  31 +border-style: hidden;
  32 +color: white;
  33 +font-size: 40px;
  34 +}
  35 +
  36 +QPushButton[style=&quot;type&quot;] {
  37 +background-repeat: no-repeat;
  38 +background-position: center;
  39 +background-clip: border;
  40 +background-origin: border;
  41 +
  42 +border-top: 165px;
  43 +border-style: hidden;
  44 +color: white;
  45 +font-size: 30px;
  46 +}
  47 +
  48 +QPushButton[style=&quot;function&quot;] {
  49 +background-repeat: no-repeat;
  50 +background-position: center;
  51 +background-clip: border;
  52 +background-origin: border;
  53 +
  54 +border-top: 206px;
  55 +border-style: hidden;
  56 +color: white;
  57 +font-size: 30px;
  58 +}
  59 +
  60 +QPushButton:disabled { color: #7B7B7B; }</string>
  61 + </property>
  62 + <widget class="QWidget" name="centralwidget">
  63 + <widget class="QPushButton" name="dessertButton">
  64 + <property name="enabled">
  65 + <bool>false</bool>
  66 + </property>
  67 + <property name="geometry">
  68 + <rect>
  69 + <x>675</x>
  70 + <y>720</y>
  71 + <width>225</width>
  72 + <height>222</height>
  73 + </rect>
  74 + </property>
  75 + <property name="sizePolicy">
  76 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  77 + <horstretch>0</horstretch>
  78 + <verstretch>0</verstretch>
  79 + </sizepolicy>
  80 + </property>
  81 + <property name="styleSheet">
  82 + <string notr="true">QPushButton { background-image: url(:/images/cook_type/desert.png); }
  83 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_type/desert_ov.png); }
  84 +QPushButton:disabled { background-image: url(:/images/cook_type/desert_hide.png); }</string>
  85 + </property>
  86 + <property name="text">
  87 + <string>디저트류</string>
  88 + </property>
  89 + <property name="style" stdset="0">
  90 + <string>type</string>
  91 + </property>
  92 + </widget>
  93 + <widget class="QPushButton" name="fishButton">
  94 + <property name="enabled">
  95 + <bool>false</bool>
  96 + </property>
  97 + <property name="geometry">
  98 + <rect>
  99 + <x>450</x>
  100 + <y>720</y>
  101 + <width>225</width>
  102 + <height>222</height>
  103 + </rect>
  104 + </property>
  105 + <property name="sizePolicy">
  106 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  107 + <horstretch>0</horstretch>
  108 + <verstretch>0</verstretch>
  109 + </sizepolicy>
  110 + </property>
  111 + <property name="styleSheet">
  112 + <string notr="true">QPushButton { background-image: url(:/images/cook_type/fish.png); }
  113 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_type/fish_ov.png); }
  114 +QPushButton:disabled { background-image: url(:/images/cook_type/fish_hide.png); }</string>
  115 + </property>
  116 + <property name="text">
  117 + <string>생선류</string>
  118 + </property>
  119 + <property name="style" stdset="0">
  120 + <string>type</string>
  121 + </property>
  122 + </widget>
  123 + <widget class="Line" name="line_6">
  124 + <property name="geometry">
  125 + <rect>
  126 + <x>675</x>
  127 + <y>993</y>
  128 + <width>1</width>
  129 + <height>120</height>
  130 + </rect>
  131 + </property>
  132 + <property name="orientation">
  133 + <enum>Qt::Vertical</enum>
  134 + </property>
  135 + </widget>
  136 + <widget class="Line" name="line_4">
  137 + <property name="geometry">
  138 + <rect>
  139 + <x>225</x>
  140 + <y>993</y>
  141 + <width>1</width>
  142 + <height>120</height>
  143 + </rect>
  144 + </property>
  145 + <property name="orientation">
  146 + <enum>Qt::Vertical</enum>
  147 + </property>
  148 + </widget>
  149 + <widget class="QPushButton" name="multiButton">
  150 + <property name="enabled">
  151 + <bool>false</bool>
  152 + </property>
  153 + <property name="geometry">
  154 + <rect>
  155 + <x>0</x>
  156 + <y>1164</y>
  157 + <width>300</width>
  158 + <height>286</height>
  159 + </rect>
  160 + </property>
  161 + <property name="sizePolicy">
  162 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  163 + <horstretch>0</horstretch>
  164 + <verstretch>0</verstretch>
  165 + </sizepolicy>
  166 + </property>
  167 + <property name="styleSheet">
  168 + <string notr="true">QPushButton { background-image: url(:/images/main_button/multi.png); }
  169 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/multi_ov.png); }
  170 +QPushButton:disabled { background-image: url(:/images/main_button/multi_hide.png); }</string>
  171 + </property>
  172 + <property name="text">
  173 + <string>다중요리</string>
  174 + </property>
  175 + <property name="style" stdset="0">
  176 + <string>function</string>
  177 + </property>
  178 + </widget>
  179 + <widget class="QPushButton" name="grainButton">
  180 + <property name="enabled">
  181 + <bool>false</bool>
  182 + </property>
  183 + <property name="geometry">
  184 + <rect>
  185 + <x>0</x>
  186 + <y>942</y>
  187 + <width>225</width>
  188 + <height>222</height>
  189 + </rect>
  190 + </property>
  191 + <property name="sizePolicy">
  192 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  193 + <horstretch>0</horstretch>
  194 + <verstretch>0</verstretch>
  195 + </sizepolicy>
  196 + </property>
  197 + <property name="styleSheet">
  198 + <string notr="true">QPushButton { background-image: url(:/images/cook_type/vegetable.png); }
  199 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_type/vegetable_ov.png); }
  200 +QPushButton:disabled { background-image: url(:/images/cook_type/vegetable_hide.png); }</string>
  201 + </property>
  202 + <property name="text">
  203 + <string>채소및곡류</string>
  204 + </property>
  205 + <property name="style" stdset="0">
  206 + <string>type</string>
  207 + </property>
  208 + </widget>
  209 + <widget class="QPushButton" name="meatButton">
  210 + <property name="enabled">
  211 + <bool>false</bool>
  212 + </property>
  213 + <property name="geometry">
  214 + <rect>
  215 + <x>225</x>
  216 + <y>720</y>
  217 + <width>225</width>
  218 + <height>222</height>
  219 + </rect>
  220 + </property>
  221 + <property name="sizePolicy">
  222 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  223 + <horstretch>0</horstretch>
  224 + <verstretch>0</verstretch>
  225 + </sizepolicy>
  226 + </property>
  227 + <property name="styleSheet">
  228 + <string notr="true">QPushButton { background-image: url(:/images/cook_type/meat.png); }
  229 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_type/meat_ov.png); }
  230 +QPushButton:disabled { background-image: url(:/images/cook_type/meat_hide.png); }</string>
  231 + </property>
  232 + <property name="text">
  233 + <string>육류</string>
  234 + </property>
  235 + <property name="style" stdset="0">
  236 + <string>type</string>
  237 + </property>
  238 + </widget>
  239 + <widget class="QWidget" name="bottomBar" native="true">
  240 + <property name="geometry">
  241 + <rect>
  242 + <x>0</x>
  243 + <y>1450</y>
  244 + <width>900</width>
  245 + <height>150</height>
  246 + </rect>
  247 + </property>
  248 + <property name="minimumSize">
  249 + <size>
  250 + <width>900</width>
  251 + <height>150</height>
  252 + </size>
  253 + </property>
  254 + <property name="maximumSize">
  255 + <size>
  256 + <width>900</width>
  257 + <height>150</height>
  258 + </size>
  259 + </property>
  260 + <widget class="QPushButton" name="configButton">
  261 + <property name="geometry">
  262 + <rect>
  263 + <x>345</x>
  264 + <y>26</y>
  265 + <width>97</width>
  266 + <height>97</height>
  267 + </rect>
  268 + </property>
  269 + <property name="sizePolicy">
  270 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  271 + <horstretch>0</horstretch>
  272 + <verstretch>0</verstretch>
  273 + </sizepolicy>
  274 + </property>
  275 + <property name="minimumSize">
  276 + <size>
  277 + <width>62</width>
  278 + <height>71</height>
  279 + </size>
  280 + </property>
  281 + <property name="styleSheet">
  282 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/config.png); }
  283 +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/config_ov.png); }</string>
  284 + </property>
  285 + <property name="text">
  286 + <string/>
  287 + </property>
  288 + </widget>
  289 + <widget class="QPushButton" name="helpButton">
  290 + <property name="geometry">
  291 + <rect>
  292 + <x>458</x>
  293 + <y>26</y>
  294 + <width>97</width>
  295 + <height>97</height>
  296 + </rect>
  297 + </property>
  298 + <property name="sizePolicy">
  299 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  300 + <horstretch>0</horstretch>
  301 + <verstretch>0</verstretch>
  302 + </sizepolicy>
  303 + </property>
  304 + <property name="minimumSize">
  305 + <size>
  306 + <width>62</width>
  307 + <height>71</height>
  308 + </size>
  309 + </property>
  310 + <property name="styleSheet">
  311 + <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/help.png); }
  312 +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/help_ov.png); }</string>
  313 + </property>
  314 + <property name="text">
  315 + <string/>
  316 + </property>
  317 + </widget>
  318 + </widget>
  319 + <widget class="Line" name="line_3">
  320 + <property name="geometry">
  321 + <rect>
  322 + <x>675</x>
  323 + <y>771</y>
  324 + <width>1</width>
  325 + <height>120</height>
  326 + </rect>
  327 + </property>
  328 + <property name="orientation">
  329 + <enum>Qt::Vertical</enum>
  330 + </property>
  331 + </widget>
  332 + <widget class="QPushButton" name="dryheatButton">
  333 + <property name="enabled">
  334 + <bool>false</bool>
  335 + </property>
  336 + <property name="geometry">
  337 + <rect>
  338 + <x>600</x>
  339 + <y>426</y>
  340 + <width>300</width>
  341 + <height>293</height>
  342 + </rect>
  343 + </property>
  344 + <property name="styleSheet">
  345 + <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_dryheat.png); }
  346 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_mode/big_dryheat_ov.png); }
  347 +QPushButton:disabled { background-image: url(:/images/cook_mode/big_dryheat_hide.png); }</string>
  348 + </property>
  349 + <property name="text">
  350 + <string>건열</string>
  351 + </property>
  352 + <property name="style" stdset="0">
  353 + <string>mode</string>
  354 + </property>
  355 + </widget>
  356 + <widget class="QPushButton" name="etcButton">
  357 + <property name="enabled">
  358 + <bool>false</bool>
  359 + </property>
  360 + <property name="geometry">
  361 + <rect>
  362 + <x>450</x>
  363 + <y>942</y>
  364 + <width>225</width>
  365 + <height>222</height>
  366 + </rect>
  367 + </property>
  368 + <property name="sizePolicy">
  369 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  370 + <horstretch>0</horstretch>
  371 + <verstretch>0</verstretch>
  372 + </sizepolicy>
  373 + </property>
  374 + <property name="styleSheet">
  375 + <string notr="true">QPushButton { background-image: url(:/images/cook_type/etc.png); }
  376 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_type/etc_ov.png); }
  377 +QPushButton:disabled { background-image: url(:/images/cook_type/etc_hide.png); }</string>
  378 + </property>
  379 + <property name="text">
  380 + <string>기타요리</string>
  381 + </property>
  382 + <property name="style" stdset="0">
  383 + <string>type</string>
  384 + </property>
  385 + </widget>
  386 + <widget class="Line" name="line_7">
  387 + <property name="geometry">
  388 + <rect>
  389 + <x>18</x>
  390 + <y>942</y>
  391 + <width>863</width>
  392 + <height>1</height>
  393 + </rect>
  394 + </property>
  395 + <property name="orientation">
  396 + <enum>Qt::Horizontal</enum>
  397 + </property>
  398 + </widget>
  399 + <widget class="QPushButton" name="washButton">
  400 + <property name="enabled">
  401 + <bool>false</bool>
  402 + </property>
  403 + <property name="geometry">
  404 + <rect>
  405 + <x>600</x>
  406 + <y>1164</y>
  407 + <width>300</width>
  408 + <height>286</height>
  409 + </rect>
  410 + </property>
  411 + <property name="sizePolicy">
  412 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  413 + <horstretch>0</horstretch>
  414 + <verstretch>0</verstretch>
  415 + </sizepolicy>
  416 + </property>
  417 + <property name="styleSheet">
  418 + <string notr="true">QPushButton { background-image: url(:/images/main_button/wash.png); }
  419 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/wash_ov.png); }
  420 +QPushButton:disabled { background-image: url(:/images/main_button/wash_hide.png); }</string>
  421 + </property>
  422 + <property name="text">
  423 + <string>세척모드</string>
  424 + </property>
  425 + <property name="style" stdset="0">
  426 + <string>function</string>
  427 + </property>
  428 + </widget>
  429 + <widget class="QPushButton" name="programmingButton">
  430 + <property name="enabled">
  431 + <bool>false</bool>
  432 + </property>
  433 + <property name="geometry">
  434 + <rect>
  435 + <x>300</x>
  436 + <y>1164</y>
  437 + <width>300</width>
  438 + <height>286</height>
  439 + </rect>
  440 + </property>
  441 + <property name="sizePolicy">
  442 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  443 + <horstretch>0</horstretch>
  444 + <verstretch>0</verstretch>
  445 + </sizepolicy>
  446 + </property>
  447 + <property name="styleSheet">
  448 + <string notr="true">QPushButton { background-image: url(:/images/main_button/custom.png); }
  449 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/custom_ov.png); }
  450 +QPushButton:disabled { background-image: url(:/images/main_button/custom_hide.png); }</string>
  451 + </property>
  452 + <property name="text">
  453 + <string>프로그래밍모드</string>
  454 + </property>
  455 + <property name="style" stdset="0">
  456 + <string>function</string>
  457 + </property>
  458 + </widget>
  459 + <widget class="QPushButton" name="steamButton">
  460 + <property name="enabled">
  461 + <bool>false</bool>
  462 + </property>
  463 + <property name="geometry">
  464 + <rect>
  465 + <x>0</x>
  466 + <y>426</y>
  467 + <width>300</width>
  468 + <height>293</height>
  469 + </rect>
  470 + </property>
  471 + <property name="styleSheet">
  472 + <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_steam.png); }
  473 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_mode/big_steam_ov.png); }
  474 +QPushButton:disabled { background-image: url(:/images/cook_mode/big_steam_hide.png); }</string>
  475 + </property>
  476 + <property name="text">
  477 + <string>스팀</string>
  478 + </property>
  479 + <property name="style" stdset="0">
  480 + <string>mode</string>
  481 + </property>
  482 + </widget>
  483 + <widget class="Line" name="line">
  484 + <property name="geometry">
  485 + <rect>
  486 + <x>225</x>
  487 + <y>771</y>
  488 + <width>1</width>
  489 + <height>120</height>
  490 + </rect>
  491 + </property>
  492 + <property name="orientation">
  493 + <enum>Qt::Vertical</enum>
  494 + </property>
  495 + </widget>
  496 + <widget class="Line" name="line_5">
  497 + <property name="geometry">
  498 + <rect>
  499 + <x>450</x>
  500 + <y>993</y>
  501 + <width>1</width>
  502 + <height>120</height>
  503 + </rect>
  504 + </property>
  505 + <property name="orientation">
  506 + <enum>Qt::Vertical</enum>
  507 + </property>
  508 + </widget>
  509 + <widget class="Line" name="line_2">
  510 + <property name="geometry">
  511 + <rect>
  512 + <x>450</x>
  513 + <y>771</y>
  514 + <width>1</width>
  515 + <height>120</height>
  516 + </rect>
  517 + </property>
  518 + <property name="orientation">
  519 + <enum>Qt::Vertical</enum>
  520 + </property>
  521 + </widget>
  522 + <widget class="QPushButton" name="poultryButton">
  523 + <property name="enabled">
  524 + <bool>false</bool>
  525 + </property>
  526 + <property name="geometry">
  527 + <rect>
  528 + <x>0</x>
  529 + <y>720</y>
  530 + <width>225</width>
  531 + <height>222</height>
  532 + </rect>
  533 + </property>
  534 + <property name="sizePolicy">
  535 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  536 + <horstretch>0</horstretch>
  537 + <verstretch>0</verstretch>
  538 + </sizepolicy>
  539 + </property>
  540 + <property name="styleSheet">
  541 + <string notr="true">QPushButton { background-image: url(:/images/cook_type/poultry.png); }
  542 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_type/poultry_ov.png); }
  543 +QPushButton:disabled { background-image: url(:/images/cook_type/poultry_hide.png); }</string>
  544 + </property>
  545 + <property name="text">
  546 + <string>가금류</string>
  547 + </property>
  548 + <property name="style" stdset="0">
  549 + <string>type</string>
  550 + </property>
  551 + </widget>
  552 + <widget class="QPushButton" name="combiButton">
  553 + <property name="enabled">
  554 + <bool>false</bool>
  555 + </property>
  556 + <property name="geometry">
  557 + <rect>
  558 + <x>300</x>
  559 + <y>426</y>
  560 + <width>300</width>
  561 + <height>293</height>
  562 + </rect>
  563 + </property>
  564 + <property name="styleSheet">
  565 + <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_combi.png); }
  566 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_mode/big_combi_ov.png); }
  567 +QPushButton:disabled { background-image: url(:/images/cook_mode/big_combi_hide.png); }</string>
  568 + </property>
  569 + <property name="text">
  570 + <string>콤비</string>
  571 + </property>
  572 + <property name="style" stdset="0">
  573 + <string>mode</string>
  574 + </property>
  575 + </widget>
  576 + <widget class="QPushButton" name="primeButton">
  577 + <property name="enabled">
  578 + <bool>false</bool>
  579 + </property>
  580 + <property name="geometry">
  581 + <rect>
  582 + <x>675</x>
  583 + <y>942</y>
  584 + <width>225</width>
  585 + <height>222</height>
  586 + </rect>
  587 + </property>
  588 + <property name="sizePolicy">
  589 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  590 + <horstretch>0</horstretch>
  591 + <verstretch>0</verstretch>
  592 + </sizepolicy>
  593 + </property>
  594 + <property name="styleSheet">
  595 + <string notr="true">QPushButton { background-image: url(:/images/cook_type/additional.png); }
  596 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_type/additional_ov.png); }
  597 +QPushButton:disabled { background-image: url(:/images/cook_type/additional_hide.png); }</string>
  598 + </property>
  599 + <property name="text">
  600 + <string>부가기능</string>
  601 + </property>
  602 + <property name="style" stdset="0">
  603 + <string>type</string>
  604 + </property>
  605 + </widget>
  606 + <widget class="QWidget" name="clockContainer" native="true">
  607 + <property name="geometry">
  608 + <rect>
  609 + <x>0</x>
  610 + <y>0</y>
  611 + <width>900</width>
  612 + <height>426</height>
  613 + </rect>
  614 + </property>
  615 + <property name="styleSheet">
  616 + <string notr="true">#clockContainer { background-image: url(:/images/clock/background.png); }</string>
  617 + </property>
  618 + <widget class="Clock" name="clock" native="true">
  619 + <property name="geometry">
  620 + <rect>
  621 + <x>272</x>
  622 + <y>36</y>
  623 + <width>356</width>
  624 + <height>355</height>
  625 + </rect>
  626 + </property>
  627 + </widget>
  628 + <widget class="WashWarnIcon" name="label">
  629 + <property name="geometry">
  630 + <rect>
  631 + <x>800</x>
  632 + <y>320</y>
  633 + <width>80</width>
  634 + <height>84</height>
  635 + </rect>
  636 + </property>
  637 + </widget>
  638 + </widget>
  639 + <widget class="QPushButton" name="breadButton">
  640 + <property name="enabled">
  641 + <bool>false</bool>
  642 + </property>
  643 + <property name="geometry">
  644 + <rect>
  645 + <x>225</x>
  646 + <y>942</y>
  647 + <width>225</width>
  648 + <height>222</height>
  649 + </rect>
  650 + </property>
  651 + <property name="sizePolicy">
  652 + <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
  653 + <horstretch>0</horstretch>
  654 + <verstretch>0</verstretch>
  655 + </sizepolicy>
  656 + </property>
  657 + <property name="styleSheet">
  658 + <string notr="true">QPushButton { background-image: url(:/images/cook_type/bread.png); }
  659 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_type/bread_ov.png); }
  660 +QPushButton:disabled { background-image: url(:/images/cook_type/bread_hide.png); }</string>
  661 + </property>
  662 + <property name="text">
  663 + <string>제과제빵류</string>
  664 + </property>
  665 + <property name="style" stdset="0">
  666 + <string>type</string>
  667 + </property>
  668 + </widget>
  669 + </widget>
21 </widget> 670 </widget>
22 - <pixmapfunction/> 671 + <customwidgets>
  672 + <customwidget>
  673 + <class>Clock</class>
  674 + <extends>QWidget</extends>
  675 + <header>clock.h</header>
  676 + <container>1</container>
  677 + </customwidget>
  678 + <customwidget>
  679 + <class>WashWarnIcon</class>
  680 + <extends>QLabel</extends>
  681 + <header>washwarnicon.h</header>
  682 + </customwidget>
  683 + </customwidgets>
  684 + <tabstops>
  685 + <tabstop>steamButton</tabstop>
  686 + <tabstop>combiButton</tabstop>
  687 + <tabstop>dryheatButton</tabstop>
  688 + <tabstop>poultryButton</tabstop>
  689 + <tabstop>meatButton</tabstop>
  690 + <tabstop>fishButton</tabstop>
  691 + <tabstop>dessertButton</tabstop>
  692 + <tabstop>grainButton</tabstop>
  693 + <tabstop>breadButton</tabstop>
  694 + <tabstop>etcButton</tabstop>
  695 + <tabstop>primeButton</tabstop>
  696 + <tabstop>multiButton</tabstop>
  697 + <tabstop>programmingButton</tabstop>
  698 + <tabstop>washButton</tabstop>
  699 + <tabstop>configButton</tabstop>
  700 + <tabstop>helpButton</tabstop>
  701 + </tabstops>
  702 + <resources/>
23 <connections/> 703 <connections/>
24 </ui> 704 </ui>
app/gui/oven_control/programmingwindow.cpp
1 #include "programmingwindow.h" 1 #include "programmingwindow.h"
2 #include "ui_programmingwindow.h" 2 #include "ui_programmingwindow.h"
3 3
  4 +#include <QPainter>
  5 +#include <QtDebug>
  6 +
  7 +#include "programmingmanualwindow.h"
  8 +#include "programmingselectionwindow.h"
  9 +#include "cookprogram.h"
  10 +
4 ProgrammingWindow::ProgrammingWindow(QWidget *parent) : 11 ProgrammingWindow::ProgrammingWindow(QWidget *parent) :
5 QMainWindow(parent), 12 QMainWindow(parent),
6 ui(new Ui::ProgrammingWindow) 13 ui(new Ui::ProgrammingWindow)
@@ -9,6 +16,8 @@ ProgrammingWindow::ProgrammingWindow(QWidget *parent) : @@ -9,6 +16,8 @@ ProgrammingWindow::ProgrammingWindow(QWidget *parent) :
9 16
10 ui->clockContainer->setParent(ui->upperStack); 17 ui->clockContainer->setParent(ui->upperStack);
11 setAttribute(Qt::WA_DeleteOnClose); 18 setAttribute(Qt::WA_DeleteOnClose);
  19 +
  20 + setupUi();
12 } 21 }
13 22
14 ProgrammingWindow::~ProgrammingWindow() 23 ProgrammingWindow::~ProgrammingWindow()
@@ -16,7 +25,186 @@ ProgrammingWindow::~ProgrammingWindow() @@ -16,7 +25,186 @@ ProgrammingWindow::~ProgrammingWindow()
16 delete ui; 25 delete ui;
17 } 26 }
18 27
  28 +void ProgrammingWindow::listAuto()
  29 +{
  30 + if (!ui->autoButton->isChecked())
  31 + {
  32 + ui->autoButton->blockSignals(true);
  33 + ui->autoButton->setChecked(true);
  34 + ui->autoButton->blockSignals(false);
  35 + }
  36 +
  37 + listButtons(CookProgram::listAuto());
  38 +}
  39 +
  40 +void ProgrammingWindow::listManual()
  41 +{
  42 + if (!ui->manualButton->isChecked())
  43 + {
  44 + ui->manualButton->blockSignals(true);
  45 + ui->manualButton->setChecked(true);
  46 + ui->manualButton->blockSignals(false);
  47 + }
  48 +
  49 + listButtons(CookProgram::listManual());
  50 +}
  51 +
  52 +void ProgrammingWindow::setupUi()
  53 +{
  54 + ui->verticalScrollLayout->setAlignment(Qt::AlignTop);
  55 +
  56 + QFont font = ui->addButton->font();
  57 + font.setPixelSize(30);
  58 +
  59 + int textWidth = QFontMetrics(font).width(tr("추가하기"));
  60 +
  61 + QPixmap iconPix(":/images/etc/bar_icon_03.png");
  62 +
  63 + QPixmap pixmap(QSize(iconPix.width() + 20 + textWidth, ui->addButton->height()));
  64 + pixmap.fill(Qt::transparent);
  65 +
  66 + QRect textRect(iconPix.width() + 20, 0, textWidth, pixmap.height());
  67 +
  68 + QPainter painter(&pixmap);
  69 + painter.setFont(font);
  70 + painter.setPen(Qt::white);
  71 + painter.drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, tr("추가하기"));
  72 + painter.drawPixmap(0, (pixmap.height() - iconPix.height()) / 2, iconPix);
  73 +
  74 + QIcon icon(pixmap);
  75 + ui->addButton->setIcon(icon);
  76 + ui->addButton->setIconSize(pixmap.size());
  77 + ui->addButton->hide();
  78 +}
  79 +
  80 +void ProgrammingWindow::updateView()
  81 +{
  82 + if (ui->autoButton->isChecked())
  83 + listAuto();
  84 + else if (ui->manualButton->isChecked())
  85 + listManual();
  86 +}
  87 +
  88 +void ProgrammingWindow::listButtons(QList<CookRecord> record)
  89 +{
  90 + clear();
  91 +
  92 + ui->addButton->show();
  93 +
  94 + foreach (CookRecord r, record)
  95 + newButton(r);
  96 +
  97 + ui->scrollAreaWidgetContents->adjustSize();
  98 +}
  99 +
  100 +void ProgrammingWindow::clear()
  101 +{
  102 + lastInfoDisplayed = NULL;
  103 + while (!list.isEmpty())
  104 + list.takeFirst()->deleteLater();
  105 +}
  106 +
  107 +CookPanelButton *ProgrammingWindow::newButton(CookRecord record)
  108 +{
  109 + CookPanelButton *button = new CookPanelButton(record, this);
  110 + connect(button, SIGNAL(infoClicked(CookPanelButton*)), SLOT(onInfoButtonClicked(CookPanelButton*)));
  111 + connect(button, SIGNAL(deleteClicked(CookPanelButton*)), SLOT(onDeleteButtonClicked(CookPanelButton*)));
  112 +
  113 + ui->verticalScrollLayout->addWidget(button);
  114 + list.append(button);
  115 +
  116 + return button;
  117 +}
  118 +
  119 +void ProgrammingWindow::onInfoButtonClicked(CookPanelButton *panelButton)
  120 +{
  121 + if (lastInfoDisplayed)
  122 + {
  123 + if (panelButton == lastInfoDisplayed)
  124 + {
  125 + lastInfoDisplayed->hideInfo();
  126 + lastInfoDisplayed = NULL;
  127 +
  128 + ui->scrollAreaWidgetContents->adjustSize();
  129 + }
  130 + else
  131 + {
  132 + lastInfoDisplayed->hideInfo();
  133 + lastInfoDisplayed = panelButton;
  134 + lastInfoDisplayed->showInfo();
  135 +
  136 + ui->scrollAreaWidgetContents->adjustSize();
  137 + ui->scrollArea->ensureWidgetVisible(lastInfoDisplayed);
  138 + }
  139 + }
  140 + else
  141 + {
  142 + lastInfoDisplayed = panelButton;
  143 + lastInfoDisplayed->showInfo();
  144 +
  145 + ui->scrollAreaWidgetContents->adjustSize();
  146 + ui->scrollArea->ensureWidgetVisible(lastInfoDisplayed);
  147 + }
  148 +}
  149 +
  150 +void ProgrammingWindow::onDeleteButtonClicked(CookPanelButton *panelButton)
  151 +{
  152 + if (panelButton == lastInfoDisplayed)
  153 + lastInfoDisplayed = NULL;
  154 +
  155 + CookProgram::remove(panelButton->record);
  156 +
  157 + list.removeAll(panelButton);
  158 + panelButton->deleteLater();
  159 +}
  160 +
  161 +void ProgrammingWindow::on_addButton_clicked()
  162 +{
  163 + ProgrammingSelectionWindow *w = new ProgrammingSelectionWindow(this);
  164 +
  165 + if (ui->autoButton->isChecked())
  166 + w->setCookTypeEnabled(true);
  167 + else if (ui->manualButton->isChecked())
  168 + w->setModeEnabled(true);
  169 +
  170 + w->setWindowModality(Qt::WindowModal);
  171 + w->showFullScreen();
  172 + w->raise();
  173 +
  174 + connect(w, SIGNAL(added()), SLOT(updateView()));
  175 +}
  176 +
  177 +void ProgrammingWindow::on_autoButton_toggled(bool checked)
  178 +{
  179 + if (!checked)
  180 + return;
  181 +
  182 + listAuto();
  183 +}
  184 +
  185 +void ProgrammingWindow::on_manualButton_toggled(bool checked)
  186 +{
  187 + if (!checked)
  188 + return;
  189 +
  190 + listManual();
  191 +}
  192 +
19 void ProgrammingWindow::on_backButton_clicked() 193 void ProgrammingWindow::on_backButton_clicked()
20 { 194 {
  195 + CookProgram::discard();
  196 +
  197 + close();
  198 +}
  199 +
  200 +void ProgrammingWindow::on_saveButton_clicked()
  201 +{
  202 + CookProgram::save();
  203 +
21 close(); 204 close();
22 } 205 }
  206 +
  207 +void ProgrammingWindow::on_helpButton_clicked()
  208 +{
  209 +
  210 +}
app/gui/oven_control/programmingwindow.h
@@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
3 3
4 #include <QMainWindow> 4 #include <QMainWindow>
5 5
  6 +#include "cookpanelbutton.h"
  7 +
6 namespace Ui { 8 namespace Ui {
7 class ProgrammingWindow; 9 class ProgrammingWindow;
8 } 10 }
@@ -15,11 +17,34 @@ public: @@ -15,11 +17,34 @@ public:
15 explicit ProgrammingWindow(QWidget *parent = 0); 17 explicit ProgrammingWindow(QWidget *parent = 0);
16 ~ProgrammingWindow(); 18 ~ProgrammingWindow();
17 19
  20 + void listAuto();
  21 + void listManual();
  22 +
18 private slots: 23 private slots:
  24 + void setupUi();
  25 + void updateView();
  26 +
  27 + void listButtons(QList<CookRecord> record);
  28 + void clear();
  29 + CookPanelButton *newButton(CookRecord record);
  30 +
  31 + void onInfoButtonClicked(CookPanelButton *panelButton);
  32 + void onDeleteButtonClicked(CookPanelButton *panelButton);
  33 +
  34 + void on_addButton_clicked();
  35 +
  36 + void on_autoButton_toggled(bool checked);
  37 + void on_manualButton_toggled(bool checked);
  38 +
19 void on_backButton_clicked(); 39 void on_backButton_clicked();
  40 + void on_saveButton_clicked();
  41 + void on_helpButton_clicked();
20 42
21 private: 43 private:
22 Ui::ProgrammingWindow *ui; 44 Ui::ProgrammingWindow *ui;
  45 +
  46 + QList<CookPanelButton *> list;
  47 + CookPanelButton *lastInfoDisplayed;
23 }; 48 };
24 49
25 #endif // PROGRAMMINGWINDOW_H 50 #endif // PROGRAMMINGWINDOW_H
app/gui/oven_control/programmingwindow.ui
@@ -16,11 +16,16 @@ @@ -16,11 +16,16 @@
16 <property name="styleSheet"> 16 <property name="styleSheet">
17 <string notr="true">#centralwidget { background-image: url(:/images/background/etc.png); } 17 <string notr="true">#centralwidget { background-image: url(:/images/background/etc.png); }
18 #bottomBar { background-image: url(:/images/bottom_bar/background.png); } 18 #bottomBar { background-image: url(:/images/bottom_bar/background.png); }
  19 +QScrollArea { background: transparent; }
  20 +QScrollArea &gt; QWidget &gt; QWidget { background: transparent; }
19 21
20 -  
21 -QPushButton[style=&quot;mode&quot;] { 22 +QPushButton {
22 background-repeat: no-repeat; 23 background-repeat: no-repeat;
23 background-position: center; 24 background-position: center;
  25 +border: none;
  26 +color: white;
  27 +}
  28 +QPushButton[style=&quot;mode&quot;] {
24 background-clip: border; 29 background-clip: border;
25 background-origin: border; 30 background-origin: border;
26 margin-bottom: 50px; 31 margin-bottom: 50px;
@@ -28,13 +33,35 @@ margin-bottom: 50px; @@ -28,13 +33,35 @@ margin-bottom: 50px;
28 border-top: 130px; 33 border-top: 130px;
29 border-bottom: -50px; 34 border-bottom: -50px;
30 border-style: hidden; 35 border-style: hidden;
31 -color: white;  
32 font-size: 30px; 36 font-size: 30px;
33 } 37 }
34 38
35 QPushButton[style=&quot;mode&quot;]:checked { 39 QPushButton[style=&quot;mode&quot;]:checked {
36 image: url(:/images/cook_mode/indicator.png); 40 image: url(:/images/cook_mode/indicator.png);
37 image-position: bottom; 41 image-position: bottom;
  42 +}
  43 +
  44 +QScrollBar:vertical {
  45 +border: none;
  46 +background: transparent;
  47 +width: 35px;
  48 +margin: 30px 15px 30px 0px;
  49 +}
  50 +QScrollBar::handle:vertical {
  51 +background: #B7B7B7;
  52 +border-radius: 10px;
  53 +min-height: 100px;
  54 +}
  55 +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
  56 +border: none;
  57 +background: none;
  58 +height: 0px;
  59 +}
  60 +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
  61 +border: none;
  62 +}
  63 +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
  64 +background: none;
38 }</string> 65 }</string>
39 </property> 66 </property>
40 <widget class="QWidget" name="centralwidget"> 67 <widget class="QWidget" name="centralwidget">
@@ -100,7 +127,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }&lt;/str @@ -100,7 +127,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }&lt;/str
100 <string/> 127 <string/>
101 </property> 128 </property>
102 </widget> 129 </widget>
103 - <widget class="QPushButton" name="washButton"> 130 + <widget class="QPushButton" name="saveButton">
104 <property name="geometry"> 131 <property name="geometry">
105 <rect> 132 <rect>
106 <x>402</x> 133 <x>402</x>
@@ -146,7 +173,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }&lt;/str @@ -146,7 +173,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }&lt;/str
146 </property> 173 </property>
147 <layout class="QHBoxLayout" name="horizontalLayout"> 174 <layout class="QHBoxLayout" name="horizontalLayout">
148 <item> 175 <item>
149 - <widget class="QPushButton" name="steamButton"> 176 + <widget class="QPushButton" name="autoButton">
150 <property name="sizePolicy"> 177 <property name="sizePolicy">
151 <sizepolicy hsizetype="Minimum" vsizetype="Expanding"> 178 <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
152 <horstretch>0</horstretch> 179 <horstretch>0</horstretch>
@@ -172,7 +199,7 @@ QPushButton:pressed { background-image: url(:/images/etc/main_btn_01_ov.png); }&lt; @@ -172,7 +199,7 @@ QPushButton:pressed { background-image: url(:/images/etc/main_btn_01_ov.png); }&lt;
172 </widget> 199 </widget>
173 </item> 200 </item>
174 <item> 201 <item>
175 - <widget class="QPushButton" name="steamButton_2"> 202 + <widget class="QPushButton" name="manualButton">
176 <property name="sizePolicy"> 203 <property name="sizePolicy">
177 <sizepolicy hsizetype="Minimum" vsizetype="Expanding"> 204 <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
178 <horstretch>0</horstretch> 205 <horstretch>0</horstretch>
@@ -199,6 +226,63 @@ QPushButton:pressed { background-image: url(:/images/etc/main_btn_02_ov.png); }&lt; @@ -199,6 +226,63 @@ QPushButton:pressed { background-image: url(:/images/etc/main_btn_02_ov.png); }&lt;
199 </item> 226 </item>
200 </layout> 227 </layout>
201 </widget> 228 </widget>
  229 + <widget class="QScrollArea" name="scrollArea">
  230 + <property name="geometry">
  231 + <rect>
  232 + <x>0</x>
  233 + <y>647</y>
  234 + <width>900</width>
  235 + <height>803</height>
  236 + </rect>
  237 + </property>
  238 + <property name="widgetResizable">
  239 + <bool>true</bool>
  240 + </property>
  241 + <widget class="QWidget" name="scrollAreaWidgetContents">
  242 + <property name="geometry">
  243 + <rect>
  244 + <x>0</x>
  245 + <y>0</y>
  246 + <width>898</width>
  247 + <height>801</height>
  248 + </rect>
  249 + </property>
  250 + <layout class="QVBoxLayout" name="verticalScrollLayout">
  251 + <property name="spacing">
  252 + <number>10</number>
  253 + </property>
  254 + <property name="leftMargin">
  255 + <number>20</number>
  256 + </property>
  257 + <property name="topMargin">
  258 + <number>28</number>
  259 + </property>
  260 + <property name="bottomMargin">
  261 + <number>28</number>
  262 + </property>
  263 + <item>
  264 + <widget class="QPushButton" name="addButton">
  265 + <property name="sizePolicy">
  266 + <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
  267 + <horstretch>0</horstretch>
  268 + <verstretch>0</verstretch>
  269 + </sizepolicy>
  270 + </property>
  271 + <property name="minimumSize">
  272 + <size>
  273 + <width>821</width>
  274 + <height>65</height>
  275 + </size>
  276 + </property>
  277 + <property name="styleSheet">
  278 + <string notr="true">QPushButton { background-image: url(:/images/etc/bar_01.png); }
  279 +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/bar_02.png); }</string>
  280 + </property>
  281 + </widget>
  282 + </item>
  283 + </layout>
  284 + </widget>
  285 + </widget>
202 </widget> 286 </widget>
203 </widget> 287 </widget>
204 <customwidgets> 288 <customwidgets>