Blame view

app/gui/oven_control/autocookwindow.cpp 20.2 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
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
312
      if (selectedStepIndex != lastViewStepIndex)
99b8066f4   김태훈   V0.1.1
313
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
314
          lastViewStepIndex = selectedStepIndex;
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
315
          ui->stepIndicator->setCurrentIndex(selectedStepIndex);
d66d7f5b4   김태훈   GUI 버전 0.1.2
316
      }
99b8066f4   김태훈   V0.1.1
317
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
318
319
      CookStep showingStep = autocook.cook.steps[selectedStepIndex];
      if (Define::classify(showingStep.type) == Define::DoorClass)
99b8066f4   김태훈   V0.1.1
320
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
321
322
          if (ui->cookStepIcon->isVisible())
              ui->cookStepIcon->hide();
d66d7f5b4   김태훈   GUI 버전 0.1.2
323
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
          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
355
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
356
              lastViewDoorType = showingStep.type;
d66d7f5b4   김태훈   GUI 버전 0.1.2
357
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
358
359
360
361
362
363
364
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
              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
401
402
403
              }
          }
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
404
      else
6f96c947a   김태훈   GUI 0.1.4
405
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
406
407
408
409
410
411
412
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
          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
440
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
441
              lastViewCookType = showingStep.type;
6f96c947a   김태훈   GUI 0.1.4
442
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
443
444
              ui->cookStepIcon->setPixmap(Define::icon(showingStep.type));
              ui->cookStepLabel->setText(Define::name(showingStep.type));
6f96c947a   김태훈   GUI 0.1.4
445
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
446
447
  
          if (showingStep.mode != lastViewCookMode)
6f96c947a   김태훈   GUI 0.1.4
448
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
449
              lastViewCookMode = showingStep.mode;
6f96c947a   김태훈   GUI 0.1.4
450
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
451
452
453
454
455
456
457
458
459
460
461
462
463
464
              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
465
466
              }
          }
d66d7f5b4   김태훈   GUI 버전 0.1.2
467
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
468
          ui->humidityGauge->setValue(showingStep.humidity);
99b8066f4   김태훈   V0.1.1
469
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
470
471
472
473
474
          int humidity;
          if (showingCurrentHumidity)
              humidity = oven->currentHumidity();
          else
              humidity = showingStep.humidity;
99b8066f4   김태훈   V0.1.1
475
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
476
477
478
479
480
          if (humidity != lastViewHumidity)
          {
              lastViewHumidity = humidity;
              ui->humidityLabel->setText(QString("%1%").arg(humidity));
          }
99b8066f4   김태훈   V0.1.1
481
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
482
          ui->heatGauge->setValue(showingStep.temp);
99b8066f4   김태훈   V0.1.1
483
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
484
485
486
487
488
          int temp;
          if (showingCurrentTemp)
              temp = oven->currentTemp();
          else
              temp = showingStep.temp;
99b8066f4   김태훈   V0.1.1
489
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
490
491
492
493
494
          if (temp != lastViewTemp)
          {
              lastViewTemp = temp;
              ui->heatLabel->setText(QString("%1℃").arg(temp));
          }
99b8066f4   김태훈   V0.1.1
495
496
497
498
499
      }
  }
  
  void AutoCookWindow::checkCook()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
500
501
      int lastStepIndex = autocook.currentStepIndex;
      if (autocook.advance())
99b8066f4   김태훈   V0.1.1
502
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
503
504
505
506
507
          if (lastStepIndex != autocook.currentStepIndex)
              selectedStepIndex = autocook.currentStepIndex;
  
          if (autocook.done())
              checkCookTimer.stop();
99b8066f4   김태훈   V0.1.1
508
509
510
511
      }
  
      updateView();
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
512
  void AutoCookWindow::startProcess(int process)
99b8066f4   김태훈   V0.1.1
513
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
514
515
      if (processSelected)
          return;
99b8066f4   김태훈   V0.1.1
516
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
517
      processSelected = true;
99b8066f4   김태훈   V0.1.1
518
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
519
520
521
522
523
524
      Define::Process p = (Define::Process) process;
      switch (p)
      {
      case Define::CookAgain:
      {
          close();
99b8066f4   김태훈   V0.1.1
525
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
526
527
528
529
          AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook);
          w->setWindowModality(Qt::WindowModal);
          w->showFullScreen();
          w->raise();
99b8066f4   김태훈   V0.1.1
530
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
531
532
533
534
535
          break;
      }
      case Define::MakeCrisper:
      {
          selectedProcess = (Define::Process) process;
99b8066f4   김태훈   V0.1.1
536
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
537
          CookStep &step = autocook.cook.steps[autocook.cook.steps.size() - 1];
99b8066f4   김태훈   V0.1.1
538
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
539
540
541
542
543
544
545
546
547
548
549
          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   김태훈   자동 요리 관련 로직 전면 재작성
550
          Oven *oven = Oven::getInstance();
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
551
          oven->setHumidity(0);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
552
553
          oven->setTemp(step.temp + 10);
          oven->startCooking();
99b8066f4   김태훈   V0.1.1
554
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
555
556
557
558
559
560
561
          checkProcessTimer.start(100);
          break;
      }
      case Define::KeepWarm:
      {
          processSelected = false;
          selectedProcess = (Define::Process) process;
99b8066f4   김태훈   V0.1.1
562
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
563
564
565
566
567
568
          KeepWarmPopup *p = new KeepWarmPopup(this);
          p->showFullScreen();
          p->raise();
          break;
      }
      }
99b8066f4   김태훈   V0.1.1
569
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
570
  void AutoCookWindow::checkProcess()
99b8066f4   김태훈   V0.1.1
571
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
572
573
      if (!processSelected)
          return;
99b8066f4   김태훈   V0.1.1
574
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
575
576
577
578
579
580
      switch (selectedProcess)
      {
      case Define::MakeCrisper:
      {
          Oven *oven = Oven::getInstance();
          if (oven->currentTemp() >= oven->temp())
99b8066f4   김태훈   V0.1.1
581
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
582
583
              oven->stopCooking();
              checkProcessTimer.stop();
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
584
              processSelected = false;
99b8066f4   김태훈   V0.1.1
585
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
586
587
588
589
          break;
      }
      default:
          break;
99b8066f4   김태훈   V0.1.1
590
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
591
592
  
      updateView();
99b8066f4   김태훈   V0.1.1
593
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
594
  void AutoCookWindow::returnToCurrentStep()
99b8066f4   김태훈   V0.1.1
595
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
596
597
598
      selectedStepIndex = autocook.currentStepIndex;
      showingDifferentStep = false;
      updateView();
99b8066f4   김태훈   V0.1.1
599
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
600
  void AutoCookWindow::showCurrentHumidity()
99b8066f4   김태훈   V0.1.1
601
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
602
603
604
      showingCurrentHumidity = true;
      updateView();
  }
99b8066f4   김태훈   V0.1.1
605
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
606
607
608
609
  void AutoCookWindow::showCurrentTemp()
  {
      showingCurrentTemp = true;
      updateView();
99b8066f4   김태훈   V0.1.1
610
611
612
613
614
615
616
617
618
  }
  
  void AutoCookWindow::on_humidityGaugeButton_pressed()
  {
      showCurrentHumidityTimer.start();
  }
  
  void AutoCookWindow::on_humidityGaugeButton_released()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
619
620
      if (showCurrentHumidityTimer.isActive())
          showCurrentHumidityTimer.stop();
99b8066f4   김태훈   V0.1.1
621
618320ecd   김태훈   불필요한 UI 갱신 제거
622
623
624
625
626
      if (showingCurrentHumidity)
      {
          showingCurrentHumidity = false;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
627
628
629
630
631
632
633
634
635
  }
  
  void AutoCookWindow::on_heatGaugeButton_pressed()
  {
      showCurrentTempTimer.start();
  }
  
  void AutoCookWindow::on_heatGaugeButton_released()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
636
637
      if (showCurrentTempTimer.isActive())
          showCurrentTempTimer.stop();
99b8066f4   김태훈   V0.1.1
638
618320ecd   김태훈   불필요한 UI 갱신 제거
639
640
641
642
643
      if (showingCurrentTemp)
      {
          showingCurrentTemp = false;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
644
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
645
  void AutoCookWindow::on_backButton_clicked()
99b8066f4   김태훈   V0.1.1
646
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
647
648
649
      Oven::getInstance()->stop();
      close();
  }
99b8066f4   김태훈   V0.1.1
650
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
651
652
653
654
655
656
657
658
659
  void AutoCookWindow::on_showPrevStepButton_clicked()
  {
      if (selectedStepIndex > 0)
      {
          selectedStepIndex--;
          updateView();
      }
  
      returnToCurrentStepTimer.start();
99b8066f4   김태훈   V0.1.1
660
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
661
  void AutoCookWindow::on_showNextStepButton_clicked()
99b8066f4   김태훈   V0.1.1
662
  {
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
663
      if (selectedStepIndex + 1 < autocook.cook.steps.size())
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
664
665
666
667
      {
          selectedStepIndex++;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
668
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
669
      returnToCurrentStepTimer.start();
99b8066f4   김태훈   V0.1.1
670
  }