From f5634ecc765a9a1fd31b1feb6e26b0a8d3db706d Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 16 Jun 2017 10:53:28 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=94=EC=BD=94=EB=8D=94=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20-=20=EC=A6=90=EA=B2=A8=EC=B0=BE=EA=B8=B0=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=84=A4=EC=A0=95=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?-=20=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98=EB=B0=8D=20=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=20=ED=95=AD=EB=AA=A9=20=EC=9D=B4=EB=A6=84=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=ED=8C=9D=EC=97=85=20-=20=EC=88=98=EB=8F=99=20?= =?UTF-8?q?=EC=9A=94=EB=A6=AC=20=EC=98=88=EC=95=BD=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=ED=8C=9D=EC=97=85=20-=20=EC=88=98?= =?UTF-8?q?=EB=8F=99=20=EC=9A=94=EB=A6=AC=20=EC=98=88=EC=95=BD=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=ED=91=9C=EC=8B=9C=20=ED=8C=9D=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/gui/oven_control/favoritenamepopup.cpp | 51 +++++++++++- app/gui/oven_control/favoritenamepopup.h | 5 ++ app/gui/oven_control/favoritenamepopup.ui | 5 ++ app/gui/oven_control/formatterspinbox.cpp | 4 +- app/gui/oven_control/manualcookwindow.cpp | 2 +- app/gui/oven_control/programmingnamepopup.cpp | 51 +++++++++++- app/gui/oven_control/programmingnamepopup.h | 6 ++ app/gui/oven_control/programmingnamepopup.ui | 5 ++ app/gui/oven_control/reservedtimepopup.cpp | 38 +++++++++ app/gui/oven_control/reservedtimepopup.h | 4 + app/gui/oven_control/reservetimepopup.cpp | 110 ++++++++++++++++++++++++++ app/gui/oven_control/reservetimepopup.h | 16 ++++ app/gui/oven_control/reservetimepopup.ui | 8 ++ 13 files changed, 296 insertions(+), 9 deletions(-) diff --git a/app/gui/oven_control/favoritenamepopup.cpp b/app/gui/oven_control/favoritenamepopup.cpp index ad1305e..664c84e 100644 --- a/app/gui/oven_control/favoritenamepopup.cpp +++ b/app/gui/oven_control/favoritenamepopup.cpp @@ -13,6 +13,12 @@ FavoriteNamePopup::FavoriteNamePopup(QWidget *parent) : { ui->setupUi(this); + connect(ui->keyboard, SIGNAL(onOkKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard())); + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard())); + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), SLOT(revert())); + + ui->lineEdit->installEventFilter(this); + ui->lineEdit->setFocus(); ui->lineEdit->selectAll(); @@ -37,6 +43,20 @@ FavoriteNamePopup::~FavoriteNamePopup() delete ui; } +bool FavoriteNamePopup::eventFilter(QObject */*watched*/, QEvent *event) +{ + switch (event->type()) + { + case QEvent::FocusIn: + lastLine = ui->lineEdit->text(); + break; + default: + break; + } + + return false; +} + void FavoriteNamePopup::keyPressEvent(QKeyEvent *event) { switch (event->key()) @@ -102,6 +122,14 @@ void FavoriteNamePopup::cancel() deleteLater(); } +void FavoriteNamePopup::revert() +{ + ui->lineEdit->setText(lastLine); + + if (focusWidget() == ui->lineEdit) + ui->lineEdit->selectAll(); +} + void FavoriteNamePopup::on_okButton_clicked() { ok(); @@ -114,15 +142,32 @@ void FavoriteNamePopup::on_cancelButton_clicked() void FavoriteNamePopup::onEncoderLeft() { - + if (focusWidget() == ui->lineEdit) + ui->cancelButton->setFocus(); + else + focusPreviousChild(); } void FavoriteNamePopup::onEncoderRight() { - + if (focusWidget() == ui->cancelButton) + { + ui->lineEdit->setFocus(); + ui->lineEdit->selectAll(); + } + else + focusNextChild(); } void FavoriteNamePopup::onEncoderClicked(QWidget *clicked) { - + QPushButton *b = qobject_cast(clicked); + if (b) + b->click(); + else + { + QLineEdit *e = qobject_cast(clicked); + if (e) + ui->keyboard->focusInKeyboard(); + } } diff --git a/app/gui/oven_control/favoritenamepopup.h b/app/gui/oven_control/favoritenamepopup.h index 93917f8..38842f9 100644 --- a/app/gui/oven_control/favoritenamepopup.h +++ b/app/gui/oven_control/favoritenamepopup.h @@ -20,6 +20,8 @@ public: explicit FavoriteNamePopup(QWidget *parent, AutoCookSetting setting); ~FavoriteNamePopup(); + bool eventFilter(QObject *watched, QEvent *event); + protected: void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); @@ -37,9 +39,12 @@ private: void onEncoderRight(); void onEncoderClicked(QWidget *clicked); + QString lastLine; + private slots: void ok(); void cancel(); + void revert(); void on_okButton_clicked(); void on_cancelButton_clicked(); }; diff --git a/app/gui/oven_control/favoritenamepopup.ui b/app/gui/oven_control/favoritenamepopup.ui index 931db8e..c070bd8 100644 --- a/app/gui/oven_control/favoritenamepopup.ui +++ b/app/gui/oven_control/favoritenamepopup.ui @@ -163,6 +163,11 @@ QPushButton:pressed, QPushButton:focus { color: yellow; } 1 + + lineEdit + okButton + cancelButton + diff --git a/app/gui/oven_control/formatterspinbox.cpp b/app/gui/oven_control/formatterspinbox.cpp index 967c819..22ac81e 100644 --- a/app/gui/oven_control/formatterspinbox.cpp +++ b/app/gui/oven_control/formatterspinbox.cpp @@ -30,8 +30,8 @@ FormatterSpinBox::FormatterSpinBox(QWidget *parent) } void FormatterSpinBox::focusInEvent(QFocusEvent *event){ - qDebug() << "focus in"; - if(event->reason() == Qt::MouseFocusReason) QTimer::singleShot(200,this,SLOT(selectAll())); + QSpinBox::focusInEvent(event); + if(event->reason() == Qt::MouseFocusReason) QTimer::singleShot(0,this,SLOT(selectAll())); else selectAll(); emit focusInEdit(); } diff --git a/app/gui/oven_control/manualcookwindow.cpp b/app/gui/oven_control/manualcookwindow.cpp index 5cf5daa..7026d12 100644 --- a/app/gui/oven_control/manualcookwindow.cpp +++ b/app/gui/oven_control/manualcookwindow.cpp @@ -1018,7 +1018,7 @@ void ManualCookWindow::on_favoriteButton_clicked() p->showFullScreen(); focused = ui->favoriteButton; - connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain())); + connect(p, SIGNAL(rejected()), SLOT(focusAgain())); connect(p, SIGNAL(accepted()), SLOT(addFavorite())); if (startCookingTimer.isActive()) diff --git a/app/gui/oven_control/programmingnamepopup.cpp b/app/gui/oven_control/programmingnamepopup.cpp index 1b1e223..f7e5e49 100644 --- a/app/gui/oven_control/programmingnamepopup.cpp +++ b/app/gui/oven_control/programmingnamepopup.cpp @@ -14,6 +14,12 @@ ProgrammingNamePopup::ProgrammingNamePopup(QWidget *parent, CookRecord record) : setAttribute(Qt::WA_DeleteOnClose); + connect(ui->keyboard, SIGNAL(onOkKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard())); + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard())); + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), SLOT(revert())); + + ui->lineEdit->installEventFilter(this); + ui->lineEdit->setText(record.name); ui->lineEdit->setFocus(); ui->lineEdit->selectAll(); @@ -27,6 +33,20 @@ ProgrammingNamePopup::~ProgrammingNamePopup() delete ui; } +bool ProgrammingNamePopup::eventFilter(QObject */*watched*/, QEvent *event) +{ + switch (event->type()) + { + case QEvent::FocusIn: + lastLine = ui->lineEdit->text(); + break; + default: + break; + } + + return false; +} + void ProgrammingNamePopup::keyPressEvent(QKeyEvent *event) { switch (event->key()) @@ -62,6 +82,14 @@ void ProgrammingNamePopup::keyReleaseEvent(QKeyEvent *event) } } +void ProgrammingNamePopup::revert() +{ + ui->lineEdit->setText(lastLine); + + if (focusWidget() == ui->lineEdit) + ui->lineEdit->selectAll(); +} + void ProgrammingNamePopup::on_okButton_clicked() { CookProgram::rename(record, ui->lineEdit->text()); @@ -78,15 +106,32 @@ void ProgrammingNamePopup::on_cancelButton_clicked() void ProgrammingNamePopup::onEncoderLeft() { - + if (focusWidget() == ui->lineEdit) + ui->cancelButton->setFocus(); + else + focusPreviousChild(); } void ProgrammingNamePopup::onEncoderRight() { - + if (focusWidget() == ui->cancelButton) + { + ui->lineEdit->setFocus(); + ui->lineEdit->selectAll(); + } + else + focusNextChild(); } void ProgrammingNamePopup::onEncoderClicked(QWidget *clicked) { - + QPushButton *b = qobject_cast(clicked); + if (b) + b->click(); + else + { + QLineEdit *e = qobject_cast(clicked); + if (e) + ui->keyboard->focusInKeyboard(); + } } diff --git a/app/gui/oven_control/programmingnamepopup.h b/app/gui/oven_control/programmingnamepopup.h index fd40215..df80302 100644 --- a/app/gui/oven_control/programmingnamepopup.h +++ b/app/gui/oven_control/programmingnamepopup.h @@ -17,11 +17,15 @@ public: explicit ProgrammingNamePopup(QWidget *parent, CookRecord record); ~ProgrammingNamePopup(); + bool eventFilter(QObject *watched, QEvent *event); + protected: void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); private slots: + void revert(); + void on_okButton_clicked(); void on_cancelButton_clicked(); @@ -37,6 +41,8 @@ private: void onEncoderRight(); void onEncoderClicked(QWidget *clicked); + QString lastLine; + signals: void changed(); }; diff --git a/app/gui/oven_control/programmingnamepopup.ui b/app/gui/oven_control/programmingnamepopup.ui index 72a0c43..64fe84b 100644 --- a/app/gui/oven_control/programmingnamepopup.ui +++ b/app/gui/oven_control/programmingnamepopup.ui @@ -165,6 +165,11 @@ QPushButton:pressed, QPushButton:focus { color: yellow; } 1 + + lineEdit + okButton + cancelButton + diff --git a/app/gui/oven_control/reservedtimepopup.cpp b/app/gui/oven_control/reservedtimepopup.cpp index 24135e7..b5a83d4 100644 --- a/app/gui/oven_control/reservedtimepopup.cpp +++ b/app/gui/oven_control/reservedtimepopup.cpp @@ -2,6 +2,7 @@ #include "ui_reservedtimepopup.h" #include +#include #include "stringer.h" @@ -18,6 +19,8 @@ ReservedTimePopup::ReservedTimePopup(QWidget *parent, QDateTime target) : checkTimeTimer.start(100); checkTime(); + + setFocus(); } ReservedTimePopup::~ReservedTimePopup() @@ -25,6 +28,37 @@ ReservedTimePopup::~ReservedTimePopup() delete ui; } +void ReservedTimePopup::keyPressEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case 0x01000030: // Turn left + ui->cancelButton->setFocus(); + break; + case 0x01000031: // Push + break; + case 0x01000032: // Turn right + ui->cancelButton->setFocus(); + break; + } +} + +void ReservedTimePopup::keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case 0x01000030: // Turn left + ui->cancelButton->setFocus(); + break; + case 0x01000031: // Push + ui->cancelButton->click(); + break; + case 0x01000032: // Turn right + ui->cancelButton->setFocus(); + break; + } +} + void ReservedTimePopup::checkTime() { qint64 remaining = QDateTime::currentDateTime().msecsTo(target); @@ -39,6 +73,10 @@ void ReservedTimePopup::checkTime() void ReservedTimePopup::on_cancelButton_clicked() { + QWidget *focused = focusWidget(); + if (focused) + focused->clearFocus(); + emit canceled(); close(); } diff --git a/app/gui/oven_control/reservedtimepopup.h b/app/gui/oven_control/reservedtimepopup.h index 23cc4b6..7074e84 100644 --- a/app/gui/oven_control/reservedtimepopup.h +++ b/app/gui/oven_control/reservedtimepopup.h @@ -17,6 +17,10 @@ public: explicit ReservedTimePopup(QWidget *parent, QDateTime target); ~ReservedTimePopup(); +protected: + void keyPressEvent(QKeyEvent* event); + void keyReleaseEvent(QKeyEvent* event); + private: Ui::ReservedTimePopup *ui; QDateTime target; diff --git a/app/gui/oven_control/reservetimepopup.cpp b/app/gui/oven_control/reservetimepopup.cpp index c36720e..09c1cfb 100644 --- a/app/gui/oven_control/reservetimepopup.cpp +++ b/app/gui/oven_control/reservetimepopup.cpp @@ -2,8 +2,11 @@ #include "ui_reservetimepopup.h" #include +#include +#include #include "reservedtimepopup.h" +#include "formatterspinbox.h" ReserveTimePopup::ReserveTimePopup(QWidget *parent) : QWidget(parent), @@ -18,6 +21,16 @@ ReserveTimePopup::ReserveTimePopup(QWidget *parent) : ui->day->setValue(dt.date().day()); ui->hour->setValue(dt.time().hour()); ui->min->setValue(dt.time().minute()); + + connect(ui->keyboard, SIGNAL(onOkKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard())); + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard())); + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), SLOT(revert())); + + foreach (FormatterSpinBox *b, findChildren()) + b->installEventFilter(this); + + ui->min->setFocus(); + ui->min->selectAll(); } ReserveTimePopup::~ReserveTimePopup() @@ -25,6 +38,68 @@ ReserveTimePopup::~ReserveTimePopup() delete ui; } +bool ReserveTimePopup::eventFilter(QObject *watched, QEvent *event) +{ + FormatterSpinBox *e = qobject_cast(watched); + if (e) + { + switch (event->type()) + { + case QEvent::FocusIn: + lastValue = e->value(); + break; + default: + break; + } + } + + return false; +} + +void ReserveTimePopup::keyPressEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case 0x01000030: // Turn left + onEncoderLeft(); + break; + case 0x01000031: // Push + pushed = focusWidget(); + break; + case 0x01000032: // Turn right + onEncoderRight(); + break; + } +} + +void ReserveTimePopup::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; + } +} + +void ReserveTimePopup::revert() +{ + FormatterSpinBox *b = qobject_cast(focusWidget()); + if (b) + b->setValue(lastValue); + + qDebug() << lastValue; +} + void ReserveTimePopup::on_okButton_clicked() { QDateTime current = QDateTime::currentDateTime(); @@ -49,3 +124,38 @@ void ReserveTimePopup::on_cancelButton_clicked() emit canceled(); close(); } + +void ReserveTimePopup::onEncoderLeft() +{ + if (focusWidget() == ui->month) + ui->cancelButton->setFocus(); + else + focusPreviousChild(); +} + +void ReserveTimePopup::onEncoderRight() +{ + if (focusWidget() == ui->cancelButton) + { + ui->month->setFocus(); + ui->month->selectAll(); + } + else + focusNextChild(); +} + +void ReserveTimePopup::onEncoderClicked(QWidget *clicked) +{ + QPushButton *b = qobject_cast(clicked); + if (b) + b->click(); + else + { + FormatterSpinBox *e = qobject_cast(clicked); + if (e) + { + qDebug() << "focusinkeyboard"; + ui->keyboard->focusInKeyboard(); + } + } +} diff --git a/app/gui/oven_control/reservetimepopup.h b/app/gui/oven_control/reservetimepopup.h index e9be12e..020d0b7 100644 --- a/app/gui/oven_control/reservetimepopup.h +++ b/app/gui/oven_control/reservetimepopup.h @@ -15,7 +15,15 @@ public: explicit ReserveTimePopup(QWidget *parent = 0); ~ReserveTimePopup(); + bool eventFilter(QObject *watched, QEvent *event); + +protected: + void keyPressEvent(QKeyEvent* event); + void keyReleaseEvent(QKeyEvent* event); + private slots: + void revert(); + void on_okButton_clicked(); void on_cancelButton_clicked(); @@ -23,6 +31,14 @@ private slots: private: Ui::ReserveTimePopup *ui; + int lastValue; + + QWidget *pushed = NULL; + + void onEncoderLeft(); + void onEncoderRight(); + void onEncoderClicked(QWidget *clicked); + signals: void timeout(); void canceled(); diff --git a/app/gui/oven_control/reservetimepopup.ui b/app/gui/oven_control/reservetimepopup.ui index 09a6dbf..88faa19 100644 --- a/app/gui/oven_control/reservetimepopup.ui +++ b/app/gui/oven_control/reservetimepopup.ui @@ -426,6 +426,14 @@ QSpinBox{
formatterspinbox.h
+ + month + day + hour + min + okButton + cancelButton + -- 2.1.4