Blame view

app/gui/oven_control/washwindow.cpp 8.7 KB
00a512484   김태훈   세척 모드 화면 추가
1
2
  #include "washwindow.h"
  #include "ui_washwindow.h"
05f2a7552   김태훈   image 관리 구조 변경
3
  #include <QSignalMapper>
271dda4ae   김태훈   엔코더 구현
4
  #include <QKeyEvent>
05f2a7552   김태훈   image 관리 구조 변경
5
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
6
  #include "soundplayer.h"
6d5da5fca   김태훈   청결/관리 상태 기능 반영
7
  #include "dirtylevel.h"
e00c6a2a9   김태훈   기능 추가 구현
8
9
  #include "configwindow.h"
  #include "mainwindow.h"
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
10
538041ab9   김태훈   소스 코드 구조 개선
11
  WashWindow::WashWindow(QWidget *parent) :
00a512484   김태훈   세척 모드 화면 추가
12
      QMainWindow(parent),
05f2a7552   김태훈   image 관리 구조 변경
13
      ui(new Ui::WashWindow),
61ba89b34   김태훈   GUI V0.1.6
14
15
16
17
      selected(false),
      opened(false),
      started(false),
      run(false),
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
18
      canceled(false),
61ba89b34   김태훈   GUI V0.1.6
19
      type(0)
00a512484   김태훈   세척 모드 화면 추가
20
21
22
23
24
25
  {
      ui->setupUi(this);
  
      ui->clockContainer->setParent(ui->upperStack);
      ui->progressContainer->setParent(ui->upperStack);
      setAttribute(Qt::WA_DeleteOnClose);
05f2a7552   김태훈   image 관리 구조 변경
26
538041ab9   김태훈   소스 코드 구조 개선
27
      udp = UdpHandler::getInstance();
05f2a7552   김태훈   image 관리 구조 변경
28
      connect(udp, SIGNAL(changed()), SLOT(onChanged()));
05f2a7552   김태훈   image 관리 구조 변경
29
      ui->animation->load(":/images/animation/wash_04.png");
61ba89b34   김태훈   GUI V0.1.6
30
      ui->closeDoorArrow->hide();
05f2a7552   김태훈   image 관리 구조 변경
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  
      QSignalMapper *sm = new QSignalMapper(this);
      connect(sm, SIGNAL(mapped(int)), SLOT(start(int)));
  
      sm->setMapping(ui->washButton_1, 1);
      sm->setMapping(ui->washButton_2, 2);
      sm->setMapping(ui->washButton_3, 3);
      sm->setMapping(ui->washButton_4, 4);
      sm->setMapping(ui->washButton_5, 5);
  
      connect(ui->washButton_1, SIGNAL(clicked()), sm, SLOT(map()));
      connect(ui->washButton_2, SIGNAL(clicked()), sm, SLOT(map()));
      connect(ui->washButton_3, SIGNAL(clicked()), sm, SLOT(map()));
      connect(ui->washButton_4, SIGNAL(clicked()), sm, SLOT(map()));
      connect(ui->washButton_5, SIGNAL(clicked()), sm, SLOT(map()));
61ba89b34   김태훈   GUI V0.1.6
46
47
48
      returnToClockTimer.setSingleShot(true);
      returnToClockTimer.setInterval(10 * 1000);
      connect(&returnToClockTimer, SIGNAL(timeout()), SLOT(returnToClock()));
bbd7d8f29   김태훈   버튼 음향 추가
49
50
51
  
      foreach (QPushButton *button, findChildren<QPushButton *>())
          connect(button, &QPushButton::pressed, SoundPlayer::playClick);
6d5da5fca   김태훈   청결/관리 상태 기능 반영
52
53
  
      updateGauge();
271dda4ae   김태훈   엔코더 구현
54
55
  
      setFocus();
00a512484   김태훈   세척 모드 화면 추가
56
57
58
59
60
61
  }
  
  WashWindow::~WashWindow()
  {
      delete ui;
  }
05f2a7552   김태훈   image 관리 구조 변경
62
271dda4ae   김태훈   엔코더 구현
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
  void WashWindow::keyPressEvent(QKeyEvent *event)
  {
      switch (event->key())
      {
      case 0x01000030:    // Turn left
          onEncoderLeft();
          break;
      case 0x01000031:    // Push
          pushed = focusWidget();
          break;
      case 0x01000032:    // Turn right
          onEncoderRight();
          break;
      }
  }
  
  void WashWindow::keyReleaseEvent(QKeyEvent *event)
  {
      switch (event->key())
      {
      case 0x01000030:    // Turn left
          onEncoderLeft();
          break;
      case 0x01000031:    // Push
          if (focusWidget() == pushed)
              onEncoderClicked(pushed);
  
          pushed = NULL;
          break;
      case 0x01000032:    // Turn right
          onEncoderRight();
          break;
      }
  }
05f2a7552   김태훈   image 관리 구조 변경
97
98
  void WashWindow::start(int type)
  {
61ba89b34   김태훈   GUI V0.1.6
99
      if (selected)
05f2a7552   김태훈   image 관리 구조 변경
100
101
102
103
          return;
  
      if (type < 1 || type > 5)
          return;
61ba89b34   김태훈   GUI V0.1.6
104
      selected = true;
05f2a7552   김태훈   image 관리 구조 변경
105
61ba89b34   김태훈   GUI V0.1.6
106
107
108
      this->type = type;
  
      returnToClockTimer.stop();
05f2a7552   김태훈   image 관리 구조 변경
109
61ba89b34   김태훈   GUI V0.1.6
110
111
112
113
114
115
      ui->animation->clear();
      ui->animation->load(":/images/animation/pull_01.png");
      ui->animation->load(":/images/animation/pull_02.png");
      ui->animation->load(":/images/animation/pull_03.png");
      ui->animation->load(":/images/animation/pull_04.png");
      ui->animation->show();
05f2a7552   김태훈   image 관리 구조 변경
116
      ui->animation->start(300);
61ba89b34   김태훈   GUI V0.1.6
117
118
  
      udp->set(TG_OVEN_MODE, 2);
05f2a7552   김태훈   image 관리 구조 변경
119
120
121
122
  }
  
  void WashWindow::stop()
  {
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
123
124
125
126
127
128
129
      if (!started)
          return;
  
      if (canceled)
          return;
  
      canceled = true;
05f2a7552   김태훈   image 관리 구조 변경
130
131
      udp->turnOff(TG_CLEANING);
  }
61ba89b34   김태훈   GUI V0.1.6
132
133
134
135
  void WashWindow::returnToClock()
  {
      ui->upperStack->setCurrentIndex(0);
  }
6d5da5fca   김태훈   청결/관리 상태 기능 반영
136
137
138
139
140
  void WashWindow::updateGauge()
  {
      ui->dirtySlider->setValue(DirtyLevel::dirty());
      ui->stateSlider->setValue(DirtyLevel::state());
  }
05f2a7552   김태훈   image 관리 구조 변경
141
142
  void WashWindow::onChanged()
  {
61ba89b34   김태훈   GUI V0.1.6
143
      if (!selected)
05f2a7552   김태훈   image 관리 구조 변경
144
          return;
61ba89b34   김태훈   GUI V0.1.6
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
      oven_state_t state;
      udp->fillData(state);
  
      if (!opened)
      {
          if (state.door_state)
          {
              opened = true;
  
              ui->animation->clear();
  
              ui->animation->load(":/images/animation/door_big_09.png");
              ui->animation->load(":/images/animation/door_big_08.png");
              ui->animation->load(":/images/animation/door_big_07.png");
              ui->animation->load(":/images/animation/door_big_06.png");
              ui->animation->load(":/images/animation/door_big_05.png");
              ui->animation->load(":/images/animation/door_big_04.png");
              ui->animation->load(":/images/animation/door_big_03.png");
              ui->animation->load(":/images/animation/door_big_02.png");
              ui->animation->load(":/images/animation/door_big_01.png");
              ui->closeDoorArrow->show();
          }
      }
      else if (!started)
      {
          if (!state.door_state)
          {
              started = true;
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
173
              SoundPlayer::playStart();
61ba89b34   김태훈   GUI V0.1.6
174
175
176
177
178
179
180
181
              ui->closeDoorArrow->hide();
              ui->animation->clear();
  
              ui->animation->load(":/images/animation/wash_01.png");
              ui->animation->load(":/images/animation/wash_02.png");
              ui->animation->load(":/images/animation/wash_03.png");
              ui->animation->load(":/images/animation/wash_04.png");
              ui->washStepGauge->setValue(0);
3d5fe1187   고영탁   한글화 진행 washwindow...
182
183
184
              ui->titleLabel->setText(tr("기기의 내부를 세척 중입니다"));
              ui->descLabel->setText(tr("완료될 때까지 문을 열지 마세요.
  기기의 내부의 자동 세척 기능을 실행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
              ui->washStepTypeLabel->setText("");
              ui->washStepCountLabel->setText("");
  
              ui->upperStack->setCurrentIndex(1);
  
              udp->set(TG_CLEAN_TYPE, type);
              udp->turnOn(TG_CLEANING);
          }
      }
      else if (state.cleaning_sate)
      {
          if (!run)
              run = true;
  
          oven_control_t control;
          udp->fillControl(control);
  
          if (control.clean_total != 0 && control.clean_step != 0 && control.clean_step_type != 0)
          {
              ui->washStepGauge->setMaximum(control.clean_total);
              ui->washStepGauge->setValue(control.clean_step);
              ui->washStepCountLabel->setText(QString().sprintf("%d/%d", control.clean_step, control.clean_total));
  
              switch (control.clean_step_type)
              {
              case 1:
3d5fe1187   고영탁   한글화 진행 washwindow...
211
                  ui->washStepTypeLabel->setText(tr("내부 헹굼 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
212
213
                  break;
              case 2:
3d5fe1187   고영탁   한글화 진행 washwindow...
214
                  ui->washStepTypeLabel->setText(tr("스팀 급수 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
215
216
                  break;
              case 3:
3d5fe1187   고영탁   한글화 진행 washwindow...
217
                  ui->washStepTypeLabel->setText(tr("내부 팬 세척 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
218
219
                  break;
              case 4:
3d5fe1187   고영탁   한글화 진행 washwindow...
220
                  ui->washStepTypeLabel->setText(tr("내부 스팀 불림 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
221
222
                  break;
              case 5:
3d5fe1187   고영탁   한글화 진행 washwindow...
223
                  ui->washStepTypeLabel->setText(tr("내부 강 세척 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
224
225
                  break;
              case 6:
3d5fe1187   고영탁   한글화 진행 washwindow...
226
                  ui->washStepTypeLabel->setText(tr("내부 상부 세척 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
227
228
                  break;
              case 7:
3d5fe1187   고영탁   한글화 진행 washwindow...
229
                  ui->washStepTypeLabel->setText(tr("내부 스팀 세척 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
230
231
                  break;
              case 8:
3d5fe1187   고영탁   한글화 진행 washwindow...
232
                  ui->washStepTypeLabel->setText(tr("세척 종료 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
233
234
                  break;
              case 9:
3d5fe1187   고영탁   한글화 진행 washwindow...
235
                  ui->washStepTypeLabel->setText(tr("세제 세척수 만들기 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
236
237
                  break;
              case 10:
3d5fe1187   고영탁   한글화 진행 washwindow...
238
                  ui->washStepTypeLabel->setText(tr("세제 세척수 헹굼 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
239
240
                  break;
              case 11:
3d5fe1187   고영탁   한글화 진행 washwindow...
241
                  ui->washStepTypeLabel->setText(tr("하부 탱크 세척수 만들기 진행 중입니다."));
61ba89b34   김태훈   GUI V0.1.6
242
243
244
245
                  break;
              }
          }
      }
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
246
247
      else if (canceled)
      {
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
248
          SoundPlayer::playStop();
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
249
250
          close();
      }
61ba89b34   김태훈   GUI V0.1.6
251
252
      else if (run)
      {
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
253
          SoundPlayer::playStop();
6d5da5fca   김태훈   청결/관리 상태 기능 반영
254
          DirtyLevel::wash(type);
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
255
3d5fe1187   고영탁   한글화 진행 washwindow...
256
          ui->titleLabel->setText(tr("세척이 종료되었습니다"));
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
257
258
          ui->descLabel->setText("");
          ui->washStepTypeLabel->setText("");
61ba89b34   김태훈   GUI V0.1.6
259
260
261
262
263
264
265
266
267
268
269
270
          ui->washStepCountLabel->setText("");
  
          ui->animation->stop();
          ui->animation->clear();
          ui->animation->load(":/images/animation/wash_04.png");
  
          returnToClockTimer.start();
  
          selected = false;
          opened = false;
          started = false;
          run = false;
6d5da5fca   김태훈   청결/관리 상태 기능 반영
271
272
  
          updateGauge();
61ba89b34   김태훈   GUI V0.1.6
273
      }
05f2a7552   김태훈   image 관리 구조 변경
274
275
276
277
  }
  
  void WashWindow::on_backButton_clicked()
  {
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
278
279
280
281
      if (started)
          stop();
      else
          close();
05f2a7552   김태훈   image 관리 구조 변경
282
  }
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
283
284
285
  
  void WashWindow::on_configButton_clicked()
  {
e00c6a2a9   김태훈   기능 추가 구현
286
287
288
289
290
291
292
293
      if (started)
          stop();
      else
      {
          ConfigWindow *w = new ConfigWindow(MainWindow::getInstance());
          w->setWindowModality(Qt::WindowModal);
          w->showFullScreen();
          w->raise();
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
294
e00c6a2a9   김태훈   기능 추가 구현
295
296
          MainWindow::jump(w);
      }
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
297
298
299
300
  }
  
  void WashWindow::on_helpButton_clicked()
  {
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
301
302
  
  }
271dda4ae   김태훈   엔코더 구현
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
  
  void WashWindow::onEncoderLeft()
  {
      focusPreviousChild();
  }
  
  void WashWindow::onEncoderRight()
  {
      focusNextChild();
  }
  
  void WashWindow::onEncoderClicked(QWidget *clicked)
  {
      QPushButton *b = qobject_cast<QPushButton *>(clicked);
      if (b)
          b->click();
  }