Commit 184bdebb42d1f19f7f35c830eab16f74d0d13eac
1 parent
e9e5be516f
Exists in
master
and in
2 other branches
엔코더 구현
- 자동 요리 설정 화면
Showing
3 changed files
with
224 additions
and
50 deletions
Show diff stats
app/gui/oven_control/autocookconfigwindow.cpp
1 | 1 | #include "autocookconfigwindow.h" |
2 | 2 | #include "ui_autocookconfigwindow.h" |
3 | 3 | |
4 | +#include <QKeyEvent> | |
5 | + | |
4 | 6 | #include "autocookwindow.h" |
5 | 7 | #include "confirmpopup.h" |
6 | 8 | #include "stringer.h" |
... | ... | @@ -61,31 +63,143 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Cook cook) : |
61 | 63 | ui->configSlider_5 |
62 | 64 | }); |
63 | 65 | |
64 | - cookStartTimer.setSingleShot(true); | |
65 | - cookStartTimer.setInterval(3000); | |
66 | - connect(&cookStartTimer, SIGNAL(timeout()), SLOT(start())); | |
66 | + setupUi(); | |
67 | + | |
68 | + afterThreeSecsTimer.setSingleShot(true); | |
69 | + afterThreeSecsTimer.setInterval(3000); | |
70 | + connect(&afterThreeSecsTimer, SIGNAL(timeout()), SLOT(afterThreeSecs())); | |
71 | + | |
72 | + foreach (QPushButton *button, findChildren<QPushButton *>()) | |
73 | + connect(button, &QPushButton::pressed, SoundPlayer::playClick); | |
74 | + | |
75 | + foreach (QWidget *w, findChildren<QWidget *>()) | |
76 | + w->installEventFilter(this); | |
77 | + | |
78 | + installEventFilter(this); | |
79 | + | |
80 | + setFocus(); | |
67 | 81 | |
68 | - foreach (ConfigWidget w, configWidgets) | |
82 | + afterThreeSecsTimer.start(); | |
83 | +} | |
84 | + | |
85 | +AutoCookConfigWindow::~AutoCookConfigWindow() | |
86 | +{ | |
87 | + delete ui; | |
88 | +} | |
89 | + | |
90 | +bool AutoCookConfigWindow::eventFilter(QObject */*watched*/, QEvent *event) | |
91 | +{ | |
92 | + switch (event->type()) | |
69 | 93 | { |
70 | - connect(w.button, SIGNAL(pressed()), SLOT(stopTimer())); | |
71 | - connect(w.button, SIGNAL(released()), SLOT(startTimer())); | |
72 | - connect(w.slider, SIGNAL(sliderPressed()), SLOT(stopTimer())); | |
73 | - connect(w.slider, SIGNAL(sliderReleased()), SLOT(startTimer())); | |
94 | + case QEvent::KeyPress: | |
95 | + case QEvent::KeyRelease: | |
96 | + case QEvent::MouseButtonPress: | |
97 | + case QEvent::MouseButtonRelease: | |
98 | + case QEvent::MouseMove: | |
99 | + afterThreeSecsTimer.start(); | |
100 | + break; | |
101 | + default: | |
102 | + break; | |
74 | 103 | } |
75 | 104 | |
76 | - setupUi(); | |
105 | + return false; | |
106 | +} | |
77 | 107 | |
78 | - foreach (QPushButton *button, findChildren<QPushButton *>()) | |
108 | +void AutoCookConfigWindow::keyPressEvent(QKeyEvent *event) | |
109 | +{ | |
110 | + switch (event->key()) | |
79 | 111 | { |
80 | - connect(button, &QPushButton::pressed, SoundPlayer::playClick); | |
112 | + case 0x01000030: // Turn left | |
113 | + onEncoderLeft(); | |
114 | + break; | |
115 | + case 0x01000031: // Push | |
116 | + pushed = focusWidget(); | |
117 | + break; | |
118 | + case 0x01000032: // Turn right | |
119 | + onEncoderRight(); | |
120 | + break; | |
81 | 121 | } |
122 | +} | |
82 | 123 | |
83 | - startTimer(); | |
124 | +void AutoCookConfigWindow::keyReleaseEvent(QKeyEvent *event) | |
125 | +{ | |
126 | + switch (event->key()) | |
127 | + { | |
128 | + case 0x01000030: // Turn left | |
129 | + onEncoderLeft(); | |
130 | + break; | |
131 | + case 0x01000031: // Push | |
132 | + if (focusWidget() == pushed) | |
133 | + onEncoderClicked(pushed); | |
134 | + | |
135 | + pushed = NULL; | |
136 | + break; | |
137 | + case 0x01000032: // Turn right | |
138 | + onEncoderRight(); | |
139 | + break; | |
140 | + } | |
84 | 141 | } |
85 | 142 | |
86 | -AutoCookConfigWindow::~AutoCookConfigWindow() | |
143 | +void AutoCookConfigWindow::afterThreeSecs() | |
87 | 144 | { |
88 | - delete ui; | |
145 | + Slider *slider = qobject_cast<Slider *>(focusWidget()); | |
146 | + if (slider) | |
147 | + { | |
148 | + if (slider == ui->configSlider_1) | |
149 | + ui->configButton_1->setFocus(); | |
150 | + else if (slider == ui->configSlider_2) | |
151 | + ui->configButton_2->setFocus(); | |
152 | + else if (slider == ui->configSlider_3) | |
153 | + ui->configButton_3->setFocus(); | |
154 | + else if (slider == ui->configSlider_4) | |
155 | + ui->configButton_4->setFocus(); | |
156 | + else if (slider == ui->configSlider_5) | |
157 | + ui->configButton_5->setFocus(); | |
158 | + | |
159 | + afterThreeSecsTimer.start(); | |
160 | + } | |
161 | + else | |
162 | + start(); | |
163 | +} | |
164 | + | |
165 | +void AutoCookConfigWindow::onEncoderLeft() | |
166 | +{ | |
167 | + focusPreviousChild(); | |
168 | +} | |
169 | + | |
170 | +void AutoCookConfigWindow::onEncoderRight() | |
171 | +{ | |
172 | + focusNextChild(); | |
173 | +} | |
174 | + | |
175 | +void AutoCookConfigWindow::onEncoderClicked(QWidget *clicked) | |
176 | +{ | |
177 | + if (clicked == NULL) | |
178 | + return; | |
179 | + | |
180 | + if (clicked->inherits("QPushButton")) | |
181 | + { | |
182 | + QPushButton *pb = qobject_cast<QPushButton *>(clicked); | |
183 | + if (pb) | |
184 | + pb->click(); | |
185 | + } | |
186 | + else if (clicked->inherits("Slider")) | |
187 | + { | |
188 | + Slider *slider = qobject_cast<Slider *>(clicked); | |
189 | + if (slider) | |
190 | + { | |
191 | + if (slider == ui->configSlider_1) | |
192 | + ui->configButton_1->setFocus(); | |
193 | + else if (slider == ui->configSlider_2) | |
194 | + ui->configButton_2->setFocus(); | |
195 | + else if (slider == ui->configSlider_3) | |
196 | + ui->configButton_3->setFocus(); | |
197 | + else if (slider == ui->configSlider_4) | |
198 | + ui->configButton_4->setFocus(); | |
199 | + else if (slider == ui->configSlider_5) | |
200 | + ui->configButton_5->setFocus(); | |
201 | + } | |
202 | + } | |
89 | 203 | } |
90 | 204 | |
91 | 205 | void AutoCookConfigWindow::setupUi() |
... | ... | @@ -111,7 +225,7 @@ void AutoCookConfigWindow::setupUi() |
111 | 225 | cw.button->setStyleSheet( |
112 | 226 | "QPushButton { image: url(" |
113 | 227 | + Define::icon(config.type) |
114 | - + ") } QPushButton::pressed { image: url(" | |
228 | + + ") } QPushButton:pressed, QPushButton:focus { image: url(" | |
115 | 229 | + Define::iconOverlay(config.type) |
116 | 230 | + ") }"); |
117 | 231 | |
... | ... | @@ -187,16 +301,6 @@ void AutoCookConfigWindow::updateConfig() |
187 | 301 | updateView(); |
188 | 302 | } |
189 | 303 | |
190 | -void AutoCookConfigWindow::startTimer() | |
191 | -{ | |
192 | - cookStartTimer.start(); | |
193 | -} | |
194 | - | |
195 | -void AutoCookConfigWindow::stopTimer() | |
196 | -{ | |
197 | - cookStartTimer.stop(); | |
198 | -} | |
199 | - | |
200 | 304 | void AutoCookConfigWindow::start() |
201 | 305 | { |
202 | 306 | AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook); |
... | ... | @@ -204,7 +308,7 @@ void AutoCookConfigWindow::start() |
204 | 308 | w->showFullScreen(); |
205 | 309 | w->raise(); |
206 | 310 | |
207 | - connect(w, SIGNAL(back()), SLOT(startTimer())); | |
311 | + connect(w, SIGNAL(back()), &afterThreeSecsTimer, SLOT(start())); | |
208 | 312 | } |
209 | 313 | |
210 | 314 | void AutoCookConfigWindow::addFavorite() |
... | ... | @@ -241,10 +345,10 @@ void AutoCookConfigWindow::on_favoritesButton_clicked() |
241 | 345 | |
242 | 346 | connect(p, SIGNAL(accepted()), SLOT(addFavorite())); |
243 | 347 | |
244 | - if (cookStartTimer.isActive()) | |
348 | + if (afterThreeSecsTimer.isActive()) | |
245 | 349 | { |
246 | - cookStartTimer.stop(); | |
247 | - connect(p, SIGNAL(rejected()), &cookStartTimer, SLOT(start())); | |
350 | + afterThreeSecsTimer.stop(); | |
351 | + connect(p, SIGNAL(rejected()), &afterThreeSecsTimer, SLOT(start())); | |
248 | 352 | } |
249 | 353 | } |
250 | 354 | |
... | ... | @@ -257,3 +361,28 @@ void AutoCookConfigWindow::on_washButton_clicked() |
257 | 361 | |
258 | 362 | MainWindow::jump(w); |
259 | 363 | } |
364 | + | |
365 | +void AutoCookConfigWindow::on_configButton_1_clicked() | |
366 | +{ | |
367 | + ui->configSlider_1->setFocus(); | |
368 | +} | |
369 | + | |
370 | +void AutoCookConfigWindow::on_configButton_2_clicked() | |
371 | +{ | |
372 | + ui->configSlider_2->setFocus(); | |
373 | +} | |
374 | + | |
375 | +void AutoCookConfigWindow::on_configButton_3_clicked() | |
376 | +{ | |
377 | + ui->configSlider_3->setFocus(); | |
378 | +} | |
379 | + | |
380 | +void AutoCookConfigWindow::on_configButton_4_clicked() | |
381 | +{ | |
382 | + ui->configSlider_4->setFocus(); | |
383 | +} | |
384 | + | |
385 | +void AutoCookConfigWindow::on_configButton_5_clicked() | |
386 | +{ | |
387 | + ui->configSlider_5->setFocus(); | |
388 | +} | ... | ... |
app/gui/oven_control/autocookconfigwindow.h
... | ... | @@ -24,13 +24,17 @@ public: |
24 | 24 | explicit AutoCookConfigWindow(QWidget *parent, Cook cook); |
25 | 25 | ~AutoCookConfigWindow(); |
26 | 26 | |
27 | + bool eventFilter(QObject *watched, QEvent *event); | |
28 | + | |
29 | +protected: | |
30 | + void keyPressEvent(QKeyEvent *event); | |
31 | + void keyReleaseEvent(QKeyEvent *event); | |
32 | + | |
27 | 33 | private: |
28 | 34 | Ui::AutoCookConfigWindow *ui; |
29 | 35 | Oven *oven; |
30 | 36 | Cook cook; |
31 | 37 | |
32 | - QTimer cookStartTimer; | |
33 | - | |
34 | 38 | struct ConfigWidget { |
35 | 39 | QPushButton *button; |
36 | 40 | QLabel *minimum; |
... | ... | @@ -41,19 +45,31 @@ private: |
41 | 45 | |
42 | 46 | QList<ConfigWidget> configWidgets; |
43 | 47 | |
48 | + QTimer afterThreeSecsTimer; | |
49 | + | |
50 | + QWidget *pushed = NULL; | |
51 | + | |
52 | + void onEncoderLeft(); | |
53 | + void onEncoderRight(); | |
54 | + void onEncoderClicked(QWidget *clicked); | |
55 | + | |
44 | 56 | private slots: |
45 | 57 | void setupUi(); |
46 | 58 | void updateView(); |
47 | 59 | void updateConfig(); |
48 | - void startTimer(); | |
49 | - void stopTimer(); | |
50 | 60 | void start(); |
51 | 61 | void addFavorite(); |
62 | + void afterThreeSecs(); | |
52 | 63 | |
53 | 64 | void on_backButton_clicked(); |
54 | 65 | void on_configButton_clicked(); |
55 | 66 | void on_favoritesButton_clicked(); |
56 | 67 | void on_washButton_clicked(); |
68 | + void on_configButton_1_clicked(); | |
69 | + void on_configButton_2_clicked(); | |
70 | + void on_configButton_3_clicked(); | |
71 | + void on_configButton_4_clicked(); | |
72 | + void on_configButton_5_clicked(); | |
57 | 73 | }; |
58 | 74 | |
59 | 75 | #endif // AUTOCOOKCONFIGWINDOW_H | ... | ... |
app/gui/oven_control/autocookconfigwindow.ui
... | ... | @@ -124,7 +124,7 @@ border: none; |
124 | 124 | </property> |
125 | 125 | <property name="styleSheet"> |
126 | 126 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/back.png); } |
127 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</string> | |
127 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/back_ov.png); }</string> | |
128 | 128 | </property> |
129 | 129 | <property name="text"> |
130 | 130 | <string/> |
... | ... | @@ -147,7 +147,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</str |
147 | 147 | </property> |
148 | 148 | <property name="styleSheet"> |
149 | 149 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/wash.png); } |
150 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); }</string> | |
150 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/wash_ov.png); }</string> | |
151 | 151 | </property> |
152 | 152 | <property name="text"> |
153 | 153 | <string/> |
... | ... | @@ -170,7 +170,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); }</str |
170 | 170 | </property> |
171 | 171 | <property name="styleSheet"> |
172 | 172 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/config.png); } |
173 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</string> | |
173 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/config_ov.png); }</string> | |
174 | 174 | </property> |
175 | 175 | <property name="text"> |
176 | 176 | <string/> |
... | ... | @@ -193,7 +193,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</s |
193 | 193 | </property> |
194 | 194 | <property name="styleSheet"> |
195 | 195 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/help.png); } |
196 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</string> | |
196 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/help_ov.png); }</string> | |
197 | 197 | </property> |
198 | 198 | <property name="text"> |
199 | 199 | <string/> |
... | ... | @@ -216,7 +216,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</str |
216 | 216 | </property> |
217 | 217 | <property name="styleSheet"> |
218 | 218 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/favorites.png); } |
219 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); }</string> | |
219 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/favorites_ov.png); }</string> | |
220 | 220 | </property> |
221 | 221 | <property name="text"> |
222 | 222 | <string/> |
... | ... | @@ -368,7 +368,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); } |
368 | 368 | <string notr="true">QPushButton { |
369 | 369 | border-image: url(:/images/button/288.png); |
370 | 370 | } |
371 | -QPushButton::pressed { | |
371 | +QPushButton::pressed, QPushButton:focus { | |
372 | 372 | border-image: url(:/images/button/288_ov.png); |
373 | 373 | }</string> |
374 | 374 | </property> |
... | ... | @@ -639,7 +639,7 @@ border-image: url(:/images/button/288_ov.png); |
639 | 639 | <string notr="true">QPushButton { |
640 | 640 | border-image: url(:/images/button/152.png); |
641 | 641 | } |
642 | -QPushButton::pressed { | |
642 | +QPushButton::pressed, QPushButton:focus { | |
643 | 643 | border-image: url(:/images/button/152_ov.png); |
644 | 644 | }</string> |
645 | 645 | </property> |
... | ... | @@ -1326,51 +1326,66 @@ border-image: url(:/images/button/152_ov.png); |
1326 | 1326 | <property name="geometry"> |
1327 | 1327 | <rect> |
1328 | 1328 | <x>185</x> |
1329 | - <y>605</y> | |
1329 | + <y>645</y> | |
1330 | 1330 | <width>666</width> |
1331 | - <height>140</height> | |
1331 | + <height>60</height> | |
1332 | 1332 | </rect> |
1333 | 1333 | </property> |
1334 | + <property name="focusPolicy"> | |
1335 | + <enum>Qt::ClickFocus</enum> | |
1336 | + </property> | |
1334 | 1337 | </widget> |
1335 | 1338 | <widget class="Slider" name="configSlider_2" native="true"> |
1336 | 1339 | <property name="geometry"> |
1337 | 1340 | <rect> |
1338 | 1341 | <x>185</x> |
1339 | - <y>765</y> | |
1342 | + <y>805</y> | |
1340 | 1343 | <width>666</width> |
1341 | - <height>140</height> | |
1344 | + <height>60</height> | |
1342 | 1345 | </rect> |
1343 | 1346 | </property> |
1347 | + <property name="focusPolicy"> | |
1348 | + <enum>Qt::ClickFocus</enum> | |
1349 | + </property> | |
1344 | 1350 | </widget> |
1345 | 1351 | <widget class="Slider" name="configSlider_3" native="true"> |
1346 | 1352 | <property name="geometry"> |
1347 | 1353 | <rect> |
1348 | 1354 | <x>185</x> |
1349 | - <y>935</y> | |
1355 | + <y>975</y> | |
1350 | 1356 | <width>666</width> |
1351 | - <height>140</height> | |
1357 | + <height>60</height> | |
1352 | 1358 | </rect> |
1353 | 1359 | </property> |
1360 | + <property name="focusPolicy"> | |
1361 | + <enum>Qt::ClickFocus</enum> | |
1362 | + </property> | |
1354 | 1363 | </widget> |
1355 | 1364 | <widget class="Slider" name="configSlider_4" native="true"> |
1356 | 1365 | <property name="geometry"> |
1357 | 1366 | <rect> |
1358 | 1367 | <x>185</x> |
1359 | - <y>1115</y> | |
1368 | + <y>1155</y> | |
1360 | 1369 | <width>666</width> |
1361 | - <height>140</height> | |
1370 | + <height>60</height> | |
1362 | 1371 | </rect> |
1363 | 1372 | </property> |
1373 | + <property name="focusPolicy"> | |
1374 | + <enum>Qt::ClickFocus</enum> | |
1375 | + </property> | |
1364 | 1376 | </widget> |
1365 | 1377 | <widget class="Slider" name="configSlider_5" native="true"> |
1366 | 1378 | <property name="geometry"> |
1367 | 1379 | <rect> |
1368 | 1380 | <x>185</x> |
1369 | - <y>1285</y> | |
1381 | + <y>1325</y> | |
1370 | 1382 | <width>666</width> |
1371 | - <height>140</height> | |
1383 | + <height>60</height> | |
1372 | 1384 | </rect> |
1373 | 1385 | </property> |
1386 | + <property name="focusPolicy"> | |
1387 | + <enum>Qt::ClickFocus</enum> | |
1388 | + </property> | |
1374 | 1389 | </widget> |
1375 | 1390 | </widget> |
1376 | 1391 | </widget> |
... | ... | @@ -1393,6 +1408,20 @@ border-image: url(:/images/button/152_ov.png); |
1393 | 1408 | <container>1</container> |
1394 | 1409 | </customwidget> |
1395 | 1410 | </customwidgets> |
1411 | + <tabstops> | |
1412 | + <tabstop>selectCookButton</tabstop> | |
1413 | + <tabstop>pushButton_4</tabstop> | |
1414 | + <tabstop>configButton_1</tabstop> | |
1415 | + <tabstop>configButton_2</tabstop> | |
1416 | + <tabstop>configButton_3</tabstop> | |
1417 | + <tabstop>configButton_4</tabstop> | |
1418 | + <tabstop>configButton_5</tabstop> | |
1419 | + <tabstop>backButton</tabstop> | |
1420 | + <tabstop>configButton</tabstop> | |
1421 | + <tabstop>favoritesButton</tabstop> | |
1422 | + <tabstop>washButton</tabstop> | |
1423 | + <tabstop>helpButton</tabstop> | |
1424 | + </tabstops> | |
1396 | 1425 | <resources> |
1397 | 1426 | <include location="resources.qrc"/> |
1398 | 1427 | </resources> | ... | ... |