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