6f96c947a
김태훈
GUI 0.1.4
|
1
2
|
#include "autocookconfigwindow.h"
#include "ui_autocookconfigwindow.h"
|
184bdebb4
김태훈
엔코더 구현
|
3
|
#include <QKeyEvent>
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
4
|
#include "autocookwindow.h"
|
f588aa273
김태훈
부가 기능 로직 추가
|
5
|
#include "confirmpopup.h"
|
2bfd3a050
김태훈
환경 설정 대응
|
6
|
#include "stringer.h"
|
f588aa273
김태훈
부가 기능 로직 추가
|
7
|
#include "favoritenamepopup.h"
|
bbd7d8f29
김태훈
버튼 음향 추가
|
8
|
#include "soundplayer.h"
|
e00c6a2a9
김태훈
기능 추가 구현
|
9
10
11
|
#include "configwindow.h"
#include "washwindow.h"
#include "mainwindow.h"
|
11c611782
김태훈
자동 요리 세부 사항 구현
|
12
|
#include "autocookselectionpopup.h"
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
13
|
|
3f52600cc
김태훈
소스 코드 구조 개선
|
14
|
AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Cook cook) :
|
6f96c947a
김태훈
GUI 0.1.4
|
15
16
|
QMainWindow(parent),
ui(new Ui::AutoCookConfigWindow),
|
6f96c947a
김태훈
GUI 0.1.4
|
17
18
19
20
21
22
|
cook(cook)
{
ui->setupUi(this);
ui->clockContainer->setParent(ui->upperStack);
setAttribute(Qt::WA_DeleteOnClose);
|
6f96c947a
김태훈
GUI 0.1.4
|
23
24
25
|
configWidgets.append(
ConfigWidget {
ui->configButton_1,
|
6f96c947a
김태훈
GUI 0.1.4
|
26
27
28
29
30
31
32
33
|
ui->configMinLabel_1,
ui->configMaxLabel_1,
ui->configCurrentLabel_1,
ui->configSlider_1
});
configWidgets.append(
ConfigWidget {
ui->configButton_2,
|
6f96c947a
김태훈
GUI 0.1.4
|
34
35
36
37
38
39
40
41
|
ui->configMinLabel_2,
ui->configMaxLabel_2,
ui->configCurrentLabel_2,
ui->configSlider_2
});
configWidgets.append(
ConfigWidget {
ui->configButton_3,
|
6f96c947a
김태훈
GUI 0.1.4
|
42
43
44
45
46
47
48
49
|
ui->configMinLabel_3,
ui->configMaxLabel_3,
ui->configCurrentLabel_3,
ui->configSlider_3
});
configWidgets.append(
ConfigWidget {
ui->configButton_4,
|
6f96c947a
김태훈
GUI 0.1.4
|
50
51
52
53
54
55
56
57
|
ui->configMinLabel_4,
ui->configMaxLabel_4,
ui->configCurrentLabel_4,
ui->configSlider_4
});
configWidgets.append(
ConfigWidget {
ui->configButton_5,
|
6f96c947a
김태훈
GUI 0.1.4
|
58
59
60
61
62
|
ui->configMinLabel_5,
ui->configMaxLabel_5,
ui->configCurrentLabel_5,
ui->configSlider_5
});
|
11c611782
김태훈
자동 요리 세부 사항 구현
|
63
64
|
foreach (Slider *s, findChildren<Slider *>())
connect(s, SIGNAL(sliderMoved(int)), SLOT(updateConfig()));
|
184bdebb4
김태훈
엔코더 구현
|
65
66
67
68
69
70
71
72
73
74
75
|
setupUi();
afterThreeSecsTimer.setSingleShot(true);
afterThreeSecsTimer.setInterval(3000);
connect(&afterThreeSecsTimer, SIGNAL(timeout()), SLOT(afterThreeSecs()));
foreach (QPushButton *button, findChildren<QPushButton *>())
connect(button, &QPushButton::pressed, SoundPlayer::playClick);
foreach (QWidget *w, findChildren<QWidget *>())
w->installEventFilter(this);
|
184bdebb4
김태훈
엔코더 구현
|
76
|
setFocus();
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
77
|
|
184bdebb4
김태훈
엔코더 구현
|
78
79
80
81
82
83
84
85
86
87
88
|
afterThreeSecsTimer.start();
}
AutoCookConfigWindow::~AutoCookConfigWindow()
{
delete ui;
}
bool AutoCookConfigWindow::eventFilter(QObject */*watched*/, QEvent *event)
{
switch (event->type())
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
89
|
{
|
184bdebb4
김태훈
엔코더 구현
|
90
91
92
93
94
95
96
97
98
|
case QEvent::KeyPress:
case QEvent::KeyRelease:
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
case QEvent::MouseMove:
afterThreeSecsTimer.start();
break;
default:
break;
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
99
|
}
|
184bdebb4
김태훈
엔코더 구현
|
100
101
|
return false;
}
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
102
|
|
184bdebb4
김태훈
엔코더 구현
|
103
104
105
|
void AutoCookConfigWindow::keyPressEvent(QKeyEvent *event)
{
switch (event->key())
|
bbd7d8f29
김태훈
버튼 음향 추가
|
106
|
{
|
184bdebb4
김태훈
엔코더 구현
|
107
108
109
110
111
112
113
114
115
|
case 0x01000030: // Turn left
onEncoderLeft();
break;
case 0x01000031: // Push
pushed = focusWidget();
break;
case 0x01000032: // Turn right
onEncoderRight();
break;
|
bbd7d8f29
김태훈
버튼 음향 추가
|
116
|
}
|
184bdebb4
김태훈
엔코더 구현
|
117
|
}
|
bbd7d8f29
김태훈
버튼 음향 추가
|
118
|
|
184bdebb4
김태훈
엔코더 구현
|
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
void AutoCookConfigWindow::keyReleaseEvent(QKeyEvent *event)
{
switch (event->key())
{
case 0x01000030: // Turn left
onEncoderLeft();
break;
case 0x01000031: // Push
if (focusWidget() == pushed)
onEncoderClicked(pushed);
pushed = NULL;
break;
case 0x01000032: // Turn right
onEncoderRight();
break;
}
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
136
|
}
|
184bdebb4
김태훈
엔코더 구현
|
137
|
void AutoCookConfigWindow::afterThreeSecs()
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
138
|
{
|
184bdebb4
김태훈
엔코더 구현
|
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
Slider *slider = qobject_cast<Slider *>(focusWidget());
if (slider)
{
if (slider == ui->configSlider_1)
ui->configButton_1->setFocus();
else if (slider == ui->configSlider_2)
ui->configButton_2->setFocus();
else if (slider == ui->configSlider_3)
ui->configButton_3->setFocus();
else if (slider == ui->configSlider_4)
ui->configButton_4->setFocus();
else if (slider == ui->configSlider_5)
ui->configButton_5->setFocus();
afterThreeSecsTimer.start();
}
else
start();
}
|
11c611782
김태훈
자동 요리 세부 사항 구현
|
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
void AutoCookConfigWindow::changeCook(Cook cook)
{
if (this->cook.root == cook.root)
return;
this->cook = cook;
setupUi();
}
void AutoCookConfigWindow::connectNewWindow(AutoCookWindow *w)
{
connect(w, SIGNAL(back()), &afterThreeSecsTimer, SLOT(start()));
connect(w, SIGNAL(newWindow(AutoCookWindow*)), SLOT(connectNewWindow(AutoCookWindow*)));
}
|
184bdebb4
김태훈
엔코더 구현
|
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
void AutoCookConfigWindow::onEncoderLeft()
{
focusPreviousChild();
}
void AutoCookConfigWindow::onEncoderRight()
{
focusNextChild();
}
void AutoCookConfigWindow::onEncoderClicked(QWidget *clicked)
{
if (clicked == NULL)
return;
if (clicked->inherits("QPushButton"))
{
QPushButton *pb = qobject_cast<QPushButton *>(clicked);
if (pb)
pb->click();
}
else if (clicked->inherits("Slider"))
{
Slider *slider = qobject_cast<Slider *>(clicked);
if (slider)
{
if (slider == ui->configSlider_1)
ui->configButton_1->setFocus();
else if (slider == ui->configSlider_2)
ui->configButton_2->setFocus();
else if (slider == ui->configSlider_3)
ui->configButton_3->setFocus();
else if (slider == ui->configSlider_4)
ui->configButton_4->setFocus();
else if (slider == ui->configSlider_5)
ui->configButton_5->setFocus();
}
}
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
211
212
213
214
215
216
|
}
void AutoCookConfigWindow::setupUi()
{
ui->cookTypeIcon->setPixmap(Define::icon(cook.type));
ui->selectCookButton->setText(cook.name);
|
6f96c947a
김태훈
GUI 0.1.4
|
217
218
|
for (int idx = 0; idx < 5; idx++)
{
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
219
220
|
CookConfig config = cook.configs[idx];
if (config.type == Define::ConfigNotUsed)
|
6f96c947a
김태훈
GUI 0.1.4
|
221
222
223
|
{
ConfigWidget cw = configWidgets.at(idx);
cw.button->hide();
|
6f96c947a
김태훈
GUI 0.1.4
|
224
225
226
227
228
229
230
231
|
cw.minimum->hide();
cw.maximum->hide();
cw.current->hide();
cw.slider->hide();
}
else
{
ConfigWidget cw = configWidgets.at(idx);
|
11c611782
김태훈
자동 요리 세부 사항 구현
|
232
233
234
235
236
|
cw.button->show();
cw.minimum->show();
cw.maximum->show();
cw.current->show();
cw.slider->show();
|
6f96c947a
김태훈
GUI 0.1.4
|
237
|
cw.button->setStyleSheet(
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
238
239
|
"QPushButton { image: url("
+ Define::icon(config.type)
|
184bdebb4
김태훈
엔코더 구현
|
240
|
+ ") } QPushButton:pressed, QPushButton:focus { image: url("
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
241
|
+ Define::iconOverlay(config.type)
|
6f96c947a
김태훈
GUI 0.1.4
|
242
|
+ ") }");
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
243
244
|
cw.minimum->setText(Define::minimum(config.type));
cw.maximum->setText(Define::maximum(config.type));
|
6f96c947a
김태훈
GUI 0.1.4
|
245
|
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
246
|
switch (config.type)
|
6f96c947a
김태훈
GUI 0.1.4
|
247
|
{
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
248
|
case Define::Time:
|
935b853a4
김태훈
새 슬라이더 적용
|
249
|
cw.slider->setSubPixmap(":/images/slider/sub_white.png");
|
6f96c947a
김태훈
GUI 0.1.4
|
250
|
break;
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
251
|
case Define::BurnDegree:
|
935b853a4
김태훈
새 슬라이더 적용
|
252
|
cw.slider->setSubPixmap(":/images/slider/sub_yellow.png");
|
6f96c947a
김태훈
GUI 0.1.4
|
253
|
break;
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
254
|
case Define::Brightness:
|
935b853a4
김태훈
새 슬라이더 적용
|
255
|
cw.slider->setSubPixmap(":/images/slider/sub_red.png");
|
6f96c947a
김태훈
GUI 0.1.4
|
256
257
|
break;
default:
|
935b853a4
김태훈
새 슬라이더 적용
|
258
|
cw.slider->setSubPixmap(":/images/slider/sub_blue.png");
|
6f96c947a
김태훈
GUI 0.1.4
|
259
260
|
break;
}
|
935b853a4
김태훈
새 슬라이더 적용
|
261
262
263
264
265
266
|
cw.slider->blockSignals(true);
cw.slider->setMinimum(1);
cw.slider->setMaximum(config.maximum);
cw.slider->setValue(config.current);
cw.slider->blockSignals(false);
cw.slider->bigTickInterval = 1;
|
6f96c947a
김태훈
GUI 0.1.4
|
267
268
|
}
}
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
269
|
updateView();
|
6f96c947a
김태훈
GUI 0.1.4
|
270
271
272
273
274
275
|
}
void AutoCookConfigWindow::updateView()
{
for (int idx = 0; idx < 5; idx++)
{
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
276
277
|
CookConfig config = cook.configs[idx];
if (config.type == Define::ConfigNotUsed)
|
6f96c947a
김태훈
GUI 0.1.4
|
278
279
280
|
continue;
ConfigWidget cw = configWidgets.at(idx);
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
281
|
switch (config.type)
|
6f96c947a
김태훈
GUI 0.1.4
|
282
|
{
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
283
|
case Define::Time:
|
2bfd3a050
김태훈
환경 설정 대응
|
284
|
cw.current->setText(Stringer::remainingTime(cook.time() * 1000, Stringer::fontSize14));
|
6f96c947a
김태훈
GUI 0.1.4
|
285
|
break;
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
286
|
case Define::BurnDegree:
|
2bfd3a050
김태훈
환경 설정 대응
|
287
|
cw.current->setText(Stringer::temperature(cook.coreTemp(), Stringer::fontSize14));
|
6f96c947a
김태훈
GUI 0.1.4
|
288
289
|
break;
default:
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
290
291
292
293
|
cw.current->setText(QString().sprintf(
"%d"
"<span style=\"font-size:11pt;\">/%d</span>",
config.current, config.maximum));
|
6f96c947a
김태훈
GUI 0.1.4
|
294
295
296
|
break;
}
}
|
6f96c947a
김태훈
GUI 0.1.4
|
297
298
299
300
|
}
void AutoCookConfigWindow::updateConfig()
{
|
935b853a4
김태훈
새 슬라이더 적용
|
301
302
303
304
305
|
cook.setConfig(ui->configSlider_1->sliderPosition(),
ui->configSlider_2->sliderPosition(),
ui->configSlider_3->sliderPosition(),
ui->configSlider_4->sliderPosition(),
ui->configSlider_5->sliderPosition());
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
306
307
308
|
updateView();
}
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
309
310
|
void AutoCookConfigWindow::start()
{
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
311
312
313
314
|
AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook);
w->setWindowModality(Qt::WindowModal);
w->showFullScreen();
w->raise();
|
7d0288172
김태훈
기능 추가 구현
|
315
|
|
184bdebb4
김태훈
엔코더 구현
|
316
|
connect(w, SIGNAL(back()), &afterThreeSecsTimer, SLOT(start()));
|
11c611782
김태훈
자동 요리 세부 사항 구현
|
317
|
connect(w, SIGNAL(newWindow(AutoCookWindow*)), SLOT(connectNewWindow(AutoCookWindow*)));
|
6f96c947a
김태훈
GUI 0.1.4
|
318
|
}
|
f588aa273
김태훈
부가 기능 로직 추가
|
319
320
321
322
323
324
325
326
327
328
329
|
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
김태훈
자동 요리 관련 로직 전면 재작성
|
330
|
void AutoCookConfigWindow::on_backButton_clicked()
|
6f96c947a
김태훈
GUI 0.1.4
|
331
|
{
|
6a81d38e4
김태훈
자동 요리 관련 로직 전면 재작성
|
332
|
close();
|
6f96c947a
김태훈
GUI 0.1.4
|
333
|
}
|
f588aa273
김태훈
부가 기능 로직 추가
|
334
|
|
e00c6a2a9
김태훈
기능 추가 구현
|
335
336
337
338
339
340
341
342
343
|
void AutoCookConfigWindow::on_configButton_clicked()
{
ConfigWindow *w = new ConfigWindow(MainWindow::getInstance());
w->setWindowModality(Qt::WindowModal);
w->showFullScreen();
w->raise();
MainWindow::jump(w);
}
|
f588aa273
김태훈
부가 기능 로직 추가
|
344
345
346
347
348
349
|
void AutoCookConfigWindow::on_favoritesButton_clicked()
{
ConfirmPopup *p = new ConfirmPopup(this, tr("즐겨찾기 항목에 추가하시겠습니까?"));
p->showFullScreen();
connect(p, SIGNAL(accepted()), SLOT(addFavorite()));
|
184bdebb4
김태훈
엔코더 구현
|
350
|
if (afterThreeSecsTimer.isActive())
|
f588aa273
김태훈
부가 기능 로직 추가
|
351
|
{
|
184bdebb4
김태훈
엔코더 구현
|
352
353
|
afterThreeSecsTimer.stop();
connect(p, SIGNAL(rejected()), &afterThreeSecsTimer, SLOT(start()));
|
f588aa273
김태훈
부가 기능 로직 추가
|
354
355
|
}
}
|
e00c6a2a9
김태훈
기능 추가 구현
|
356
357
358
359
360
361
362
363
364
365
|
void AutoCookConfigWindow::on_washButton_clicked()
{
WashWindow *w = new WashWindow(MainWindow::getInstance());
w->setWindowModality(Qt::WindowModal);
w->showFullScreen();
w->raise();
MainWindow::jump(w);
}
|
184bdebb4
김태훈
엔코더 구현
|
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
|
void AutoCookConfigWindow::on_configButton_1_clicked()
{
ui->configSlider_1->setFocus();
}
void AutoCookConfigWindow::on_configButton_2_clicked()
{
ui->configSlider_2->setFocus();
}
void AutoCookConfigWindow::on_configButton_3_clicked()
{
ui->configSlider_3->setFocus();
}
void AutoCookConfigWindow::on_configButton_4_clicked()
{
ui->configSlider_4->setFocus();
}
void AutoCookConfigWindow::on_configButton_5_clicked()
{
ui->configSlider_5->setFocus();
}
|
11c611782
김태훈
자동 요리 세부 사항 구현
|
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
|
void AutoCookConfigWindow::on_selectCookButton_clicked()
{
AutoCookSelectionPopup *p = new AutoCookSelectionPopup(this, cook.type);
p->showFullScreen();
p->raise();
connect(p, SIGNAL(selected(Cook)), SLOT(changeCook(Cook)));
if (afterThreeSecsTimer.isActive())
{
afterThreeSecsTimer.stop();
connect(p, SIGNAL(selected(Cook)), &afterThreeSecsTimer, SLOT(start()));
connect(p, SIGNAL(canceled()), &afterThreeSecsTimer, SLOT(start()));
}
}
|