Blame view

app/gui/oven_control/washwindow.cpp 7.63 KB
00a512484   김태훈   세척 모드 화면 추가
1
2
  #include "washwindow.h"
  #include "ui_washwindow.h"
05f2a7552   김태훈   image 관리 구조 변경
3
  #include <QSignalMapper>
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
4
  #include "soundplayer.h"
6d5da5fca   김태훈   청결/관리 상태 기능 반영
5
  #include "dirtylevel.h"
e00c6a2a9   김태훈   기능 추가 구현
6
7
  #include "configwindow.h"
  #include "mainwindow.h"
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
8
538041ab9   김태훈   소스 코드 구조 개선
9
  WashWindow::WashWindow(QWidget *parent) :
00a512484   김태훈   세척 모드 화면 추가
10
      QMainWindow(parent),
05f2a7552   김태훈   image 관리 구조 변경
11
      ui(new Ui::WashWindow),
61ba89b34   김태훈   GUI V0.1.6
12
13
14
15
      selected(false),
      opened(false),
      started(false),
      run(false),
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
16
      canceled(false),
61ba89b34   김태훈   GUI V0.1.6
17
      type(0)
00a512484   김태훈   세척 모드 화면 추가
18
19
20
21
22
23
  {
      ui->setupUi(this);
  
      ui->clockContainer->setParent(ui->upperStack);
      ui->progressContainer->setParent(ui->upperStack);
      setAttribute(Qt::WA_DeleteOnClose);
05f2a7552   김태훈   image 관리 구조 변경
24
538041ab9   김태훈   소스 코드 구조 개선
25
      udp = UdpHandler::getInstance();
05f2a7552   김태훈   image 관리 구조 변경
26
      connect(udp, SIGNAL(changed()), SLOT(onChanged()));
05f2a7552   김태훈   image 관리 구조 변경
27
      ui->animation->load(":/images/animation/wash_04.png");
61ba89b34   김태훈   GUI V0.1.6
28
      ui->closeDoorArrow->hide();
05f2a7552   김태훈   image 관리 구조 변경
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  
      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
44
45
46
      returnToClockTimer.setSingleShot(true);
      returnToClockTimer.setInterval(10 * 1000);
      connect(&returnToClockTimer, SIGNAL(timeout()), SLOT(returnToClock()));
bbd7d8f29   김태훈   버튼 음향 추가
47
48
49
  
      foreach (QPushButton *button, findChildren<QPushButton *>())
          connect(button, &QPushButton::pressed, SoundPlayer::playClick);
6d5da5fca   김태훈   청결/관리 상태 기능 반영
50
51
  
      updateGauge();
00a512484   김태훈   세척 모드 화면 추가
52
53
54
55
56
57
  }
  
  WashWindow::~WashWindow()
  {
      delete ui;
  }
05f2a7552   김태훈   image 관리 구조 변경
58
59
60
  
  void WashWindow::start(int type)
  {
61ba89b34   김태훈   GUI V0.1.6
61
      if (selected)
05f2a7552   김태훈   image 관리 구조 변경
62
63
64
65
          return;
  
      if (type < 1 || type > 5)
          return;
61ba89b34   김태훈   GUI V0.1.6
66
      selected = true;
05f2a7552   김태훈   image 관리 구조 변경
67
61ba89b34   김태훈   GUI V0.1.6
68
69
70
      this->type = type;
  
      returnToClockTimer.stop();
05f2a7552   김태훈   image 관리 구조 변경
71
61ba89b34   김태훈   GUI V0.1.6
72
73
74
75
76
77
      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 관리 구조 변경
78
      ui->animation->start(300);
61ba89b34   김태훈   GUI V0.1.6
79
80
  
      udp->set(TG_OVEN_MODE, 2);
05f2a7552   김태훈   image 관리 구조 변경
81
82
83
84
  }
  
  void WashWindow::stop()
  {
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
85
86
87
88
89
90
91
      if (!started)
          return;
  
      if (canceled)
          return;
  
      canceled = true;
05f2a7552   김태훈   image 관리 구조 변경
92
93
      udp->turnOff(TG_CLEANING);
  }
61ba89b34   김태훈   GUI V0.1.6
94
95
96
97
  void WashWindow::returnToClock()
  {
      ui->upperStack->setCurrentIndex(0);
  }
6d5da5fca   김태훈   청결/관리 상태 기능 반영
98
99
100
101
102
  void WashWindow::updateGauge()
  {
      ui->dirtySlider->setValue(DirtyLevel::dirty());
      ui->stateSlider->setValue(DirtyLevel::state());
  }
05f2a7552   김태훈   image 관리 구조 변경
103
104
  void WashWindow::onChanged()
  {
61ba89b34   김태훈   GUI V0.1.6
105
      if (!selected)
05f2a7552   김태훈   image 관리 구조 변경
106
          return;
61ba89b34   김태훈   GUI V0.1.6
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
      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   김태훈   음향 효과 일부 적용 및 소스 ...
135
              SoundPlayer::playStart();
61ba89b34   김태훈   GUI V0.1.6
136
137
138
139
140
141
142
143
              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);
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
144
145
146
              ui->titleLabel->setText("기기의 내부를 세척 중입니다");
              ui->descLabel->setText("완료될 때까지 문을 열지 마세요.
  기기의 내부의 자동 세척 기능을 실행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
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
              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:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
173
                  ui->washStepTypeLabel->setText("내부 헹굼 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
174
175
                  break;
              case 2:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
176
                  ui->washStepTypeLabel->setText("스팀 급수 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
177
178
                  break;
              case 3:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
179
                  ui->washStepTypeLabel->setText("내부 팬 세척 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
180
181
                  break;
              case 4:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
182
                  ui->washStepTypeLabel->setText("내부 스팀 불림 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
183
184
                  break;
              case 5:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
185
                  ui->washStepTypeLabel->setText("내부 강 세척 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
186
187
                  break;
              case 6:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
188
                  ui->washStepTypeLabel->setText("내부 상부 세척 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
189
190
                  break;
              case 7:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
191
                  ui->washStepTypeLabel->setText("내부 스팀 세척 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
192
193
                  break;
              case 8:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
194
                  ui->washStepTypeLabel->setText("세척 종료 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
195
196
                  break;
              case 9:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
197
                  ui->washStepTypeLabel->setText("세제 세척수 만들기 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
198
199
                  break;
              case 10:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
200
                  ui->washStepTypeLabel->setText("세제 세척수 헹굼 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
201
202
                  break;
              case 11:
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
203
                  ui->washStepTypeLabel->setText("하부 탱크 세척수 만들기 진행 중입니다.");
61ba89b34   김태훈   GUI V0.1.6
204
205
206
207
                  break;
              }
          }
      }
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
208
209
      else if (canceled)
      {
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
210
          SoundPlayer::playStop();
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
211
212
          close();
      }
61ba89b34   김태훈   GUI V0.1.6
213
214
      else if (run)
      {
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
215
          SoundPlayer::playStop();
6d5da5fca   김태훈   청결/관리 상태 기능 반영
216
          DirtyLevel::wash(type);
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
217
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
218
219
220
          ui->titleLabel->setText("세척이 종료되었습니다");
          ui->descLabel->setText("");
          ui->washStepTypeLabel->setText("");
61ba89b34   김태훈   GUI V0.1.6
221
222
223
224
225
226
227
228
229
230
231
232
          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   김태훈   청결/관리 상태 기능 반영
233
234
  
          updateGauge();
61ba89b34   김태훈   GUI V0.1.6
235
      }
05f2a7552   김태훈   image 관리 구조 변경
236
237
238
239
  }
  
  void WashWindow::on_backButton_clicked()
  {
aa40dc807   김태훈   세척 모드 중 뒤로 가기 버튼을...
240
241
242
243
      if (started)
          stop();
      else
          close();
05f2a7552   김태훈   image 관리 구조 변경
244
  }
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
245
246
247
  
  void WashWindow::on_configButton_clicked()
  {
e00c6a2a9   김태훈   기능 추가 구현
248
249
250
251
252
253
254
255
      if (started)
          stop();
      else
      {
          ConfigWindow *w = new ConfigWindow(MainWindow::getInstance());
          w->setWindowModality(Qt::WindowModal);
          w->showFullScreen();
          w->raise();
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
256
e00c6a2a9   김태훈   기능 추가 구현
257
258
          MainWindow::jump(w);
      }
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
259
260
261
262
  }
  
  void WashWindow::on_helpButton_clicked()
  {
ac60b5cec   김태훈   음향 효과 일부 적용 및 소스 ...
263
264
  
  }