Blame view

app/gui/oven_control/autocookconfigwindow.cpp 7.18 KB
6f96c947a   김태훈   GUI 0.1.4
1
2
  #include "autocookconfigwindow.h"
  #include "ui_autocookconfigwindow.h"
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
3
  #include "autocookwindow.h"
f588aa273   김태훈   부가 기능 로직 추가
4
  #include "confirmpopup.h"
2bfd3a050   김태훈   환경 설정 대응
5
  #include "stringer.h"
f588aa273   김태훈   부가 기능 로직 추가
6
  #include "favoritenamepopup.h"
bbd7d8f29   김태훈   버튼 음향 추가
7
  #include "soundplayer.h"
e00c6a2a9   김태훈   기능 추가 구현
8
9
10
  #include "configwindow.h"
  #include "washwindow.h"
  #include "mainwindow.h"
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
11
3f52600cc   김태훈   소스 코드 구조 개선
12
  AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Cook cook) :
6f96c947a   김태훈   GUI 0.1.4
13
14
      QMainWindow(parent),
      ui(new Ui::AutoCookConfigWindow),
6f96c947a   김태훈   GUI 0.1.4
15
16
17
18
19
20
      cook(cook)
  {
      ui->setupUi(this);
  
      ui->clockContainer->setParent(ui->upperStack);
      setAttribute(Qt::WA_DeleteOnClose);
6f96c947a   김태훈   GUI 0.1.4
21
22
23
      configWidgets.append(
                  ConfigWidget {
                      ui->configButton_1,
6f96c947a   김태훈   GUI 0.1.4
24
25
26
27
28
29
30
31
                      ui->configMinLabel_1,
                      ui->configMaxLabel_1,
                      ui->configCurrentLabel_1,
                      ui->configSlider_1
                  });
      configWidgets.append(
                  ConfigWidget {
                      ui->configButton_2,
6f96c947a   김태훈   GUI 0.1.4
32
33
34
35
36
37
38
39
                      ui->configMinLabel_2,
                      ui->configMaxLabel_2,
                      ui->configCurrentLabel_2,
                      ui->configSlider_2
                  });
      configWidgets.append(
                  ConfigWidget {
                      ui->configButton_3,
6f96c947a   김태훈   GUI 0.1.4
40
41
42
43
44
45
46
47
                      ui->configMinLabel_3,
                      ui->configMaxLabel_3,
                      ui->configCurrentLabel_3,
                      ui->configSlider_3
                  });
      configWidgets.append(
                  ConfigWidget {
                      ui->configButton_4,
6f96c947a   김태훈   GUI 0.1.4
48
49
50
51
52
53
54
55
                      ui->configMinLabel_4,
                      ui->configMaxLabel_4,
                      ui->configCurrentLabel_4,
                      ui->configSlider_4
                  });
      configWidgets.append(
                  ConfigWidget {
                      ui->configButton_5,
6f96c947a   김태훈   GUI 0.1.4
56
57
58
59
60
                      ui->configMinLabel_5,
                      ui->configMaxLabel_5,
                      ui->configCurrentLabel_5,
                      ui->configSlider_5
                  });
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
61
62
63
64
65
66
67
68
69
70
71
72
73
      cookStartTimer.setSingleShot(true);
      cookStartTimer.setInterval(3000);
      connect(&cookStartTimer, SIGNAL(timeout()), SLOT(start()));
  
      foreach (ConfigWidget w, configWidgets)
      {
          connect(w.button, SIGNAL(pressed()), SLOT(stopTimer()));
          connect(w.button, SIGNAL(released()), SLOT(startTimer()));
          connect(w.slider, SIGNAL(sliderPressed()), SLOT(stopTimer()));
          connect(w.slider, SIGNAL(sliderReleased()), SLOT(startTimer()));
      }
  
      setupUi();
bbd7d8f29   김태훈   버튼 음향 추가
74
75
76
77
      foreach (QPushButton *button, findChildren<QPushButton *>())
      {
          connect(button, &QPushButton::pressed, SoundPlayer::playClick);
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
78
79
80
81
82
83
84
85
86
87
88
89
      startTimer();
  }
  
  AutoCookConfigWindow::~AutoCookConfigWindow()
  {
      delete ui;
  }
  
  void AutoCookConfigWindow::setupUi()
  {
      ui->cookTypeIcon->setPixmap(Define::icon(cook.type));
      ui->selectCookButton->setText(cook.name);
6f96c947a   김태훈   GUI 0.1.4
90
91
      for (int idx = 0; idx < 5; idx++)
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
92
93
          CookConfig config = cook.configs[idx];
          if (config.type == Define::ConfigNotUsed)
6f96c947a   김태훈   GUI 0.1.4
94
95
96
          {
              ConfigWidget cw = configWidgets.at(idx);
              cw.button->hide();
6f96c947a   김태훈   GUI 0.1.4
97
98
99
100
101
102
103
104
105
              cw.minimum->hide();
              cw.maximum->hide();
              cw.current->hide();
              cw.slider->hide();
          }
          else
          {
              ConfigWidget cw = configWidgets.at(idx);
              cw.button->setStyleSheet(
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
106
107
108
109
                          "QPushButton { image: url("
                           + Define::icon(config.type)
                           + ") } QPushButton::pressed { image: url("
                           + Define::iconOverlay(config.type)
6f96c947a   김태훈   GUI 0.1.4
110
                           + ") }");
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
111
112
              cw.minimum->setText(Define::minimum(config.type));
              cw.maximum->setText(Define::maximum(config.type));
6f96c947a   김태훈   GUI 0.1.4
113
114
              cw.slider->blockSignals(true);
              cw.slider->setMinimum(1);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
115
116
              cw.slider->setMaximum(config.maximum);
              cw.slider->setValue(config.current);
6f96c947a   김태훈   GUI 0.1.4
117
              cw.slider->blockSignals(false);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
118
              switch (config.type)
6f96c947a   김태훈   GUI 0.1.4
119
              {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
120
              case Define::Time:
6f96c947a   김태훈   GUI 0.1.4
121
122
                  cw.slider->setProperty("sliderColor", "white");
                  break;
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
123
              case Define::BurnDegree:
6f96c947a   김태훈   GUI 0.1.4
124
125
                  cw.slider->setProperty("sliderColor", "yellow");
                  break;
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
126
              case Define::Brightness:
6f96c947a   김태훈   GUI 0.1.4
127
128
129
130
131
132
                  cw.slider->setProperty("sliderColor", "red");
                  break;
              default:
                  cw.slider->setProperty("sliderColor", "blue");
                  break;
              }
6f96c947a   김태훈   GUI 0.1.4
133
134
135
              connect(cw.slider, SIGNAL(valueChanged(int)), SLOT(updateConfig()));
          }
      }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
136
      updateView();
6f96c947a   김태훈   GUI 0.1.4
137
138
139
140
141
142
  }
  
  void AutoCookConfigWindow::updateView()
  {
      for (int idx = 0; idx < 5; idx++)
      {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
143
144
          CookConfig config = cook.configs[idx];
          if (config.type == Define::ConfigNotUsed)
6f96c947a   김태훈   GUI 0.1.4
145
146
147
              continue;
  
          ConfigWidget cw = configWidgets.at(idx);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
148
          switch (config.type)
6f96c947a   김태훈   GUI 0.1.4
149
          {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
150
          case Define::Time:
2bfd3a050   김태훈   환경 설정 대응
151
              cw.current->setText(Stringer::remainingTime(cook.time() * 1000, Stringer::fontSize14));
6f96c947a   김태훈   GUI 0.1.4
152
              break;
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
153
          case Define::BurnDegree:
2bfd3a050   김태훈   환경 설정 대응
154
              cw.current->setText(Stringer::temperature(cook.coreTemp(), Stringer::fontSize14));
6f96c947a   김태훈   GUI 0.1.4
155
156
              break;
          default:
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
157
158
159
160
              cw.current->setText(QString().sprintf(
                      "%d"
                      "<span style=\"font-size:11pt;\">/%d</span>",
                      config.current, config.maximum));
6f96c947a   김태훈   GUI 0.1.4
161
162
163
              break;
          }
      }
6f96c947a   김태훈   GUI 0.1.4
164
165
166
167
  }
  
  void AutoCookConfigWindow::updateConfig()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
      cook.setConfig(ui->configSlider_1->value(),
                     ui->configSlider_2->value(),
                     ui->configSlider_3->value(),
                     ui->configSlider_4->value(),
                     ui->configSlider_5->value());
  
      updateView();
  }
  
  void AutoCookConfigWindow::startTimer()
  {
      cookStartTimer.start();
  }
  
  void AutoCookConfigWindow::stopTimer()
  {
      cookStartTimer.stop();
  }
  
  void AutoCookConfigWindow::start()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
189
190
191
192
      AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook);
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
7d0288172   김태훈   기능 추가 구현
193
b2ddac079   김태훈   버그 수정
194
      connect(w, SIGNAL(back()), SLOT(startTimer()));
6f96c947a   김태훈   GUI 0.1.4
195
  }
f588aa273   김태훈   부가 기능 로직 추가
196
197
198
199
200
201
202
203
204
205
206
  void AutoCookConfigWindow::addFavorite()
  {
      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();
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
207
  void AutoCookConfigWindow::on_backButton_clicked()
6f96c947a   김태훈   GUI 0.1.4
208
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
209
      close();
6f96c947a   김태훈   GUI 0.1.4
210
  }
f588aa273   김태훈   부가 기능 로직 추가
211
e00c6a2a9   김태훈   기능 추가 구현
212
213
214
215
216
217
218
219
220
  void AutoCookConfigWindow::on_configButton_clicked()
  {
      ConfigWindow *w = new ConfigWindow(MainWindow::getInstance());
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
  
      MainWindow::jump(w);
  }
f588aa273   김태훈   부가 기능 로직 추가
221
222
223
224
225
226
227
228
229
230
231
232
233
  void AutoCookConfigWindow::on_favoritesButton_clicked()
  {
      ConfirmPopup *p = new ConfirmPopup(this, tr("즐겨찾기 항목에 추가하시겠습니까?"));
      p->showFullScreen();
  
      connect(p, SIGNAL(accepted()), SLOT(addFavorite()));
  
      if (cookStartTimer.isActive())
      {
          cookStartTimer.stop();
          connect(p, SIGNAL(rejected()), &cookStartTimer, SLOT(start()));
      }
  }
e00c6a2a9   김태훈   기능 추가 구현
234
235
236
237
238
239
240
241
242
243
  
  void AutoCookConfigWindow::on_washButton_clicked()
  {
      WashWindow *w = new WashWindow(MainWindow::getInstance());
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
  
      MainWindow::jump(w);
  }