Blame view

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