Commit 51175dd1aa7c3b44e66c4391deb4e645cbb11b22

Authored by 김태훈
1 parent 6139c8c790
Exists in master and in 2 other branches fhd, fhd-demo

엔코더 구현

- 프로그래밍 모드
app/gui/oven_control/cookpanelbutton.cpp
@@ -81,6 +81,11 @@ QPushButton *CookPanelButton::bar() @@ -81,6 +81,11 @@ QPushButton *CookPanelButton::bar()
81 return ui->pushButton; 81 return ui->pushButton;
82 } 82 }
83 83
  84 +QPushButton *CookPanelButton::infoButton()
  85 +{
  86 + return ui->showInfoButton;
  87 +}
  88 +
84 QPushButton *CookPanelButton::deleteButton() 89 QPushButton *CookPanelButton::deleteButton()
85 { 90 {
86 return ui->deleteButton; 91 return ui->deleteButton;
@@ -93,40 +98,45 @@ void CookPanelButton::setEnabled(bool enabled) @@ -93,40 +98,45 @@ void CookPanelButton::setEnabled(bool enabled)
93 ui->deleteButton->setEnabled(enabled); 98 ui->deleteButton->setEnabled(enabled);
94 } 99 }
95 100
96 -//void CookPanelButton::keyPressEvent(QKeyEvent *event)  
97 -//{  
98 -// switch (event->key())  
99 -// {  
100 -// case 0x01000030: // Turn left  
101 -// onEncoderLeft();  
102 -// break;  
103 -// case 0x01000031: // Push  
104 -// pushed = focusWidget();  
105 -// break;  
106 -// case 0x01000032: // Turn right  
107 -// onEncoderRight();  
108 -// break;  
109 -// }  
110 -//}  
111 -  
112 -//void CookPanelButton::keyReleaseEvent(QKeyEvent *event)  
113 -//{  
114 -// switch (event->key())  
115 -// {  
116 -// case 0x01000030: // Turn left  
117 -// onEncoderLeft();  
118 -// break;  
119 -// case 0x01000031: // Push  
120 -// if (focusWidget() == pushed)  
121 -// onEncoderClicked(pushed);  
122 -  
123 -// pushed = NULL;  
124 -// break;  
125 -// case 0x01000032: // Turn right  
126 -// onEncoderRight();  
127 -// break;  
128 -// }  
129 -//} 101 +void CookPanelButton::keyPressEvent(QKeyEvent *event)
  102 +{
  103 + switch (event->key())
  104 + {
  105 + case 0x01000030: // Turn left
  106 + event->ignore();
  107 + break;
  108 + case 0x01000031: // Push
  109 + pushed = focusWidget();
  110 + if (pushed == ui->pushButton)
  111 + on_pushButton_pressed();
  112 + break;
  113 + case 0x01000032: // Turn right
  114 + event->ignore();
  115 + break;
  116 + }
  117 +}
  118 +
  119 +void CookPanelButton::keyReleaseEvent(QKeyEvent *event)
  120 +{
  121 + switch (event->key())
  122 + {
  123 + case 0x01000030: // Turn left
  124 + event->ignore();
  125 + break;
  126 + case 0x01000031: // Push
  127 + if (pushed == ui->pushButton)
  128 + on_pushButton_released();
  129 +
  130 + if (focusWidget() == pushed)
  131 + onEncoderClicked(pushed);
  132 +
  133 + pushed = NULL;
  134 + break;
  135 + case 0x01000032: // Turn right
  136 + event->ignore();
  137 + break;
  138 + }
  139 +}
130 140
131 void CookPanelButton::emitLongPressed() 141 void CookPanelButton::emitLongPressed()
132 { 142 {
@@ -165,7 +175,9 @@ void CookPanelButton::onEncoderRight() @@ -165,7 +175,9 @@ void CookPanelButton::onEncoderRight()
165 175
166 void CookPanelButton::onEncoderClicked(QWidget *clicked) 176 void CookPanelButton::onEncoderClicked(QWidget *clicked)
167 { 177 {
168 - 178 + QPushButton *b = qobject_cast<QPushButton *>(clicked);
  179 + if (b)
  180 + b->click();
169 } 181 }
170 182
171 void CookPanelButton::on_pushButton_pressed() 183 void CookPanelButton::on_pushButton_pressed()
app/gui/oven_control/cookpanelbutton.h
@@ -39,6 +39,7 @@ public: @@ -39,6 +39,7 @@ public:
39 void setLongPressEnabled(bool enabled); 39 void setLongPressEnabled(bool enabled);
40 40
41 QPushButton *bar(); 41 QPushButton *bar();
  42 + QPushButton *infoButton();
42 QPushButton *deleteButton(); 43 QPushButton *deleteButton();
43 44
44 CookRecord record; 45 CookRecord record;
@@ -47,8 +48,8 @@ public slots: @@ -47,8 +48,8 @@ public slots:
47 void setEnabled(bool enabled = true); 48 void setEnabled(bool enabled = true);
48 49
49 protected: 50 protected:
50 -// void keyPressEvent(QKeyEvent *event);  
51 -// void keyReleaseEvent(QKeyEvent *event); 51 + void keyPressEvent(QKeyEvent *event);
  52 + void keyReleaseEvent(QKeyEvent *event);
52 53
53 private slots: 54 private slots:
54 void emitLongPressed(); 55 void emitLongPressed();
app/gui/oven_control/programmingautoconfigwindow.cpp
@@ -62,8 +62,19 @@ ProgrammingAutoConfigWindow::ProgrammingAutoConfigWindow(QWidget *parent, Cook c @@ -62,8 +62,19 @@ ProgrammingAutoConfigWindow::ProgrammingAutoConfigWindow(QWidget *parent, Cook c
62 62
63 setupUi(); 63 setupUi();
64 64
  65 + afterThreeSecsTimer.setSingleShot(true);
  66 + afterThreeSecsTimer.setInterval(3000);
  67 + connect(&afterThreeSecsTimer, SIGNAL(timeout()), SLOT(afterThreeSecs()));
  68 +
65 foreach (QPushButton *button, findChildren<QPushButton *>()) 69 foreach (QPushButton *button, findChildren<QPushButton *>())
66 connect(button, &QPushButton::pressed, SoundPlayer::playClick); 70 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
  71 +
  72 + foreach (QWidget *w, findChildren<QWidget *>())
  73 + w->installEventFilter(this);
  74 +
  75 + installEventFilter(this);
  76 +
  77 + setFocus();
67 } 78 }
68 79
69 ProgrammingAutoConfigWindow::~ProgrammingAutoConfigWindow() 80 ProgrammingAutoConfigWindow::~ProgrammingAutoConfigWindow()
@@ -71,6 +82,24 @@ ProgrammingAutoConfigWindow::~ProgrammingAutoConfigWindow() @@ -71,6 +82,24 @@ ProgrammingAutoConfigWindow::~ProgrammingAutoConfigWindow()
71 delete ui; 82 delete ui;
72 } 83 }
73 84
  85 +bool ProgrammingAutoConfigWindow::eventFilter(QObject */*watched*/, QEvent *event)
  86 +{
  87 + switch (event->type())
  88 + {
  89 + case QEvent::KeyPress:
  90 + case QEvent::KeyRelease:
  91 + case QEvent::MouseButtonPress:
  92 + case QEvent::MouseButtonRelease:
  93 + case QEvent::MouseMove:
  94 + afterThreeSecsTimer.start();
  95 + break;
  96 + default:
  97 + break;
  98 + }
  99 +
  100 + return false;
  101 +}
  102 +
74 void ProgrammingAutoConfigWindow::keyPressEvent(QKeyEvent *event) 103 void ProgrammingAutoConfigWindow::keyPressEvent(QKeyEvent *event)
75 { 104 {
76 switch (event->key()) 105 switch (event->key())
@@ -108,17 +137,42 @@ void ProgrammingAutoConfigWindow::keyReleaseEvent(QKeyEvent *event) @@ -108,17 +137,42 @@ void ProgrammingAutoConfigWindow::keyReleaseEvent(QKeyEvent *event)
108 137
109 void ProgrammingAutoConfigWindow::onEncoderLeft() 138 void ProgrammingAutoConfigWindow::onEncoderLeft()
110 { 139 {
111 - 140 + focusPreviousChild();
112 } 141 }
113 142
114 void ProgrammingAutoConfigWindow::onEncoderRight() 143 void ProgrammingAutoConfigWindow::onEncoderRight()
115 { 144 {
116 - 145 + focusNextChild();
117 } 146 }
118 147
119 void ProgrammingAutoConfigWindow::onEncoderClicked(QWidget *clicked) 148 void ProgrammingAutoConfigWindow::onEncoderClicked(QWidget *clicked)
120 { 149 {
  150 + if (clicked == NULL)
  151 + return;
121 152
  153 + if (clicked->inherits("QPushButton"))
  154 + {
  155 + QPushButton *pb = qobject_cast<QPushButton *>(clicked);
  156 + if (pb)
  157 + pb->click();
  158 + }
  159 + else if (clicked->inherits("Slider"))
  160 + {
  161 + Slider *slider = qobject_cast<Slider *>(clicked);
  162 + if (slider)
  163 + {
  164 + if (slider == ui->configSlider_1)
  165 + ui->configButton_1->setFocus();
  166 + else if (slider == ui->configSlider_2)
  167 + ui->configButton_2->setFocus();
  168 + else if (slider == ui->configSlider_3)
  169 + ui->configButton_3->setFocus();
  170 + else if (slider == ui->configSlider_4)
  171 + ui->configButton_4->setFocus();
  172 + else if (slider == ui->configSlider_5)
  173 + ui->configButton_5->setFocus();
  174 + }
  175 + }
122 } 176 }
123 177
124 void ProgrammingAutoConfigWindow::setupUi() 178 void ProgrammingAutoConfigWindow::setupUi()
@@ -144,7 +198,7 @@ void ProgrammingAutoConfigWindow::setupUi() @@ -144,7 +198,7 @@ void ProgrammingAutoConfigWindow::setupUi()
144 cw.button->setStyleSheet( 198 cw.button->setStyleSheet(
145 "QPushButton { image: url(" 199 "QPushButton { image: url("
146 + Define::icon(config.type) 200 + Define::icon(config.type)
147 - + ") } QPushButton::pressed { image: url(" 201 + + ") } QPushButton::pressed, QPushButton:focus { image: url("
148 + Define::iconOverlay(config.type) 202 + Define::iconOverlay(config.type)
149 + ") }"); 203 + ") }");
150 204
@@ -220,6 +274,24 @@ void ProgrammingAutoConfigWindow::updateConfig() @@ -220,6 +274,24 @@ void ProgrammingAutoConfigWindow::updateConfig()
220 updateView(); 274 updateView();
221 } 275 }
222 276
  277 +void ProgrammingAutoConfigWindow::afterThreeSecs()
  278 +{
  279 + Slider *slider = qobject_cast<Slider *>(focusWidget());
  280 + if (slider)
  281 + {
  282 + if (slider == ui->configSlider_1)
  283 + ui->configButton_1->setFocus();
  284 + else if (slider == ui->configSlider_2)
  285 + ui->configButton_2->setFocus();
  286 + else if (slider == ui->configSlider_3)
  287 + ui->configButton_3->setFocus();
  288 + else if (slider == ui->configSlider_4)
  289 + ui->configButton_4->setFocus();
  290 + else if (slider == ui->configSlider_5)
  291 + ui->configButton_5->setFocus();
  292 + }
  293 +}
  294 +
223 void ProgrammingAutoConfigWindow::on_backButton_clicked() 295 void ProgrammingAutoConfigWindow::on_backButton_clicked()
224 { 296 {
225 close(); 297 close();
@@ -257,3 +329,28 @@ void ProgrammingAutoConfigWindow::on_okButton_clicked() @@ -257,3 +329,28 @@ void ProgrammingAutoConfigWindow::on_okButton_clicked()
257 emit added(); 329 emit added();
258 close(); 330 close();
259 } 331 }
  332 +
  333 +void ProgrammingAutoConfigWindow::on_configButton_1_clicked()
  334 +{
  335 + ui->configSlider_1->setFocus();
  336 +}
  337 +
  338 +void ProgrammingAutoConfigWindow::on_configButton_2_clicked()
  339 +{
  340 + ui->configSlider_2->setFocus();
  341 +}
  342 +
  343 +void ProgrammingAutoConfigWindow::on_configButton_3_clicked()
  344 +{
  345 + ui->configSlider_3->setFocus();
  346 +}
  347 +
  348 +void ProgrammingAutoConfigWindow::on_configButton_4_clicked()
  349 +{
  350 + ui->configSlider_4->setFocus();
  351 +}
  352 +
  353 +void ProgrammingAutoConfigWindow::on_configButton_5_clicked()
  354 +{
  355 + ui->configSlider_5->setFocus();
  356 +}
app/gui/oven_control/programmingautoconfigwindow.h
@@ -21,6 +21,8 @@ public: @@ -21,6 +21,8 @@ public:
21 explicit ProgrammingAutoConfigWindow(QWidget *parent, Cook cook); 21 explicit ProgrammingAutoConfigWindow(QWidget *parent, Cook cook);
22 ~ProgrammingAutoConfigWindow(); 22 ~ProgrammingAutoConfigWindow();
23 23
  24 + bool eventFilter(QObject *watched, QEvent *event);
  25 +
24 protected: 26 protected:
25 void keyPressEvent(QKeyEvent *event); 27 void keyPressEvent(QKeyEvent *event);
26 void keyReleaseEvent(QKeyEvent *event); 28 void keyReleaseEvent(QKeyEvent *event);
@@ -45,10 +47,13 @@ private: @@ -45,10 +47,13 @@ private:
45 void onEncoderRight(); 47 void onEncoderRight();
46 void onEncoderClicked(QWidget *clicked); 48 void onEncoderClicked(QWidget *clicked);
47 49
  50 + QTimer afterThreeSecsTimer;
  51 +
48 private slots: 52 private slots:
49 void setupUi(); 53 void setupUi();
50 void updateView(); 54 void updateView();
51 void updateConfig(); 55 void updateConfig();
  56 + void afterThreeSecs();
52 57
53 void on_backButton_clicked(); 58 void on_backButton_clicked();
54 59
@@ -58,6 +63,16 @@ private slots: @@ -58,6 +63,16 @@ private slots:
58 63
59 void on_okButton_clicked(); 64 void on_okButton_clicked();
60 65
  66 + void on_configButton_1_clicked();
  67 +
  68 + void on_configButton_2_clicked();
  69 +
  70 + void on_configButton_3_clicked();
  71 +
  72 + void on_configButton_4_clicked();
  73 +
  74 + void on_configButton_5_clicked();
  75 +
61 signals: 76 signals:
62 void added(); 77 void added();
63 }; 78 };
app/gui/oven_control/programmingautoconfigwindow.ui
@@ -1308,6 +1308,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c @@ -1308,6 +1308,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c
1308 <height>140</height> 1308 <height>140</height>
1309 </rect> 1309 </rect>
1310 </property> 1310 </property>
  1311 + <property name="focusPolicy">
  1312 + <enum>Qt::ClickFocus</enum>
  1313 + </property>
1311 </widget> 1314 </widget>
1312 <widget class="Slider" name="configSlider_3" native="true"> 1315 <widget class="Slider" name="configSlider_3" native="true">
1313 <property name="geometry"> 1316 <property name="geometry">
@@ -1318,6 +1321,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c @@ -1318,6 +1321,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c
1318 <height>140</height> 1321 <height>140</height>
1319 </rect> 1322 </rect>
1320 </property> 1323 </property>
  1324 + <property name="focusPolicy">
  1325 + <enum>Qt::ClickFocus</enum>
  1326 + </property>
1321 </widget> 1327 </widget>
1322 <widget class="Slider" name="configSlider_2" native="true"> 1328 <widget class="Slider" name="configSlider_2" native="true">
1323 <property name="geometry"> 1329 <property name="geometry">
@@ -1328,6 +1334,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c @@ -1328,6 +1334,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c
1328 <height>140</height> 1334 <height>140</height>
1329 </rect> 1335 </rect>
1330 </property> 1336 </property>
  1337 + <property name="focusPolicy">
  1338 + <enum>Qt::ClickFocus</enum>
  1339 + </property>
1331 </widget> 1340 </widget>
1332 <widget class="Slider" name="configSlider_5" native="true"> 1341 <widget class="Slider" name="configSlider_5" native="true">
1333 <property name="geometry"> 1342 <property name="geometry">
@@ -1338,6 +1347,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c @@ -1338,6 +1347,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c
1338 <height>140</height> 1347 <height>140</height>
1339 </rect> 1348 </rect>
1340 </property> 1349 </property>
  1350 + <property name="focusPolicy">
  1351 + <enum>Qt::ClickFocus</enum>
  1352 + </property>
1341 </widget> 1353 </widget>
1342 <widget class="Slider" name="configSlider_1" native="true"> 1354 <widget class="Slider" name="configSlider_1" native="true">
1343 <property name="geometry"> 1355 <property name="geometry">
@@ -1348,6 +1360,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c @@ -1348,6 +1360,9 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c
1348 <height>140</height> 1360 <height>140</height>
1349 </rect> 1361 </rect>
1350 </property> 1362 </property>
  1363 + <property name="focusPolicy">
  1364 + <enum>Qt::ClickFocus</enum>
  1365 + </property>
1351 </widget> 1366 </widget>
1352 </widget> 1367 </widget>
1353 </widget> 1368 </widget>
@@ -1370,6 +1385,19 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c @@ -1370,6 +1385,19 @@ QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/c
1370 <container>1</container> 1385 <container>1</container>
1371 </customwidget> 1386 </customwidget>
1372 </customwidgets> 1387 </customwidgets>
  1388 + <tabstops>
  1389 + <tabstop>selectCookButton</tabstop>
  1390 + <tabstop>pushButton_4</tabstop>
  1391 + <tabstop>configButton_1</tabstop>
  1392 + <tabstop>configButton_2</tabstop>
  1393 + <tabstop>configButton_3</tabstop>
  1394 + <tabstop>configButton_4</tabstop>
  1395 + <tabstop>configButton_5</tabstop>
  1396 + <tabstop>backButton</tabstop>
  1397 + <tabstop>configButton</tabstop>
  1398 + <tabstop>helpButton</tabstop>
  1399 + <tabstop>okButton</tabstop>
  1400 + </tabstops>
1373 <resources> 1401 <resources>
1374 <include location="resources.qrc"/> 1402 <include location="resources.qrc"/>
1375 </resources> 1403 </resources>
app/gui/oven_control/programmingautoselectionwindow.cpp
@@ -36,10 +36,11 @@ ProgrammingAutoSelectionWindow::ProgrammingAutoSelectionWindow(QWidget *parent, @@ -36,10 +36,11 @@ ProgrammingAutoSelectionWindow::ProgrammingAutoSelectionWindow(QWidget *parent,
36 QPushButton {\ 36 QPushButton {\
37 border-image: url(:/images/button/288.png);\ 37 border-image: url(:/images/button/288.png);\
38 }\ 38 }\
39 -QPushButton:pressed {\ 39 +QPushButton:pressed, QPushButton:focus {\
40 border-image: url(:/images/button/288_ov.png);\ 40 border-image: url(:/images/button/288_ov.png);\
41 }"); 41 }");
42 42
  43 + QWidget *last = this;
43 for (int idx = 0; idx < book.list.size(); idx++) 44 for (int idx = 0; idx < book.list.size(); idx++)
44 { 45 {
45 int x = 12 + (idx % 3) * 294; 46 int x = 12 + (idx % 3) * 294;
@@ -53,10 +54,21 @@ QPushButton:pressed {\ @@ -53,10 +54,21 @@ QPushButton:pressed {\
53 54
54 sm->setMapping(pb, idx); 55 sm->setMapping(pb, idx);
55 connect(pb, SIGNAL(clicked()), sm, SLOT(map())); 56 connect(pb, SIGNAL(clicked()), sm, SLOT(map()));
  57 +
  58 + setTabOrder(last, pb);
  59 +
  60 + last = pb;
56 } 61 }
57 62
  63 + setTabOrder(last, ui->backButton);
  64 + setTabOrder(ui->backButton, ui->configButton);
  65 + setTabOrder(ui->configButton, ui->helpButton);
  66 + setTabOrder(ui->helpButton, ui->okButton);
  67 +
58 foreach (QPushButton *button, findChildren<QPushButton *>()) 68 foreach (QPushButton *button, findChildren<QPushButton *>())
59 connect(button, &QPushButton::pressed, SoundPlayer::playClick); 69 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
  70 +
  71 + setFocus();
60 } 72 }
61 73
62 ProgrammingAutoSelectionWindow::~ProgrammingAutoSelectionWindow() 74 ProgrammingAutoSelectionWindow::~ProgrammingAutoSelectionWindow()
@@ -101,17 +113,19 @@ void ProgrammingAutoSelectionWindow::keyReleaseEvent(QKeyEvent *event) @@ -101,17 +113,19 @@ void ProgrammingAutoSelectionWindow::keyReleaseEvent(QKeyEvent *event)
101 113
102 void ProgrammingAutoSelectionWindow::onEncoderLeft() 114 void ProgrammingAutoSelectionWindow::onEncoderLeft()
103 { 115 {
104 - 116 + focusPreviousChild();
105 } 117 }
106 118
107 void ProgrammingAutoSelectionWindow::onEncoderRight() 119 void ProgrammingAutoSelectionWindow::onEncoderRight()
108 { 120 {
109 - 121 + focusNextChild();
110 } 122 }
111 123
112 void ProgrammingAutoSelectionWindow::onEncoderClicked(QWidget *clicked) 124 void ProgrammingAutoSelectionWindow::onEncoderClicked(QWidget *clicked)
113 { 125 {
114 - 126 + QPushButton *b = qobject_cast<QPushButton *>(clicked);
  127 + if (b)
  128 + b->click();
115 } 129 }
116 130
117 void ProgrammingAutoSelectionWindow::onCookSelected(int idx) 131 void ProgrammingAutoSelectionWindow::onCookSelected(int idx)
app/gui/oven_control/programmingmanualcoretemppopup.cpp
@@ -35,8 +35,19 @@ ProgrammingManualCoreTempPopup::ProgrammingManualCoreTempPopup(QWidget *parent) @@ -35,8 +35,19 @@ ProgrammingManualCoreTempPopup::ProgrammingManualCoreTempPopup(QWidget *parent)
35 35
36 updateCoreTempLabel(); 36 updateCoreTempLabel();
37 37
  38 + afterThreeSecsTimer.setSingleShot(true);
  39 + afterThreeSecsTimer.setInterval(3000);
  40 + connect(&afterThreeSecsTimer, SIGNAL(timeout()), SLOT(afterThreeSecs()));
  41 +
38 foreach (QPushButton *button, findChildren<QPushButton *>()) 42 foreach (QPushButton *button, findChildren<QPushButton *>())
39 connect(button, &QPushButton::pressed, SoundPlayer::playClick); 43 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
  44 +
  45 + foreach (QWidget *w, findChildren<QWidget *>())
  46 + w->installEventFilter(this);
  47 +
  48 + installEventFilter(this);
  49 +
  50 + ui->background->setFocus();
40 } 51 }
41 52
42 ProgrammingManualCoreTempPopup::~ProgrammingManualCoreTempPopup() 53 ProgrammingManualCoreTempPopup::~ProgrammingManualCoreTempPopup()
@@ -44,6 +55,24 @@ ProgrammingManualCoreTempPopup::~ProgrammingManualCoreTempPopup() @@ -44,6 +55,24 @@ ProgrammingManualCoreTempPopup::~ProgrammingManualCoreTempPopup()
44 delete ui; 55 delete ui;
45 } 56 }
46 57
  58 +bool ProgrammingManualCoreTempPopup::eventFilter(QObject */*watched*/, QEvent *event)
  59 +{
  60 + switch (event->type())
  61 + {
  62 + case QEvent::KeyPress:
  63 + case QEvent::KeyRelease:
  64 + case QEvent::MouseButtonPress:
  65 + case QEvent::MouseButtonRelease:
  66 + case QEvent::MouseMove:
  67 + afterThreeSecsTimer.start();
  68 + break;
  69 + default:
  70 + break;
  71 + }
  72 +
  73 + return false;
  74 +}
  75 +
47 void ProgrammingManualCoreTempPopup::keyPressEvent(QKeyEvent *event) 76 void ProgrammingManualCoreTempPopup::keyPressEvent(QKeyEvent *event)
48 { 77 {
49 switch (event->key()) 78 switch (event->key())
@@ -84,9 +113,19 @@ void ProgrammingManualCoreTempPopup::updateCoreTempLabel() @@ -84,9 +113,19 @@ void ProgrammingManualCoreTempPopup::updateCoreTempLabel()
84 ui->coreTempLabel->setText(Stringer::temperature(ui->coreTempSlider->sliderPosition(), Stringer::fontSize14)); 113 ui->coreTempLabel->setText(Stringer::temperature(ui->coreTempSlider->sliderPosition(), Stringer::fontSize14));
85 } 114 }
86 115
87 -void ProgrammingManualCoreTempPopup::on_coreTempButton_clicked() 116 +void ProgrammingManualCoreTempPopup::afterThreeSecs()
88 { 117 {
  118 + Slider *slider = qobject_cast<Slider *>(focusWidget());
  119 + if (slider)
  120 + {
  121 + if (slider == ui->coreTempSlider)
  122 + ui->coreTempButton->setFocus();
  123 + }
  124 +}
89 125
  126 +void ProgrammingManualCoreTempPopup::on_coreTempButton_clicked()
  127 +{
  128 + ui->coreTempSlider->setFocus();
90 } 129 }
91 130
92 void ProgrammingManualCoreTempPopup::on_cancelButton_clicked() 131 void ProgrammingManualCoreTempPopup::on_cancelButton_clicked()
@@ -96,22 +135,47 @@ void ProgrammingManualCoreTempPopup::on_cancelButton_clicked() @@ -96,22 +135,47 @@ void ProgrammingManualCoreTempPopup::on_cancelButton_clicked()
96 135
97 void ProgrammingManualCoreTempPopup::on_applyButton_clicked() 136 void ProgrammingManualCoreTempPopup::on_applyButton_clicked()
98 { 137 {
99 - emit coreTempEnabled(ui->coreTempSlider->value()); 138 + emit coreTempEnabled(ui->coreTempSlider->sliderPosition());
100 139
101 close(); 140 close();
102 } 141 }
103 142
104 void ProgrammingManualCoreTempPopup::onEncoderLeft() 143 void ProgrammingManualCoreTempPopup::onEncoderLeft()
105 { 144 {
106 - 145 + QWidget *focused = focusWidget();
  146 + if (focused == ui->background)
  147 + ui->applyButton->setFocus();
  148 + else
  149 + focusPreviousChild();
107 } 150 }
108 151
109 void ProgrammingManualCoreTempPopup::onEncoderRight() 152 void ProgrammingManualCoreTempPopup::onEncoderRight()
110 { 153 {
111 - 154 + QWidget *focused = focusWidget();
  155 + if (focused == ui->applyButton)
  156 + ui->background->setFocus();
  157 + else
  158 + focusNextChild();
112 } 159 }
113 160
114 void ProgrammingManualCoreTempPopup::onEncoderClicked(QWidget *clicked) 161 void ProgrammingManualCoreTempPopup::onEncoderClicked(QWidget *clicked)
115 { 162 {
116 - 163 + QWidget *focused = clicked;
  164 + if (focused == ui->background)
  165 + close();
  166 + else if (focused->inherits("QPushButton"))
  167 + {
  168 + QPushButton *pb = qobject_cast<QPushButton *>(focused);
  169 + if (pb)
  170 + pb->click();
  171 + }
  172 + else if (focused->inherits("Slider"))
  173 + {
  174 + Slider *slider = qobject_cast<Slider *>(focused);
  175 + if (slider)
  176 + {
  177 + if (slider == ui->coreTempSlider)
  178 + ui->coreTempButton->setFocus();
  179 + }
  180 + }
117 } 181 }
app/gui/oven_control/programmingmanualcoretemppopup.h
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 #define PROGRAMMINGMANUALCORETEMPPOPUP_H 2 #define PROGRAMMINGMANUALCORETEMPPOPUP_H
3 3
4 #include <QWidget> 4 #include <QWidget>
  5 +#include <QTimer>
5 6
6 namespace Ui { 7 namespace Ui {
7 class ProgrammingManualCoreTempPopup; 8 class ProgrammingManualCoreTempPopup;
@@ -15,12 +16,15 @@ public: @@ -15,12 +16,15 @@ public:
15 explicit ProgrammingManualCoreTempPopup(QWidget *parent = 0); 16 explicit ProgrammingManualCoreTempPopup(QWidget *parent = 0);
16 ~ProgrammingManualCoreTempPopup(); 17 ~ProgrammingManualCoreTempPopup();
17 18
  19 + bool eventFilter(QObject *watched, QEvent *event);
  20 +
18 protected: 21 protected:
19 void keyPressEvent(QKeyEvent *event); 22 void keyPressEvent(QKeyEvent *event);
20 void keyReleaseEvent(QKeyEvent *event); 23 void keyReleaseEvent(QKeyEvent *event);
21 24
22 private slots: 25 private slots:
23 void updateCoreTempLabel(); 26 void updateCoreTempLabel();
  27 + void afterThreeSecs();
24 28
25 void on_coreTempButton_clicked(); 29 void on_coreTempButton_clicked();
26 void on_cancelButton_clicked(); 30 void on_cancelButton_clicked();
@@ -35,6 +39,8 @@ private: @@ -35,6 +39,8 @@ private:
35 void onEncoderRight(); 39 void onEncoderRight();
36 void onEncoderClicked(QWidget *clicked); 40 void onEncoderClicked(QWidget *clicked);
37 41
  42 + QTimer afterThreeSecsTimer;
  43 +
38 signals: 44 signals:
39 void coreTempEnabled(int); 45 void coreTempEnabled(int);
40 }; 46 };
app/gui/oven_control/programmingmanualcoretemppopup.ui
@@ -13,9 +13,15 @@ @@ -13,9 +13,15 @@
13 <property name="styleSheet"> 13 <property name="styleSheet">
14 <string notr="true">#background { 14 <string notr="true">#background {
15 background-image: url(:/images/background/manual_core.png); 15 background-image: url(:/images/background/manual_core.png);
  16 +background-origin: border;
16 margin-top: -720px; 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 QPushButton[style=&quot;icon&quot;] { 25 QPushButton[style=&quot;icon&quot;] {
20 background-image: url(:/images/slider_icon/background.png); 26 background-image: url(:/images/slider_icon/background.png);
21 background-repeat: no-repeat; 27 background-repeat: no-repeat;
@@ -118,6 +124,9 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_b @@ -118,6 +124,9 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_b
118 <height>730</height> 124 <height>730</height>
119 </rect> 125 </rect>
120 </property> 126 </property>
  127 + <property name="focusPolicy">
  128 + <enum>Qt::TabFocus</enum>
  129 + </property>
121 </widget> 130 </widget>
122 <widget class="QLabel" name="coreTempLabel"> 131 <widget class="QLabel" name="coreTempLabel">
123 <property name="enabled"> 132 <property name="enabled">
@@ -208,6 +217,12 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_b @@ -208,6 +217,12 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/manual_b
208 <container>1</container> 217 <container>1</container>
209 </customwidget> 218 </customwidget>
210 </customwidgets> 219 </customwidgets>
  220 + <tabstops>
  221 + <tabstop>background</tabstop>
  222 + <tabstop>coreTempButton</tabstop>
  223 + <tabstop>cancelButton</tabstop>
  224 + <tabstop>applyButton</tabstop>
  225 + </tabstops>
211 <resources/> 226 <resources/>
212 <connections/> 227 <connections/>
213 </ui> 228 </ui>
app/gui/oven_control/programmingmanualwindow.cpp
@@ -66,6 +66,19 @@ ProgrammingManualWindow::ProgrammingManualWindow(QWidget *parent, Define::Mode m @@ -66,6 +66,19 @@ ProgrammingManualWindow::ProgrammingManualWindow(QWidget *parent, Define::Mode m
66 66
67 foreach (QPushButton *button, findChildren<QPushButton *>()) 67 foreach (QPushButton *button, findChildren<QPushButton *>())
68 connect(button, &QPushButton::pressed, SoundPlayer::playClick); 68 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
  69 +
  70 + setFocus();
  71 +
  72 + afterThreeSecsTimer.setSingleShot(true);
  73 + afterThreeSecsTimer.setInterval(3000);
  74 + connect(&afterThreeSecsTimer, SIGNAL(timeout()), SLOT(afterThreeSecs()));
  75 +
  76 + foreach (QWidget *w, findChildren<QWidget *>())
  77 + w->installEventFilter(this);
  78 +
  79 + installEventFilter(this);
  80 +
  81 + afterThreeSecsTimer.start();
69 } 82 }
70 83
71 ProgrammingManualWindow::~ProgrammingManualWindow() 84 ProgrammingManualWindow::~ProgrammingManualWindow()
@@ -73,6 +86,24 @@ ProgrammingManualWindow::~ProgrammingManualWindow() @@ -73,6 +86,24 @@ ProgrammingManualWindow::~ProgrammingManualWindow()
73 delete ui; 86 delete ui;
74 } 87 }
75 88
  89 +bool ProgrammingManualWindow::eventFilter(QObject */*watched*/, QEvent *event)
  90 +{
  91 + switch (event->type())
  92 + {
  93 + case QEvent::KeyPress:
  94 + case QEvent::KeyRelease:
  95 + case QEvent::MouseButtonPress:
  96 + case QEvent::MouseButtonRelease:
  97 + case QEvent::MouseMove:
  98 + afterThreeSecsTimer.start();
  99 + break;
  100 + default:
  101 + break;
  102 + }
  103 +
  104 + return false;
  105 +}
  106 +
76 void ProgrammingManualWindow::keyPressEvent(QKeyEvent *event) 107 void ProgrammingManualWindow::keyPressEvent(QKeyEvent *event)
77 { 108 {
78 switch (event->key()) 109 switch (event->key())
@@ -128,17 +159,92 @@ int ProgrammingManualWindow::timeToSlider(int secs) @@ -128,17 +159,92 @@ int ProgrammingManualWindow::timeToSlider(int secs)
128 159
129 void ProgrammingManualWindow::onEncoderLeft() 160 void ProgrammingManualWindow::onEncoderLeft()
130 { 161 {
  162 + focusPreviousChild();
131 163
  164 + QWidget *focused = focusWidget();
  165 + if (focused == ui->steamButton)
  166 + {
  167 + if (ui->steamButton->isChecked())
  168 + focusPreviousChild();
  169 + }
  170 + else if (focused == ui->combiButton)
  171 + {
  172 + if (ui->combiButton->isChecked())
  173 + focusPreviousChild();
  174 + }
  175 + else if (focused == ui->dryheatButton)
  176 + {
  177 + if (ui->dryheatButton->isChecked())
  178 + focusPreviousChild();
  179 + }
132 } 180 }
133 181
134 void ProgrammingManualWindow::onEncoderRight() 182 void ProgrammingManualWindow::onEncoderRight()
135 { 183 {
136 - 184 + QWidget *focused = focusWidget();
  185 + if (focused == NULL || focused == this)
  186 + {
  187 + if (ui->steamButton->isChecked() || ui->dryheatButton->isChecked())
  188 + ui->tempButton->setFocus();
  189 + else if (ui->combiButton->isChecked())
  190 + ui->humidityButton->setFocus();
  191 + }
  192 + else
  193 + {
  194 + focusNextChild();
  195 +
  196 + focused = focusWidget();
  197 + if (focused == ui->steamButton)
  198 + {
  199 + if (ui->steamButton->isChecked())
  200 + focusNextChild();
  201 + }
  202 + else if (focused == ui->combiButton)
  203 + {
  204 + if (ui->combiButton->isChecked())
  205 + focusNextChild();
  206 + }
  207 + else if (focused == ui->dryheatButton)
  208 + {
  209 + if (ui->dryheatButton->isChecked())
  210 + focusNextChild();
  211 + }
  212 + }
137 } 213 }
138 214
139 void ProgrammingManualWindow::onEncoderClicked(QWidget *clicked) 215 void ProgrammingManualWindow::onEncoderClicked(QWidget *clicked)
140 { 216 {
  217 + if (clicked == NULL)
  218 + return;
141 219
  220 + if (clicked->inherits("QPushButton"))
  221 + {
  222 + QPushButton *b = qobject_cast<QPushButton *>(clicked);
  223 + if (b)
  224 + {
  225 + b->click();
  226 +
  227 + if (b == ui->steamButton || b == ui->dryheatButton)
  228 + ui->tempButton->setFocus();
  229 + else if (b == ui->combiButton)
  230 + ui->humidityButton->setFocus();
  231 + }
  232 + }
  233 + else if (clicked->inherits("Slider"))
  234 + {
  235 + Slider *slider = qobject_cast<Slider *>(clicked);
  236 + if (slider)
  237 + {
  238 + if (slider == ui->humiditySlider)
  239 + ui->humidityButton->setFocus();
  240 + else if (slider == ui->tempSlider)
  241 + ui->tempButton->setFocus();
  242 + else if (slider == ui->timeSlider)
  243 + ui->timeButton->setFocus();
  244 + else if (slider == ui->interTempSlider)
  245 + ui->interTempButton->setFocus();
  246 + }
  247 + }
142 } 248 }
143 249
144 void ProgrammingManualWindow::setDefault(Define::Mode mode) 250 void ProgrammingManualWindow::setDefault(Define::Mode mode)
@@ -147,6 +253,8 @@ void ProgrammingManualWindow::setDefault(Define::Mode mode) @@ -147,6 +253,8 @@ void ProgrammingManualWindow::setDefault(Define::Mode mode)
147 { 253 {
148 case Define::SteamMode: 254 case Define::SteamMode:
149 ui->steamButton->setChecked(true); 255 ui->steamButton->setChecked(true);
  256 + ui->combiButton->setChecked(false);
  257 + ui->dryheatButton->setChecked(false);
150 ui->humiditySlider->setEnabled(false); 258 ui->humiditySlider->setEnabled(false);
151 ui->humiditySlider->setValue(100); 259 ui->humiditySlider->setValue(100);
152 ui->tempSlider->setRange(30, 130); 260 ui->tempSlider->setRange(30, 130);
@@ -161,7 +269,9 @@ void ProgrammingManualWindow::setDefault(Define::Mode mode) @@ -161,7 +269,9 @@ void ProgrammingManualWindow::setDefault(Define::Mode mode)
161 this->mode = mode; 269 this->mode = mode;
162 break; 270 break;
163 case Define::CombiMode: 271 case Define::CombiMode:
  272 + ui->steamButton->setChecked(false);
164 ui->combiButton->setChecked(true); 273 ui->combiButton->setChecked(true);
  274 + ui->dryheatButton->setChecked(false);
165 ui->humiditySlider->setEnabled(true); 275 ui->humiditySlider->setEnabled(true);
166 ui->humiditySlider->setValue(50); 276 ui->humiditySlider->setValue(50);
167 ui->tempSlider->setRange(30, 300); 277 ui->tempSlider->setRange(30, 300);
@@ -176,6 +286,8 @@ void ProgrammingManualWindow::setDefault(Define::Mode mode) @@ -176,6 +286,8 @@ void ProgrammingManualWindow::setDefault(Define::Mode mode)
176 this->mode = mode; 286 this->mode = mode;
177 break; 287 break;
178 case Define::DryMode: 288 case Define::DryMode:
  289 + ui->steamButton->setChecked(false);
  290 + ui->combiButton->setChecked(false);
179 ui->dryheatButton->setChecked(true); 291 ui->dryheatButton->setChecked(true);
180 ui->humiditySlider->setEnabled(false); 292 ui->humiditySlider->setEnabled(false);
181 ui->humiditySlider->setValue(0); 293 ui->humiditySlider->setValue(0);
@@ -219,22 +331,7 @@ void ProgrammingManualWindow::updateTimeLabel() @@ -219,22 +331,7 @@ void ProgrammingManualWindow::updateTimeLabel()
219 331
220 void ProgrammingManualWindow::updateCoreTempButton() 332 void ProgrammingManualWindow::updateCoreTempButton()
221 { 333 {
222 - if (ui->interTempSlider->isEnabled())  
223 - ui->interTempButton->setStyleSheet("\  
224 -QPushButton {\  
225 - image: url(:/images/slider_icon/core_temp_enabled.png);\  
226 -}\  
227 -QPushButton:pressed {\  
228 - image: url(:/images/slider_icon/core_temp_ov.png);\  
229 -}");  
230 - else  
231 - ui->interTempButton->setStyleSheet("\  
232 -QPushButton {\  
233 - image: url(:/images/slider_icon/core_temp.png);\  
234 -}\  
235 -QPushButton:pressed {\  
236 - image: url(:/images/slider_icon/core_temp_ov.png);\  
237 -}"); 334 + ui->interTempButton->setChecked(ui->interTempSlider->isEnabled());
238 } 335 }
239 336
240 void ProgrammingManualWindow::updateCoreTempLabel() 337 void ProgrammingManualWindow::updateCoreTempLabel()
@@ -276,6 +373,24 @@ void ProgrammingManualWindow::updateFanButton() @@ -276,6 +373,24 @@ void ProgrammingManualWindow::updateFanButton()
276 } 373 }
277 } 374 }
278 375
  376 +void ProgrammingManualWindow::afterThreeSecs()
  377 +{
  378 + Slider *slider = qobject_cast<Slider *>(focusWidget());
  379 + if (slider)
  380 + {
  381 + if (slider == ui->humiditySlider)
  382 + ui->humidityButton->setFocus();
  383 + else if (slider == ui->tempSlider)
  384 + ui->tempButton->setFocus();
  385 + else if (slider == ui->timeSlider)
  386 + ui->timeButton->setFocus();
  387 + else if (slider == ui->interTempSlider)
  388 + ui->interTempButton->setFocus();
  389 +
  390 + afterThreeSecsTimer.start();
  391 + }
  392 +}
  393 +
279 void ProgrammingManualWindow::onCoreTempEnabled(int celsius) 394 void ProgrammingManualWindow::onCoreTempEnabled(int celsius)
280 { 395 {
281 ui->interTempSlider->setEnabled(true); 396 ui->interTempSlider->setEnabled(true);
@@ -300,6 +415,21 @@ void ProgrammingManualWindow::on_dryheatButton_clicked() @@ -300,6 +415,21 @@ void ProgrammingManualWindow::on_dryheatButton_clicked()
300 setDefault(Define::DryMode); 415 setDefault(Define::DryMode);
301 } 416 }
302 417
  418 +void ProgrammingManualWindow::on_humidityButton_clicked()
  419 +{
  420 + ui->humiditySlider->setFocus();
  421 +}
  422 +
  423 +void ProgrammingManualWindow::on_tempButton_clicked()
  424 +{
  425 + ui->tempSlider->setFocus();
  426 +}
  427 +
  428 +void ProgrammingManualWindow::on_timeButton_clicked()
  429 +{
  430 + ui->timeSlider->setFocus();
  431 +}
  432 +
303 void ProgrammingManualWindow::on_interTempButton_clicked() 433 void ProgrammingManualWindow::on_interTempButton_clicked()
304 { 434 {
305 if (ui->interTempSlider->isEnabled()) 435 if (ui->interTempSlider->isEnabled())
@@ -313,6 +443,8 @@ void ProgrammingManualWindow::on_interTempButton_clicked() @@ -313,6 +443,8 @@ void ProgrammingManualWindow::on_interTempButton_clicked()
313 { 443 {
314 ProgrammingManualCoreTempPopup *p = new ProgrammingManualCoreTempPopup(this); 444 ProgrammingManualCoreTempPopup *p = new ProgrammingManualCoreTempPopup(this);
315 connect(p, SIGNAL(coreTempEnabled(int)), SLOT(onCoreTempEnabled(int))); 445 connect(p, SIGNAL(coreTempEnabled(int)), SLOT(onCoreTempEnabled(int)));
  446 + connect(p, SIGNAL(destroyed(QObject*)), SLOT(updateCoreTempButton()));
  447 + connect(p, SIGNAL(destroyed(QObject*)), ui->interTempButton, SLOT(setFocus()));
316 p->showFullScreen(); 448 p->showFullScreen();
317 } 449 }
318 } 450 }
app/gui/oven_control/programmingmanualwindow.h
@@ -17,6 +17,8 @@ public: @@ -17,6 +17,8 @@ public:
17 explicit ProgrammingManualWindow(QWidget *parent, Define::Mode mode); 17 explicit ProgrammingManualWindow(QWidget *parent, Define::Mode mode);
18 ~ProgrammingManualWindow(); 18 ~ProgrammingManualWindow();
19 19
  20 + bool eventFilter(QObject *watched, QEvent *event);
  21 +
20 protected: 22 protected:
21 void keyPressEvent(QKeyEvent *event); 23 void keyPressEvent(QKeyEvent *event);
22 void keyReleaseEvent(QKeyEvent *event); 24 void keyReleaseEvent(QKeyEvent *event);
@@ -36,6 +38,8 @@ private: @@ -36,6 +38,8 @@ private:
36 void onEncoderRight(); 38 void onEncoderRight();
37 void onEncoderClicked(QWidget *clicked); 39 void onEncoderClicked(QWidget *clicked);
38 40
  41 + QTimer afterThreeSecsTimer;
  42 +
39 private slots: 43 private slots:
40 void setDefault(Define::Mode mode); 44 void setDefault(Define::Mode mode);
41 void setFan(int level); 45 void setFan(int level);
@@ -45,6 +49,7 @@ private slots: @@ -45,6 +49,7 @@ private slots:
45 void updateCoreTempButton(); 49 void updateCoreTempButton();
46 void updateCoreTempLabel(); 50 void updateCoreTempLabel();
47 void updateFanButton(); 51 void updateFanButton();
  52 + void afterThreeSecs();
48 53
49 void onCoreTempEnabled(int celsius); 54 void onCoreTempEnabled(int celsius);
50 55
@@ -58,6 +63,12 @@ private slots: @@ -58,6 +63,12 @@ private slots:
58 void on_helpButton_clicked(); 63 void on_helpButton_clicked();
59 void on_okButton_clicked(); 64 void on_okButton_clicked();
60 65
  66 + void on_humidityButton_clicked();
  67 +
  68 + void on_tempButton_clicked();
  69 +
  70 + void on_timeButton_clicked();
  71 +
61 signals: 72 signals:
62 void added(); 73 void added();
63 }; 74 };
app/gui/oven_control/programmingmanualwindow.ui
@@ -207,9 +207,6 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_dryheat.png); @@ -207,9 +207,6 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_dryheat.png);
207 <property name="checkable"> 207 <property name="checkable">
208 <bool>true</bool> 208 <bool>true</bool>
209 </property> 209 </property>
210 - <property name="autoExclusive">  
211 - <bool>true</bool>  
212 - </property>  
213 <property name="style" stdset="0"> 210 <property name="style" stdset="0">
214 <string notr="true">mode</string> 211 <string notr="true">mode</string>
215 </property> 212 </property>
@@ -596,9 +593,6 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_steam.png); } @@ -596,9 +593,6 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_steam.png); }
596 <property name="checkable"> 593 <property name="checkable">
597 <bool>true</bool> 594 <bool>true</bool>
598 </property> 595 </property>
599 - <property name="autoExclusive">  
600 - <bool>true</bool>  
601 - </property>  
602 <property name="style" stdset="0"> 596 <property name="style" stdset="0">
603 <string notr="true">mode</string> 597 <string notr="true">mode</string>
604 </property> 598 </property>
@@ -757,8 +751,12 @@ QPushButton:pressed, QPushButton:focus { image: url(:/images/slider_icon/humidit @@ -757,8 +751,12 @@ QPushButton:pressed, QPushButton:focus { image: url(:/images/slider_icon/humidit
757 </property> 751 </property>
758 <property name="styleSheet"> 752 <property name="styleSheet">
759 <string notr="true">QPushButton { image: url(:/images/slider_icon/core_temp.png); } 753 <string notr="true">QPushButton { image: url(:/images/slider_icon/core_temp.png); }
  754 +QPushButton:checked { image: url(:/images/slider_icon/core_temp_enabled.png); }
760 QPushButton:pressed, QPushButton:focus { image: url(:/images/slider_icon/core_temp_ov.png); }</string> 755 QPushButton:pressed, QPushButton:focus { image: url(:/images/slider_icon/core_temp_ov.png); }</string>
761 </property> 756 </property>
  757 + <property name="checkable">
  758 + <bool>true</bool>
  759 + </property>
762 <property name="style" stdset="0"> 760 <property name="style" stdset="0">
763 <string notr="true">icon</string> 761 <string notr="true">icon</string>
764 </property> 762 </property>
@@ -783,9 +781,6 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); } @@ -783,9 +781,6 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); }
783 <property name="checkable"> 781 <property name="checkable">
784 <bool>true</bool> 782 <bool>true</bool>
785 </property> 783 </property>
786 - <property name="autoExclusive">  
787 - <bool>true</bool>  
788 - </property>  
789 <property name="style" stdset="0"> 784 <property name="style" stdset="0">
790 <string notr="true">mode</string> 785 <string notr="true">mode</string>
791 </property> 786 </property>
@@ -871,41 +866,53 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); } @@ -871,41 +866,53 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); }
871 <property name="geometry"> 866 <property name="geometry">
872 <rect> 867 <rect>
873 <x>185</x> 868 <x>185</x>
874 - <y>875</y> 869 + <y>915</y>
875 <width>666</width> 870 <width>666</width>
876 - <height>140</height> 871 + <height>60</height>
877 </rect> 872 </rect>
878 </property> 873 </property>
  874 + <property name="focusPolicy">
  875 + <enum>Qt::ClickFocus</enum>
  876 + </property>
879 </widget> 877 </widget>
880 <widget class="Slider" name="interTempSlider" native="true"> 878 <widget class="Slider" name="interTempSlider" native="true">
881 <property name="geometry"> 879 <property name="geometry">
882 <rect> 880 <rect>
883 <x>185</x> 881 <x>185</x>
884 - <y>1175</y> 882 + <y>1215</y>
885 <width>666</width> 883 <width>666</width>
886 - <height>140</height> 884 + <height>60</height>
887 </rect> 885 </rect>
888 </property> 886 </property>
  887 + <property name="focusPolicy">
  888 + <enum>Qt::ClickFocus</enum>
  889 + </property>
889 </widget> 890 </widget>
890 <widget class="Slider" name="timeSlider" native="true"> 891 <widget class="Slider" name="timeSlider" native="true">
891 <property name="geometry"> 892 <property name="geometry">
892 <rect> 893 <rect>
893 <x>185</x> 894 <x>185</x>
894 - <y>1025</y> 895 + <y>1065</y>
895 <width>666</width> 896 <width>666</width>
896 - <height>140</height> 897 + <height>60</height>
897 </rect> 898 </rect>
898 </property> 899 </property>
  900 + <property name="focusPolicy">
  901 + <enum>Qt::ClickFocus</enum>
  902 + </property>
899 </widget> 903 </widget>
900 <widget class="Slider" name="humiditySlider" native="true"> 904 <widget class="Slider" name="humiditySlider" native="true">
901 <property name="geometry"> 905 <property name="geometry">
902 <rect> 906 <rect>
903 <x>185</x> 907 <x>185</x>
904 - <y>725</y> 908 + <y>765</y>
905 <width>666</width> 909 <width>666</width>
906 - <height>140</height> 910 + <height>60</height>
907 </rect> 911 </rect>
908 </property> 912 </property>
  913 + <property name="focusPolicy">
  914 + <enum>Qt::ClickFocus</enum>
  915 + </property>
909 </widget> 916 </widget>
910 </widget> 917 </widget>
911 </widget> 918 </widget>
@@ -933,6 +940,20 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); } @@ -933,6 +940,20 @@ QPushButton:checked { background-image: url(:/images/cook_mode/big_combi.png); }
933 <container>1</container> 940 <container>1</container>
934 </customwidget> 941 </customwidget>
935 </customwidgets> 942 </customwidgets>
  943 + <tabstops>
  944 + <tabstop>steamButton</tabstop>
  945 + <tabstop>combiButton</tabstop>
  946 + <tabstop>dryheatButton</tabstop>
  947 + <tabstop>humidityButton</tabstop>
  948 + <tabstop>tempButton</tabstop>
  949 + <tabstop>timeButton</tabstop>
  950 + <tabstop>interTempButton</tabstop>
  951 + <tabstop>fanButton</tabstop>
  952 + <tabstop>backButton</tabstop>
  953 + <tabstop>configButton</tabstop>
  954 + <tabstop>helpButton</tabstop>
  955 + <tabstop>okButton</tabstop>
  956 + </tabstops>
936 <resources> 957 <resources>
937 <include location="resources.qrc"/> 958 <include location="resources.qrc"/>
938 </resources> 959 </resources>
app/gui/oven_control/programmingselectionwindow.cpp
@@ -101,6 +101,8 @@ void ProgrammingSelectionWindow::onEncoderClicked(QWidget *clicked) @@ -101,6 +101,8 @@ void ProgrammingSelectionWindow::onEncoderClicked(QWidget *clicked)
101 101
102 void ProgrammingSelectionWindow::onModeClicked(Define::Mode mode) 102 void ProgrammingSelectionWindow::onModeClicked(Define::Mode mode)
103 { 103 {
  104 + setFocus();
  105 +
104 ProgrammingManualWindow *w = new ProgrammingManualWindow(this, mode); 106 ProgrammingManualWindow *w = new ProgrammingManualWindow(this, mode);
105 connect(w, SIGNAL(added()), SIGNAL(added())); 107 connect(w, SIGNAL(added()), SIGNAL(added()));
106 connect(w, SIGNAL(added()), SLOT(hide())); 108 connect(w, SIGNAL(added()), SLOT(hide()));
@@ -112,6 +114,8 @@ void ProgrammingSelectionWindow::onModeClicked(Define::Mode mode) @@ -112,6 +114,8 @@ void ProgrammingSelectionWindow::onModeClicked(Define::Mode mode)
112 114
113 void ProgrammingSelectionWindow::onCookTypeClicked(Define::CookType type) 115 void ProgrammingSelectionWindow::onCookTypeClicked(Define::CookType type)
114 { 116 {
  117 + setFocus();
  118 +
115 ProgrammingAutoSelectionWindow *w = new ProgrammingAutoSelectionWindow(this, type); 119 ProgrammingAutoSelectionWindow *w = new ProgrammingAutoSelectionWindow(this, type);
116 connect(w, SIGNAL(added()), SIGNAL(added())); 120 connect(w, SIGNAL(added()), SIGNAL(added()));
117 connect(w, SIGNAL(added()), SLOT(hide())); 121 connect(w, SIGNAL(added()), SLOT(hide()));
app/gui/oven_control/programmingselectionwindow.ui
@@ -161,6 +161,9 @@ QPushButton:disabled { background-image: url(:/images/cook_type/fish_hide.png); @@ -161,6 +161,9 @@ QPushButton:disabled { background-image: url(:/images/cook_type/fish_hide.png);
161 <verstretch>0</verstretch> 161 <verstretch>0</verstretch>
162 </sizepolicy> 162 </sizepolicy>
163 </property> 163 </property>
  164 + <property name="focusPolicy">
  165 + <enum>Qt::NoFocus</enum>
  166 + </property>
164 <property name="styleSheet"> 167 <property name="styleSheet">
165 <string notr="true">QPushButton { background-image: url(:/images/main_button/multi.png); } 168 <string notr="true">QPushButton { background-image: url(:/images/main_button/multi.png); }
166 QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/multi_ov.png); } 169 QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/multi_ov.png); }
@@ -445,6 +448,9 @@ QPushButton:disabled { background-image: url(:/images/cook_type/etc_hide.png); } @@ -445,6 +448,9 @@ QPushButton:disabled { background-image: url(:/images/cook_type/etc_hide.png); }
445 <verstretch>0</verstretch> 448 <verstretch>0</verstretch>
446 </sizepolicy> 449 </sizepolicy>
447 </property> 450 </property>
  451 + <property name="focusPolicy">
  452 + <enum>Qt::NoFocus</enum>
  453 + </property>
448 <property name="styleSheet"> 454 <property name="styleSheet">
449 <string notr="true">QPushButton { background-image: url(:/images/main_button/wash.png); } 455 <string notr="true">QPushButton { background-image: url(:/images/main_button/wash.png); }
450 QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/wash_ov.png); } 456 QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/wash_ov.png); }
@@ -475,6 +481,9 @@ QPushButton:disabled { background-image: url(:/images/main_button/wash_hide.png) @@ -475,6 +481,9 @@ QPushButton:disabled { background-image: url(:/images/main_button/wash_hide.png)
475 <verstretch>0</verstretch> 481 <verstretch>0</verstretch>
476 </sizepolicy> 482 </sizepolicy>
477 </property> 483 </property>
  484 + <property name="focusPolicy">
  485 + <enum>Qt::NoFocus</enum>
  486 + </property>
478 <property name="styleSheet"> 487 <property name="styleSheet">
479 <string notr="true">QPushButton { background-image: url(:/images/main_button/custom.png); } 488 <string notr="true">QPushButton { background-image: url(:/images/main_button/custom.png); }
480 QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/custom_ov.png); } 489 QPushButton:pressed, QPushButton:focus { background-image: url(:/images/main_button/custom_ov.png); }
@@ -724,11 +733,13 @@ QPushButton:disabled { background-image: url(:/images/cook_type/bread_hide.png); @@ -724,11 +733,13 @@ QPushButton:disabled { background-image: url(:/images/cook_type/bread_hide.png);
724 <tabstop>breadButton</tabstop> 733 <tabstop>breadButton</tabstop>
725 <tabstop>etcButton</tabstop> 734 <tabstop>etcButton</tabstop>
726 <tabstop>primeButton</tabstop> 735 <tabstop>primeButton</tabstop>
727 - <tabstop>multiButton</tabstop>  
728 - <tabstop>programmingButton</tabstop>  
729 - <tabstop>washButton</tabstop> 736 + <tabstop>backButton</tabstop>
730 <tabstop>configButton</tabstop> 737 <tabstop>configButton</tabstop>
731 <tabstop>helpButton</tabstop> 738 <tabstop>helpButton</tabstop>
  739 + <tabstop>okButton</tabstop>
  740 + <tabstop>washButton</tabstop>
  741 + <tabstop>multiButton</tabstop>
  742 + <tabstop>programmingButton</tabstop>
732 </tabstops> 743 </tabstops>
733 <resources/> 744 <resources/>
734 <connections/> 745 <connections/>
app/gui/oven_control/programmingwindow.cpp
@@ -25,6 +25,8 @@ ProgrammingWindow::ProgrammingWindow(QWidget *parent) : @@ -25,6 +25,8 @@ ProgrammingWindow::ProgrammingWindow(QWidget *parent) :
25 25
26 foreach (QPushButton *button, findChildren<QPushButton *>()) 26 foreach (QPushButton *button, findChildren<QPushButton *>())
27 connect(button, &QPushButton::pressed, SoundPlayer::playClick); 27 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
  28 +
  29 + setFocus();
28 } 30 }
29 31
30 ProgrammingWindow::~ProgrammingWindow() 32 ProgrammingWindow::~ProgrammingWindow()
@@ -42,6 +44,9 @@ void ProgrammingWindow::listAuto() @@ -42,6 +44,9 @@ void ProgrammingWindow::listAuto()
42 ui->autoButton->blockSignals(false); 44 ui->autoButton->blockSignals(false);
43 } 45 }
44 46
  47 + if (ui->manualButton->isChecked())
  48 + ui->manualButton->setChecked(false);
  49 +
45 listButtons(CookProgram::listAuto()); 50 listButtons(CookProgram::listAuto());
46 } 51 }
47 52
@@ -54,6 +59,9 @@ void ProgrammingWindow::listManual() @@ -54,6 +59,9 @@ void ProgrammingWindow::listManual()
54 ui->manualButton->blockSignals(false); 59 ui->manualButton->blockSignals(false);
55 } 60 }
56 61
  62 + if (ui->autoButton->isChecked())
  63 + ui->autoButton->setChecked(false);
  64 +
57 listButtons(CookProgram::listManual()); 65 listButtons(CookProgram::listManual());
58 } 66 }
59 67
@@ -134,8 +142,23 @@ void ProgrammingWindow::listButtons(QList&lt;CookRecord&gt; record) @@ -134,8 +142,23 @@ void ProgrammingWindow::listButtons(QList&lt;CookRecord&gt; record)
134 142
135 ui->addButton->show(); 143 ui->addButton->show();
136 144
  145 + setTabOrder(this, ui->autoButton);
  146 + setTabOrder(ui->autoButton, ui->manualButton);
  147 + setTabOrder(ui->manualButton, ui->addButton);
  148 +
  149 + QWidget *last = ui->addButton;
137 foreach (CookRecord r, record) 150 foreach (CookRecord r, record)
138 - newButton(r); 151 + {
  152 + CookPanelButton *b = newButton(r);
  153 + setTabOrder(last, b->bar());
  154 + setTabOrder(b->bar(), b->infoButton());
  155 + setTabOrder(b->infoButton(), b->deleteButton());
  156 + last = b->deleteButton();
  157 + }
  158 +
  159 + setTabOrder(last, ui->backButton);
  160 + setTabOrder(ui->backButton, ui->saveButton);
  161 + setTabOrder(ui->saveButton, ui->helpButton);
139 162
140 ui->scrollAreaWidgetContents->adjustSize(); 163 ui->scrollAreaWidgetContents->adjustSize();
141 } 164 }
@@ -243,18 +266,32 @@ void ProgrammingWindow::on_addButton_clicked() @@ -243,18 +266,32 @@ void ProgrammingWindow::on_addButton_clicked()
243 266
244 void ProgrammingWindow::on_autoButton_toggled(bool checked) 267 void ProgrammingWindow::on_autoButton_toggled(bool checked)
245 { 268 {
246 - if (!checked)  
247 - return;  
248 -  
249 - listAuto(); 269 + if (checked)
  270 + listAuto();
  271 + else
  272 + {
  273 + if (!ui->manualButton->isChecked())
  274 + {
  275 + ui->autoButton->blockSignals(true);
  276 + ui->autoButton->setChecked(true);
  277 + ui->autoButton->blockSignals(false);
  278 + }
  279 + }
250 } 280 }
251 281
252 void ProgrammingWindow::on_manualButton_toggled(bool checked) 282 void ProgrammingWindow::on_manualButton_toggled(bool checked)
253 { 283 {
254 - if (!checked)  
255 - return;  
256 -  
257 - listManual(); 284 + if (checked)
  285 + listManual();
  286 + else
  287 + {
  288 + if (!ui->autoButton->isChecked())
  289 + {
  290 + ui->manualButton->blockSignals(true);
  291 + ui->manualButton->setChecked(true);
  292 + ui->manualButton->blockSignals(false);
  293 + }
  294 + }
258 } 295 }
259 296
260 void ProgrammingWindow::on_backButton_clicked() 297 void ProgrammingWindow::on_backButton_clicked()
@@ -284,11 +321,13 @@ void ProgrammingWindow::on_helpButton_clicked() @@ -284,11 +321,13 @@ void ProgrammingWindow::on_helpButton_clicked()
284 void ProgrammingWindow::onEncoderLeft() 321 void ProgrammingWindow::onEncoderLeft()
285 { 322 {
286 focusPreviousChild(); 323 focusPreviousChild();
  324 + ui->scrollArea->ensureWidgetVisible(focusWidget());
287 } 325 }
288 326
289 void ProgrammingWindow::onEncoderRight() 327 void ProgrammingWindow::onEncoderRight()
290 { 328 {
291 focusNextChild(); 329 focusNextChild();
  330 + ui->scrollArea->ensureWidgetVisible(focusWidget());
292 } 331 }
293 332
294 void ProgrammingWindow::onEncoderClicked(QWidget *clicked) 333 void ProgrammingWindow::onEncoderClicked(QWidget *clicked)
app/gui/oven_control/programmingwindow.ui
@@ -187,11 +187,8 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/main @@ -187,11 +187,8 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/main
187 <property name="checkable"> 187 <property name="checkable">
188 <bool>true</bool> 188 <bool>true</bool>
189 </property> 189 </property>
190 - <property name="autoExclusive">  
191 - <bool>true</bool>  
192 - </property>  
193 <property name="style" stdset="0"> 190 <property name="style" stdset="0">
194 - <string>mode</string> 191 + <string notr="true">mode</string>
195 </property> 192 </property>
196 </widget> 193 </widget>
197 </item> 194 </item>
@@ -213,11 +210,8 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/main @@ -213,11 +210,8 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/main
213 <property name="checkable"> 210 <property name="checkable">
214 <bool>true</bool> 211 <bool>true</bool>
215 </property> 212 </property>
216 - <property name="autoExclusive">  
217 - <bool>true</bool>  
218 - </property>  
219 <property name="style" stdset="0"> 213 <property name="style" stdset="0">
220 - <string>mode</string> 214 + <string notr="true">mode</string>
221 </property> 215 </property>
222 </widget> 216 </widget>
223 </item> 217 </item>
@@ -232,6 +226,9 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/main @@ -232,6 +226,9 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/main
232 <height>803</height> 226 <height>803</height>
233 </rect> 227 </rect>
234 </property> 228 </property>
  229 + <property name="focusPolicy">
  230 + <enum>Qt::NoFocus</enum>
  231 + </property>
235 <property name="widgetResizable"> 232 <property name="widgetResizable">
236 <bool>true</bool> 233 <bool>true</bool>
237 </property> 234 </property>
@@ -295,6 +292,14 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/bar_ @@ -295,6 +292,14 @@ QPushButton:pressed, QPushButton:focus { background-image: url(:/images/etc/bar_
295 <header>washwarnicon.h</header> 292 <header>washwarnicon.h</header>
296 </customwidget> 293 </customwidget>
297 </customwidgets> 294 </customwidgets>
  295 + <tabstops>
  296 + <tabstop>autoButton</tabstop>
  297 + <tabstop>manualButton</tabstop>
  298 + <tabstop>addButton</tabstop>
  299 + <tabstop>backButton</tabstop>
  300 + <tabstop>saveButton</tabstop>
  301 + <tabstop>helpButton</tabstop>
  302 + </tabstops>
298 <resources/> 303 <resources/>
299 <connections/> 304 <connections/>
300 </ui> 305 </ui>