Commit 271dda4aeeda7c4b1af130baa230894c91700b09
1 parent
40f5d047f8
Exists in
master
and in
2 other branches
엔코더 구현
- 수동 요리 - 세척 모드
Showing
19 changed files
with
1257 additions
and
375 deletions
Show diff stats
app/gui/oven_control/confirmpopup.cpp
1 | 1 | #include "confirmpopup.h" |
2 | 2 | #include "ui_confirmpopup.h" |
3 | 3 | |
4 | +#include <QKeyEvent> | |
5 | + | |
4 | 6 | #include "soundplayer.h" |
5 | 7 | |
6 | 8 | ConfirmPopup::ConfirmPopup(QWidget *parent, QString text) : |
... | ... | @@ -12,6 +14,8 @@ ConfirmPopup::ConfirmPopup(QWidget *parent, QString text) : |
12 | 14 | |
13 | 15 | foreach (QPushButton *button, findChildren<QPushButton *>()) |
14 | 16 | connect(button, &QPushButton::pressed, SoundPlayer::playClick); |
17 | + | |
18 | + setFocus(); | |
15 | 19 | } |
16 | 20 | |
17 | 21 | ConfirmPopup::~ConfirmPopup() |
... | ... | @@ -19,6 +23,41 @@ ConfirmPopup::~ConfirmPopup() |
19 | 23 | delete ui; |
20 | 24 | } |
21 | 25 | |
26 | +void ConfirmPopup::keyPressEvent(QKeyEvent *event) | |
27 | +{ | |
28 | + switch (event->key()) | |
29 | + { | |
30 | + case 0x01000030: // Turn left | |
31 | + onEncoderLeft(); | |
32 | + break; | |
33 | + case 0x01000031: // Push | |
34 | + pushed = focusWidget(); | |
35 | + break; | |
36 | + case 0x01000032: // Turn right | |
37 | + onEncoderRight(); | |
38 | + break; | |
39 | + } | |
40 | +} | |
41 | + | |
42 | +void ConfirmPopup::keyReleaseEvent(QKeyEvent *event) | |
43 | +{ | |
44 | + switch (event->key()) | |
45 | + { | |
46 | + case 0x01000030: // Turn left | |
47 | + onEncoderLeft(); | |
48 | + break; | |
49 | + case 0x01000031: // Push | |
50 | + if (focusWidget() == pushed) | |
51 | + onEncoderClicked(pushed); | |
52 | + | |
53 | + pushed = NULL; | |
54 | + break; | |
55 | + case 0x01000032: // Turn right | |
56 | + onEncoderRight(); | |
57 | + break; | |
58 | + } | |
59 | +} | |
60 | + | |
22 | 61 | void ConfirmPopup::on_okButton_clicked() |
23 | 62 | { |
24 | 63 | deleteLater(); |
... | ... | @@ -30,3 +69,28 @@ void ConfirmPopup::on_cancelButton_clicked() |
30 | 69 | deleteLater(); |
31 | 70 | emit rejected(); |
32 | 71 | } |
72 | + | |
73 | +void ConfirmPopup::onEncoderLeft() | |
74 | +{ | |
75 | + QWidget *focused = focusWidget(); | |
76 | + if (focused == this || focused == ui->okButton) | |
77 | + ui->cancelButton->setFocus(); | |
78 | + else | |
79 | + focusPreviousChild(); | |
80 | +} | |
81 | + | |
82 | +void ConfirmPopup::onEncoderRight() | |
83 | +{ | |
84 | + QWidget *focused = focusWidget(); | |
85 | + if (focused == this || focused == ui->cancelButton) | |
86 | + ui->okButton->setFocus(); | |
87 | + else | |
88 | + focusNextChild(); | |
89 | +} | |
90 | + | |
91 | +void ConfirmPopup::onEncoderClicked(QWidget *clicked) | |
92 | +{ | |
93 | + QPushButton *b = qobject_cast<QPushButton *>(clicked); | |
94 | + if (b) | |
95 | + b->click(); | |
96 | +} | ... | ... |
app/gui/oven_control/confirmpopup.h
... | ... | @@ -19,6 +19,10 @@ public: |
19 | 19 | explicit ConfirmPopup(QWidget *parent, QString text); |
20 | 20 | ~ConfirmPopup(); |
21 | 21 | |
22 | +protected: | |
23 | + void keyPressEvent(QKeyEvent *event); | |
24 | + void keyReleaseEvent(QKeyEvent *event); | |
25 | + | |
22 | 26 | private slots: |
23 | 27 | void on_okButton_clicked(); |
24 | 28 | |
... | ... | @@ -26,6 +30,12 @@ private slots: |
26 | 30 | |
27 | 31 | private: |
28 | 32 | Ui::ConfirmPopup *ui; |
33 | + | |
34 | + QWidget *pushed = NULL; | |
35 | + | |
36 | + void onEncoderLeft(); | |
37 | + void onEncoderRight(); | |
38 | + void onEncoderClicked(QWidget *clicked); | |
29 | 39 | }; |
30 | 40 | |
31 | 41 | #endif // CONFIRMPOPUP_H | ... | ... |
app/gui/oven_control/cooldownpopup.cpp
1 | 1 | #include "cooldownpopup.h" |
2 | 2 | #include "ui_cooldownpopup.h" |
3 | 3 | |
4 | +#include <QKeyEvent> | |
5 | + | |
4 | 6 | #include "soundplayer.h" |
5 | 7 | #include "stringer.h" |
6 | 8 | |
... | ... | @@ -57,6 +59,14 @@ CooldownPopup::CooldownPopup(QWidget *parent, Oven *oven) : |
57 | 59 | |
58 | 60 | foreach (QPushButton *button, findChildren<QPushButton *>()) |
59 | 61 | connect(button, &QPushButton::pressed, SoundPlayer::playClick); |
62 | + | |
63 | + focusTempButtonTimer.setSingleShot(true); | |
64 | + focusTempButtonTimer.setInterval(3000); | |
65 | + connect(&focusTempButtonTimer, SIGNAL(timeout()), SLOT(focusTempButton())); | |
66 | + | |
67 | + connect(ui->tempSlider, SIGNAL(sliderMoved(int)), &focusTempButtonTimer, SLOT(start())); | |
68 | + | |
69 | + ui->background->setFocus(); | |
60 | 70 | } |
61 | 71 | |
62 | 72 | CooldownPopup::~CooldownPopup() |
... | ... | @@ -64,6 +74,41 @@ CooldownPopup::~CooldownPopup() |
64 | 74 | delete ui; |
65 | 75 | } |
66 | 76 | |
77 | +void CooldownPopup::keyPressEvent(QKeyEvent *event) | |
78 | +{ | |
79 | + switch (event->key()) | |
80 | + { | |
81 | + case 0x01000030: // Turn left | |
82 | + onEncoderLeft(); | |
83 | + break; | |
84 | + case 0x01000031: // Push | |
85 | + pushed = focusWidget(); | |
86 | + break; | |
87 | + case 0x01000032: // Turn right | |
88 | + onEncoderRight(); | |
89 | + break; | |
90 | + } | |
91 | +} | |
92 | + | |
93 | +void CooldownPopup::keyReleaseEvent(QKeyEvent *event) | |
94 | +{ | |
95 | + switch (event->key()) | |
96 | + { | |
97 | + case 0x01000030: // Turn left | |
98 | + onEncoderLeft(); | |
99 | + break; | |
100 | + case 0x01000031: // Push | |
101 | + if (focusWidget() == pushed) | |
102 | + onEncoderClicked(pushed); | |
103 | + | |
104 | + pushed = NULL; | |
105 | + break; | |
106 | + case 0x01000032: // Turn right | |
107 | + onEncoderRight(); | |
108 | + break; | |
109 | + } | |
110 | +} | |
111 | + | |
67 | 112 | void CooldownPopup::start() |
68 | 113 | { |
69 | 114 | started = true; |
... | ... | @@ -95,10 +140,8 @@ void CooldownPopup::updateView() |
95 | 140 | int temp; |
96 | 141 | if (showingCurrentTemp) |
97 | 142 | temp = oven->currentTemp(); |
98 | - else if (ui->tempSlider->isSliderDown()) | |
99 | - temp = ui->tempSlider->sliderPosition(); | |
100 | 143 | else |
101 | - temp = ui->tempSlider->value(); | |
144 | + temp = ui->tempSlider->sliderPosition(); | |
102 | 145 | |
103 | 146 | ui->tempCurrentLabel->setText(Stringer::temperature(temp, Stringer::fontSize14)); |
104 | 147 | |
... | ... | @@ -129,11 +172,7 @@ void CooldownPopup::updateView() |
129 | 172 | if (lastDisplayedHumidification != oven->humidification()) |
130 | 173 | { |
131 | 174 | lastDisplayedHumidification = oven->humidification(); |
132 | - | |
133 | - if (oven->humidification()) | |
134 | - ui->humidificationButton->setStyleSheet("background-image: url(:/images/cooldown/side_nozzle_ov.png);"); | |
135 | - else | |
136 | - ui->humidificationButton->setStyleSheet("background-image: url(:/images/cooldown/side_nozzle.png);"); | |
175 | + ui->humidificationButton->setChecked(oven->humidification()); | |
137 | 176 | } |
138 | 177 | |
139 | 178 | if (started && !oven->door()) |
... | ... | @@ -227,3 +266,50 @@ void CooldownPopup::on_humidificationButton_clicked() |
227 | 266 | else |
228 | 267 | oven->startHumidification(); |
229 | 268 | } |
269 | + | |
270 | +void CooldownPopup::on_tempButton_clicked() | |
271 | +{ | |
272 | + ui->tempSlider->setFocus(); | |
273 | + focusTempButtonTimer.start(); | |
274 | +} | |
275 | + | |
276 | +void CooldownPopup::focusTempButton() | |
277 | +{ | |
278 | + if (focusWidget() == ui->tempSlider) | |
279 | + ui->tempButton->setFocus(); | |
280 | +} | |
281 | + | |
282 | +void CooldownPopup::onEncoderLeft() | |
283 | +{ | |
284 | + QWidget *focused = focusWidget(); | |
285 | + if (focused == ui->background) | |
286 | + ui->humidificationButton->setFocus(); | |
287 | + else | |
288 | + focusPreviousChild(); | |
289 | +} | |
290 | + | |
291 | +void CooldownPopup::onEncoderRight() | |
292 | +{ | |
293 | + if (focusWidget() == ui->humidificationButton) | |
294 | + ui->background->setFocus(); | |
295 | + else | |
296 | + focusNextChild(); | |
297 | +} | |
298 | + | |
299 | +void CooldownPopup::onEncoderClicked(QWidget *clicked) | |
300 | +{ | |
301 | + if (clicked == ui->background) | |
302 | + close(); | |
303 | + else if (clicked->inherits("QPushButton")) | |
304 | + { | |
305 | + QPushButton *b = qobject_cast<QPushButton *>(clicked); | |
306 | + if (b) | |
307 | + b->click(); | |
308 | + } | |
309 | + else if (clicked->inherits("Slider")) | |
310 | + { | |
311 | + Slider *slider = qobject_cast<Slider *>(clicked); | |
312 | + if (slider == ui->tempSlider) | |
313 | + ui->tempButton->setFocus(); | |
314 | + } | |
315 | +} | ... | ... |
app/gui/oven_control/cooldownpopup.h
... | ... | @@ -18,6 +18,10 @@ public: |
18 | 18 | explicit CooldownPopup(QWidget *parent = 0, Oven *oven = 0); |
19 | 19 | ~CooldownPopup(); |
20 | 20 | |
21 | +protected: | |
22 | + void keyPressEvent(QKeyEvent *event); | |
23 | + void keyReleaseEvent(QKeyEvent *event); | |
24 | + | |
21 | 25 | private slots: |
22 | 26 | void start(); |
23 | 27 | void stop(); |
... | ... | @@ -39,6 +43,10 @@ private slots: |
39 | 43 | |
40 | 44 | void on_humidificationButton_clicked(); |
41 | 45 | |
46 | + void on_tempButton_clicked(); | |
47 | + | |
48 | + void focusTempButton(); | |
49 | + | |
42 | 50 | private: |
43 | 51 | Ui::CooldownPopup *ui; |
44 | 52 | Oven *oven; |
... | ... | @@ -56,6 +64,13 @@ private: |
56 | 64 | |
57 | 65 | int lastDisplayedFanLevel; |
58 | 66 | bool lastDisplayedHumidification; |
67 | + | |
68 | + QTimer focusTempButtonTimer; | |
69 | + QWidget *pushed = NULL; | |
70 | + | |
71 | + void onEncoderLeft(); | |
72 | + void onEncoderRight(); | |
73 | + void onEncoderClicked(QWidget *clicked); | |
59 | 74 | }; |
60 | 75 | |
61 | 76 | #endif // COOLDOWNPOPUP_H | ... | ... |
app/gui/oven_control/cooldownpopup.ui
... | ... | @@ -14,6 +14,7 @@ |
14 | 14 | <string notr="true">#closeButton { border: none; } |
15 | 15 | #closeButton_2 { border: none; } |
16 | 16 | #background { background-image: url(:/images/background/popup/373.png); } |
17 | +#background:focus { border: 4px solid gray; } | |
17 | 18 | |
18 | 19 | QPushButton { |
19 | 20 | background-position: center; |
... | ... | @@ -85,6 +86,9 @@ height: 33px; |
85 | 86 | <height>373</height> |
86 | 87 | </rect> |
87 | 88 | </property> |
89 | + <property name="focusPolicy"> | |
90 | + <enum>Qt::TabFocus</enum> | |
91 | + </property> | |
88 | 92 | <widget class="QPushButton" name="tempButton"> |
89 | 93 | <property name="geometry"> |
90 | 94 | <rect> |
... | ... | @@ -96,7 +100,7 @@ height: 33px; |
96 | 100 | </property> |
97 | 101 | <property name="styleSheet"> |
98 | 102 | <string notr="true">QPushButton { image: url(:/images/slider_icon/cooldown.png); } |
99 | -QPushButton::pressed { image: url(:/images/slider_icon/cooldown_ov.png); }</string> | |
103 | +QPushButton::pressed, QPushButton:focus { image: url(:/images/slider_icon/cooldown_ov.png); }</string> | |
100 | 104 | </property> |
101 | 105 | <property name="text"> |
102 | 106 | <string notr="true"/> |
... | ... | @@ -116,7 +120,7 @@ QPushButton::pressed { image: url(:/images/slider_icon/cooldown_ov.png); }</stri |
116 | 120 | </property> |
117 | 121 | <property name="styleSheet"> |
118 | 122 | <string notr="true">QPushButton { background-image: url(:/images/cooldown/run.png); } |
119 | -QPushButton:pressed { background-image: url(:/images/cooldown/run_ov.png); }</string> | |
123 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cooldown/run_ov.png); }</string> | |
120 | 124 | </property> |
121 | 125 | <property name="text"> |
122 | 126 | <string/> |
... | ... | @@ -149,11 +153,15 @@ QPushButton:pressed { background-image: url(:/images/cooldown/run_ov.png); }</st |
149 | 153 | </property> |
150 | 154 | <property name="styleSheet"> |
151 | 155 | <string notr="true">QPushButton { background-image: url(:/images/cooldown/side_nozzle.png); } |
152 | -QPushButton:pressed { background-image: url(:/images/cooldown/side_nozzle_ov.png); }</string> | |
156 | +QPushButton:checked { background-image: url(:/images/cooldown/side_nozzle_ov.png); } | |
157 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cooldown/side_nozzle_ov.png); }</string> | |
153 | 158 | </property> |
154 | 159 | <property name="text"> |
155 | 160 | <string/> |
156 | 161 | </property> |
162 | + <property name="checkable"> | |
163 | + <bool>true</bool> | |
164 | + </property> | |
157 | 165 | </widget> |
158 | 166 | <widget class="QLabel" name="tempMaxLabel"> |
159 | 167 | <property name="enabled"> | ... | ... |
app/gui/oven_control/coretempsettingpopup.cpp
1 | 1 | #include "coretempsettingpopup.h" |
2 | 2 | #include "ui_coretempsettingpopup.h" |
3 | 3 | |
4 | +#include <QKeyEvent> | |
5 | + | |
4 | 6 | #include "config.h" |
5 | 7 | #include "soundplayer.h" |
6 | 8 | #include "stringer.h" |
... | ... | @@ -77,6 +79,14 @@ CoreTempSettingPopup::CoreTempSettingPopup(QWidget *parent) : |
77 | 79 | connect(button, &QPushButton::pressed, SoundPlayer::playClick); |
78 | 80 | |
79 | 81 | updateView(); |
82 | + | |
83 | + ui->background->setFocus(); | |
84 | + | |
85 | + focusCoreTempButtonTimer.setSingleShot(true); | |
86 | + focusCoreTempButtonTimer.setInterval(3000); | |
87 | + connect(&focusCoreTempButtonTimer, SIGNAL(timeout()), SLOT(focusCoreTempButton())); | |
88 | + | |
89 | + connect(ui->coreTempSlider, SIGNAL(sliderMoved(int)), &focusCoreTempButtonTimer, SLOT(start())); | |
80 | 90 | } |
81 | 91 | |
82 | 92 | CoreTempSettingPopup::~CoreTempSettingPopup() |
... | ... | @@ -84,6 +94,90 @@ CoreTempSettingPopup::~CoreTempSettingPopup() |
84 | 94 | delete ui; |
85 | 95 | } |
86 | 96 | |
97 | +void CoreTempSettingPopup::keyPressEvent(QKeyEvent *event) | |
98 | +{ | |
99 | + switch (event->key()) | |
100 | + { | |
101 | + case 0x01000030: // Turn left | |
102 | + onEncoderLeft(); | |
103 | + break; | |
104 | + case 0x01000031: // Push | |
105 | + pushed = focusWidget(); | |
106 | + break; | |
107 | + case 0x01000032: // Turn right | |
108 | + onEncoderRight(); | |
109 | + break; | |
110 | + } | |
111 | +} | |
112 | + | |
113 | +void CoreTempSettingPopup::keyReleaseEvent(QKeyEvent *event) | |
114 | +{ | |
115 | + switch (event->key()) | |
116 | + { | |
117 | + case 0x01000030: // Turn left | |
118 | + onEncoderLeft(); | |
119 | + break; | |
120 | + case 0x01000031: // Push | |
121 | + if (focusWidget() == pushed) | |
122 | + onEncoderClicked(pushed); | |
123 | + | |
124 | + pushed = NULL; | |
125 | + break; | |
126 | + case 0x01000032: // Turn right | |
127 | + onEncoderRight(); | |
128 | + break; | |
129 | + } | |
130 | +} | |
131 | + | |
132 | +void CoreTempSettingPopup::onEncoderLeft() | |
133 | +{ | |
134 | + QWidget *focused = focusWidget(); | |
135 | + if (focused == ui->background) | |
136 | + ui->applyButton->setFocus(); | |
137 | + else if (focused->inherits("QPushButton")) | |
138 | + focusPreviousChild(); | |
139 | +} | |
140 | + | |
141 | +void CoreTempSettingPopup::onEncoderRight() | |
142 | +{ | |
143 | + QWidget *focused = focusWidget(); | |
144 | + if (focused == ui->applyButton) | |
145 | + ui->background->setFocus(); | |
146 | + else if (focused == ui->background || focused->inherits("QPushButton")) | |
147 | + focusNextChild(); | |
148 | +} | |
149 | + | |
150 | +void CoreTempSettingPopup::onEncoderClicked(QWidget *clicked) | |
151 | +{ | |
152 | + QWidget *focused = clicked; | |
153 | + if (focused == ui->background) | |
154 | + close(); | |
155 | + else if (focused->inherits("QPushButton")) | |
156 | + { | |
157 | + QPushButton *pb = qobject_cast<QPushButton *>(focused); | |
158 | + if (pb) | |
159 | + pb->click(); | |
160 | + } | |
161 | + else if (focused->inherits("Slider")) | |
162 | + { | |
163 | + Slider *slider = qobject_cast<Slider *>(focused); | |
164 | + if (slider) | |
165 | + { | |
166 | + if (slider->value() != slider->sliderPosition()) | |
167 | + slider->setValue(slider->sliderPosition()); | |
168 | + | |
169 | + if (slider == ui->coreTempSlider) | |
170 | + ui->coreTempButton->setFocus(); | |
171 | + } | |
172 | + } | |
173 | +} | |
174 | + | |
175 | +void CoreTempSettingPopup::focusCoreTempButton() | |
176 | +{ | |
177 | + if (focusWidget() == ui->coreTempSlider) | |
178 | + ui->coreTempButton->setFocus(); | |
179 | +} | |
180 | + | |
87 | 181 | void CoreTempSettingPopup::updateView() |
88 | 182 | { |
89 | 183 | int coreTemp = ui->coreTempSlider->sliderPosition(); |
... | ... | @@ -117,3 +211,9 @@ void CoreTempSettingPopup::on_applyButton_clicked() |
117 | 211 | oven->setInterTempEnabled(true); |
118 | 212 | close(); |
119 | 213 | } |
214 | + | |
215 | +void CoreTempSettingPopup::on_coreTempButton_clicked() | |
216 | +{ | |
217 | + ui->coreTempSlider->setFocus(); | |
218 | + focusCoreTempButtonTimer.start(); | |
219 | +} | ... | ... |
app/gui/oven_control/coretempsettingpopup.h
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 | #define CORETEMPSETTINGPOPUP_H |
3 | 3 | |
4 | 4 | #include <QWidget> |
5 | +#include <QTimer> | |
5 | 6 | |
6 | 7 | #include "oven.h" |
7 | 8 | |
... | ... | @@ -17,14 +18,28 @@ public: |
17 | 18 | explicit CoreTempSettingPopup(QWidget *parent = 0); |
18 | 19 | ~CoreTempSettingPopup(); |
19 | 20 | |
21 | +protected: | |
22 | + void keyPressEvent(QKeyEvent *event); | |
23 | + void keyReleaseEvent(QKeyEvent *event); | |
24 | + | |
20 | 25 | private: |
21 | 26 | Ui::CoreTempSettingPopup *ui; |
22 | 27 | Oven *oven; |
23 | 28 | |
29 | + QTimer focusCoreTempButtonTimer; | |
30 | + QWidget *pushed = NULL; | |
31 | + | |
32 | + void onEncoderLeft(); | |
33 | + void onEncoderRight(); | |
34 | + void onEncoderClicked(QWidget *clicked); | |
35 | + | |
36 | + | |
24 | 37 | private slots: |
25 | 38 | void updateView(); |
26 | 39 | void on_cancelButton_clicked(); |
27 | 40 | void on_applyButton_clicked(); |
41 | + void on_coreTempButton_clicked(); | |
42 | + void focusCoreTempButton(); | |
28 | 43 | }; |
29 | 44 | |
30 | 45 | #endif // CORETEMPSETTINGPOPUP_H | ... | ... |
app/gui/oven_control/coretempsettingpopup.ui
... | ... | @@ -13,9 +13,15 @@ |
13 | 13 | <property name="styleSheet"> |
14 | 14 | <string notr="true">#background { |
15 | 15 | background-image: url(:/images/background/manual_core.png); |
16 | +background-origin: border; | |
16 | 17 | margin-top: -720px; |
17 | 18 | } |
18 | 19 | |
20 | +#background:focus { | |
21 | +border: 4px solid gray; | |
22 | +border-top: 724px solid gray; | |
23 | +} | |
24 | + | |
19 | 25 | QPushButton[style="icon"] { |
20 | 26 | background-image: url(:/images/slider_icon/background.png); |
21 | 27 | background-repeat: no-repeat; |
... | ... | @@ -61,6 +67,9 @@ height: 33px; |
61 | 67 | <height>730</height> |
62 | 68 | </rect> |
63 | 69 | </property> |
70 | + <property name="focusPolicy"> | |
71 | + <enum>Qt::TabFocus</enum> | |
72 | + </property> | |
64 | 73 | </widget> |
65 | 74 | <widget class="QLabel" name="label_2"> |
66 | 75 | <property name="geometry"> |
... | ... | @@ -150,7 +159,7 @@ height: 33px; |
150 | 159 | </property> |
151 | 160 | <property name="styleSheet"> |
152 | 161 | <string notr="true">QPushButton { background-image: url(:/images/manual_button/ok.png); } |
153 | -QPushButton:pressed { background-image: url(:/images/manual_button/ok_ov.png); }</string> | |
162 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_button/ok_ov.png); }</string> | |
154 | 163 | </property> |
155 | 164 | <property name="text"> |
156 | 165 | <string>확인/적용하기</string> |
... | ... | @@ -437,7 +446,8 @@ QPushButton:pressed { background-image: url(:/images/manual_button/ok_ov.png); } |
437 | 446 | </property> |
438 | 447 | <property name="styleSheet"> |
439 | 448 | <string notr="true">QPushButton { image: url(:/images/slider_icon/core_temp_enabled.png); } |
440 | -QPushButton:pressed { image: url(:/images/slider_icon/core_temp_ov.png); }</string> | |
449 | +QPushButton:checked { image: url(:/images/slider_icon/core_temp_ov.png); } | |
450 | +QPushButton:pressed, QPushButton:focus { image: url(:/images/slider_icon/core_temp_ov.png); }</string> | |
441 | 451 | </property> |
442 | 452 | <property name="style" stdset="0"> |
443 | 453 | <string>icon</string> |
... | ... | @@ -657,7 +667,7 @@ QPushButton:pressed { image: url(:/images/slider_icon/core_temp_ov.png); }</stri |
657 | 667 | </property> |
658 | 668 | <property name="styleSheet"> |
659 | 669 | <string notr="true">QPushButton { background-image: url(:/images/manual_button/back.png); } |
660 | -QPushButton:pressed { background-image: url(:/images/manual_button/back_ov.png); }</string> | |
670 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_button/back_ov.png); }</string> | |
661 | 671 | </property> |
662 | 672 | <property name="text"> |
663 | 673 | <string>이전으로</string> |
... | ... | @@ -1004,6 +1014,9 @@ QPushButton:pressed { background-image: url(:/images/manual_button/back_ov.png); |
1004 | 1014 | <height>140</height> |
1005 | 1015 | </rect> |
1006 | 1016 | </property> |
1017 | + <property name="focusPolicy"> | |
1018 | + <enum>Qt::ClickFocus</enum> | |
1019 | + </property> | |
1007 | 1020 | </widget> |
1008 | 1021 | </widget> |
1009 | 1022 | <customwidgets> |
... | ... | @@ -1014,6 +1027,12 @@ QPushButton:pressed { background-image: url(:/images/manual_button/back_ov.png); |
1014 | 1027 | <container>1</container> |
1015 | 1028 | </customwidget> |
1016 | 1029 | </customwidgets> |
1030 | + <tabstops> | |
1031 | + <tabstop>background</tabstop> | |
1032 | + <tabstop>coreTempButton</tabstop> | |
1033 | + <tabstop>cancelButton</tabstop> | |
1034 | + <tabstop>applyButton</tabstop> | |
1035 | + </tabstops> | |
1017 | 1036 | <resources> |
1018 | 1037 | <include location="resources.qrc"/> |
1019 | 1038 | </resources> | ... | ... |
app/gui/oven_control/manualcookwindow.cpp
... | ... | @@ -125,6 +125,27 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) : |
125 | 125 | showCurrentTempTimer.setInterval(1000); |
126 | 126 | connect(&showCurrentTempTimer, SIGNAL(timeout()), SLOT(showCurrentTemp())); |
127 | 127 | |
128 | + focusHumidityButtonTimer.setSingleShot(true); | |
129 | + focusHumidityButtonTimer.setInterval(3000); | |
130 | + connect(&focusHumidityButtonTimer, SIGNAL(timeout()), SLOT(focusHumidityButton())); | |
131 | + | |
132 | + focusTempButtonTimer.setSingleShot(true); | |
133 | + focusTempButtonTimer.setInterval(3000); | |
134 | + connect(&focusTempButtonTimer, SIGNAL(timeout()), SLOT(focusTempButton())); | |
135 | + | |
136 | + focusTimeButtonTimer.setSingleShot(true); | |
137 | + focusTimeButtonTimer.setInterval(3000); | |
138 | + connect(&focusTimeButtonTimer, SIGNAL(timeout()), SLOT(focusTimeButton())); | |
139 | + | |
140 | + focusInterTempButtonTimer.setSingleShot(true); | |
141 | + focusInterTempButtonTimer.setInterval(3000); | |
142 | + connect(&focusInterTempButtonTimer, SIGNAL(timeout()), SLOT(focusInterTempButton())); | |
143 | + | |
144 | + connect(ui->humiditySlider, SIGNAL(sliderMoved(int)), &focusHumidityButtonTimer, SLOT(start())); | |
145 | + connect(ui->tempSlider, SIGNAL(sliderMoved(int)), &focusTempButtonTimer, SLOT(start())); | |
146 | + connect(ui->timeSlider, SIGNAL(sliderMoved(int)), &focusTimeButtonTimer, SLOT(start())); | |
147 | + connect(ui->interTempSlider, SIGNAL(sliderMoved(int)), &focusInterTempButtonTimer, SLOT(start())); | |
148 | + | |
128 | 149 | connect(oven, SIGNAL(changed(Oven*)), this, SLOT(onOvenUpdated(Oven*))); |
129 | 150 | oven->setDefault(mode); |
130 | 151 | |
... | ... | @@ -135,6 +156,8 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) : |
135 | 156 | connect(button, &QPushButton::pressed, SoundPlayer::playClick); |
136 | 157 | |
137 | 158 | QTimer::singleShot(0, this, SLOT(setupAnimation())); |
159 | + | |
160 | + setFocus(); | |
138 | 161 | } |
139 | 162 | |
140 | 163 | ManualCookWindow::ManualCookWindow(QWidget *parent, ManualCookSetting setting) |
... | ... | @@ -159,6 +182,55 @@ ManualCookWindow::~ManualCookWindow() |
159 | 182 | delete ui; |
160 | 183 | } |
161 | 184 | |
185 | +void ManualCookWindow::keyPressEvent(QKeyEvent *event) | |
186 | +{ | |
187 | + switch (event->key()) | |
188 | + { | |
189 | + case 0x01000030: // Turn left | |
190 | + onEncoderLeft(); | |
191 | + break; | |
192 | + case 0x01000031: // Push | |
193 | + if (focusWidget() != this) | |
194 | + { | |
195 | + pushed = focusWidget(); | |
196 | + | |
197 | + if (pushed == ui->humidityButton) | |
198 | + on_humidityButton_pressed(); | |
199 | + else if (pushed == ui->tempButton) | |
200 | + on_tempButton_pressed(); | |
201 | + | |
202 | + } | |
203 | + break; | |
204 | + case 0x01000032: // Turn right | |
205 | + onEncoderRight(); | |
206 | + break; | |
207 | + } | |
208 | +} | |
209 | + | |
210 | +void ManualCookWindow::keyReleaseEvent(QKeyEvent *event) | |
211 | +{ | |
212 | + switch (event->key()) | |
213 | + { | |
214 | + case 0x01000030: // Turn left | |
215 | + onEncoderLeft(); | |
216 | + break; | |
217 | + case 0x01000031: // Push | |
218 | + if (focusWidget() == ui->humidityButton) | |
219 | + on_humidityButton_released(); | |
220 | + else if (focusWidget() == ui->tempButton) | |
221 | + on_tempButton_released(); | |
222 | + | |
223 | + if (focusWidget() == pushed) | |
224 | + onEncoderClicked(pushed); | |
225 | + | |
226 | + pushed = NULL; | |
227 | + break; | |
228 | + case 0x01000032: // Turn right | |
229 | + onEncoderRight(); | |
230 | + break; | |
231 | + } | |
232 | +} | |
233 | + | |
162 | 234 | void ManualCookWindow::setupAnimation() |
163 | 235 | { |
164 | 236 | ui->openDoorAnimation->load(":/images/animation/door_big_09.png"); |
... | ... | @@ -178,16 +250,28 @@ void ManualCookWindow::updateView() |
178 | 250 | switch (oven->mode()) |
179 | 251 | { |
180 | 252 | case Define::DryMode: |
253 | + if (ui->steamButton->isChecked()) | |
254 | + ui->steamButton->setChecked(false); | |
255 | + if (ui->combiButton->isChecked()) | |
256 | + ui->combiButton->setChecked(false); | |
181 | 257 | if (!ui->dryheatButton->isChecked()) |
182 | 258 | ui->dryheatButton->setChecked(true); |
183 | 259 | break; |
184 | 260 | case Define::SteamMode: |
185 | 261 | if (!ui->steamButton->isChecked()) |
186 | 262 | ui->steamButton->setChecked(true); |
263 | + if (ui->combiButton->isChecked()) | |
264 | + ui->combiButton->setChecked(false); | |
265 | + if (ui->dryheatButton->isChecked()) | |
266 | + ui->dryheatButton->setChecked(false); | |
187 | 267 | break; |
188 | 268 | case Define::CombiMode: |
269 | + if (ui->steamButton->isChecked()) | |
270 | + ui->steamButton->setChecked(false); | |
189 | 271 | if (!ui->combiButton->isChecked()) |
190 | 272 | ui->combiButton->setChecked(true); |
273 | + if (ui->dryheatButton->isChecked()) | |
274 | + ui->dryheatButton->setChecked(false); | |
191 | 275 | break; |
192 | 276 | default: |
193 | 277 | break; |
... | ... | @@ -196,7 +280,7 @@ void ManualCookWindow::updateView() |
196 | 280 | int humidity; |
197 | 281 | if (showCurrentHumidity_) |
198 | 282 | humidity = oven->currentHumidity(); |
199 | - else if (ui->humiditySlider->isSliderDown()) | |
283 | + else if (ui->humiditySlider->isSliderDown() || focusWidget() == ui->humiditySlider) | |
200 | 284 | humidity = ui->humiditySlider->sliderPosition(); |
201 | 285 | else |
202 | 286 | humidity = oven->humidity(); |
... | ... | @@ -217,7 +301,7 @@ void ManualCookWindow::updateView() |
217 | 301 | int temp; |
218 | 302 | if (showCurrentTemp_) |
219 | 303 | temp = oven->currentTemp(); |
220 | - else if (ui->tempSlider->isSliderDown()) | |
304 | + else if (ui->tempSlider->isSliderDown() || focusWidget() == ui->tempSlider) | |
221 | 305 | temp = ui->tempSlider->sliderPosition(); |
222 | 306 | else |
223 | 307 | temp = oven->temp(); |
... | ... | @@ -235,25 +319,21 @@ void ManualCookWindow::updateView() |
235 | 319 | ui->tempSlider->setValue(temp); |
236 | 320 | ui->tempSlider->blockSignals(old); |
237 | 321 | |
238 | - int msecs; | |
239 | - if (ui->timeSlider->isSliderDown()) | |
240 | - msecs = sliderToTime(ui->timeSlider->sliderPosition()) * 1000; | |
322 | + int msecs = oven->msecs(); | |
323 | + if (ui->timeSlider->isSliderMoved()) | |
324 | + ui->timeLabel->setText(Stringer::remainingTime(sliderToTime(ui->timeSlider->sliderPosition()) * 1000, Stringer::fontSize14)); | |
241 | 325 | else |
242 | - msecs = oven->msecs(); | |
326 | + ui->timeLabel->setText(Stringer::remainingTime(msecs, Stringer::fontSize14)); | |
243 | 327 | |
244 | - if (msecs != lastViewTime) | |
328 | + if (focusWidget() != ui->timeSlider) | |
245 | 329 | { |
246 | - lastViewTime = msecs; | |
247 | - | |
248 | 330 | bool old = ui->timeSlider->blockSignals(true); |
249 | 331 | ui->timeSlider->setSliderPosition(timeToSlider(msecs / 1000)); |
250 | 332 | ui->timeSlider->blockSignals(old); |
251 | - | |
252 | - ui->timeLabel->setText(Stringer::remainingTime(msecs, Stringer::fontSize14)); | |
253 | 333 | } |
254 | 334 | |
255 | 335 | int interTemp; |
256 | - if (ui->interTempSlider->isSliderDown()) | |
336 | + if (ui->interTempSlider->isSliderDown() || focusWidget() == ui->interTempSlider) | |
257 | 337 | interTemp = ui->interTempSlider->sliderPosition(); |
258 | 338 | else |
259 | 339 | interTemp = oven->interTemp(); |
... | ... | @@ -264,23 +344,7 @@ void ManualCookWindow::updateView() |
264 | 344 | if (interTempEnabled != lastViewInterTempEnabled) |
265 | 345 | { |
266 | 346 | lastViewInterTempEnabled = oven->interTempEnabled(); |
267 | - | |
268 | - if (interTempEnabled) | |
269 | - ui->interTempButton->setStyleSheet("\ | |
270 | -QPushButton {\ | |
271 | - image: url(:/images/slider_icon/core_temp_enabled.png);\ | |
272 | -}\ | |
273 | -QPushButton:pressed {\ | |
274 | - image: url(:/images/slider_icon/core_temp_ov.png);\ | |
275 | -}"); | |
276 | - else | |
277 | - ui->interTempButton->setStyleSheet("\ | |
278 | -QPushButton {\ | |
279 | - image: url(:/images/slider_icon/core_temp.png);\ | |
280 | -}\ | |
281 | -QPushButton:pressed {\ | |
282 | - image: url(:/images/slider_icon/core_temp_ov.png);\ | |
283 | -}"); | |
347 | + ui->interTempButton->setChecked(interTempEnabled); | |
284 | 348 | } |
285 | 349 | |
286 | 350 | lastViewInterTemp = interTemp; |
... | ... | @@ -312,32 +376,70 @@ QPushButton:pressed {\ |
312 | 376 | "border-image: url(:/images/manual_button/run.png)"); |
313 | 377 | } |
314 | 378 | |
315 | - bool damper = oven->damper(); | |
316 | - if (damper != lastViewDamper) | |
379 | + if (showFrontButtons) | |
317 | 380 | { |
318 | - lastViewDamper = damper; | |
319 | - | |
320 | - if (damper) | |
321 | - ui->damperButton->setStyleSheet( | |
322 | - "background-image: url(:/images/manual_button/damper_open.png)"); | |
381 | + ui->preheatButton->show(); | |
382 | + ui->damperButton->show(); | |
383 | + ui->humidificationButton->show(); | |
384 | + if (oven->cooking()) | |
385 | + ui->repeatButton->show(); | |
323 | 386 | else |
324 | - ui->damperButton->setStyleSheet( | |
325 | - "background-image: url(:/images/manual_button/damper_close.png)"); | |
326 | - } | |
387 | + ui->repeatButton->hide(); | |
327 | 388 | |
328 | - bool humidification = oven->humidification(); | |
329 | - if (humidification != lastViewHumidification) | |
389 | + ui->cooldownButton->hide(); | |
390 | + ui->fanButton->hide(); | |
391 | + ui->reserveButton->hide(); | |
392 | + ui->favoriteButton->hide(); | |
393 | + } | |
394 | + else | |
330 | 395 | { |
331 | - lastViewHumidification = humidification; | |
396 | + ui->preheatButton->hide(); | |
397 | + ui->damperButton->hide(); | |
398 | + ui->humidificationButton->hide(); | |
399 | + ui->repeatButton->hide(); | |
332 | 400 | |
333 | - if (humidification) | |
334 | - ui->humidificationButton->setStyleSheet( | |
335 | - "background-image: url(:/images/manual_button/side_nozzle_open.png)"); | |
401 | + ui->cooldownButton->show(); | |
402 | + ui->fanButton->show(); | |
403 | + if (oven->cooking()) | |
404 | + { | |
405 | + ui->reserveButton->hide(); | |
406 | + ui->favoriteButton->hide(); | |
407 | + } | |
336 | 408 | else |
337 | - ui->humidificationButton->setStyleSheet( | |
338 | - "background-image: url(:/images/manual_button/side_nozzle_close.png)"); | |
409 | + { | |
410 | + ui->reserveButton->show(); | |
411 | + ui->favoriteButton->show(); | |
412 | + } | |
339 | 413 | } |
340 | 414 | |
415 | + bool damper = oven->damper(); | |
416 | + ui->damperButton->setChecked(damper); | |
417 | +// if (damper != lastViewDamper) | |
418 | +// { | |
419 | +// lastViewDamper = damper; | |
420 | + | |
421 | +// if (damper) | |
422 | +// ui->damperButton->setStyleSheet( | |
423 | +// "background-image: url(:/images/manual_button/damper_open.png)"); | |
424 | +// else | |
425 | +// ui->damperButton->setStyleSheet( | |
426 | +// "background-image: url(:/images/manual_button/damper_close.png)"); | |
427 | +// } | |
428 | + | |
429 | + bool humidification = oven->humidification(); | |
430 | + ui->humidificationButton->setChecked(humidification); | |
431 | +// if (humidification != lastViewHumidification) | |
432 | +// { | |
433 | +// lastViewHumidification = humidification; | |
434 | + | |
435 | +// if (humidification) | |
436 | +// ui->humidificationButton->setStyleSheet( | |
437 | +// "background-image: url(:/images/manual_button/side_nozzle_open.png)"); | |
438 | +// else | |
439 | +// ui->humidificationButton->setStyleSheet( | |
440 | +// "background-image: url(:/images/manual_button/side_nozzle_close.png)"); | |
441 | +// } | |
442 | + | |
341 | 443 | int fan = oven->fan(); |
342 | 444 | if (fan != lastViewFan) |
343 | 445 | { |
... | ... | @@ -376,20 +478,6 @@ QPushButton:pressed {\ |
376 | 478 | ui->upperStack->setCurrentIndex(1); |
377 | 479 | else |
378 | 480 | ui->upperStack->setCurrentIndex(0); |
379 | - | |
380 | - if (oven->cooking()) | |
381 | - { | |
382 | - ui->reserveButton->hide(); | |
383 | - ui->favoriteButton->hide(); | |
384 | - ui->repeatButton->show(); | |
385 | - } | |
386 | - else | |
387 | - { | |
388 | - ui->reserveButton->show(); | |
389 | - ui->favoriteButton->show(); | |
390 | - ui->repeatButton->hide(); | |
391 | - } | |
392 | - | |
393 | 481 | } |
394 | 482 | |
395 | 483 | void ManualCookWindow::showCurrentHumidity() |
... | ... | @@ -588,6 +676,159 @@ void ManualCookWindow::onMonitor3Timeout() |
588 | 676 | close(); |
589 | 677 | } |
590 | 678 | |
679 | +void ManualCookWindow::onEncoderLeft() | |
680 | +{ | |
681 | + QWidget *focused = focusWidget(); | |
682 | + if (focused == NULL) | |
683 | + focusPreviousChild(); | |
684 | + else if (focused == this || focused->inherits("QPushButton")) | |
685 | + { | |
686 | + focusPreviousChild(); | |
687 | + focused = focusWidget(); | |
688 | + | |
689 | + if (focused == ui->steamButton) | |
690 | + { | |
691 | + if (oven->mode() == Define::SteamMode) | |
692 | + focusPreviousChild(); | |
693 | + } | |
694 | + else if (focused == ui->combiButton) | |
695 | + { | |
696 | + if (oven->mode() == Define::CombiMode) | |
697 | + focusPreviousChild(); | |
698 | + } | |
699 | + else if (focused == ui->dryheatButton) | |
700 | + { | |
701 | + if (oven->mode() == Define::DryMode) | |
702 | + focusPreviousChild(); | |
703 | + } | |
704 | + } | |
705 | +} | |
706 | + | |
707 | +void ManualCookWindow::onEncoderRight() | |
708 | +{ | |
709 | + QWidget *focused = focusWidget(); | |
710 | + if (focused == NULL) | |
711 | + focusNextChild(); | |
712 | + else if (focused == this) | |
713 | + { | |
714 | + switch (oven->mode()) | |
715 | + { | |
716 | + case Define::DryMode: | |
717 | + case Define::SteamMode: | |
718 | + ui->tempButton->setFocus(); | |
719 | + break; | |
720 | + default: | |
721 | + ui->humidityButton->setFocus(); | |
722 | + } | |
723 | + } | |
724 | + else if (focused->inherits("QPushButton")) | |
725 | + { | |
726 | + focusNextChild(); | |
727 | + focused = focusWidget(); | |
728 | + | |
729 | + if (focused == ui->steamButton) | |
730 | + { | |
731 | + if (oven->mode() == Define::SteamMode) | |
732 | + focusNextChild(); | |
733 | + } | |
734 | + else if (focused == ui->combiButton) | |
735 | + { | |
736 | + if (oven->mode() == Define::CombiMode) | |
737 | + focusNextChild(); | |
738 | + } | |
739 | + else if (focused == ui->dryheatButton) | |
740 | + { | |
741 | + if (oven->mode() == Define::DryMode) | |
742 | + focusNextChild(); | |
743 | + } | |
744 | + } | |
745 | +} | |
746 | + | |
747 | +void ManualCookWindow::onEncoderClicked(QWidget *clicked) | |
748 | +{ | |
749 | + QWidget *focused = clicked; | |
750 | + if (focused == NULL) | |
751 | + return; | |
752 | + | |
753 | + if (focused->inherits("QPushButton")) | |
754 | + { | |
755 | + QPushButton *pb = qobject_cast<QPushButton *>(focused); | |
756 | + if (pb) | |
757 | + { | |
758 | + pb->click(); | |
759 | + | |
760 | + if (pb == ui->steamButton || pb == ui->dryheatButton) | |
761 | + ui->tempButton->setFocus(); | |
762 | + else if (pb == ui->combiButton) | |
763 | + ui->humidityButton->setFocus(); | |
764 | + } | |
765 | + } | |
766 | + else if (focused->inherits("Slider")) | |
767 | + { | |
768 | + Slider *slider = qobject_cast<Slider *>(focused); | |
769 | + if (slider) | |
770 | + { | |
771 | + if (slider->value() != slider->sliderPosition()) | |
772 | + slider->setValue(slider->sliderPosition()); | |
773 | + | |
774 | + if (slider == ui->humiditySlider) | |
775 | + ui->humidityButton->setFocus(); | |
776 | + else if (slider == ui->tempSlider) | |
777 | + ui->tempButton->setFocus(); | |
778 | + else if (slider == ui->timeSlider) | |
779 | + ui->timeButton->setFocus(); | |
780 | + else if (slider == ui->interTempSlider) | |
781 | + ui->interTempButton->setFocus(); | |
782 | + } | |
783 | + } | |
784 | +} | |
785 | + | |
786 | +void ManualCookWindow::focusHumidityButton() | |
787 | +{ | |
788 | + if (focusWidget() == ui->humiditySlider) | |
789 | + { | |
790 | + oven->setHumidity(ui->humiditySlider->value()); | |
791 | + ui->humidityButton->setFocus(); | |
792 | + } | |
793 | +} | |
794 | + | |
795 | +void ManualCookWindow::focusTempButton() | |
796 | +{ | |
797 | + if (focusWidget() == ui->tempSlider) | |
798 | + { | |
799 | + oven->setTemp(ui->tempSlider->value()); | |
800 | + ui->tempButton->setFocus(); | |
801 | + } | |
802 | +} | |
803 | + | |
804 | +void ManualCookWindow::focusTimeButton() | |
805 | +{ | |
806 | + if (focusWidget() == ui->timeSlider) | |
807 | + { | |
808 | + if (ui->timeSlider->isSliderMoved()) | |
809 | + oven->setTime(sliderToTime(ui->timeSlider->value())); | |
810 | + ui->timeButton->setFocus(); | |
811 | + } | |
812 | +} | |
813 | + | |
814 | +void ManualCookWindow::focusInterTempButton() | |
815 | +{ | |
816 | + if (focusWidget() == ui->interTempSlider) | |
817 | + { | |
818 | + oven->setInterTemp(ui->interTempSlider->value()); | |
819 | + ui->interTempButton->setFocus(); | |
820 | + } | |
821 | +} | |
822 | + | |
823 | +void ManualCookWindow::focusAgain() | |
824 | +{ | |
825 | + if (focused) | |
826 | + { | |
827 | + focused->setFocus(); | |
828 | + focused = NULL; | |
829 | + } | |
830 | +} | |
831 | + | |
591 | 832 | void ManualCookWindow::on_steamButton_clicked() |
592 | 833 | { |
593 | 834 | setOvenDefault(Define::SteamMode); |
... | ... | @@ -629,6 +870,27 @@ void ManualCookWindow::on_tempButton_released() |
629 | 870 | hideCurrentTemp(); |
630 | 871 | } |
631 | 872 | |
873 | +void ManualCookWindow::on_humidityButton_clicked() | |
874 | +{ | |
875 | + ui->humiditySlider->setFocus(); | |
876 | + | |
877 | + focusHumidityButtonTimer.start(); | |
878 | +} | |
879 | + | |
880 | +void ManualCookWindow::on_tempButton_clicked() | |
881 | +{ | |
882 | + ui->tempSlider->setFocus(); | |
883 | + | |
884 | + focusTempButtonTimer.start(); | |
885 | +} | |
886 | + | |
887 | +void ManualCookWindow::on_timeButton_clicked() | |
888 | +{ | |
889 | + ui->timeSlider->setFocus(); | |
890 | + | |
891 | + focusTimeButtonTimer.start(); | |
892 | +} | |
893 | + | |
632 | 894 | void ManualCookWindow::on_interTempButton_clicked() |
633 | 895 | { |
634 | 896 | if (oven->interTempEnabled()) |
... | ... | @@ -637,6 +899,9 @@ void ManualCookWindow::on_interTempButton_clicked() |
637 | 899 | { |
638 | 900 | CoreTempSettingPopup *p = new CoreTempSettingPopup(this); |
639 | 901 | p->show(); |
902 | + | |
903 | + focused = ui->interTempButton; | |
904 | + connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); | |
640 | 905 | } |
641 | 906 | } |
642 | 907 | |
... | ... | @@ -664,6 +929,9 @@ void ManualCookWindow::on_preheatButton_clicked() |
664 | 929 | PreheatPopup *p = new PreheatPopup(this, oven); |
665 | 930 | p->setWindowModality(Qt::WindowModal); |
666 | 931 | p->showFullScreen(); |
932 | + | |
933 | + focused = ui->preheatButton; | |
934 | + connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); | |
667 | 935 | } |
668 | 936 | |
669 | 937 | void ManualCookWindow::on_damperButton_clicked() |
... | ... | @@ -713,6 +981,9 @@ void ManualCookWindow::on_cooldownButton_clicked() |
713 | 981 | CooldownPopup *p = new CooldownPopup(this, oven); |
714 | 982 | p->setWindowModality(Qt::WindowModal); |
715 | 983 | p->showFullScreen(); |
984 | + | |
985 | + focused = ui->cooldownButton; | |
986 | + connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); | |
716 | 987 | } |
717 | 988 | |
718 | 989 | void ManualCookWindow::on_reserveButton_clicked() |
... | ... | @@ -725,6 +996,9 @@ void ManualCookWindow::on_reserveButton_clicked() |
725 | 996 | connect(p, SIGNAL(timeout()), SLOT(start())); |
726 | 997 | connect(p, SIGNAL(canceled()), &startCookingTimer, SLOT(start())); |
727 | 998 | p->showFullScreen(); |
999 | + | |
1000 | + focused = ui->reserveButton; | |
1001 | + connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); | |
728 | 1002 | } |
729 | 1003 | } |
730 | 1004 | |
... | ... | @@ -736,6 +1010,8 @@ void ManualCookWindow::on_favoriteButton_clicked() |
736 | 1010 | ConfirmPopup *p = new ConfirmPopup(this, tr("즐겨찾기 항목에 추가하시겠습니까?")); |
737 | 1011 | p->showFullScreen(); |
738 | 1012 | |
1013 | + focused = ui->favoriteButton; | |
1014 | + connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); | |
739 | 1015 | connect(p, SIGNAL(accepted()), SLOT(addFavorite())); |
740 | 1016 | |
741 | 1017 | if (startCookingTimer.isActive()) |
... | ... | @@ -745,14 +1021,11 @@ void ManualCookWindow::on_favoriteButton_clicked() |
745 | 1021 | } |
746 | 1022 | } |
747 | 1023 | |
748 | -void ManualCookWindow::on_goBackStackButton_clicked() | |
749 | -{ | |
750 | - ui->buttonStack->setCurrentIndex(1); | |
751 | -} | |
752 | - | |
753 | 1024 | void ManualCookWindow::on_goFrontStackButton_clicked() |
754 | 1025 | { |
755 | - ui->buttonStack->setCurrentIndex(0); | |
1026 | + showFrontButtons = !showFrontButtons; | |
1027 | + | |
1028 | + updateView(); | |
756 | 1029 | } |
757 | 1030 | |
758 | 1031 | void ManualCookWindow::on_backButton_clicked() |
... | ... | @@ -769,6 +1042,9 @@ void ManualCookWindow::on_configButton_clicked() |
769 | 1042 | p->showFullScreen(); |
770 | 1043 | |
771 | 1044 | connect(p, SIGNAL(accepted()), SLOT(jumpConfig())); |
1045 | + | |
1046 | + focused = ui->configButton; | |
1047 | + connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); | |
772 | 1048 | } |
773 | 1049 | else |
774 | 1050 | { |
... | ... | @@ -789,6 +1065,9 @@ void ManualCookWindow::on_favoritesButton_clicked() |
789 | 1065 | p->showFullScreen(); |
790 | 1066 | |
791 | 1067 | connect(p, SIGNAL(accepted()), SLOT(jumpFavorites())); |
1068 | + | |
1069 | + focused = ui->favoritesButton; | |
1070 | + connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); | |
792 | 1071 | } |
793 | 1072 | else |
794 | 1073 | { |
... | ... | @@ -810,6 +1089,9 @@ void ManualCookWindow::on_washButton_clicked() |
810 | 1089 | p->showFullScreen(); |
811 | 1090 | |
812 | 1091 | connect(p, SIGNAL(accepted()), SLOT(jumpWash())); |
1092 | + | |
1093 | + focused = ui->washButton; | |
1094 | + connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); | |
813 | 1095 | } |
814 | 1096 | else |
815 | 1097 | { |
... | ... | @@ -844,8 +1126,8 @@ int ManualCookWindow::sliderToTime(int value) |
844 | 1126 | int ManualCookWindow::timeToSlider(int secs) |
845 | 1127 | { |
846 | 1128 | if (secs <= 180 * 60) |
847 | - return secs / 60; | |
1129 | + return qCeil((qreal) secs / 60); | |
848 | 1130 | if (secs <= 360 * 60) |
849 | - return 180 + (secs - 180 * 60) / 2 / 60; | |
850 | - return 270 + (secs - 360 * 60) / 15 / 60; | |
1131 | + return 180 + qCeil((qreal) (secs - 180 * 60) / 2 / 60); | |
1132 | + return 270 + qCeil((qreal) (secs - 360 * 60) / 15 / 60); | |
851 | 1133 | } | ... | ... |
app/gui/oven_control/manualcookwindow.h
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 | #define MANUALCOOKWINDOW_H |
3 | 3 | |
4 | 4 | #include <QMainWindow> |
5 | +#include <QKeyEvent> | |
5 | 6 | |
6 | 7 | #include "oven.h" |
7 | 8 | #include "udphandler.h" |
... | ... | @@ -20,6 +21,10 @@ public: |
20 | 21 | explicit ManualCookWindow(QWidget *parent, ManualCookSetting setting); |
21 | 22 | ~ManualCookWindow(); |
22 | 23 | |
24 | +protected: | |
25 | + void keyPressEvent(QKeyEvent *event); | |
26 | + void keyReleaseEvent(QKeyEvent *event); | |
27 | + | |
23 | 28 | signals: |
24 | 29 | void cookStopRequested(); |
25 | 30 | |
... | ... | @@ -47,6 +52,16 @@ private slots: |
47 | 52 | void onMonitor2Timeout(); |
48 | 53 | void onMonitor3Timeout(); |
49 | 54 | |
55 | + void onEncoderLeft(); | |
56 | + void onEncoderRight(); | |
57 | + void onEncoderClicked(QWidget *clicked); | |
58 | + | |
59 | + void focusHumidityButton(); | |
60 | + void focusTempButton(); | |
61 | + void focusTimeButton(); | |
62 | + void focusInterTempButton(); | |
63 | + void focusAgain(); | |
64 | + | |
50 | 65 | void on_steamButton_clicked(); |
51 | 66 | void on_combiButton_clicked(); |
52 | 67 | void on_dryheatButton_clicked(); |
... | ... | @@ -55,6 +70,10 @@ private slots: |
55 | 70 | void on_humidityButton_released(); |
56 | 71 | void on_tempButton_pressed(); |
57 | 72 | void on_tempButton_released(); |
73 | + | |
74 | + void on_humidityButton_clicked(); | |
75 | + void on_tempButton_clicked(); | |
76 | + void on_timeButton_clicked(); | |
58 | 77 | void on_interTempButton_clicked(); |
59 | 78 | |
60 | 79 | void on_runStopButton_clicked(); |
... | ... | @@ -66,7 +85,6 @@ private slots: |
66 | 85 | void on_cooldownButton_clicked(); |
67 | 86 | void on_reserveButton_clicked(); |
68 | 87 | void on_favoriteButton_clicked(); |
69 | - void on_goBackStackButton_clicked(); | |
70 | 88 | void on_goFrontStackButton_clicked(); |
71 | 89 | |
72 | 90 | void on_backButton_clicked(); |
... | ... | @@ -77,6 +95,8 @@ private slots: |
77 | 95 | |
78 | 96 | void on_timeSlider_valueChanged(); |
79 | 97 | |
98 | + | |
99 | + | |
80 | 100 | private: |
81 | 101 | Ui::ManualCookWindow *ui; |
82 | 102 | Oven *oven; |
... | ... | @@ -105,6 +125,8 @@ private: |
105 | 125 | bool lastViewHumidification; |
106 | 126 | int lastViewFan; |
107 | 127 | |
128 | + bool showFrontButtons = true; | |
129 | + | |
108 | 130 | int monitorLevel; |
109 | 131 | QTimer monitor1; |
110 | 132 | QTimer monitor2; |
... | ... | @@ -117,6 +139,14 @@ private: |
117 | 139 | |
118 | 140 | int sliderToTime(int value); |
119 | 141 | int timeToSlider(int secs); |
142 | + | |
143 | + QWidget *pushed = NULL; | |
144 | + QWidget *focused = NULL; | |
145 | + | |
146 | + QTimer focusHumidityButtonTimer; | |
147 | + QTimer focusTempButtonTimer; | |
148 | + QTimer focusTimeButtonTimer; | |
149 | + QTimer focusInterTempButtonTimer; | |
120 | 150 | }; |
121 | 151 | |
122 | 152 | #endif // MANUALCOOKWINDOW_H | ... | ... |
app/gui/oven_control/manualcookwindow.ui
... | ... | @@ -41,6 +41,12 @@ background-position: center; |
41 | 41 | border: none; |
42 | 42 | } |
43 | 43 | |
44 | +QPushButton[style="tool"] { | |
45 | +border: none; | |
46 | +background-repeat: no-repeat; | |
47 | +background-position: center; | |
48 | +} | |
49 | + | |
44 | 50 | QSlider::groove { |
45 | 51 | background-image: url(:/images/slider/groove_ticks.png); |
46 | 52 | background-repeat: no-repeat; |
... | ... | @@ -133,8 +139,8 @@ height: 33px; |
133 | 139 | </property> |
134 | 140 | <property name="styleSheet"> |
135 | 141 | <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_combi_hide.png); } |
136 | -QPushButton:pressed { background-image: url(:/images/cook_mode/big_combi_ov.png); } | |
137 | -QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); }</string> | |
142 | +QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); } | |
143 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_mode/big_combi_ov.png); }</string> | |
138 | 144 | </property> |
139 | 145 | <property name="text"> |
140 | 146 | <string>콤비</string> |
... | ... | @@ -143,7 +149,7 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); } |
143 | 149 | <bool>true</bool> |
144 | 150 | </property> |
145 | 151 | <property name="autoExclusive"> |
146 | - <bool>true</bool> | |
152 | + <bool>false</bool> | |
147 | 153 | </property> |
148 | 154 | <property name="style" stdset="0"> |
149 | 155 | <string notr="true">mode</string> |
... | ... | @@ -160,8 +166,8 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); } |
160 | 166 | </property> |
161 | 167 | <property name="styleSheet"> |
162 | 168 | <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_steam_hide.png); } |
163 | -QPushButton:pressed { background-image: url(:/images/cook_mode/big_steam_ov.png); } | |
164 | -QPushButton:checked { background-image: url(:/images/cook_mode/big_steam.png); }</string> | |
169 | +QPushButton:checked { background-image: url(:/images/cook_mode/big_steam.png); } | |
170 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_mode/big_steam_ov.png); }</string> | |
165 | 171 | </property> |
166 | 172 | <property name="text"> |
167 | 173 | <string>스팀</string> |
... | ... | @@ -170,7 +176,7 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_steam.png); } |
170 | 176 | <bool>true</bool> |
171 | 177 | </property> |
172 | 178 | <property name="autoExclusive"> |
173 | - <bool>true</bool> | |
179 | + <bool>false</bool> | |
174 | 180 | </property> |
175 | 181 | <property name="style" stdset="0"> |
176 | 182 | <string notr="true">mode</string> |
... | ... | @@ -187,8 +193,8 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_steam.png); } |
187 | 193 | </property> |
188 | 194 | <property name="styleSheet"> |
189 | 195 | <string notr="true">QPushButton { background-image: url(:/images/cook_mode/big_dryheat_hide.png); } |
190 | -QPushButton:pressed { background-image: url(:/images/cook_mode/big_dryheat_ov.png); } | |
191 | -QPushButton:checked { background-image: url(:/images/cook_mode/big_dryheat.png); }</string> | |
196 | +QPushButton:checked { background-image: url(:/images/cook_mode/big_dryheat.png); } | |
197 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/cook_mode/big_dryheat_ov.png); }</string> | |
192 | 198 | </property> |
193 | 199 | <property name="text"> |
194 | 200 | <string>건열</string> |
... | ... | @@ -197,7 +203,7 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_dryheat.png); |
197 | 203 | <bool>true</bool> |
198 | 204 | </property> |
199 | 205 | <property name="autoExclusive"> |
200 | - <bool>true</bool> | |
206 | + <bool>false</bool> | |
201 | 207 | </property> |
202 | 208 | <property name="style" stdset="0"> |
203 | 209 | <string notr="true">mode</string> |
... | ... | @@ -223,7 +229,7 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_dryheat.png); |
223 | 229 | </property> |
224 | 230 | <property name="styleSheet"> |
225 | 231 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/back.png); } |
226 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</string> | |
232 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/back_ov.png); }</string> | |
227 | 233 | </property> |
228 | 234 | <property name="text"> |
229 | 235 | <string/> |
... | ... | @@ -240,7 +246,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</str |
240 | 246 | </property> |
241 | 247 | <property name="styleSheet"> |
242 | 248 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/config.png); } |
243 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</string> | |
249 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/config_ov.png); }</string> | |
244 | 250 | </property> |
245 | 251 | <property name="text"> |
246 | 252 | <string/> |
... | ... | @@ -257,7 +263,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</s |
257 | 263 | </property> |
258 | 264 | <property name="styleSheet"> |
259 | 265 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/favorites_manual.png); } |
260 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_manual_ov.png); }</string> | |
266 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/favorites_manual_ov.png); }</string> | |
261 | 267 | </property> |
262 | 268 | <property name="text"> |
263 | 269 | <string/> |
... | ... | @@ -274,7 +280,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_manual_ov. |
274 | 280 | </property> |
275 | 281 | <property name="styleSheet"> |
276 | 282 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/wash.png); } |
277 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); }</string> | |
283 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/wash_ov.png); }</string> | |
278 | 284 | </property> |
279 | 285 | <property name="text"> |
280 | 286 | <string/> |
... | ... | @@ -291,7 +297,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); }</str |
291 | 297 | </property> |
292 | 298 | <property name="styleSheet"> |
293 | 299 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/help.png); } |
294 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</string> | |
300 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/help_ov.png); }</string> | |
295 | 301 | </property> |
296 | 302 | <property name="text"> |
297 | 303 | <string/> |
... | ... | @@ -497,7 +503,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</str |
497 | 503 | </property> |
498 | 504 | <property name="styleSheet"> |
499 | 505 | <string notr="true">QPushButton { image: url(:/images/slider_icon/temp.png); } |
500 | -QPushButton:pressed { image: url(:/images/slider_icon/temp_ov.png); }</string> | |
506 | +QPushButton:pressed, QPushButton:focus { image: url(:/images/slider_icon/temp_ov.png); }</string> | |
501 | 507 | </property> |
502 | 508 | <property name="style" stdset="0"> |
503 | 509 | <string notr="true">icon</string> |
... | ... | @@ -631,248 +637,6 @@ QPushButton:pressed { image: url(:/images/slider_icon/temp_ov.png); }</string> |
631 | 637 | <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> |
632 | 638 | </property> |
633 | 639 | </widget> |
634 | - <widget class="QStackedWidget" name="buttonStack"> | |
635 | - <property name="geometry"> | |
636 | - <rect> | |
637 | - <x>337</x> | |
638 | - <y>1319</y> | |
639 | - <width>563</width> | |
640 | - <height>131</height> | |
641 | - </rect> | |
642 | - </property> | |
643 | - <property name="styleSheet"> | |
644 | - <string notr="true">QPushButton { | |
645 | -background-repeat: no-repeat; | |
646 | -background-position: center; | |
647 | -border: none; | |
648 | -}</string> | |
649 | - </property> | |
650 | - <property name="currentIndex"> | |
651 | - <number>0</number> | |
652 | - </property> | |
653 | - <widget class="QWidget" name="frontButtonStack"> | |
654 | - <widget class="QPushButton" name="goBackStackButton"> | |
655 | - <property name="geometry"> | |
656 | - <rect> | |
657 | - <x>448</x> | |
658 | - <y>0</y> | |
659 | - <width>112</width> | |
660 | - <height>131</height> | |
661 | - </rect> | |
662 | - </property> | |
663 | - <property name="styleSheet"> | |
664 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/next.png); } | |
665 | -QPushButton:pressed { background-image: url(:/images/manual_button/next_ov.png); }</string> | |
666 | - </property> | |
667 | - </widget> | |
668 | - <widget class="QWidget" name="sysLine_7" native="true"> | |
669 | - <property name="geometry"> | |
670 | - <rect> | |
671 | - <x>336</x> | |
672 | - <y>36</y> | |
673 | - <width>2</width> | |
674 | - <height>58</height> | |
675 | - </rect> | |
676 | - </property> | |
677 | - <property name="styleSheet"> | |
678 | - <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
679 | - </property> | |
680 | - </widget> | |
681 | - <widget class="QPushButton" name="humidificationButton"> | |
682 | - <property name="geometry"> | |
683 | - <rect> | |
684 | - <x>224</x> | |
685 | - <y>0</y> | |
686 | - <width>112</width> | |
687 | - <height>131</height> | |
688 | - </rect> | |
689 | - </property> | |
690 | - <property name="styleSheet"> | |
691 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/side_nozzle_close.png); }</string> | |
692 | - </property> | |
693 | - </widget> | |
694 | - <widget class="QWidget" name="sysLine_8" native="true"> | |
695 | - <property name="geometry"> | |
696 | - <rect> | |
697 | - <x>224</x> | |
698 | - <y>36</y> | |
699 | - <width>2</width> | |
700 | - <height>58</height> | |
701 | - </rect> | |
702 | - </property> | |
703 | - <property name="styleSheet"> | |
704 | - <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
705 | - </property> | |
706 | - </widget> | |
707 | - <widget class="QPushButton" name="preheatButton"> | |
708 | - <property name="geometry"> | |
709 | - <rect> | |
710 | - <x>0</x> | |
711 | - <y>0</y> | |
712 | - <width>112</width> | |
713 | - <height>131</height> | |
714 | - </rect> | |
715 | - </property> | |
716 | - <property name="styleSheet"> | |
717 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/preheat.png); } | |
718 | -QPushButton:pressed { background-image: url(:/images/manual_button/preheat_ov.png); }</string> | |
719 | - </property> | |
720 | - </widget> | |
721 | - <widget class="QPushButton" name="repeatButton"> | |
722 | - <property name="geometry"> | |
723 | - <rect> | |
724 | - <x>336</x> | |
725 | - <y>0</y> | |
726 | - <width>112</width> | |
727 | - <height>131</height> | |
728 | - </rect> | |
729 | - </property> | |
730 | - <property name="styleSheet"> | |
731 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/repeat.png); } | |
732 | -QPushButton:pressed { background-image: url(:/images/manual_button/repeat_ov.png); }</string> | |
733 | - </property> | |
734 | - </widget> | |
735 | - <widget class="QWidget" name="sysLine_9" native="true"> | |
736 | - <property name="geometry"> | |
737 | - <rect> | |
738 | - <x>112</x> | |
739 | - <y>36</y> | |
740 | - <width>2</width> | |
741 | - <height>58</height> | |
742 | - </rect> | |
743 | - </property> | |
744 | - <property name="styleSheet"> | |
745 | - <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
746 | - </property> | |
747 | - </widget> | |
748 | - <widget class="QPushButton" name="damperButton"> | |
749 | - <property name="geometry"> | |
750 | - <rect> | |
751 | - <x>112</x> | |
752 | - <y>0</y> | |
753 | - <width>112</width> | |
754 | - <height>131</height> | |
755 | - </rect> | |
756 | - </property> | |
757 | - <property name="styleSheet"> | |
758 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/damper_close.png); }</string> | |
759 | - </property> | |
760 | - </widget> | |
761 | - </widget> | |
762 | - <widget class="QWidget" name="backButtonStack"> | |
763 | - <widget class="QPushButton" name="goFrontStackButton"> | |
764 | - <property name="geometry"> | |
765 | - <rect> | |
766 | - <x>448</x> | |
767 | - <y>0</y> | |
768 | - <width>112</width> | |
769 | - <height>131</height> | |
770 | - </rect> | |
771 | - </property> | |
772 | - <property name="styleSheet"> | |
773 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/next.png); } | |
774 | -QPushButton:pressed { background-image: url(:/images/manual_button/next_ov.png); }</string> | |
775 | - </property> | |
776 | - </widget> | |
777 | - <widget class="QWidget" name="sysLine_10" native="true"> | |
778 | - <property name="geometry"> | |
779 | - <rect> | |
780 | - <x>112</x> | |
781 | - <y>36</y> | |
782 | - <width>2</width> | |
783 | - <height>58</height> | |
784 | - </rect> | |
785 | - </property> | |
786 | - <property name="styleSheet"> | |
787 | - <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
788 | - </property> | |
789 | - </widget> | |
790 | - <widget class="QPushButton" name="reserveButton"> | |
791 | - <property name="geometry"> | |
792 | - <rect> | |
793 | - <x>224</x> | |
794 | - <y>0</y> | |
795 | - <width>112</width> | |
796 | - <height>131</height> | |
797 | - </rect> | |
798 | - </property> | |
799 | - <property name="styleSheet"> | |
800 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/reserve.png); } | |
801 | -QPushButton:pressed { background-image: url(:/images/manual_button/reserve_ov.png); }</string> | |
802 | - </property> | |
803 | - </widget> | |
804 | - <widget class="QWidget" name="sysLine_11" native="true"> | |
805 | - <property name="geometry"> | |
806 | - <rect> | |
807 | - <x>224</x> | |
808 | - <y>36</y> | |
809 | - <width>2</width> | |
810 | - <height>58</height> | |
811 | - </rect> | |
812 | - </property> | |
813 | - <property name="styleSheet"> | |
814 | - <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
815 | - </property> | |
816 | - </widget> | |
817 | - <widget class="QPushButton" name="cooldownButton"> | |
818 | - <property name="geometry"> | |
819 | - <rect> | |
820 | - <x>0</x> | |
821 | - <y>0</y> | |
822 | - <width>112</width> | |
823 | - <height>131</height> | |
824 | - </rect> | |
825 | - </property> | |
826 | - <property name="styleSheet"> | |
827 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/cooldown.png); } | |
828 | -QPushButton:pressed { background-image: url(:/images/manual_button/cooldown_ov.png); }</string> | |
829 | - </property> | |
830 | - <property name="checkable"> | |
831 | - <bool>true</bool> | |
832 | - </property> | |
833 | - </widget> | |
834 | - <widget class="QPushButton" name="favoriteButton"> | |
835 | - <property name="geometry"> | |
836 | - <rect> | |
837 | - <x>336</x> | |
838 | - <y>0</y> | |
839 | - <width>112</width> | |
840 | - <height>131</height> | |
841 | - </rect> | |
842 | - </property> | |
843 | - <property name="styleSheet"> | |
844 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/favorites.png); } | |
845 | -QPushButton:pressed { background-image: url(:/images/manual_button/favorites_ov.png); }</string> | |
846 | - </property> | |
847 | - </widget> | |
848 | - <widget class="QWidget" name="sysLine_12" native="true"> | |
849 | - <property name="geometry"> | |
850 | - <rect> | |
851 | - <x>336</x> | |
852 | - <y>36</y> | |
853 | - <width>2</width> | |
854 | - <height>58</height> | |
855 | - </rect> | |
856 | - </property> | |
857 | - <property name="styleSheet"> | |
858 | - <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
859 | - </property> | |
860 | - </widget> | |
861 | - <widget class="QPushButton" name="fanButton"> | |
862 | - <property name="geometry"> | |
863 | - <rect> | |
864 | - <x>112</x> | |
865 | - <y>0</y> | |
866 | - <width>112</width> | |
867 | - <height>131</height> | |
868 | - </rect> | |
869 | - </property> | |
870 | - <property name="styleSheet"> | |
871 | - <string notr="true">QPushButton { background-image: url(:/images/manual_button/fan_4.png); }</string> | |
872 | - </property> | |
873 | - </widget> | |
874 | - </widget> | |
875 | - </widget> | |
876 | 640 | <widget class="QLabel" name="steamLabel_4"> |
877 | 641 | <property name="enabled"> |
878 | 642 | <bool>true</bool> |
... | ... | @@ -946,7 +710,11 @@ QPushButton:pressed { background-image: url(:/images/manual_button/favorites_ov. |
946 | 710 | </property> |
947 | 711 | <property name="styleSheet"> |
948 | 712 | <string notr="true">QPushButton { image: url(:/images/slider_icon/humidity.png); } |
949 | -QPushButton:pressed { image: url(:/images/slider_icon/humidity_ov.png); }</string> | |
713 | +QPushButton:checked { image: url(:/images/slider_icon/humidity_ov.png); } | |
714 | +QPushButton:pressed, QPushButton:focus { border: 2px dotted white; border-radius: 70px; }</string> | |
715 | + </property> | |
716 | + <property name="checkable"> | |
717 | + <bool>true</bool> | |
950 | 718 | </property> |
951 | 719 | <property name="style" stdset="0"> |
952 | 720 | <string notr="true">icon</string> |
... | ... | @@ -963,7 +731,11 @@ QPushButton:pressed { image: url(:/images/slider_icon/humidity_ov.png); }</strin |
963 | 731 | </property> |
964 | 732 | <property name="styleSheet"> |
965 | 733 | <string notr="true">QPushButton { image: url(:/images/slider_icon/core_temp.png); } |
966 | -QPushButton:pressed { image: url(:/images/slider_icon/core_temp_ov.png); }</string> | |
734 | +QPushButton:checked { image: url(:/images/slider_icon/core_temp_enabled.png); } | |
735 | +QPushButton:pressed, QPushButton:focus { image: url(:/images/slider_icon/core_temp_ov.png); }</string> | |
736 | + </property> | |
737 | + <property name="checkable"> | |
738 | + <bool>true</bool> | |
967 | 739 | </property> |
968 | 740 | <property name="style" stdset="0"> |
969 | 741 | <string notr="true">icon</string> |
... | ... | @@ -980,7 +752,7 @@ QPushButton:pressed { image: url(:/images/slider_icon/core_temp_ov.png); }</stri |
980 | 752 | </property> |
981 | 753 | <property name="styleSheet"> |
982 | 754 | <string notr="true">QPushButton { image: url(:/images/slider_icon/time.png); } |
983 | -QPushButton:pressed { image: url(:/images/slider_icon/time_ov.png); }</string> | |
755 | +QPushButton:pressed, QPushButton:focus { image: url(:/images/slider_icon/time_ov.png); }</string> | |
984 | 756 | </property> |
985 | 757 | <property name="style" stdset="0"> |
986 | 758 | <string notr="true">icon</string> |
... | ... | @@ -1132,42 +904,288 @@ QPushButton:pressed { image: url(:/images/slider_icon/time_ov.png); }</string> |
1132 | 904 | <property name="geometry"> |
1133 | 905 | <rect> |
1134 | 906 | <x>185</x> |
1135 | - <y>875</y> | |
907 | + <y>915</y> | |
1136 | 908 | <width>666</width> |
1137 | - <height>140</height> | |
909 | + <height>60</height> | |
1138 | 910 | </rect> |
1139 | 911 | </property> |
912 | + <property name="focusPolicy"> | |
913 | + <enum>Qt::ClickFocus</enum> | |
914 | + </property> | |
1140 | 915 | </widget> |
1141 | 916 | <widget class="Slider" name="humiditySlider" native="true"> |
1142 | 917 | <property name="geometry"> |
1143 | 918 | <rect> |
1144 | 919 | <x>185</x> |
1145 | - <y>725</y> | |
920 | + <y>765</y> | |
1146 | 921 | <width>666</width> |
1147 | - <height>140</height> | |
922 | + <height>60</height> | |
1148 | 923 | </rect> |
1149 | 924 | </property> |
925 | + <property name="focusPolicy"> | |
926 | + <enum>Qt::ClickFocus</enum> | |
927 | + </property> | |
1150 | 928 | </widget> |
1151 | 929 | <widget class="Slider" name="timeSlider" native="true"> |
1152 | 930 | <property name="geometry"> |
1153 | 931 | <rect> |
1154 | 932 | <x>185</x> |
1155 | - <y>1025</y> | |
933 | + <y>1065</y> | |
1156 | 934 | <width>666</width> |
1157 | - <height>140</height> | |
935 | + <height>60</height> | |
1158 | 936 | </rect> |
1159 | 937 | </property> |
938 | + <property name="focusPolicy"> | |
939 | + <enum>Qt::ClickFocus</enum> | |
940 | + </property> | |
1160 | 941 | </widget> |
1161 | 942 | <widget class="Slider" name="interTempSlider" native="true"> |
1162 | 943 | <property name="geometry"> |
1163 | 944 | <rect> |
1164 | 945 | <x>185</x> |
1165 | - <y>1175</y> | |
946 | + <y>1215</y> | |
1166 | 947 | <width>666</width> |
1167 | - <height>140</height> | |
948 | + <height>60</height> | |
949 | + </rect> | |
950 | + </property> | |
951 | + <property name="focusPolicy"> | |
952 | + <enum>Qt::ClickFocus</enum> | |
953 | + </property> | |
954 | + </widget> | |
955 | + <widget class="QPushButton" name="cooldownButton"> | |
956 | + <property name="geometry"> | |
957 | + <rect> | |
958 | + <x>337</x> | |
959 | + <y>1319</y> | |
960 | + <width>112</width> | |
961 | + <height>131</height> | |
962 | + </rect> | |
963 | + </property> | |
964 | + <property name="styleSheet"> | |
965 | + <string notr="true">QPushButton { background-image: url(:/images/manual_button/cooldown.png); } | |
966 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_button/cooldown_ov.png); }</string> | |
967 | + </property> | |
968 | + <property name="checkable"> | |
969 | + <bool>true</bool> | |
970 | + </property> | |
971 | + <property name="style" stdset="0"> | |
972 | + <string>tool</string> | |
973 | + </property> | |
974 | + </widget> | |
975 | + <widget class="QPushButton" name="goFrontStackButton"> | |
976 | + <property name="geometry"> | |
977 | + <rect> | |
978 | + <x>785</x> | |
979 | + <y>1319</y> | |
980 | + <width>112</width> | |
981 | + <height>131</height> | |
982 | + </rect> | |
983 | + </property> | |
984 | + <property name="styleSheet"> | |
985 | + <string notr="true">QPushButton { background-image: url(:/images/manual_button/next.png); } | |
986 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_button/next_ov.png); }</string> | |
987 | + </property> | |
988 | + <property name="style" stdset="0"> | |
989 | + <string>tool</string> | |
990 | + </property> | |
991 | + </widget> | |
992 | + <widget class="QPushButton" name="favoriteButton"> | |
993 | + <property name="geometry"> | |
994 | + <rect> | |
995 | + <x>673</x> | |
996 | + <y>1319</y> | |
997 | + <width>112</width> | |
998 | + <height>131</height> | |
999 | + </rect> | |
1000 | + </property> | |
1001 | + <property name="styleSheet"> | |
1002 | + <string notr="true">QPushButton { background-image: url(:/images/manual_button/favorites.png); } | |
1003 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_button/favorites_ov.png); }</string> | |
1004 | + </property> | |
1005 | + <property name="style" stdset="0"> | |
1006 | + <string>tool</string> | |
1007 | + </property> | |
1008 | + </widget> | |
1009 | + <widget class="QPushButton" name="reserveButton"> | |
1010 | + <property name="geometry"> | |
1011 | + <rect> | |
1012 | + <x>561</x> | |
1013 | + <y>1319</y> | |
1014 | + <width>112</width> | |
1015 | + <height>131</height> | |
1168 | 1016 | </rect> |
1169 | 1017 | </property> |
1018 | + <property name="styleSheet"> | |
1019 | + <string notr="true">QPushButton { background-image: url(:/images/manual_button/reserve.png); } | |
1020 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_button/reserve_ov.png); }</string> | |
1021 | + </property> | |
1022 | + <property name="style" stdset="0"> | |
1023 | + <string>tool</string> | |
1024 | + </property> | |
1025 | + </widget> | |
1026 | + <widget class="QPushButton" name="fanButton"> | |
1027 | + <property name="geometry"> | |
1028 | + <rect> | |
1029 | + <x>449</x> | |
1030 | + <y>1319</y> | |
1031 | + <width>112</width> | |
1032 | + <height>131</height> | |
1033 | + </rect> | |
1034 | + </property> | |
1035 | + <property name="styleSheet"> | |
1036 | + <string notr="true">QPushButton { background-image: url(:/images/manual_button/fan_4.png); }</string> | |
1037 | + </property> | |
1038 | + <property name="style" stdset="0"> | |
1039 | + <string>tool</string> | |
1040 | + </property> | |
1041 | + </widget> | |
1042 | + <widget class="QWidget" name="sysLine_8" native="true"> | |
1043 | + <property name="geometry"> | |
1044 | + <rect> | |
1045 | + <x>561</x> | |
1046 | + <y>1355</y> | |
1047 | + <width>2</width> | |
1048 | + <height>58</height> | |
1049 | + </rect> | |
1050 | + </property> | |
1051 | + <property name="styleSheet"> | |
1052 | + <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
1053 | + </property> | |
1054 | + </widget> | |
1055 | + <widget class="QWidget" name="sysLine_7" native="true"> | |
1056 | + <property name="geometry"> | |
1057 | + <rect> | |
1058 | + <x>673</x> | |
1059 | + <y>1355</y> | |
1060 | + <width>2</width> | |
1061 | + <height>58</height> | |
1062 | + </rect> | |
1063 | + </property> | |
1064 | + <property name="styleSheet"> | |
1065 | + <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
1066 | + </property> | |
1067 | + </widget> | |
1068 | + <widget class="QPushButton" name="damperButton"> | |
1069 | + <property name="geometry"> | |
1070 | + <rect> | |
1071 | + <x>449</x> | |
1072 | + <y>1319</y> | |
1073 | + <width>112</width> | |
1074 | + <height>131</height> | |
1075 | + </rect> | |
1076 | + </property> | |
1077 | + <property name="styleSheet"> | |
1078 | + <string notr="true">QPushButton { background-image: url(:/images/manual_button/damper_close.png); } | |
1079 | +QPushButton:checked, QPushButton:focus { background-image: url(:/images/manual_button/damper_open.png); }</string> | |
1080 | + </property> | |
1081 | + <property name="checkable"> | |
1082 | + <bool>true</bool> | |
1083 | + </property> | |
1084 | + <property name="style" stdset="0"> | |
1085 | + <string>tool</string> | |
1086 | + </property> | |
1087 | + </widget> | |
1088 | + <widget class="QPushButton" name="repeatButton"> | |
1089 | + <property name="geometry"> | |
1090 | + <rect> | |
1091 | + <x>673</x> | |
1092 | + <y>1319</y> | |
1093 | + <width>112</width> | |
1094 | + <height>131</height> | |
1095 | + </rect> | |
1096 | + </property> | |
1097 | + <property name="styleSheet"> | |
1098 | + <string notr="true">QPushButton { background-image: url(:/images/manual_button/repeat.png); } | |
1099 | +QPushButton:pressed { background-image: url(:/images/manual_button/repeat_ov.png); }</string> | |
1100 | + </property> | |
1101 | + <property name="style" stdset="0"> | |
1102 | + <string>tool</string> | |
1103 | + </property> | |
1104 | + </widget> | |
1105 | + <widget class="QPushButton" name="preheatButton"> | |
1106 | + <property name="geometry"> | |
1107 | + <rect> | |
1108 | + <x>337</x> | |
1109 | + <y>1319</y> | |
1110 | + <width>112</width> | |
1111 | + <height>131</height> | |
1112 | + </rect> | |
1113 | + </property> | |
1114 | + <property name="styleSheet"> | |
1115 | + <string notr="true">QPushButton { background-image: url(:/images/manual_button/preheat.png); } | |
1116 | +QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_button/preheat_ov.png); }</string> | |
1117 | + </property> | |
1118 | + <property name="style" stdset="0"> | |
1119 | + <string>tool</string> | |
1120 | + </property> | |
1121 | + </widget> | |
1122 | + <widget class="QPushButton" name="humidificationButton"> | |
1123 | + <property name="geometry"> | |
1124 | + <rect> | |
1125 | + <x>561</x> | |
1126 | + <y>1319</y> | |
1127 | + <width>112</width> | |
1128 | + <height>131</height> | |
1129 | + </rect> | |
1130 | + </property> | |
1131 | + <property name="styleSheet"> | |
1132 | + <string notr="true">QPushButton, QPushButton:checked:pressed { background-image: url(:/images/manual_button/side_nozzle_close.png); } | |
1133 | +QPushButton:checked, QPushButton:focus, QPushButton:pressed { background-image: url(:/images/manual_button/side_nozzle_open.png); }</string> | |
1134 | + </property> | |
1135 | + <property name="checkable"> | |
1136 | + <bool>true</bool> | |
1137 | + </property> | |
1138 | + <property name="style" stdset="0"> | |
1139 | + <string>tool</string> | |
1140 | + </property> | |
1141 | + </widget> | |
1142 | + <widget class="QWidget" name="sysLine_9" native="true"> | |
1143 | + <property name="geometry"> | |
1144 | + <rect> | |
1145 | + <x>449</x> | |
1146 | + <y>1355</y> | |
1147 | + <width>2</width> | |
1148 | + <height>58</height> | |
1149 | + </rect> | |
1150 | + </property> | |
1151 | + <property name="styleSheet"> | |
1152 | + <string notr="true">background-image: url(:/images/line/manual_button.png);</string> | |
1153 | + </property> | |
1170 | 1154 | </widget> |
1155 | + <zorder>goFrontStackButton</zorder> | |
1156 | + <zorder>fanButton</zorder> | |
1157 | + <zorder>reserveButton</zorder> | |
1158 | + <zorder>favoriteButton</zorder> | |
1159 | + <zorder>cooldownButton</zorder> | |
1160 | + <zorder>preheatButton</zorder> | |
1161 | + <zorder>damperButton</zorder> | |
1162 | + <zorder>repeatButton</zorder> | |
1163 | + <zorder>humidificationButton</zorder> | |
1164 | + <zorder>upperStack</zorder> | |
1165 | + <zorder>combiButton</zorder> | |
1166 | + <zorder>steamButton</zorder> | |
1167 | + <zorder>dryheatButton</zorder> | |
1168 | + <zorder>bottomBar</zorder> | |
1169 | + <zorder>steamLabel_3</zorder> | |
1170 | + <zorder>steamLabel_2</zorder> | |
1171 | + <zorder>timeLabel</zorder> | |
1172 | + <zorder>tempButton</zorder> | |
1173 | + <zorder>tempLabel</zorder> | |
1174 | + <zorder>humidityLabel</zorder> | |
1175 | + <zorder>steamLabel_4</zorder> | |
1176 | + <zorder>humidityButton</zorder> | |
1177 | + <zorder>interTempButton</zorder> | |
1178 | + <zorder>timeButton</zorder> | |
1179 | + <zorder>interTempLabel</zorder> | |
1180 | + <zorder>steamLabel_5</zorder> | |
1181 | + <zorder>runStopButton</zorder> | |
1182 | + <zorder>tempSlider</zorder> | |
1183 | + <zorder>humiditySlider</zorder> | |
1184 | + <zorder>timeSlider</zorder> | |
1185 | + <zorder>interTempSlider</zorder> | |
1186 | + <zorder>sysLine_8</zorder> | |
1187 | + <zorder>sysLine_7</zorder> | |
1188 | + <zorder>sysLine_9</zorder> | |
1171 | 1189 | </widget> |
1172 | 1190 | </widget> |
1173 | 1191 | <customwidgets> |
... | ... | @@ -1194,6 +1212,30 @@ QPushButton:pressed { image: url(:/images/slider_icon/time_ov.png); }</string> |
1194 | 1212 | <container>1</container> |
1195 | 1213 | </customwidget> |
1196 | 1214 | </customwidgets> |
1215 | + <tabstops> | |
1216 | + <tabstop>steamButton</tabstop> | |
1217 | + <tabstop>combiButton</tabstop> | |
1218 | + <tabstop>dryheatButton</tabstop> | |
1219 | + <tabstop>humidityButton</tabstop> | |
1220 | + <tabstop>tempButton</tabstop> | |
1221 | + <tabstop>timeButton</tabstop> | |
1222 | + <tabstop>interTempButton</tabstop> | |
1223 | + <tabstop>runStopButton</tabstop> | |
1224 | + <tabstop>preheatButton</tabstop> | |
1225 | + <tabstop>cooldownButton</tabstop> | |
1226 | + <tabstop>damperButton</tabstop> | |
1227 | + <tabstop>fanButton</tabstop> | |
1228 | + <tabstop>humidificationButton</tabstop> | |
1229 | + <tabstop>reserveButton</tabstop> | |
1230 | + <tabstop>repeatButton</tabstop> | |
1231 | + <tabstop>favoriteButton</tabstop> | |
1232 | + <tabstop>goFrontStackButton</tabstop> | |
1233 | + <tabstop>backButton</tabstop> | |
1234 | + <tabstop>configButton</tabstop> | |
1235 | + <tabstop>favoritesButton</tabstop> | |
1236 | + <tabstop>washButton</tabstop> | |
1237 | + <tabstop>helpButton</tabstop> | |
1238 | + </tabstops> | |
1197 | 1239 | <resources> |
1198 | 1240 | <include location="resources.qrc"/> |
1199 | 1241 | </resources> | ... | ... |
app/gui/oven_control/preheatpopup.cpp
1 | 1 | #include "preheatpopup.h" |
2 | 2 | #include "ui_preheatpopup.h" |
3 | 3 | |
4 | +#include <QKeyEvent> | |
5 | + | |
4 | 6 | #include "stringer.h" |
5 | 7 | |
6 | 8 | PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) : |
... | ... | @@ -28,9 +30,13 @@ PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) : |
28 | 30 | ui->preheatGauge->setMinimum(oven->currentTemp()); |
29 | 31 | ui->preheatGauge->setValue(oven->currentTemp()); |
30 | 32 | |
33 | + ui->infoButton->hide(); | |
34 | + | |
31 | 35 | updateView(); |
32 | 36 | |
33 | 37 | start(); |
38 | + | |
39 | + ui->background->setFocus(); | |
34 | 40 | } |
35 | 41 | |
36 | 42 | PreheatPopup::~PreheatPopup() |
... | ... | @@ -38,6 +44,21 @@ PreheatPopup::~PreheatPopup() |
38 | 44 | delete ui; |
39 | 45 | } |
40 | 46 | |
47 | +void PreheatPopup::keyReleaseEvent(QKeyEvent *event) | |
48 | +{ | |
49 | + switch (event->key()) | |
50 | + { | |
51 | + case 0x01000030: // Turn left | |
52 | + break; | |
53 | + case 0x01000031: // Push | |
54 | + stop(); | |
55 | + close(); | |
56 | + break; | |
57 | + case 0x01000032: // Turn right | |
58 | + break; | |
59 | + } | |
60 | +} | |
61 | + | |
41 | 62 | void PreheatPopup::updateView() |
42 | 63 | { |
43 | 64 | ui->timeLabel->setText(Stringer::remainingTime(oven->msecs(), Stringer::fontSize14)); | ... | ... |
app/gui/oven_control/preheatpopup.h
app/gui/oven_control/preheatpopup.ui
... | ... | @@ -13,7 +13,10 @@ |
13 | 13 | <property name="styleSheet"> |
14 | 14 | <string notr="true">#closeButton { border: none; } |
15 | 15 | #closeButton_2 { border: none; } |
16 | -#background { background-image: url(:/images/background/popup/696.png); }</string> | |
16 | +#background { background-image: url(:/images/background/popup/696.png); } | |
17 | + | |
18 | + | |
19 | +QWidget#background:focus { border: 4px solid gray; }</string> | |
17 | 20 | </property> |
18 | 21 | <widget class="QPushButton" name="closeButton"> |
19 | 22 | <property name="geometry"> |
... | ... | @@ -24,6 +27,9 @@ |
24 | 27 | <height>426</height> |
25 | 28 | </rect> |
26 | 29 | </property> |
30 | + <property name="focusPolicy"> | |
31 | + <enum>Qt::NoFocus</enum> | |
32 | + </property> | |
27 | 33 | <property name="text"> |
28 | 34 | <string/> |
29 | 35 | </property> |
... | ... | @@ -37,6 +43,9 @@ |
37 | 43 | <height>696</height> |
38 | 44 | </rect> |
39 | 45 | </property> |
46 | + <property name="focusPolicy"> | |
47 | + <enum>Qt::TabFocus</enum> | |
48 | + </property> | |
40 | 49 | <widget class="QLabel" name="humidityLabel"> |
41 | 50 | <property name="geometry"> |
42 | 51 | <rect> |
... | ... | @@ -378,6 +387,9 @@ |
378 | 387 | <height>290</height> |
379 | 388 | </rect> |
380 | 389 | </property> |
390 | + <property name="focusPolicy"> | |
391 | + <enum>Qt::NoFocus</enum> | |
392 | + </property> | |
381 | 393 | <property name="styleSheet"> |
382 | 394 | <string notr="true">border: #000000</string> |
383 | 395 | </property> |
... | ... | @@ -659,6 +671,9 @@ border-image: url(:/images/images/auto/btn_01_ov.png); |
659 | 671 | <height>290</height> |
660 | 672 | </rect> |
661 | 673 | </property> |
674 | + <property name="focusPolicy"> | |
675 | + <enum>Qt::NoFocus</enum> | |
676 | + </property> | |
662 | 677 | <property name="styleSheet"> |
663 | 678 | <string notr="true">border: #000000</string> |
664 | 679 | </property> |
... | ... | @@ -789,6 +804,9 @@ border-image: url(:/images/images/auto/btn_01_ov.png); |
789 | 804 | <height>478</height> |
790 | 805 | </rect> |
791 | 806 | </property> |
807 | + <property name="focusPolicy"> | |
808 | + <enum>Qt::NoFocus</enum> | |
809 | + </property> | |
792 | 810 | <property name="text"> |
793 | 811 | <string/> |
794 | 812 | </property> |
... | ... | @@ -814,6 +832,13 @@ border-image: url(:/images/images/auto/btn_01_ov.png); |
814 | 832 | <container>1</container> |
815 | 833 | </customwidget> |
816 | 834 | </customwidgets> |
835 | + <tabstops> | |
836 | + <tabstop>background</tabstop> | |
837 | + <tabstop>infoButton</tabstop> | |
838 | + <tabstop>humidityGaugeButton</tabstop> | |
839 | + <tabstop>selectCookButton_2</tabstop> | |
840 | + <tabstop>heatGaugeButton</tabstop> | |
841 | + </tabstops> | |
817 | 842 | <resources> |
818 | 843 | <include location="resources.qrc"/> |
819 | 844 | </resources> | ... | ... |
app/gui/oven_control/slider.cpp
... | ... | @@ -8,6 +8,7 @@ Slider::Slider(QWidget *parent) : QWidget(parent), |
8 | 8 | isSliderDown_(false), |
9 | 9 | sliderPosition_(0), value_(0), minimum_(0), maximum_(1), |
10 | 10 | subVisible_(true), |
11 | + focused(false), isSliderMoved_(false), | |
11 | 12 | tickInterval(0), bigTickInterval(0) |
12 | 13 | { |
13 | 14 | groove.load(":/images/slider/groove.png"); |
... | ... | @@ -95,16 +96,76 @@ int Slider::sliderPosition() |
95 | 96 | |
96 | 97 | void Slider::setSliderPosition(int value) |
97 | 98 | { |
99 | + value = qBound(minimum_, value, maximum_); | |
100 | + | |
98 | 101 | if (sliderPosition_ == value) |
99 | 102 | return; |
100 | 103 | |
101 | 104 | sliderPosition_ = value; |
105 | + if (focused) | |
106 | + isSliderMoved_ = true; | |
102 | 107 | |
103 | 108 | emit sliderMoved(value); |
104 | 109 | |
105 | 110 | update(); |
106 | 111 | } |
107 | 112 | |
113 | +bool Slider::isSliderMoved() | |
114 | +{ | |
115 | + return isSliderMoved_; | |
116 | +} | |
117 | + | |
118 | +void Slider::focusInEvent(QFocusEvent */*event*/) | |
119 | +{ | |
120 | + focused = true; | |
121 | +} | |
122 | + | |
123 | +void Slider::focusOutEvent(QFocusEvent *event) | |
124 | +{ | |
125 | + QWidget::focusOutEvent(event); | |
126 | + | |
127 | + focused = false; | |
128 | + | |
129 | + if (isSliderMoved_) | |
130 | + { | |
131 | + isSliderMoved_ = false; | |
132 | + value_ = sliderPosition_; | |
133 | + emit valueChanged(value_); | |
134 | + } | |
135 | +} | |
136 | + | |
137 | +void Slider::keyPressEvent(QKeyEvent *event) | |
138 | +{ | |
139 | + switch (event->key()) | |
140 | + { | |
141 | + case 0x01000030: // Turn left | |
142 | + decrease(); | |
143 | + break; | |
144 | + case 0x01000031: // Push | |
145 | + event->ignore(); | |
146 | + break; | |
147 | + case 0x01000032: // Turn right | |
148 | + increase(); | |
149 | + break; | |
150 | + } | |
151 | +} | |
152 | + | |
153 | +void Slider::keyReleaseEvent(QKeyEvent *event) | |
154 | +{ | |
155 | + switch (event->key()) | |
156 | + { | |
157 | + case 0x01000030: // Turn left | |
158 | + decrease(); | |
159 | + break; | |
160 | + case 0x01000031: // Push | |
161 | + event->ignore(); | |
162 | + break; | |
163 | + case 0x01000032: // Turn right | |
164 | + increase(); | |
165 | + break; | |
166 | + } | |
167 | +} | |
168 | + | |
108 | 169 | void Slider::mouseMoveEvent(QMouseEvent *event) |
109 | 170 | { |
110 | 171 | if (!isSliderDown_) |
... | ... | @@ -124,12 +185,7 @@ void Slider::mouseReleaseEvent(QMouseEvent */*event*/) |
124 | 185 | { |
125 | 186 | isSliderDown_ = false; |
126 | 187 | |
127 | - if (sliderPosition_ == value_) | |
128 | - return; | |
129 | - | |
130 | 188 | emit sliderReleased(); |
131 | - | |
132 | - setValue(sliderPosition_); | |
133 | 189 | } |
134 | 190 | |
135 | 191 | void Slider::paintEvent(QPaintEvent */*event*/) |
... | ... | @@ -206,6 +262,7 @@ void Slider::updatePixmapPosition() |
206 | 262 | |
207 | 263 | void Slider::setValue(int value) |
208 | 264 | { |
265 | + value = qBound(minimum_, value, maximum_); | |
209 | 266 | if (value == value_) |
210 | 267 | return; |
211 | 268 | |
... | ... | @@ -215,3 +272,13 @@ void Slider::setValue(int value) |
215 | 272 | |
216 | 273 | emit valueChanged(value); |
217 | 274 | } |
275 | + | |
276 | +void Slider::increase() | |
277 | +{ | |
278 | + setSliderPosition(sliderPosition_ + 1); | |
279 | +} | |
280 | + | |
281 | +void Slider::decrease() | |
282 | +{ | |
283 | + setSliderPosition(sliderPosition_ - 1); | |
284 | +} | ... | ... |
app/gui/oven_control/slider.h
... | ... | @@ -25,6 +25,8 @@ class Slider : public QWidget |
25 | 25 | QPoint subPoint; |
26 | 26 | |
27 | 27 | bool subVisible_; |
28 | + bool focused; | |
29 | + bool isSliderMoved_; | |
28 | 30 | |
29 | 31 | public: |
30 | 32 | explicit Slider(QWidget *parent = 0); |
... | ... | @@ -44,6 +46,7 @@ public: |
44 | 46 | bool isSliderDown(); |
45 | 47 | int sliderPosition(); |
46 | 48 | void setSliderPosition(int value); |
49 | + bool isSliderMoved(); | |
47 | 50 | |
48 | 51 | QList<int> ticks; |
49 | 52 | QList<int> bigTicks; |
... | ... | @@ -52,6 +55,10 @@ public: |
52 | 55 | int bigTickInterval; |
53 | 56 | |
54 | 57 | protected: |
58 | + virtual void focusInEvent(QFocusEvent *event); | |
59 | + virtual void focusOutEvent(QFocusEvent *event); | |
60 | + virtual void keyPressEvent(QKeyEvent *event); | |
61 | + virtual void keyReleaseEvent(QKeyEvent *event); | |
55 | 62 | virtual void mouseMoveEvent(QMouseEvent *event); |
56 | 63 | virtual void mousePressEvent(QMouseEvent *event); |
57 | 64 | virtual void mouseReleaseEvent(QMouseEvent *event); |
... | ... | @@ -71,7 +78,8 @@ signals: |
71 | 78 | |
72 | 79 | public slots: |
73 | 80 | void setValue(int value); |
74 | - | |
81 | + void increase(); | |
82 | + void decrease(); | |
75 | 83 | }; |
76 | 84 | |
77 | 85 | #endif // SLIDER_H | ... | ... |
app/gui/oven_control/washwindow.cpp
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 | #include "ui_washwindow.h" |
3 | 3 | |
4 | 4 | #include <QSignalMapper> |
5 | +#include <QKeyEvent> | |
5 | 6 | |
6 | 7 | #include "soundplayer.h" |
7 | 8 | #include "dirtylevel.h" |
... | ... | @@ -53,6 +54,8 @@ WashWindow::WashWindow(QWidget *parent) : |
53 | 54 | connect(button, &QPushButton::pressed, SoundPlayer::playClick); |
54 | 55 | |
55 | 56 | updateGauge(); |
57 | + | |
58 | + setFocus(); | |
56 | 59 | } |
57 | 60 | |
58 | 61 | WashWindow::~WashWindow() |
... | ... | @@ -60,6 +63,41 @@ WashWindow::~WashWindow() |
60 | 63 | delete ui; |
61 | 64 | } |
62 | 65 | |
66 | +void WashWindow::keyPressEvent(QKeyEvent *event) | |
67 | +{ | |
68 | + switch (event->key()) | |
69 | + { | |
70 | + case 0x01000030: // Turn left | |
71 | + onEncoderLeft(); | |
72 | + break; | |
73 | + case 0x01000031: // Push | |
74 | + pushed = focusWidget(); | |
75 | + break; | |
76 | + case 0x01000032: // Turn right | |
77 | + onEncoderRight(); | |
78 | + break; | |
79 | + } | |
80 | +} | |
81 | + | |
82 | +void WashWindow::keyReleaseEvent(QKeyEvent *event) | |
83 | +{ | |
84 | + switch (event->key()) | |
85 | + { | |
86 | + case 0x01000030: // Turn left | |
87 | + onEncoderLeft(); | |
88 | + break; | |
89 | + case 0x01000031: // Push | |
90 | + if (focusWidget() == pushed) | |
91 | + onEncoderClicked(pushed); | |
92 | + | |
93 | + pushed = NULL; | |
94 | + break; | |
95 | + case 0x01000032: // Turn right | |
96 | + onEncoderRight(); | |
97 | + break; | |
98 | + } | |
99 | +} | |
100 | + | |
63 | 101 | void WashWindow::start(int type) |
64 | 102 | { |
65 | 103 | if (selected) |
... | ... | @@ -273,3 +311,20 @@ void WashWindow::on_helpButton_clicked() |
273 | 311 | { |
274 | 312 | |
275 | 313 | } |
314 | + | |
315 | +void WashWindow::onEncoderLeft() | |
316 | +{ | |
317 | + focusPreviousChild(); | |
318 | +} | |
319 | + | |
320 | +void WashWindow::onEncoderRight() | |
321 | +{ | |
322 | + focusNextChild(); | |
323 | +} | |
324 | + | |
325 | +void WashWindow::onEncoderClicked(QWidget *clicked) | |
326 | +{ | |
327 | + QPushButton *b = qobject_cast<QPushButton *>(clicked); | |
328 | + if (b) | |
329 | + b->click(); | |
330 | +} | ... | ... |
app/gui/oven_control/washwindow.h
... | ... | @@ -18,16 +18,20 @@ public: |
18 | 18 | explicit WashWindow(QWidget *parent = 0); |
19 | 19 | ~WashWindow(); |
20 | 20 | |
21 | +protected: | |
22 | + void keyPressEvent(QKeyEvent *event); | |
23 | + void keyReleaseEvent(QKeyEvent *event); | |
24 | + | |
21 | 25 | private slots: |
22 | 26 | void start(int type); |
23 | 27 | void stop(); |
24 | 28 | void returnToClock(); |
25 | 29 | void updateGauge(); |
30 | + | |
26 | 31 | void onChanged(); |
27 | - void on_backButton_clicked(); | |
28 | 32 | |
33 | + void on_backButton_clicked(); | |
29 | 34 | void on_configButton_clicked(); |
30 | - | |
31 | 35 | void on_helpButton_clicked(); |
32 | 36 | |
33 | 37 | private: |
... | ... | @@ -42,6 +46,12 @@ private: |
42 | 46 | int type; |
43 | 47 | |
44 | 48 | QTimer returnToClockTimer; |
49 | + | |
50 | + QWidget *pushed = NULL; | |
51 | + | |
52 | + void onEncoderLeft(); | |
53 | + void onEncoderRight(); | |
54 | + void onEncoderClicked(QWidget *clicked); | |
45 | 55 | }; |
46 | 56 | |
47 | 57 | #endif // WASHWINDOW_H | ... | ... |
app/gui/oven_control/washwindow.ui
... | ... | @@ -482,7 +482,7 @@ border: none; |
482 | 482 | </property> |
483 | 483 | <property name="styleSheet"> |
484 | 484 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/back.png); } |
485 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</string> | |
485 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/back_ov.png); }</string> | |
486 | 486 | </property> |
487 | 487 | <property name="text"> |
488 | 488 | <string/> |
... | ... | @@ -505,7 +505,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); }</str |
505 | 505 | </property> |
506 | 506 | <property name="styleSheet"> |
507 | 507 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/config.png); } |
508 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</string> | |
508 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/config_ov.png); }</string> | |
509 | 509 | </property> |
510 | 510 | <property name="text"> |
511 | 511 | <string/> |
... | ... | @@ -528,7 +528,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); }</s |
528 | 528 | </property> |
529 | 529 | <property name="styleSheet"> |
530 | 530 | <string notr="true">QPushButton { border-image: url(:/images/bottom_bar/help.png); } |
531 | -QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</string> | |
531 | +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/help_ov.png); }</string> | |
532 | 532 | </property> |
533 | 533 | <property name="text"> |
534 | 534 | <string/> |
... | ... | @@ -545,11 +545,11 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); }</str |
545 | 545 | </rect> |
546 | 546 | </property> |
547 | 547 | <property name="focusPolicy"> |
548 | - <enum>Qt::NoFocus</enum> | |
548 | + <enum>Qt::StrongFocus</enum> | |
549 | 549 | </property> |
550 | 550 | <property name="styleSheet"> |
551 | 551 | <string notr="true">QPushButton { background-image: url(:/images/wash/button_1.png); } |
552 | -QPushButton::pressed { background-image: url(:/images/wash/button_1_ov.png); }</string> | |
552 | +QPushButton::pressed, QPushButton:focus { background-image: url(:/images/wash/button_1_ov.png); }</string> | |
553 | 553 | </property> |
554 | 554 | <property name="text"> |
555 | 555 | <string>세제 없이 헹굼</string> |
... | ... | @@ -568,11 +568,11 @@ QPushButton::pressed { background-image: url(:/images/wash/button_1_ov.png); }</ |
568 | 568 | </rect> |
569 | 569 | </property> |
570 | 570 | <property name="focusPolicy"> |
571 | - <enum>Qt::NoFocus</enum> | |
571 | + <enum>Qt::StrongFocus</enum> | |
572 | 572 | </property> |
573 | 573 | <property name="styleSheet"> |
574 | 574 | <string notr="true">QPushButton { background-image: url(:/images/wash/button_2.png); } |
575 | -QPushButton::pressed { background-image: url(:/images/wash/button_2_ov.png); }</string> | |
575 | +QPushButton::pressed, QPushButton:focus { background-image: url(:/images/wash/button_2_ov.png); }</string> | |
576 | 576 | </property> |
577 | 577 | <property name="text"> |
578 | 578 | <string>간이 세척</string> |
... | ... | @@ -591,11 +591,11 @@ QPushButton::pressed { background-image: url(:/images/wash/button_2_ov.png); }</ |
591 | 591 | </rect> |
592 | 592 | </property> |
593 | 593 | <property name="focusPolicy"> |
594 | - <enum>Qt::NoFocus</enum> | |
594 | + <enum>Qt::StrongFocus</enum> | |
595 | 595 | </property> |
596 | 596 | <property name="styleSheet"> |
597 | 597 | <string notr="true">QPushButton { background-image: url(:/images/wash/button_3.png); } |
598 | -QPushButton::pressed { background-image: url(:/images/wash/button_3_ov.png); }</string> | |
598 | +QPushButton::pressed, QPushButton:focus { background-image: url(:/images/wash/button_3_ov.png); }</string> | |
599 | 599 | </property> |
600 | 600 | <property name="text"> |
601 | 601 | <string>표준 세척</string> |
... | ... | @@ -614,11 +614,11 @@ QPushButton::pressed { background-image: url(:/images/wash/button_3_ov.png); }</ |
614 | 614 | </rect> |
615 | 615 | </property> |
616 | 616 | <property name="focusPolicy"> |
617 | - <enum>Qt::NoFocus</enum> | |
617 | + <enum>Qt::StrongFocus</enum> | |
618 | 618 | </property> |
619 | 619 | <property name="styleSheet"> |
620 | 620 | <string notr="true">QPushButton { background-image: url(:/images/wash/button_4.png); } |
621 | -QPushButton::pressed { background-image: url(:/images/wash/button_4_ov.png); }</string> | |
621 | +QPushButton::pressed, QPushButton:focus { background-image: url(:/images/wash/button_4_ov.png); }</string> | |
622 | 622 | </property> |
623 | 623 | <property name="text"> |
624 | 624 | <string>강 세척</string> |
... | ... | @@ -637,11 +637,11 @@ QPushButton::pressed { background-image: url(:/images/wash/button_4_ov.png); }</ |
637 | 637 | </rect> |
638 | 638 | </property> |
639 | 639 | <property name="focusPolicy"> |
640 | - <enum>Qt::NoFocus</enum> | |
640 | + <enum>Qt::StrongFocus</enum> | |
641 | 641 | </property> |
642 | 642 | <property name="styleSheet"> |
643 | 643 | <string notr="true">QPushButton { background-image: url(:/images/wash/button_5.png); } |
644 | -QPushButton::pressed { background-image: url(:/images/wash/button_5_ov.png); }</string> | |
644 | +QPushButton::pressed, QPushButton:focus { background-image: url(:/images/wash/button_5_ov.png); }</string> | |
645 | 645 | </property> |
646 | 646 | <property name="text"> |
647 | 647 | <string>고속 세척</string> |
... | ... | @@ -721,6 +721,9 @@ QPushButton::pressed { background-image: url(:/images/wash/button_5_ov.png); }</ |
721 | 721 | <height>140</height> |
722 | 722 | </rect> |
723 | 723 | </property> |
724 | + <property name="focusPolicy"> | |
725 | + <enum>Qt::NoFocus</enum> | |
726 | + </property> | |
724 | 727 | <property name="styleSheet"> |
725 | 728 | <string notr="true">QPushButton { image: url(:/images/slider_icon/management.png); } |
726 | 729 | QPushButton:pressed { image: url(:/images/slider_icon/management_ov.png); }</string> |
... | ... | @@ -870,6 +873,9 @@ QPushButton:pressed { image: url(:/images/slider_icon/management_ov.png); }</str |
870 | 873 | <height>33</height> |
871 | 874 | </rect> |
872 | 875 | </property> |
876 | + <property name="focusPolicy"> | |
877 | + <enum>Qt::NoFocus</enum> | |
878 | + </property> | |
873 | 879 | <property name="maximum"> |
874 | 880 | <number>5</number> |
875 | 881 | </property> |
... | ... | @@ -960,6 +966,9 @@ QPushButton:pressed { image: url(:/images/slider_icon/management_ov.png); }</str |
960 | 966 | <height>140</height> |
961 | 967 | </rect> |
962 | 968 | </property> |
969 | + <property name="focusPolicy"> | |
970 | + <enum>Qt::NoFocus</enum> | |
971 | + </property> | |
963 | 972 | <property name="styleSheet"> |
964 | 973 | <string notr="true">QPushButton { image: url(:/images/slider_icon/clean.png); } |
965 | 974 | QPushButton:pressed { image: url(:/images/slider_icon/clean_ov.png); }</string> |
... | ... | @@ -1109,6 +1118,9 @@ QPushButton:pressed { image: url(:/images/slider_icon/clean_ov.png); }</string> |
1109 | 1118 | <height>33</height> |
1110 | 1119 | </rect> |
1111 | 1120 | </property> |
1121 | + <property name="focusPolicy"> | |
1122 | + <enum>Qt::NoFocus</enum> | |
1123 | + </property> | |
1112 | 1124 | <property name="maximum"> |
1113 | 1125 | <number>5</number> |
1114 | 1126 | </property> |
... | ... | @@ -1180,6 +1192,16 @@ QPushButton:pressed { image: url(:/images/slider_icon/clean_ov.png); }</string> |
1180 | 1192 | <container>1</container> |
1181 | 1193 | </customwidget> |
1182 | 1194 | </customwidgets> |
1195 | + <tabstops> | |
1196 | + <tabstop>washButton_1</tabstop> | |
1197 | + <tabstop>washButton_2</tabstop> | |
1198 | + <tabstop>washButton_3</tabstop> | |
1199 | + <tabstop>washButton_4</tabstop> | |
1200 | + <tabstop>washButton_5</tabstop> | |
1201 | + <tabstop>backButton</tabstop> | |
1202 | + <tabstop>configButton</tabstop> | |
1203 | + <tabstop>helpButton</tabstop> | |
1204 | + </tabstops> | |
1183 | 1205 | <resources> |
1184 | 1206 | <include location="resources.qrc"/> |
1185 | 1207 | </resources> | ... | ... |