Blame view

app/gui/oven_control/autocookwindow.cpp 20.4 KB
99b8066f4   김태훈   V0.1.1
1
2
  #include "autocookwindow.h"
  #include "ui_autocookwindow.h"
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
3
4
5
  #include "keepwarmpopup.h"
  
  AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) :
99b8066f4   김태훈   V0.1.1
6
7
      QMainWindow(parent),
      ui(new Ui::AutoCookWindow),
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
8
      cook(cook)
99b8066f4   김태훈   V0.1.1
9
10
  {
      ui->setupUi(this);
99b8066f4   김태훈   V0.1.1
11
      ui->clockContainer->setParent(ui->upperStack);
6f96c947a   김태훈   GUI 0.1.4
12
      setAttribute(Qt::WA_DeleteOnClose);
99b8066f4   김태훈   V0.1.1
13
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
14
15
16
17
      autocook = AutoCook(cook);
      processSelected = false;
  
      setupUi();
99b8066f4   김태훈   V0.1.1
18
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
19
20
      Oven *oven = Oven::getInstance();
      connect(oven, SIGNAL(changed(Oven*)), SLOT(updateView()));
99b8066f4   김태훈   V0.1.1
21
22
23
24
  
      returnToCurrentStepTimer.setSingleShot(true);
      returnToCurrentStepTimer.setInterval(3000);
      connect(&returnToCurrentStepTimer, SIGNAL(timeout()), SLOT(returnToCurrentStep()));
99b8066f4   김태훈   V0.1.1
25
26
27
      showCurrentHumidityTimer.setSingleShot(true);
      showCurrentHumidityTimer.setInterval(3000);
      connect(&showCurrentHumidityTimer, SIGNAL(timeout()), SLOT(showCurrentHumidity()));
99b8066f4   김태훈   V0.1.1
28
29
30
      showCurrentTempTimer.setSingleShot(true);
      showCurrentTempTimer.setInterval(3000);
      connect(&showCurrentTempTimer, SIGNAL(timeout()), SLOT(showCurrentTemp()));
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
31
32
      connect(&checkCookTimer, SIGNAL(timeout()), SLOT(checkCook()));
      checkCookTimer.start(100);
d66d7f5b4   김태훈   GUI 버전 0.1.2
33
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
34
      connect(&checkProcessTimer, SIGNAL(timeout()), SLOT(checkProcess()));
99b8066f4   김태훈   V0.1.1
35
36
37
38
39
40
41
42
43
  }
  
  AutoCookWindow::~AutoCookWindow()
  {
      delete ui;
  }
  
  void AutoCookWindow::setupUi()
  {
05f2a7552   김태훈   image 관리 구조 변경
44
45
46
      steamModeIcon.load(":/images/cook_mode/small_steam.png");
      dryModeIcon.load(":/images/cook_mode/small_dryheat.png");
      combiModeIcon.load(":/images/cook_mode/small_combi.png");
6f96c947a   김태훈   GUI 0.1.4
47
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
48
49
      ui->cookTypeIcon->setPixmap(Define::icon(cook.type));
      ui->selectCookButton->setText(cook.name);
99b8066f4   김태훈   V0.1.1
50
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
51
      ui->stepIndicator->setMaximum(cook.steps.size() - 1);
99b8066f4   김태훈   V0.1.1
52
53
54
55
56
57
58
59
60
61
  
      ui->cookStepAnimation->start(300);
  
      ui->humidityGauge->setMinimum(0);
      ui->humidityGauge->setMaximum(100);
      ui->humidityGauge->setValue(0);
  
      ui->heatGauge->setMinimum(30);
      ui->heatGauge->setMaximum(300);
      ui->heatGauge->setValue(30);
05f2a7552   김태훈   image 관리 구조 변경
62
63
64
65
66
67
68
69
70
      ui->openDoorAnimation->load(":/images/animation/door_01.png");
      ui->openDoorAnimation->load(":/images/animation/door_02.png");
      ui->openDoorAnimation->load(":/images/animation/door_03.png");
      ui->openDoorAnimation->load(":/images/animation/door_04.png");
      ui->openDoorAnimation->load(":/images/animation/door_05.png");
      ui->openDoorAnimation->load(":/images/animation/door_06.png");
      ui->openDoorAnimation->load(":/images/animation/door_07.png");
      ui->openDoorAnimation->load(":/images/animation/door_08.png");
      ui->openDoorAnimation->load(":/images/animation/door_09.png");
6f96c947a   김태훈   GUI 0.1.4
71
72
73
      ui->openDoorAnimation->start(300);
      ui->openDoorAnimation->hide();
      ui->openDoorArrow->hide();
05f2a7552   김태훈   image 관리 구조 변경
74
75
76
77
78
79
80
81
82
      ui->closeDoorAnimation->load(":/images/animation/door_09.png");
      ui->closeDoorAnimation->load(":/images/animation/door_08.png");
      ui->closeDoorAnimation->load(":/images/animation/door_07.png");
      ui->closeDoorAnimation->load(":/images/animation/door_06.png");
      ui->closeDoorAnimation->load(":/images/animation/door_05.png");
      ui->closeDoorAnimation->load(":/images/animation/door_04.png");
      ui->closeDoorAnimation->load(":/images/animation/door_03.png");
      ui->closeDoorAnimation->load(":/images/animation/door_02.png");
      ui->closeDoorAnimation->load(":/images/animation/door_01.png");
6f96c947a   김태훈   GUI 0.1.4
83
84
85
      ui->closeDoorAnimation->start(300);
      ui->closeDoorAnimation->hide();
      ui->closeDoorArrow->hide();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
86
87
88
89
90
91
92
93
94
      lastViewCookMode = Define::InvalidMode;
      lastViewCookType = Define::Invalid;
      lastViewCoreTemp = 999;
      lastViewDoorType = Define::Invalid;
      lastViewTime = 0;
      lastViewStepIndex = -1;
      selectedStepIndex = 0;
      showingCurrentHumidity = false;
      showingCurrentTemp = false;
99b8066f4   김태훈   V0.1.1
95
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
96
      if (autocook.cook.processes.isEmpty())
99b8066f4   김태훈   V0.1.1
97
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
98
99
100
101
102
          ui->processTitleLabel->hide();
          ui->processTypeLabel->hide();
          ui->processButton_1->hide();
          ui->processButton_2->hide();
          ui->processButton_3->hide();
99b8066f4   김태훈   V0.1.1
103
104
105
      }
      else
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
106
107
108
          QString typeText;
          QSignalMapper *sm = NULL;
          for (int i = 0; i < 3; i++)
99b8066f4   김태훈   V0.1.1
109
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
110
111
              QPushButton *pb;
              switch (i)
99b8066f4   김태훈   V0.1.1
112
113
              {
              case 0:
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
114
                  pb = ui->processButton_1;
99b8066f4   김태훈   V0.1.1
115
116
                  break;
              case 1:
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
117
                  pb = ui->processButton_2;
99b8066f4   김태훈   V0.1.1
118
119
                  break;
              case 2:
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
120
                  pb = ui->processButton_3;
99b8066f4   김태훈   V0.1.1
121
122
                  break;
              }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
123
              if (i < autocook.cook.processes.size())
99b8066f4   김태훈   V0.1.1
124
              {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
125
126
127
128
129
130
131
132
133
134
135
                  if (sm == NULL)
                  {
                      sm = new QSignalMapper(this);
                      connect(sm, SIGNAL(mapped(int)), SLOT(startProcess(int)));
                  }
  
                  Define::Process process = autocook.cook.processes[i];
  
                  QString text = Define::name(process);
                  if (typeText.isEmpty())
                      typeText = text;
6f96c947a   김태훈   GUI 0.1.4
136
                  else
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
137
138
139
140
141
142
143
144
145
146
147
148
149
150
                      typeText += ", " + text;
  
                  QString styleSheet = QString("QPushButton { border-image: url(%1) } QPushButton:pressed { border-image: url(%2) }")
                          .arg(Define::icon(process))
                          .arg(Define::iconOverlay(process));
  
                  pb->setStyleSheet(styleSheet);
  
                  sm->setMapping(pb, (int) process);
                  connect(pb, SIGNAL(clicked()), sm, SLOT(map()));
              }
              else
              {
                  pb->hide();
99b8066f4   김태훈   V0.1.1
151
152
              }
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
153
          ui->processTypeLabel->setText(typeText);
99b8066f4   김태훈   V0.1.1
154
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
155
156
157
158
  
      ui->processContainer->hide();
  
      updateView();
99b8066f4   김태훈   V0.1.1
159
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
160
  void AutoCookWindow::updateView()
99b8066f4   김태훈   V0.1.1
161
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
162
163
164
165
166
167
168
      Oven *oven = Oven::getInstance();
  
      QString spanFontSize11("<span style=\"font-size:11pt\">%1</span>");
      QString spanFontSize9("<span style=\"font-size:9pt\">%1</span>");
  
      int remainingTime = qMax(0, autocook.remainingTime());
      if (remainingTime != lastViewTime)
99b8066f4   김태훈   V0.1.1
169
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
          lastViewTime = remainingTime;
  
          QString hour = spanFontSize11.arg("시간");
          QString min = spanFontSize11.arg("분");
          QString sec = spanFontSize11.arg("초");
  
          if (remainingTime >= 3600)
              ui->timeLabel->setText(QString("%1%2 %3%4")
                                     .arg(remainingTime / 3600)
                                     .arg(hour)
                                     .arg((remainingTime % 3600) / 60, 2, 10, QLatin1Char('0'))
                                     .arg(min));
          else if (remainingTime >= 60)
              ui->timeLabel->setText(QString("%1%2 %3%4")
                                     .arg(remainingTime / 60)
                                     .arg(min)
                                     .arg(remainingTime % 60, 2, 10, QLatin1Char('0'))
                                     .arg(sec));
          else
              ui->timeLabel->setText(QString("%1%2")
                                     .arg(remainingTime)
                                     .arg(sec));
99b8066f4   김태훈   V0.1.1
192
      }
99b8066f4   김태훈   V0.1.1
193
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
194
195
196
197
      int coreTemp = oven->currentInterTemp();
      if (coreTemp != lastViewCoreTemp)
      {
          lastViewCoreTemp = coreTemp;
99b8066f4   김태훈   V0.1.1
198
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
199
200
201
202
203
          QString coreTempLabel = QString::number(coreTemp);
          if (cook.isCoreTempValid())
              coreTempLabel += spanFontSize11.arg("℃ / " + QString::number(cook.coreTemp())) + spanFontSize9.arg("℃");
          else
              coreTempLabel += spanFontSize11.arg("℃");
99b8066f4   김태훈   V0.1.1
204
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
205
          ui->interTempLabel->setText(coreTempLabel);
99b8066f4   김태훈   V0.1.1
206
      }
99b8066f4   김태훈   V0.1.1
207
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
208
      if (autocook.done())
99b8066f4   김태훈   V0.1.1
209
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
210
211
212
213
          if (!oven->door())
          {
              if (ui->openDoorAnimation->isHidden())
                  ui->openDoorAnimation->show();
6f96c947a   김태훈   GUI 0.1.4
214
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
215
216
217
218
219
220
221
222
223
224
              if (ui->openDoorArrow->isHidden())
                  ui->openDoorArrow->show();
  
              if (ui->closeDoorAnimation->isVisible())
                  ui->closeDoorAnimation->hide();
  
              if (ui->closeDoorArrow->isVisible())
                  ui->closeDoorArrow->hide();
          }
          else
6f96c947a   김태훈   GUI 0.1.4
225
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
226
227
228
229
230
231
232
233
234
235
236
              if (ui->openDoorAnimation->isVisible())
                  ui->openDoorAnimation->hide();
  
              if (ui->openDoorArrow->isVisible())
                  ui->openDoorArrow->hide();
  
              if (ui->closeDoorAnimation->isVisible())
                  ui->closeDoorAnimation->hide();
  
              if (ui->closeDoorArrow->isVisible())
                  ui->closeDoorArrow->hide();
6f96c947a   김태훈   GUI 0.1.4
237
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
238
239
240
  
          if (ui->processContainer->isHidden())
              ui->processContainer->show();
99b8066f4   김태훈   V0.1.1
241
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
242
243
244
245
      else if (autocook.isWaitingDoorOpened() && !oven->door())
      {
          if (ui->openDoorAnimation->isHidden())
              ui->openDoorAnimation->show();
99b8066f4   김태훈   V0.1.1
246
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
247
248
          if (ui->openDoorArrow->isHidden())
              ui->openDoorArrow->show();
99b8066f4   김태훈   V0.1.1
249
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
250
251
          if (ui->closeDoorAnimation->isVisible())
              ui->closeDoorAnimation->hide();
99b8066f4   김태훈   V0.1.1
252
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
253
254
          if (ui->closeDoorArrow->isVisible())
              ui->closeDoorArrow->hide();
99b8066f4   김태훈   V0.1.1
255
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
256
257
258
259
      else if (!autocook.isWaitingDoorOpened() && oven->door())
      {
          if (ui->openDoorAnimation->isVisible())
              ui->openDoorAnimation->hide();
99b8066f4   김태훈   V0.1.1
260
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
261
262
          if (ui->openDoorArrow->isVisible())
              ui->openDoorArrow->hide();
99b8066f4   김태훈   V0.1.1
263
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
264
265
          if (ui->closeDoorAnimation->isHidden())
              ui->closeDoorAnimation->show();
99b8066f4   김태훈   V0.1.1
266
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
267
268
269
270
271
272
273
          if (ui->closeDoorArrow->isHidden())
              ui->closeDoorArrow->show();
      }
      else
      {
          if (ui->openDoorAnimation->isVisible())
              ui->openDoorAnimation->hide();
99b8066f4   김태훈   V0.1.1
274
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
275
276
          if (ui->openDoorArrow->isVisible())
              ui->openDoorArrow->hide();
99b8066f4   김태훈   V0.1.1
277
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
278
279
          if (ui->closeDoorAnimation->isVisible())
              ui->closeDoorAnimation->hide();
99b8066f4   김태훈   V0.1.1
280
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
281
282
283
          if (ui->closeDoorArrow->isVisible())
              ui->closeDoorArrow->hide();
      }
99b8066f4   김태훈   V0.1.1
284
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
285
286
287
288
      if (autocook.cook.steps[autocook.currentStepIndex].type == Define::Preheat)
      {
          if (ui->preheatIcon->isHidden())
              ui->preheatIcon->show();
6f96c947a   김태훈   GUI 0.1.4
289
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
290
291
          if (ui->preheatLabel->isHidden())
              ui->preheatLabel->show();
6f96c947a   김태훈   GUI 0.1.4
292
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
293
294
295
296
297
298
299
300
          if (ui->preheatGauge->isHidden())
              ui->preheatGauge->show();
  
          ui->preheatGauge->setMaximum(autocook.cook.steps[autocook.currentStepIndex].temp);
          ui->preheatGauge->setMinimum(autocook.startTemp);
          ui->preheatGauge->setValue(oven->currentTemp());
      }
      else
99b8066f4   김태훈   V0.1.1
301
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
302
303
          if (ui->preheatIcon->isVisible())
              ui->preheatIcon->hide();
d66d7f5b4   김태훈   GUI 버전 0.1.2
304
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
305
306
          if (ui->preheatLabel->isVisible())
              ui->preheatLabel->hide();
6f96c947a   김태훈   GUI 0.1.4
307
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
308
309
          if (ui->preheatGauge->isVisible())
              ui->preheatGauge->hide();
99b8066f4   김태훈   V0.1.1
310
      }
99b8066f4   김태훈   V0.1.1
311
b13e23ee4   김태훈   자동 요리 수정
312
313
314
315
316
317
318
      if (selectedStepIndex != autocook.currentStepIndex)
      {
          if (!returnToCurrentStepTimer.isActive())
          {
              selectedStepIndex = autocook.currentStepIndex;
          }
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
319
      if (selectedStepIndex != lastViewStepIndex)
99b8066f4   김태훈   V0.1.1
320
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
321
          lastViewStepIndex = selectedStepIndex;
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
322
          ui->stepIndicator->setCurrentIndex(selectedStepIndex);
d66d7f5b4   김태훈   GUI 버전 0.1.2
323
      }
99b8066f4   김태훈   V0.1.1
324
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
325
326
      CookStep showingStep = autocook.cook.steps[selectedStepIndex];
      if (Define::classify(showingStep.type) == Define::DoorClass)
99b8066f4   김태훈   V0.1.1
327
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
328
329
          if (ui->cookStepIcon->isVisible())
              ui->cookStepIcon->hide();
d66d7f5b4   김태훈   GUI 버전 0.1.2
330
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
          if (ui->cookStepLabel->isVisible())
              ui->cookStepLabel->hide();
  
          if (ui->cookModeIcon->isVisible())
              ui->cookModeIcon->hide();
  
          if (ui->humidityGauge->isVisible())
              ui->humidityGauge->hide();
  
          if (ui->humidityGaugeButton->isVisible())
              ui->humidityGaugeButton->hide();
  
          if (ui->humidityLabel->isVisible())
              ui->humidityLabel->hide();
  
          if (ui->heatGauge->isVisible())
              ui->heatGauge->hide();
  
          if (ui->heatGaugeButton->isVisible())
              ui->heatGaugeButton->hide();
  
          if (ui->heatLabel->isVisible())
              ui->heatLabel->hide();
  
          if (ui->doorStepLabel->isHidden())
              ui->doorStepLabel->show();
  
          if (ui->cookStepAnimation->isHidden())
              ui->cookStepAnimation->show();
  
          if (showingStep.type != lastViewDoorType)
99b8066f4   김태훈   V0.1.1
362
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
363
              lastViewDoorType = showingStep.type;
d66d7f5b4   김태훈   GUI 버전 0.1.2
364
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
              ui->doorStepLabel->setText(Define::name(showingStep.type));
              ui->cookStepAnimation->clear();
              switch (showingStep.type)
              {
              case Define::PutThermometer:
                  ui->doorStepLabel->setText("중심 온도계 삽입");
                  ui->cookStepAnimation->load(":/images/animation/thermometer_01.png");
                  ui->cookStepAnimation->load(":/images/animation/thermometer_02.png");
                  ui->cookStepAnimation->setGeometry((900-210)/2, 800, 210, 307);
                  ui->cookStepAnimation->start(300);
                  break;
              case Define::Load:
                  ui->doorStepLabel->setText("식재료 적재");
                  ui->cookStepAnimation->load(":/images/animation/load_01.png");
                  ui->cookStepAnimation->load(":/images/animation/load_02.png");
                  ui->cookStepAnimation->load(":/images/animation/load_03.png");
                  ui->cookStepAnimation->load(":/images/animation/load_04.png");
                  ui->cookStepAnimation->load(":/images/animation/load_03.png");
                  ui->cookStepAnimation->load(":/images/animation/load_02.png");
                  ui->cookStepAnimation->load(":/images/animation/load_01.png");
                  ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
                  ui->cookStepAnimation->start(300);
                  break;
              case Define::Cut:
                  ui->doorStepLabel->setText("자르기");
                  ui->cookStepAnimation->load(":/images/animation/cut_01.png");
                  ui->cookStepAnimation->load(":/images/animation/cut_02.png");
                  ui->cookStepAnimation->load(":/images/animation/cut_03.png");
                  ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
                  ui->cookStepAnimation->start(300);
                  break;
              case Define::Pour:
                  ui->doorStepLabel->setText("물 붓기");
                  ui->cookStepAnimation->load(":/images/animation/pour_01.png");
                  ui->cookStepAnimation->load(":/images/animation/pour_02.png");
                  ui->cookStepAnimation->load(":/images/animation/pour_03.png");
                  ui->cookStepAnimation->load(":/images/animation/pour_04.png");
                  ui->cookStepAnimation->setGeometry((900-264)/2, 800, 264, 307);
                  ui->cookStepAnimation->start(300);
                  break;
              default:
                  ui->doorStepLabel->hide();
                  ui->cookStepAnimation->hide();
99b8066f4   김태훈   V0.1.1
408
409
410
              }
          }
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
411
      else
6f96c947a   김태훈   GUI 0.1.4
412
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
          if (ui->doorStepLabel->isVisible())
              ui->doorStepLabel->hide();
  
          if (ui->cookStepAnimation->isVisible())
              ui->cookStepAnimation->hide();
  
          if (ui->cookStepIcon->isHidden())
              ui->cookStepIcon->show();
  
          if (ui->cookStepLabel->isHidden())
              ui->cookStepLabel->show();
  
          if (ui->cookModeIcon->isHidden())
              ui->cookModeIcon->show();
  
          if (ui->humidityGauge->isHidden())
              ui->humidityGauge->show();
  
          if (ui->humidityGaugeButton->isHidden())
              ui->humidityGaugeButton->show();
  
          if (ui->humidityLabel->isHidden())
              ui->humidityLabel->show();
  
          if (ui->heatGauge->isHidden())
              ui->heatGauge->show();
  
          if (ui->heatGaugeButton->isHidden())
              ui->heatGaugeButton->show();
  
          if (ui->heatLabel->isHidden())
              ui->heatLabel->show();
  
          if (showingStep.type != lastViewCookType)
6f96c947a   김태훈   GUI 0.1.4
447
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
448
              lastViewCookType = showingStep.type;
6f96c947a   김태훈   GUI 0.1.4
449
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
450
451
              ui->cookStepIcon->setPixmap(Define::icon(showingStep.type));
              ui->cookStepLabel->setText(Define::name(showingStep.type));
6f96c947a   김태훈   GUI 0.1.4
452
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
453
454
  
          if (showingStep.mode != lastViewCookMode)
6f96c947a   김태훈   GUI 0.1.4
455
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
456
              lastViewCookMode = showingStep.mode;
6f96c947a   김태훈   GUI 0.1.4
457
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
458
459
460
461
462
463
464
465
466
467
468
469
470
471
              switch (showingStep.mode)
              {
              case Define::SteamMode:
                  ui->cookModeIcon->setPixmap(steamModeIcon);
                  break;
              case Define::CombiMode:
                  ui->cookModeIcon->setPixmap(combiModeIcon);
                  break;
              case Define::DryMode:
                  ui->cookModeIcon->setPixmap(dryModeIcon);
                  break;
              case Define::InvalidClass:
                  ui->cookModeIcon->hide();
                  break;
6f96c947a   김태훈   GUI 0.1.4
472
473
              }
          }
d66d7f5b4   김태훈   GUI 버전 0.1.2
474
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
475
          ui->humidityGauge->setValue(showingStep.humidity);
99b8066f4   김태훈   V0.1.1
476
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
477
478
479
480
481
          int humidity;
          if (showingCurrentHumidity)
              humidity = oven->currentHumidity();
          else
              humidity = showingStep.humidity;
99b8066f4   김태훈   V0.1.1
482
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
483
484
485
486
487
          if (humidity != lastViewHumidity)
          {
              lastViewHumidity = humidity;
              ui->humidityLabel->setText(QString("%1%").arg(humidity));
          }
99b8066f4   김태훈   V0.1.1
488
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
489
          ui->heatGauge->setValue(showingStep.temp);
99b8066f4   김태훈   V0.1.1
490
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
491
492
493
494
495
          int temp;
          if (showingCurrentTemp)
              temp = oven->currentTemp();
          else
              temp = showingStep.temp;
99b8066f4   김태훈   V0.1.1
496
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
497
498
499
500
501
          if (temp != lastViewTemp)
          {
              lastViewTemp = temp;
              ui->heatLabel->setText(QString("%1℃").arg(temp));
          }
99b8066f4   김태훈   V0.1.1
502
503
504
505
506
      }
  }
  
  void AutoCookWindow::checkCook()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
507
508
      int lastStepIndex = autocook.currentStepIndex;
      if (autocook.advance())
99b8066f4   김태훈   V0.1.1
509
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
510
511
512
513
514
          if (lastStepIndex != autocook.currentStepIndex)
              selectedStepIndex = autocook.currentStepIndex;
  
          if (autocook.done())
              checkCookTimer.stop();
99b8066f4   김태훈   V0.1.1
515
516
517
518
      }
  
      updateView();
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
519
  void AutoCookWindow::startProcess(int process)
99b8066f4   김태훈   V0.1.1
520
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
521
522
      if (processSelected)
          return;
99b8066f4   김태훈   V0.1.1
523
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
524
      processSelected = true;
99b8066f4   김태훈   V0.1.1
525
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
526
527
528
529
530
531
      Define::Process p = (Define::Process) process;
      switch (p)
      {
      case Define::CookAgain:
      {
          close();
99b8066f4   김태훈   V0.1.1
532
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
533
534
535
536
          AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook);
          w->setWindowModality(Qt::WindowModal);
          w->showFullScreen();
          w->raise();
99b8066f4   김태훈   V0.1.1
537
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
538
539
540
541
542
          break;
      }
      case Define::MakeCrisper:
      {
          selectedProcess = (Define::Process) process;
99b8066f4   김태훈   V0.1.1
543
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
544
          CookStep &step = autocook.cook.steps[autocook.cook.steps.size() - 1];
99b8066f4   김태훈   V0.1.1
545
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
546
547
548
549
550
551
552
553
554
555
556
          CookStep newStep = step;
          newStep.type = Define::MakeCrispy;
          newStep.humidity = 0;
          newStep.temp += 10;
          newStep.time = 0;
          newStep.humidification = 0;
          newStep.dehumidification = 0;
          autocook.cook.steps.append(newStep);
          autocook.currentStepIndex = autocook.cook.steps.size() - 1;
          ui->stepIndicator->setMaximum(autocook.cook.steps.size() - 1);
          returnToCurrentStep();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
557
          Oven *oven = Oven::getInstance();
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
558
          oven->setHumidity(0);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
559
560
          oven->setTemp(step.temp + 10);
          oven->startCooking();
99b8066f4   김태훈   V0.1.1
561
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
562
563
564
565
566
567
568
          checkProcessTimer.start(100);
          break;
      }
      case Define::KeepWarm:
      {
          processSelected = false;
          selectedProcess = (Define::Process) process;
99b8066f4   김태훈   V0.1.1
569
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
570
571
572
573
574
575
          KeepWarmPopup *p = new KeepWarmPopup(this);
          p->showFullScreen();
          p->raise();
          break;
      }
      }
99b8066f4   김태훈   V0.1.1
576
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
577
  void AutoCookWindow::checkProcess()
99b8066f4   김태훈   V0.1.1
578
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
579
580
      if (!processSelected)
          return;
99b8066f4   김태훈   V0.1.1
581
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
582
583
584
585
586
587
      switch (selectedProcess)
      {
      case Define::MakeCrisper:
      {
          Oven *oven = Oven::getInstance();
          if (oven->currentTemp() >= oven->temp())
99b8066f4   김태훈   V0.1.1
588
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
589
590
              oven->stopCooking();
              checkProcessTimer.stop();
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
591
              processSelected = false;
99b8066f4   김태훈   V0.1.1
592
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
593
594
595
596
          break;
      }
      default:
          break;
99b8066f4   김태훈   V0.1.1
597
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
598
599
  
      updateView();
99b8066f4   김태훈   V0.1.1
600
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
601
  void AutoCookWindow::returnToCurrentStep()
99b8066f4   김태훈   V0.1.1
602
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
603
604
605
      selectedStepIndex = autocook.currentStepIndex;
      showingDifferentStep = false;
      updateView();
99b8066f4   김태훈   V0.1.1
606
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
607
  void AutoCookWindow::showCurrentHumidity()
99b8066f4   김태훈   V0.1.1
608
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
609
610
611
      showingCurrentHumidity = true;
      updateView();
  }
99b8066f4   김태훈   V0.1.1
612
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
613
614
615
616
  void AutoCookWindow::showCurrentTemp()
  {
      showingCurrentTemp = true;
      updateView();
99b8066f4   김태훈   V0.1.1
617
618
619
620
621
622
623
624
625
  }
  
  void AutoCookWindow::on_humidityGaugeButton_pressed()
  {
      showCurrentHumidityTimer.start();
  }
  
  void AutoCookWindow::on_humidityGaugeButton_released()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
626
627
      if (showCurrentHumidityTimer.isActive())
          showCurrentHumidityTimer.stop();
99b8066f4   김태훈   V0.1.1
628
618320ecd   김태훈   불필요한 UI 갱신 제거
629
630
631
632
633
      if (showingCurrentHumidity)
      {
          showingCurrentHumidity = false;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
634
635
636
637
638
639
640
641
642
  }
  
  void AutoCookWindow::on_heatGaugeButton_pressed()
  {
      showCurrentTempTimer.start();
  }
  
  void AutoCookWindow::on_heatGaugeButton_released()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
643
644
      if (showCurrentTempTimer.isActive())
          showCurrentTempTimer.stop();
99b8066f4   김태훈   V0.1.1
645
618320ecd   김태훈   불필요한 UI 갱신 제거
646
647
648
649
650
      if (showingCurrentTemp)
      {
          showingCurrentTemp = false;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
651
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
652
  void AutoCookWindow::on_backButton_clicked()
99b8066f4   김태훈   V0.1.1
653
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
654
655
656
      Oven::getInstance()->stop();
      close();
  }
99b8066f4   김태훈   V0.1.1
657
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
658
659
  void AutoCookWindow::on_showPrevStepButton_clicked()
  {
b13e23ee4   김태훈   자동 요리 수정
660
      returnToCurrentStepTimer.start();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
661
662
663
664
665
      if (selectedStepIndex > 0)
      {
          selectedStepIndex--;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
666
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
667
  void AutoCookWindow::on_showNextStepButton_clicked()
99b8066f4   김태훈   V0.1.1
668
  {
b13e23ee4   김태훈   자동 요리 수정
669
      returnToCurrentStepTimer.start();
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
670
      if (selectedStepIndex + 1 < autocook.cook.steps.size())
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
671
672
673
674
      {
          selectedStepIndex++;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
675
  }