Blame view

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