Blame view

app/gui/oven_control/autocookwindow.cpp 31.7 KB
99b8066f4   김태훈   V0.1.1
1
2
  #include "autocookwindow.h"
  #include "ui_autocookwindow.h"
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
3
  #include <QKeyEvent>
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
4
  #include "keepwarmpopup.h"
f588aa273   김태훈   부가 기능 로직 추가
5
6
7
  #include "cookhistory.h"
  #include "confirmpopup.h"
  #include "favoritenamepopup.h"
2bfd3a050   김태훈   환경 설정 대응
8
  #include "stringer.h"
bbd7d8f29   김태훈   버튼 음향 추가
9
  #include "soundplayer.h"
e00c6a2a9   김태훈   기능 추가 구현
10
11
12
  #include "configwindow.h"
  #include "washwindow.h"
  #include "mainwindow.h"
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
13
14
  #include "config.h"
  #include "errorpopupdlg.h"
11c611782   김태훈   자동 요리 세부 사항 구현
15
  #include "autocookselectionpopup.h"
68c06e96f   김태훈   자동 요리 세부 사항 구현
16
  #include "autocookcheckconfigwindow.h"
1342af7b3   김태훈   도움말 버튼 연결
17
  #include "manualviewerdlg.h"
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
18
19
  
  AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) :
99b8066f4   김태훈   V0.1.1
20
21
      QMainWindow(parent),
      ui(new Ui::AutoCookWindow),
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
22
      cook(cook)
99b8066f4   김태훈   V0.1.1
23
24
  {
      ui->setupUi(this);
99b8066f4   김태훈   V0.1.1
25
      ui->clockContainer->setParent(ui->upperStack);
6f96c947a   김태훈   GUI 0.1.4
26
      setAttribute(Qt::WA_DeleteOnClose);
99b8066f4   김태훈   V0.1.1
27
f588aa273   김태훈   부가 기능 로직 추가
28
29
30
31
      if (!this->cook.isLoaded())
          this->cook.load();
  
      autocook = AutoCook(this->cook);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
32
      processSelected = false;
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
      config_item item = Config::getInstance()->getConfigValue(Define::config_loading_door_monitoring);
      if (item.d8.d8_0 > 0 && item.d8.d8_0 < 4)
      {
          loadingMonitorLevel = item.d8.d8_0;
          loadingMonitor1 = item.d8.d8_1 * 1000;
          loadingMonitor2 = item.d8.d8_2 * 1000;
          loadingMonitor3 = item.d8.d8_3 * 1000;
          currentLoadingMonitorLevel = 0;
      }
      else
          loadingMonitorLevel = 0;
  
      item = Config::getInstance()->getConfigValue(Define::config_cooking_door_monitoring);
      if (item.d8.d8_0 > 0 && item.d8.d8_0 < 4)
      {
          cookingMonitorLevel = item.d8.d8_0;
          cookingMonitor1 = item.d8.d8_1 * 1000;
          cookingMonitor2 = item.d8.d8_2 * 1000;
          cookingMonitor3 = item.d8.d8_3 * 1000;
          currentCookingMonitorLevel = 0;
      }
      else
          cookingMonitorLevel = 0;
  
      if (loadingMonitorLevel > 0 || cookingMonitorLevel > 0)
      {
          connect(&monitorTimer, SIGNAL(timeout()), SLOT(monitor()));
          monitorTimer.start(100);
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
62
      setupUi();
99b8066f4   김태훈   V0.1.1
63
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
64
65
      Oven *oven = Oven::getInstance();
      connect(oven, SIGNAL(changed(Oven*)), SLOT(updateView()));
99b8066f4   김태훈   V0.1.1
66
67
68
69
  
      returnToCurrentStepTimer.setSingleShot(true);
      returnToCurrentStepTimer.setInterval(3000);
      connect(&returnToCurrentStepTimer, SIGNAL(timeout()), SLOT(returnToCurrentStep()));
99b8066f4   김태훈   V0.1.1
70
      showCurrentHumidityTimer.setSingleShot(true);
5228da630   김태훈   딜레이 변경
71
      showCurrentHumidityTimer.setInterval(1000);
99b8066f4   김태훈   V0.1.1
72
      connect(&showCurrentHumidityTimer, SIGNAL(timeout()), SLOT(showCurrentHumidity()));
99b8066f4   김태훈   V0.1.1
73
      showCurrentTempTimer.setSingleShot(true);
5228da630   김태훈   딜레이 변경
74
      showCurrentTempTimer.setInterval(1000);
99b8066f4   김태훈   V0.1.1
75
      connect(&showCurrentTempTimer, SIGNAL(timeout()), SLOT(showCurrentTemp()));
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
76
77
      connect(&checkCookTimer, SIGNAL(timeout()), SLOT(checkCook()));
      checkCookTimer.start(100);
d66d7f5b4   김태훈   GUI 버전 0.1.2
78
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
79
      connect(&checkProcessTimer, SIGNAL(timeout()), SLOT(checkProcess()));
f588aa273   김태훈   부가 기능 로직 추가
80
81
82
83
84
85
86
87
88
89
  
      AutoCookSetting setting;
      setting.type = cook.type;
      setting.root = cook.root;
      setting.name = cook.name;
  
      for (int i = 0; i < 5; i++)
          setting.configs[i] = cook.configs[i].current;
  
      CookHistory::record(setting);
2bfd3a050   김태훈   환경 설정 대응
90
bbd7d8f29   김태훈   버튼 음향 추가
91
92
      foreach (QPushButton *button, findChildren<QPushButton *>())
          connect(button, &QPushButton::pressed, SoundPlayer::playClick);
2bfd3a050   김태훈   환경 설정 대응
93
94
      connect(&updateViewTimer, SIGNAL(timeout()), SLOT(updateView()));
      updateViewTimer.start(100);
c6dd03260   김태훈   요리 시작/종료 관련 음향 효과...
95
96
  
      SoundPlayer::playStart();
98f4a2932   김태훈   엔코더 구현
97
98
  
      setFocus();
99b8066f4   김태훈   V0.1.1
99
100
101
102
  }
  
  AutoCookWindow::~AutoCookWindow()
  {
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
103
      Oven::getInstance()->stop();
99b8066f4   김태훈   V0.1.1
104
105
      delete ui;
  }
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
106
107
108
109
  void AutoCookWindow::keyPressEvent(QKeyEvent *event)
  {
      switch (event->key())
      {
01249f413   김태훈   엔코더 방향 반전. 하드웨어가 변경됨
110
      case 0x01000032:    // Turn left
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
111
112
113
114
115
          onEncoderLeft();
          break;
      case 0x01000031:    // Push
          pushed = focusWidget();
          break;
01249f413   김태훈   엔코더 방향 반전. 하드웨어가 변경됨
116
      case 0x01000030:    // Turn right
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
117
118
119
120
121
122
123
124
125
          onEncoderRight();
          break;
      }
  }
  
  void AutoCookWindow::keyReleaseEvent(QKeyEvent *event)
  {
      switch (event->key())
      {
01249f413   김태훈   엔코더 방향 반전. 하드웨어가 변경됨
126
      case 0x01000032:    // Turn left
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
127
128
129
130
131
132
133
134
          onEncoderLeft();
          break;
      case 0x01000031:    // Push
          if (focusWidget() == pushed)
              onEncoderClicked(pushed);
  
          pushed = NULL;
          break;
01249f413   김태훈   엔코더 방향 반전. 하드웨어가 변경됨
135
      case 0x01000030:    // Turn right
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
136
137
138
139
          onEncoderRight();
          break;
      }
  }
99b8066f4   김태훈   V0.1.1
140
141
  void AutoCookWindow::setupUi()
  {
05f2a7552   김태훈   image 관리 구조 변경
142
143
144
      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
145
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
146
147
      ui->cookTypeIcon->setPixmap(Define::icon(cook.type));
      ui->selectCookButton->setText(cook.name);
99b8066f4   김태훈   V0.1.1
148
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
149
      ui->stepIndicator->setMaximum(cook.steps.size() - 1);
99b8066f4   김태훈   V0.1.1
150
151
152
153
154
155
156
157
158
159
  
      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 관리 구조 변경
160
161
162
163
164
165
166
167
168
      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
169
170
171
      ui->openDoorAnimation->start(300);
      ui->openDoorAnimation->hide();
      ui->openDoorArrow->hide();
05f2a7552   김태훈   image 관리 구조 변경
172
173
174
175
176
177
178
179
180
      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
181
182
183
      ui->closeDoorAnimation->start(300);
      ui->closeDoorAnimation->hide();
      ui->closeDoorArrow->hide();
62e672364   김태훈   자동 요리 중 중심 온도 활성화...
184
185
186
187
      ui->thermometerAnimation->load(":/images/animation/thermometer_01.png");
      ui->thermometerAnimation->load(":/images/animation/thermometer_02.png");
      ui->thermometerAnimation->start(300);
      ui->thermometerAnimation->hide();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
188
189
190
191
192
193
      lastViewCookMode = Define::InvalidMode;
      lastViewCookType = Define::Invalid;
      lastViewCoreTemp = 999;
      lastViewDoorType = Define::Invalid;
      lastViewTime = 0;
      lastViewStepIndex = -1;
7d0288172   김태훈   기능 추가 구현
194
195
      lastViewTemp = 999;
      lastViewHumidity = 999;
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
196
197
198
      selectedStepIndex = 0;
      showingCurrentHumidity = false;
      showingCurrentTemp = false;
99b8066f4   김태훈   V0.1.1
199
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
200
      if (autocook.cook.processes.isEmpty())
99b8066f4   김태훈   V0.1.1
201
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
202
203
204
205
206
          ui->processTitleLabel->hide();
          ui->processTypeLabel->hide();
          ui->processButton_1->hide();
          ui->processButton_2->hide();
          ui->processButton_3->hide();
99b8066f4   김태훈   V0.1.1
207
208
209
      }
      else
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
210
211
212
          QString typeText;
          QSignalMapper *sm = NULL;
          for (int i = 0; i < 3; i++)
99b8066f4   김태훈   V0.1.1
213
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
214
215
              QPushButton *pb;
              switch (i)
99b8066f4   김태훈   V0.1.1
216
217
              {
              case 0:
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
218
                  pb = ui->processButton_1;
99b8066f4   김태훈   V0.1.1
219
220
                  break;
              case 1:
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
221
                  pb = ui->processButton_2;
99b8066f4   김태훈   V0.1.1
222
223
                  break;
              case 2:
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
224
                  pb = ui->processButton_3;
99b8066f4   김태훈   V0.1.1
225
226
                  break;
              }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
227
              if (i < autocook.cook.processes.size())
99b8066f4   김태훈   V0.1.1
228
              {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
229
230
231
232
233
234
235
236
237
238
239
                  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
240
                  else
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
241
242
243
244
245
246
247
248
249
250
251
252
253
254
                      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
255
256
              }
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
257
          ui->processTypeLabel->setText(typeText);
99b8066f4   김태훈   V0.1.1
258
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
259
260
  
      ui->processContainer->hide();
f588aa273   김태훈   부가 기능 로직 추가
261
      ui->doorStepLabel->hide();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
262
263
  
      updateView();
99b8066f4   김태훈   V0.1.1
264
  }
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
265
266
  void AutoCookWindow::onEncoderLeft()
  {
98f4a2932   김태훈   엔코더 구현
267
      focusPreviousChild();
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
268
269
270
271
  }
  
  void AutoCookWindow::onEncoderRight()
  {
98f4a2932   김태훈   엔코더 구현
272
      focusNextChild();
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
273
274
275
276
  }
  
  void AutoCookWindow::onEncoderClicked(QWidget *clicked)
  {
98f4a2932   김태훈   엔코더 구현
277
278
279
      QPushButton *b = qobject_cast<QPushButton *>(clicked);
      if (b)
          b->click();
9e1f8d093   김태훈   엔코더 구현 대비 선행 수정
280
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
281
  void AutoCookWindow::updateView()
99b8066f4   김태훈   V0.1.1
282
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
283
      Oven *oven = Oven::getInstance();
2bfd3a050   김태훈   환경 설정 대응
284
      if (!autocook.done())
99b8066f4   김태훈   V0.1.1
285
      {
2bfd3a050   김태훈   환경 설정 대응
286
287
          int remainingTime = qMax(0, autocook.msecs());
          ui->timeLabel->setText(Stringer::remainingTime(remainingTime));
99b8066f4   김태훈   V0.1.1
288
      }
99b8066f4   김태훈   V0.1.1
289
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
290
291
292
293
      int coreTemp = oven->currentInterTemp();
      if (coreTemp != lastViewCoreTemp)
      {
          lastViewCoreTemp = coreTemp;
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
294
          if (cook.isCoreTempValid())
2bfd3a050   김태훈   환경 설정 대응
295
              ui->interTempLabel->setText(Stringer::temperature(coreTemp, cook.coreTemp(), Stringer::fontSize14));
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
296
          else
2bfd3a050   김태훈   환경 설정 대응
297
              ui->interTempLabel->setText(Stringer::temperature(coreTemp, Stringer::fontSize14));
99b8066f4   김태훈   V0.1.1
298
      }
99b8066f4   김태훈   V0.1.1
299
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
300
      if (autocook.done())
99b8066f4   김태훈   V0.1.1
301
      {
36aae9ce0   김태훈   바삭함 주기 중 문 열림/닫힘 ...
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
          if (processSelected)
          {
              if (ui->openDoorAnimation->isVisible())
                  ui->openDoorAnimation->hide();
  
              if (ui->openDoorArrow->isVisible())
                  ui->openDoorArrow->hide();
  
              if (oven->door())
              {
                  if (ui->closeDoorAnimation->isVisible())
                      ui->closeDoorAnimation->hide();
  
                  if (ui->closeDoorArrow->isVisible())
                      ui->closeDoorArrow->hide();
              }
              else
              {
                  if (ui->closeDoorAnimation->isVisible())
                      ui->closeDoorAnimation->hide();
  
                  if (ui->closeDoorArrow->isVisible())
                      ui->closeDoorArrow->hide();
              }
          }
          else if (!oven->door())
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
328
329
330
          {
              if (ui->openDoorAnimation->isHidden())
                  ui->openDoorAnimation->show();
6f96c947a   김태훈   GUI 0.1.4
331
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
332
333
334
335
336
337
338
339
340
341
              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
342
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
343
344
345
346
347
348
349
350
351
352
353
              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
354
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
355
36aae9ce0   김태훈   바삭함 주기 중 문 열림/닫힘 ...
356
357
358
          if (processSelected)
              ui->processContainer->hide();
          else if (ui->processContainer->isHidden())
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
359
              ui->processContainer->show();
99b8066f4   김태훈   V0.1.1
360
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
361
362
363
364
      else if (autocook.isWaitingDoorOpened() && !oven->door())
      {
          if (ui->openDoorAnimation->isHidden())
              ui->openDoorAnimation->show();
99b8066f4   김태훈   V0.1.1
365
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
366
367
          if (ui->openDoorArrow->isHidden())
              ui->openDoorArrow->show();
99b8066f4   김태훈   V0.1.1
368
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
369
370
          if (ui->closeDoorAnimation->isVisible())
              ui->closeDoorAnimation->hide();
99b8066f4   김태훈   V0.1.1
371
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
372
373
          if (ui->closeDoorArrow->isVisible())
              ui->closeDoorArrow->hide();
99b8066f4   김태훈   V0.1.1
374
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
375
376
377
378
      else if (!autocook.isWaitingDoorOpened() && oven->door())
      {
          if (ui->openDoorAnimation->isVisible())
              ui->openDoorAnimation->hide();
99b8066f4   김태훈   V0.1.1
379
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
380
381
          if (ui->openDoorArrow->isVisible())
              ui->openDoorArrow->hide();
99b8066f4   김태훈   V0.1.1
382
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
383
384
          if (ui->closeDoorAnimation->isHidden())
              ui->closeDoorAnimation->show();
99b8066f4   김태훈   V0.1.1
385
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
386
387
388
389
390
391
392
          if (ui->closeDoorArrow->isHidden())
              ui->closeDoorArrow->show();
      }
      else
      {
          if (ui->openDoorAnimation->isVisible())
              ui->openDoorAnimation->hide();
99b8066f4   김태훈   V0.1.1
393
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
394
395
          if (ui->openDoorArrow->isVisible())
              ui->openDoorArrow->hide();
99b8066f4   김태훈   V0.1.1
396
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
397
398
          if (ui->closeDoorAnimation->isVisible())
              ui->closeDoorAnimation->hide();
99b8066f4   김태훈   V0.1.1
399
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
400
401
402
          if (ui->closeDoorArrow->isVisible())
              ui->closeDoorArrow->hide();
      }
99b8066f4   김태훈   V0.1.1
403
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
404
405
406
407
      if (autocook.cook.steps[autocook.currentStepIndex].type == Define::Preheat)
      {
          if (ui->preheatIcon->isHidden())
              ui->preheatIcon->show();
6f96c947a   김태훈   GUI 0.1.4
408
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
409
410
          if (ui->preheatLabel->isHidden())
              ui->preheatLabel->show();
6f96c947a   김태훈   GUI 0.1.4
411
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
412
413
414
415
416
417
418
419
          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
420
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
421
422
          if (ui->preheatIcon->isVisible())
              ui->preheatIcon->hide();
d66d7f5b4   김태훈   GUI 버전 0.1.2
423
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
424
425
          if (ui->preheatLabel->isVisible())
              ui->preheatLabel->hide();
6f96c947a   김태훈   GUI 0.1.4
426
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
427
428
          if (ui->preheatGauge->isVisible())
              ui->preheatGauge->hide();
99b8066f4   김태훈   V0.1.1
429
      }
99b8066f4   김태훈   V0.1.1
430
b13e23ee4   김태훈   자동 요리 수정
431
432
433
434
435
436
437
      if (selectedStepIndex != autocook.currentStepIndex)
      {
          if (!returnToCurrentStepTimer.isActive())
          {
              selectedStepIndex = autocook.currentStepIndex;
          }
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
438
      if (selectedStepIndex != lastViewStepIndex)
99b8066f4   김태훈   V0.1.1
439
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
440
          lastViewStepIndex = selectedStepIndex;
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
441
          ui->stepIndicator->setCurrentIndex(selectedStepIndex);
d66d7f5b4   김태훈   GUI 버전 0.1.2
442
      }
99b8066f4   김태훈   V0.1.1
443
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
444
445
      CookStep showingStep = autocook.cook.steps[selectedStepIndex];
      if (Define::classify(showingStep.type) == Define::DoorClass)
99b8066f4   김태훈   V0.1.1
446
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
447
448
          if (ui->cookStepIcon->isVisible())
              ui->cookStepIcon->hide();
d66d7f5b4   김태훈   GUI 버전 0.1.2
449
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
          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
481
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
482
              lastViewDoorType = showingStep.type;
d66d7f5b4   김태훈   GUI 버전 0.1.2
483
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
484
485
486
487
488
              ui->doorStepLabel->setText(Define::name(showingStep.type));
              ui->cookStepAnimation->clear();
              switch (showingStep.type)
              {
              case Define::PutThermometer:
64f6e5e04   고영탁   한글화 진행
489
                  ui->doorStepLabel->setText(tr("중심 온도계 삽입"));
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
490
491
492
493
494
495
                  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:
64f6e5e04   고영탁   한글화 진행
496
                  ui->doorStepLabel->setText(tr("식재료 적재"));
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
497
498
499
500
501
502
503
504
505
506
507
                  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:
64f6e5e04   고영탁   한글화 진행
508
                  ui->doorStepLabel->setText(tr("자르기"));
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
509
510
511
512
513
514
515
                  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:
64f6e5e04   고영탁   한글화 진행
516
                  ui->doorStepLabel->setText(tr("물 붓기"));
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
517
518
519
520
521
522
523
524
525
526
                  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
527
528
529
              }
          }
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
530
      else
6f96c947a   김태훈   GUI 0.1.4
531
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
          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
566
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
567
              lastViewCookType = showingStep.type;
6f96c947a   김태훈   GUI 0.1.4
568
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
569
570
              ui->cookStepIcon->setPixmap(Define::icon(showingStep.type));
              ui->cookStepLabel->setText(Define::name(showingStep.type));
6f96c947a   김태훈   GUI 0.1.4
571
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
572
573
  
          if (showingStep.mode != lastViewCookMode)
6f96c947a   김태훈   GUI 0.1.4
574
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
575
              lastViewCookMode = showingStep.mode;
6f96c947a   김태훈   GUI 0.1.4
576
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
577
578
579
580
581
582
583
584
585
586
587
588
589
590
              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
591
592
              }
          }
d66d7f5b4   김태훈   GUI 버전 0.1.2
593
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
594
595
596
597
598
          int humidity;
          if (showingCurrentHumidity)
              humidity = oven->currentHumidity();
          else
              humidity = showingStep.humidity;
99b8066f4   김태훈   V0.1.1
599
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
600
601
602
603
          if (humidity != lastViewHumidity)
          {
              lastViewHumidity = humidity;
              ui->humidityLabel->setText(QString("%1%").arg(humidity));
ecfb5801a   김태훈   디버깅 요청 사항 반영
604
              ui->humidityGauge->setValue(humidity);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
605
          }
99b8066f4   김태훈   V0.1.1
606
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
607
608
609
610
611
          int temp;
          if (showingCurrentTemp)
              temp = oven->currentTemp();
          else
              temp = showingStep.temp;
99b8066f4   김태훈   V0.1.1
612
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
613
614
615
          if (temp != lastViewTemp)
          {
              lastViewTemp = temp;
2bfd3a050   김태훈   환경 설정 대응
616
              ui->heatLabel->setText(Stringer::temperature(temp));
ecfb5801a   김태훈   디버깅 요청 사항 반영
617
              ui->heatGauge->setValue(temp);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
618
          }
99b8066f4   김태훈   V0.1.1
619
      }
62e672364   김태훈   자동 요리 중 중심 온도 활성화...
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
  
      if (autocook.isCoreTempActivated())
      {
          if (ui->thermometerAnimation->isVisible())
          {
              if (oven->currentInterTemp() + 20 < oven->currentTemp())
                  ui->thermometerAnimation->hide();
          }
          else
          {
              if (oven->currentInterTemp() >= oven->currentTemp())
                  ui->thermometerAnimation->show();
          }
      }
  
      if (ui->thermometerAnimation->isVisible())
      {
          ui->cookModeIcon->hide();
          ui->cookStepAnimation->hide();
          ui->cookStepIcon->hide();
          ui->cookStepLabel->hide();
          ui->doorStepLabel->hide();
          ui->heatGauge->hide();
          ui->heatGaugeButton->hide();
          ui->heatLabel->hide();
          ui->humidityGauge->hide();
          ui->humidityGaugeButton->hide();
          ui->humidityLabel->hide();
          ui->infoButton->hide();
          ui->showNextStepButton->hide();
          ui->showPrevStepButton->hide();
          ui->stepIndicator->hide();
      }
      else
      {
          ui->infoButton->show();
          ui->showNextStepButton->show();
          ui->showPrevStepButton->show();
          ui->stepIndicator->show();
      }
99b8066f4   김태훈   V0.1.1
660
661
662
663
  }
  
  void AutoCookWindow::checkCook()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
664
665
      int lastStepIndex = autocook.currentStepIndex;
      if (autocook.advance())
99b8066f4   김태훈   V0.1.1
666
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
667
668
669
670
          if (lastStepIndex != autocook.currentStepIndex)
              selectedStepIndex = autocook.currentStepIndex;
  
          if (autocook.done())
097e5e14a   김태훈   프로그래밍 모드 세부 사항 구현
671
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
672
              checkCookTimer.stop();
097e5e14a   김태훈   프로그래밍 모드 세부 사항 구현
673
674
              emit done();
          }
99b8066f4   김태훈   V0.1.1
675
676
677
678
      }
  
      updateView();
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
679
  void AutoCookWindow::startProcess(int process)
99b8066f4   김태훈   V0.1.1
680
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
681
682
      if (processSelected)
          return;
99b8066f4   김태훈   V0.1.1
683
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
684
      processSelected = true;
99b8066f4   김태훈   V0.1.1
685
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
686
687
688
689
690
691
      Define::Process p = (Define::Process) process;
      switch (p)
      {
      case Define::CookAgain:
      {
          close();
99b8066f4   김태훈   V0.1.1
692
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
693
694
695
696
          AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook);
          w->setWindowModality(Qt::WindowModal);
          w->showFullScreen();
          w->raise();
99b8066f4   김태훈   V0.1.1
697
11c611782   김태훈   자동 요리 세부 사항 구현
698
          emit newWindow(w);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
699
700
701
702
703
          break;
      }
      case Define::MakeCrisper:
      {
          selectedProcess = (Define::Process) process;
99b8066f4   김태훈   V0.1.1
704
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
705
          CookStep &step = autocook.cook.steps[autocook.cook.steps.size() - 1];
99b8066f4   김태훈   V0.1.1
706
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
707
708
709
710
711
712
713
714
715
716
717
          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   김태훈   자동 요리 관련 로직 전면 재작성
718
          Oven *oven = Oven::getInstance();
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
719
          oven->setHumidity(0);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
720
721
          oven->setTemp(step.temp + 10);
          oven->startCooking();
99b8066f4   김태훈   V0.1.1
722
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
723
          checkProcessTimer.start(100);
c6dd03260   김태훈   요리 시작/종료 관련 음향 효과...
724
725
  
          SoundPlayer::playStart();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
726
727
728
729
730
731
          break;
      }
      case Define::KeepWarm:
      {
          processSelected = false;
          selectedProcess = (Define::Process) process;
99b8066f4   김태훈   V0.1.1
732
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
733
734
735
736
737
          KeepWarmPopup *p = new KeepWarmPopup(this);
          p->showFullScreen();
          p->raise();
          break;
      }
1f7568d7e   김태훈   컴파일 경고 제거
738
739
      default:
          return;
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
740
      }
99b8066f4   김태훈   V0.1.1
741
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
742
  void AutoCookWindow::checkProcess()
99b8066f4   김태훈   V0.1.1
743
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
744
745
      if (!processSelected)
          return;
99b8066f4   김태훈   V0.1.1
746
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
747
748
749
750
751
752
      switch (selectedProcess)
      {
      case Define::MakeCrisper:
      {
          Oven *oven = Oven::getInstance();
          if (oven->currentTemp() >= oven->temp())
99b8066f4   김태훈   V0.1.1
753
          {
c6dd03260   김태훈   요리 시작/종료 관련 음향 효과...
754
              SoundPlayer::playStop();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
755
756
              oven->stopCooking();
              checkProcessTimer.stop();
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
757
              processSelected = false;
99b8066f4   김태훈   V0.1.1
758
          }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
759
760
761
762
          break;
      }
      default:
          break;
99b8066f4   김태훈   V0.1.1
763
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
764
765
  
      updateView();
99b8066f4   김태훈   V0.1.1
766
  }
11c611782   김태훈   자동 요리 세부 사항 구현
767
768
769
770
771
772
773
774
775
776
777
  void AutoCookWindow::changeCook(Cook cook)
  {
      close();
  
      AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook);
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
  
      emit newWindow(w);
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
778
  void AutoCookWindow::returnToCurrentStep()
99b8066f4   김태훈   V0.1.1
779
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
780
781
782
      selectedStepIndex = autocook.currentStepIndex;
      showingDifferentStep = false;
      updateView();
99b8066f4   김태훈   V0.1.1
783
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
784
  void AutoCookWindow::showCurrentHumidity()
99b8066f4   김태훈   V0.1.1
785
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
786
787
788
      showingCurrentHumidity = true;
      updateView();
  }
99b8066f4   김태훈   V0.1.1
789
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
790
791
792
793
  void AutoCookWindow::showCurrentTemp()
  {
      showingCurrentTemp = true;
      updateView();
99b8066f4   김태훈   V0.1.1
794
  }
f588aa273   김태훈   부가 기능 로직 추가
795
796
  void AutoCookWindow::addFavorite()
  {
599b9c350   고영탁   부가기능 복구
797
798
799
800
801
802
803
804
      AutoCookSetting s;
      s.type = cook.type;
      s.root = cook.root;
      for (int i = 0; i < 5; i++)
          s.configs[i] = cook.configs[i].current;
  
      FavoriteNamePopup *p = new FavoriteNamePopup(this, s);
      p->showFullScreen();
f588aa273   김태훈   부가 기능 로직 추가
805
  }
e00c6a2a9   김태훈   기능 추가 구현
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
  void AutoCookWindow::jumpConfig()
  {
      Oven::getInstance()->stop();
  
      ConfigWindow *w = new ConfigWindow(MainWindow::getInstance());
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
  
      MainWindow::jump(w);
  }
  
  void AutoCookWindow::jumpWash()
  {
      Oven::getInstance()->stop();
  
      WashWindow *w = new WashWindow(MainWindow::getInstance());
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
  
      MainWindow::jump(w);
  }
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
  void AutoCookWindow::monitor()
  {
      Define::StepClass step = Define::classify(autocook.cook.steps[autocook.currentStepIndex].type);
  
      if (step == Define::PreheatClass || step == Define::CookClass)
      {
          if (Oven::getInstance()->door())
          {
              switch (currentCookingMonitorLevel)
              {
              case 0:
                  cookingMonitorTime1.start();
                  currentCookingMonitorLevel = 1;
                  break;
              case 1:
                  if (cookingMonitorLevel >= 1 && cookingMonitorTime1.elapsed() > cookingMonitor1)
                  {
                      SoundPlayer::playError2();
ffa23885e   김태훈   tr 추가
847
                      ErrorPopupDlg *d = new ErrorPopupDlg(this, tr("문을 닫아주세요"), tr("조리 중 문 열림 시간 모니터링 1단계"));
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
848
849
850
851
852
853
854
855
856
857
                      d->showFullScreen();
  
                      cookingMonitorTime2.start();
                      currentCookingMonitorLevel = 2;
                  }
                  break;
              case 2:
                  if (cookingMonitorLevel >= 2 && cookingMonitorTime2.elapsed() > cookingMonitor2)
                  {
                      SoundPlayer::playError2();
ffa23885e   김태훈   tr 추가
858
                      ErrorPopupDlg *d = new ErrorPopupDlg(this, tr("문을 닫아주세요"), tr("조리 중 문 열림 시간 모니터링 2단계"));
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
859
860
861
862
863
864
865
866
867
868
                      d->showFullScreen();
  
                      cookingMonitorTime3.start();
                      currentCookingMonitorLevel = 3;
                  }
                  break;
              case 3:
                  if (cookingMonitorLevel >= 3 && cookingMonitorTime3.elapsed() > cookingMonitor3)
                  {
                      SoundPlayer::playError2();
ffa23885e   김태훈   tr 추가
869
                      ErrorPopupDlg *d = new ErrorPopupDlg(MainWindow::getInstance(), tr("문이 오래 열려있어 조리가 취소되었습니다"), tr("조리 중 문 열림 시간 모니터링 3단계"));
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
                      d->showFullScreen();
  
                      MainWindow::killChild();
                  }
              }
          }
          else if (currentCookingMonitorLevel > 0)
          {
              currentCookingMonitorLevel = 0;
          }
      }
      else if (step == Define::DoorClass)
      {
          if (Oven::getInstance()->door())
          {
              switch (currentLoadingMonitorLevel)
              {
              case 0:
                  loadingMonitorTime1.start();
                  currentLoadingMonitorLevel = 1;
                  break;
              case 1:
                  if (loadingMonitorLevel >= 1 && loadingMonitorTime1.elapsed() > loadingMonitor1)
                  {
                      SoundPlayer::playError2();
ffa23885e   김태훈   tr 추가
895
                      ErrorPopupDlg *d = new ErrorPopupDlg(this, tr("문을 닫아주세요"), tr("적재 중 문 열림 시간 모니터링 1단계"));
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
896
897
898
899
900
901
902
903
904
905
                      d->showFullScreen();
  
                      loadingMonitorTime2.start();
                      currentLoadingMonitorLevel = 2;
                  }
                  break;
              case 2:
                  if (loadingMonitorLevel >= 2 && loadingMonitorTime2.elapsed() > loadingMonitor2)
                  {
                      SoundPlayer::playError2();
ffa23885e   김태훈   tr 추가
906
                      ErrorPopupDlg *d = new ErrorPopupDlg(this, tr("문을 닫아주세요"), tr("적재 중 문 열림 시간 모니터링 2단계"));
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
907
908
909
910
911
912
913
914
915
916
                      d->showFullScreen();
  
                      loadingMonitorTime3.start();
                      currentLoadingMonitorLevel = 3;
                  }
                  break;
              case 3:
                  if (loadingMonitorLevel >= 3 && loadingMonitorTime3.elapsed() > loadingMonitor3)
                  {
                      SoundPlayer::playError2();
ffa23885e   김태훈   tr 추가
917
                      ErrorPopupDlg *d = new ErrorPopupDlg(this, tr("문을 닫아주세요"), tr("적재 중 문 열림 시간 모니터링 3단계"));
ea536cd1d   김태훈   적재 / 조리 중 문 열림 시간...
918
919
920
921
922
923
924
925
926
927
928
929
                      d->showFullScreen();
  
                      MainWindow::killChild();
                  }
              }
          }
          else if (currentLoadingMonitorLevel > 0)
          {
              currentLoadingMonitorLevel = 0;
          }
      }
  }
7d0288172   김태훈   기능 추가 구현
930
931
  void AutoCookWindow::on_selectCookButton_clicked()
  {
11c611782   김태훈   자동 요리 세부 사항 구현
932
933
934
935
936
937
      if (!autocook.done())
          return;
  
      AutoCookSelectionPopup *p = new AutoCookSelectionPopup(this, cook.type);
      p->showFullScreen();
      p->raise();
7d0288172   김태훈   기능 추가 구현
938
11c611782   김태훈   자동 요리 세부 사항 구현
939
      connect(p, SIGNAL(selected(Cook)), SLOT(changeCook(Cook)));
7d0288172   김태훈   기능 추가 구현
940
941
942
943
944
945
946
947
948
949
950
  }
  
  void AutoCookWindow::on_homeButton_clicked()
  {
      Oven::getInstance()->stop();
  
      MainWindow::killChild();
  }
  
  void AutoCookWindow::on_configCookButton_clicked()
  {
68c06e96f   김태훈   자동 요리 세부 사항 구현
951
      setFocus();
7d0288172   김태훈   기능 추가 구현
952
68c06e96f   김태훈   자동 요리 세부 사항 구현
953
954
955
956
      AutoCookCheckConfigWindow *w = new AutoCookCheckConfigWindow(this, cook);
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
7d0288172   김태훈   기능 추가 구현
957
  }
99b8066f4   김태훈   V0.1.1
958
959
960
961
962
963
964
  void AutoCookWindow::on_humidityGaugeButton_pressed()
  {
      showCurrentHumidityTimer.start();
  }
  
  void AutoCookWindow::on_humidityGaugeButton_released()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
965
966
      if (showCurrentHumidityTimer.isActive())
          showCurrentHumidityTimer.stop();
99b8066f4   김태훈   V0.1.1
967
618320ecd   김태훈   불필요한 UI 갱신 제거
968
969
970
971
972
      if (showingCurrentHumidity)
      {
          showingCurrentHumidity = false;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
973
974
975
976
977
978
979
980
981
  }
  
  void AutoCookWindow::on_heatGaugeButton_pressed()
  {
      showCurrentTempTimer.start();
  }
  
  void AutoCookWindow::on_heatGaugeButton_released()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
982
983
      if (showCurrentTempTimer.isActive())
          showCurrentTempTimer.stop();
99b8066f4   김태훈   V0.1.1
984
618320ecd   김태훈   불필요한 UI 갱신 제거
985
986
987
988
989
      if (showingCurrentTemp)
      {
          showingCurrentTemp = false;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
990
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
991
992
  void AutoCookWindow::on_showPrevStepButton_clicked()
  {
b13e23ee4   김태훈   자동 요리 수정
993
      returnToCurrentStepTimer.start();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
994
995
996
997
998
      if (selectedStepIndex > 0)
      {
          selectedStepIndex--;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
999
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
1000
  void AutoCookWindow::on_showNextStepButton_clicked()
99b8066f4   김태훈   V0.1.1
1001
  {
b13e23ee4   김태훈   자동 요리 수정
1002
      returnToCurrentStepTimer.start();
a366f320c   김태훈   자동 요리 후속 공정 동작 개선
1003
      if (selectedStepIndex + 1 < autocook.cook.steps.size())
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
1004
1005
1006
1007
      {
          selectedStepIndex++;
          updateView();
      }
99b8066f4   김태훈   V0.1.1
1008
  }
f588aa273   김태훈   부가 기능 로직 추가
1009
e00c6a2a9   김태훈   기능 추가 구현
1010
1011
1012
  void AutoCookWindow::on_backButton_clicked()
  {
      Oven::getInstance()->stop();
b2ddac079   김태훈   버그 수정
1013
      emit back();
e00c6a2a9   김태훈   기능 추가 구현
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
      close();
  }
  
  void AutoCookWindow::on_configButton_clicked()
  {
      if (autocook.done())
      {
          ConfigWindow *w = new ConfigWindow(MainWindow::getInstance());
          w->setWindowModality(Qt::WindowModal);
          w->showFullScreen();
          w->raise();
  
          MainWindow::jump(w);
      }
      else
      {
          ConfirmPopup *p = new ConfirmPopup(this, tr("요리가 중단되고 환경 설정 모드로 들어갑니다. 진행할까요?"));
          p->showFullScreen();
  
          connect(p, SIGNAL(accepted()), SLOT(jumpConfig()));
      }
  }
f588aa273   김태훈   부가 기능 로직 추가
1036
1037
  void AutoCookWindow::on_favoritesButton_clicked()
  {
599b9c350   고영탁   부가기능 복구
1038
1039
      if (!autocook.done())
          return;
f588aa273   김태훈   부가 기능 로직 추가
1040
599b9c350   고영탁   부가기능 복구
1041
1042
      ConfirmPopup *p = new ConfirmPopup(this, tr("즐겨찾기 항목에 추가하시겠습니까?"));
      p->showFullScreen();
f588aa273   김태훈   부가 기능 로직 추가
1043
599b9c350   고영탁   부가기능 복구
1044
      connect(p, SIGNAL(accepted()), SLOT(addFavorite()));
f588aa273   김태훈   부가 기능 로직 추가
1045
  }
e00c6a2a9   김태훈   기능 추가 구현
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
  
  void AutoCookWindow::on_washButton_clicked()
  {
      if (autocook.done())
      {
          WashWindow *w = new WashWindow(MainWindow::getInstance());
          w->setWindowModality(Qt::WindowModal);
          w->showFullScreen();
          w->raise();
  
          MainWindow::jump(w);
      }
      else
      {
          ConfirmPopup *p = new ConfirmPopup(this, tr("요리가 중단되고 자동 세척 모드로 들어갑니다. 진행할까요?"));
          p->showFullScreen();
  
          connect(p, SIGNAL(accepted()), SLOT(jumpWash()));
      }
  }
  
  void AutoCookWindow::on_helpButton_clicked()
  {
1342af7b3   김태훈   도움말 버튼 연결
1069
1070
1071
      ManualViewerDlg* dlg = new ManualViewerDlg(this, AUTO_COOK_PAGE);
      dlg->showFullScreen();
      dlg->raise();
e00c6a2a9   김태훈   기능 추가 구현
1072
  }