Blame view

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