diff --git a/app/gui/oven_control/autocookconfigwindow.cpp b/app/gui/oven_control/autocookconfigwindow.cpp index 07f8e98..250613d 100644 --- a/app/gui/oven_control/autocookconfigwindow.cpp +++ b/app/gui/oven_control/autocookconfigwindow.cpp @@ -1,6 +1,8 @@ #include "autocookconfigwindow.h" #include "ui_autocookconfigwindow.h" +#include + #include "autocookwindow.h" #include "confirmpopup.h" #include "stringer.h" @@ -61,31 +63,143 @@ AutoCookConfigWindow::AutoCookConfigWindow(QWidget *parent, Cook cook) : ui->configSlider_5 }); - cookStartTimer.setSingleShot(true); - cookStartTimer.setInterval(3000); - connect(&cookStartTimer, SIGNAL(timeout()), SLOT(start())); + setupUi(); + + afterThreeSecsTimer.setSingleShot(true); + afterThreeSecsTimer.setInterval(3000); + connect(&afterThreeSecsTimer, SIGNAL(timeout()), SLOT(afterThreeSecs())); + + foreach (QPushButton *button, findChildren()) + connect(button, &QPushButton::pressed, SoundPlayer::playClick); + + foreach (QWidget *w, findChildren()) + w->installEventFilter(this); + + installEventFilter(this); + + setFocus(); - foreach (ConfigWidget w, configWidgets) + afterThreeSecsTimer.start(); +} + +AutoCookConfigWindow::~AutoCookConfigWindow() +{ + delete ui; +} + +bool AutoCookConfigWindow::eventFilter(QObject */*watched*/, QEvent *event) +{ + switch (event->type()) { - connect(w.button, SIGNAL(pressed()), SLOT(stopTimer())); - connect(w.button, SIGNAL(released()), SLOT(startTimer())); - connect(w.slider, SIGNAL(sliderPressed()), SLOT(stopTimer())); - connect(w.slider, SIGNAL(sliderReleased()), SLOT(startTimer())); + case QEvent::KeyPress: + case QEvent::KeyRelease: + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseMove: + afterThreeSecsTimer.start(); + break; + default: + break; } - setupUi(); + return false; +} - foreach (QPushButton *button, findChildren()) +void AutoCookConfigWindow::keyPressEvent(QKeyEvent *event) +{ + switch (event->key()) { - connect(button, &QPushButton::pressed, SoundPlayer::playClick); + case 0x01000030: // Turn left + onEncoderLeft(); + break; + case 0x01000031: // Push + pushed = focusWidget(); + break; + case 0x01000032: // Turn right + onEncoderRight(); + break; } +} - startTimer(); +void AutoCookConfigWindow::keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case 0x01000030: // Turn left + onEncoderLeft(); + break; + case 0x01000031: // Push + if (focusWidget() == pushed) + onEncoderClicked(pushed); + + pushed = NULL; + break; + case 0x01000032: // Turn right + onEncoderRight(); + break; + } } -AutoCookConfigWindow::~AutoCookConfigWindow() +void AutoCookConfigWindow::afterThreeSecs() { - delete ui; + Slider *slider = qobject_cast(focusWidget()); + if (slider) + { + if (slider == ui->configSlider_1) + ui->configButton_1->setFocus(); + else if (slider == ui->configSlider_2) + ui->configButton_2->setFocus(); + else if (slider == ui->configSlider_3) + ui->configButton_3->setFocus(); + else if (slider == ui->configSlider_4) + ui->configButton_4->setFocus(); + else if (slider == ui->configSlider_5) + ui->configButton_5->setFocus(); + + afterThreeSecsTimer.start(); + } + else + start(); +} + +void AutoCookConfigWindow::onEncoderLeft() +{ + focusPreviousChild(); +} + +void AutoCookConfigWindow::onEncoderRight() +{ + focusNextChild(); +} + +void AutoCookConfigWindow::onEncoderClicked(QWidget *clicked) +{ + if (clicked == NULL) + return; + + if (clicked->inherits("QPushButton")) + { + QPushButton *pb = qobject_cast(clicked); + if (pb) + pb->click(); + } + else if (clicked->inherits("Slider")) + { + Slider *slider = qobject_cast(clicked); + if (slider) + { + if (slider == ui->configSlider_1) + ui->configButton_1->setFocus(); + else if (slider == ui->configSlider_2) + ui->configButton_2->setFocus(); + else if (slider == ui->configSlider_3) + ui->configButton_3->setFocus(); + else if (slider == ui->configSlider_4) + ui->configButton_4->setFocus(); + else if (slider == ui->configSlider_5) + ui->configButton_5->setFocus(); + } + } } void AutoCookConfigWindow::setupUi() @@ -111,7 +225,7 @@ void AutoCookConfigWindow::setupUi() cw.button->setStyleSheet( "QPushButton { image: url(" + Define::icon(config.type) - + ") } QPushButton::pressed { image: url(" + + ") } QPushButton:pressed, QPushButton:focus { image: url(" + Define::iconOverlay(config.type) + ") }"); @@ -187,16 +301,6 @@ void AutoCookConfigWindow::updateConfig() updateView(); } -void AutoCookConfigWindow::startTimer() -{ - cookStartTimer.start(); -} - -void AutoCookConfigWindow::stopTimer() -{ - cookStartTimer.stop(); -} - void AutoCookConfigWindow::start() { AutoCookWindow *w = new AutoCookWindow(parentWidget(), cook); @@ -204,7 +308,7 @@ void AutoCookConfigWindow::start() w->showFullScreen(); w->raise(); - connect(w, SIGNAL(back()), SLOT(startTimer())); + connect(w, SIGNAL(back()), &afterThreeSecsTimer, SLOT(start())); } void AutoCookConfigWindow::addFavorite() @@ -241,10 +345,10 @@ void AutoCookConfigWindow::on_favoritesButton_clicked() connect(p, SIGNAL(accepted()), SLOT(addFavorite())); - if (cookStartTimer.isActive()) + if (afterThreeSecsTimer.isActive()) { - cookStartTimer.stop(); - connect(p, SIGNAL(rejected()), &cookStartTimer, SLOT(start())); + afterThreeSecsTimer.stop(); + connect(p, SIGNAL(rejected()), &afterThreeSecsTimer, SLOT(start())); } } @@ -257,3 +361,28 @@ void AutoCookConfigWindow::on_washButton_clicked() MainWindow::jump(w); } + +void AutoCookConfigWindow::on_configButton_1_clicked() +{ + ui->configSlider_1->setFocus(); +} + +void AutoCookConfigWindow::on_configButton_2_clicked() +{ + ui->configSlider_2->setFocus(); +} + +void AutoCookConfigWindow::on_configButton_3_clicked() +{ + ui->configSlider_3->setFocus(); +} + +void AutoCookConfigWindow::on_configButton_4_clicked() +{ + ui->configSlider_4->setFocus(); +} + +void AutoCookConfigWindow::on_configButton_5_clicked() +{ + ui->configSlider_5->setFocus(); +} diff --git a/app/gui/oven_control/autocookconfigwindow.h b/app/gui/oven_control/autocookconfigwindow.h index 30d030b..7a7edff 100644 --- a/app/gui/oven_control/autocookconfigwindow.h +++ b/app/gui/oven_control/autocookconfigwindow.h @@ -24,13 +24,17 @@ public: explicit AutoCookConfigWindow(QWidget *parent, Cook cook); ~AutoCookConfigWindow(); + bool eventFilter(QObject *watched, QEvent *event); + +protected: + void keyPressEvent(QKeyEvent *event); + void keyReleaseEvent(QKeyEvent *event); + private: Ui::AutoCookConfigWindow *ui; Oven *oven; Cook cook; - QTimer cookStartTimer; - struct ConfigWidget { QPushButton *button; QLabel *minimum; @@ -41,19 +45,31 @@ private: QList configWidgets; + QTimer afterThreeSecsTimer; + + QWidget *pushed = NULL; + + void onEncoderLeft(); + void onEncoderRight(); + void onEncoderClicked(QWidget *clicked); + private slots: void setupUi(); void updateView(); void updateConfig(); - void startTimer(); - void stopTimer(); void start(); void addFavorite(); + void afterThreeSecs(); void on_backButton_clicked(); void on_configButton_clicked(); void on_favoritesButton_clicked(); void on_washButton_clicked(); + void on_configButton_1_clicked(); + void on_configButton_2_clicked(); + void on_configButton_3_clicked(); + void on_configButton_4_clicked(); + void on_configButton_5_clicked(); }; #endif // AUTOCOOKCONFIGWINDOW_H diff --git a/app/gui/oven_control/autocookconfigwindow.ui b/app/gui/oven_control/autocookconfigwindow.ui index abfe91d..68369d6 100644 --- a/app/gui/oven_control/autocookconfigwindow.ui +++ b/app/gui/oven_control/autocookconfigwindow.ui @@ -124,7 +124,7 @@ border: none; QPushButton { border-image: url(:/images/bottom_bar/back.png); } -QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); } +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/back_ov.png); } @@ -147,7 +147,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/back_ov.png); } QPushButton { border-image: url(:/images/bottom_bar/wash.png); } -QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); } +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/wash_ov.png); } @@ -170,7 +170,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/wash_ov.png); } QPushButton { border-image: url(:/images/bottom_bar/config.png); } -QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); } +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/config_ov.png); } @@ -193,7 +193,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/config_ov.png); } QPushButton { border-image: url(:/images/bottom_bar/help.png); } -QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); } +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/help_ov.png); } @@ -216,7 +216,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/help_ov.png); } QPushButton { border-image: url(:/images/bottom_bar/favorites.png); } -QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); } +QPushButton:pressed, QPushButton:focus { border-image: url(:/images/bottom_bar/favorites_ov.png); } @@ -368,7 +368,7 @@ QPushButton:pressed { border-image: url(:/images/bottom_bar/favorites_ov.png); } QPushButton { border-image: url(:/images/button/288.png); } -QPushButton::pressed { +QPushButton::pressed, QPushButton:focus { border-image: url(:/images/button/288_ov.png); } @@ -639,7 +639,7 @@ border-image: url(:/images/button/288_ov.png); QPushButton { border-image: url(:/images/button/152.png); } -QPushButton::pressed { +QPushButton::pressed, QPushButton:focus { border-image: url(:/images/button/152_ov.png); } @@ -1326,51 +1326,66 @@ border-image: url(:/images/button/152_ov.png); 185 - 605 + 645 666 - 140 + 60 + + Qt::ClickFocus + 185 - 765 + 805 666 - 140 + 60 + + Qt::ClickFocus + 185 - 935 + 975 666 - 140 + 60 + + Qt::ClickFocus + 185 - 1115 + 1155 666 - 140 + 60 + + Qt::ClickFocus + 185 - 1285 + 1325 666 - 140 + 60 + + Qt::ClickFocus + @@ -1393,6 +1408,20 @@ border-image: url(:/images/button/152_ov.png); 1 + + selectCookButton + pushButton_4 + configButton_1 + configButton_2 + configButton_3 + configButton_4 + configButton_5 + backButton + configButton + favoritesButton + washButton + helpButton +