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