Commit f5634ecc765a9a1fd31b1feb6e26b0a8d3db706d

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

엔코더 구현

- 즐겨찾기 이름 설정 팝업
- 프로그래밍 모드 항목 이름 설정 팝업
- 수동 요리 예약 시간 설정 팝업
- 수동 요리 예약 시간 표시 팝업
app/gui/oven_control/favoritenamepopup.cpp
... ... @@ -13,6 +13,12 @@ FavoriteNamePopup::FavoriteNamePopup(QWidget *parent) :
13 13 {
14 14 ui->setupUi(this);
15 15  
  16 + connect(ui->keyboard, SIGNAL(onOkKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard()));
  17 + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard()));
  18 + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), SLOT(revert()));
  19 +
  20 + ui->lineEdit->installEventFilter(this);
  21 +
16 22 ui->lineEdit->setFocus();
17 23 ui->lineEdit->selectAll();
18 24  
... ... @@ -37,6 +43,20 @@ FavoriteNamePopup::~FavoriteNamePopup()
37 43 delete ui;
38 44 }
39 45  
  46 +bool FavoriteNamePopup::eventFilter(QObject */*watched*/, QEvent *event)
  47 +{
  48 + switch (event->type())
  49 + {
  50 + case QEvent::FocusIn:
  51 + lastLine = ui->lineEdit->text();
  52 + break;
  53 + default:
  54 + break;
  55 + }
  56 +
  57 + return false;
  58 +}
  59 +
40 60 void FavoriteNamePopup::keyPressEvent(QKeyEvent *event)
41 61 {
42 62 switch (event->key())
... ... @@ -102,6 +122,14 @@ void FavoriteNamePopup::cancel()
102 122 deleteLater();
103 123 }
104 124  
  125 +void FavoriteNamePopup::revert()
  126 +{
  127 + ui->lineEdit->setText(lastLine);
  128 +
  129 + if (focusWidget() == ui->lineEdit)
  130 + ui->lineEdit->selectAll();
  131 +}
  132 +
105 133 void FavoriteNamePopup::on_okButton_clicked()
106 134 {
107 135 ok();
... ... @@ -114,15 +142,32 @@ void FavoriteNamePopup::on_cancelButton_clicked()
114 142  
115 143 void FavoriteNamePopup::onEncoderLeft()
116 144 {
117   -
  145 + if (focusWidget() == ui->lineEdit)
  146 + ui->cancelButton->setFocus();
  147 + else
  148 + focusPreviousChild();
118 149 }
119 150  
120 151 void FavoriteNamePopup::onEncoderRight()
121 152 {
122   -
  153 + if (focusWidget() == ui->cancelButton)
  154 + {
  155 + ui->lineEdit->setFocus();
  156 + ui->lineEdit->selectAll();
  157 + }
  158 + else
  159 + focusNextChild();
123 160 }
124 161  
125 162 void FavoriteNamePopup::onEncoderClicked(QWidget *clicked)
126 163 {
127   -
  164 + QPushButton *b = qobject_cast<QPushButton *>(clicked);
  165 + if (b)
  166 + b->click();
  167 + else
  168 + {
  169 + QLineEdit *e = qobject_cast<QLineEdit *>(clicked);
  170 + if (e)
  171 + ui->keyboard->focusInKeyboard();
  172 + }
128 173 }
... ...
app/gui/oven_control/favoritenamepopup.h
... ... @@ -20,6 +20,8 @@ public:
20 20 explicit FavoriteNamePopup(QWidget *parent, AutoCookSetting setting);
21 21 ~FavoriteNamePopup();
22 22  
  23 + bool eventFilter(QObject *watched, QEvent *event);
  24 +
23 25 protected:
24 26 void keyPressEvent(QKeyEvent *event);
25 27 void keyReleaseEvent(QKeyEvent *event);
... ... @@ -37,9 +39,12 @@ private:
37 39 void onEncoderRight();
38 40 void onEncoderClicked(QWidget *clicked);
39 41  
  42 + QString lastLine;
  43 +
40 44 private slots:
41 45 void ok();
42 46 void cancel();
  47 + void revert();
43 48 void on_okButton_clicked();
44 49 void on_cancelButton_clicked();
45 50 };
... ...
app/gui/oven_control/favoritenamepopup.ui
... ... @@ -163,6 +163,11 @@ QPushButton:pressed, QPushButton:focus { color: yellow; }&lt;/string&gt;
163 163 <container>1</container>
164 164 </customwidget>
165 165 </customwidgets>
  166 + <tabstops>
  167 + <tabstop>lineEdit</tabstop>
  168 + <tabstop>okButton</tabstop>
  169 + <tabstop>cancelButton</tabstop>
  170 + </tabstops>
166 171 <resources/>
167 172 <connections/>
168 173 </ui>
... ...
app/gui/oven_control/formatterspinbox.cpp
... ... @@ -30,8 +30,8 @@ FormatterSpinBox::FormatterSpinBox(QWidget *parent)
30 30 }
31 31  
32 32 void FormatterSpinBox::focusInEvent(QFocusEvent *event){
33   - qDebug() << "focus in";
34   - if(event->reason() == Qt::MouseFocusReason) QTimer::singleShot(200,this,SLOT(selectAll()));
  33 + QSpinBox::focusInEvent(event);
  34 + if(event->reason() == Qt::MouseFocusReason) QTimer::singleShot(0,this,SLOT(selectAll()));
35 35 else selectAll();
36 36 emit focusInEdit();
37 37 }
... ...
app/gui/oven_control/manualcookwindow.cpp
... ... @@ -1018,7 +1018,7 @@ void ManualCookWindow::on_favoriteButton_clicked()
1018 1018 p->showFullScreen();
1019 1019  
1020 1020 focused = ui->favoriteButton;
1021   - connect(p, SIGNAL(destroyed(QObject*)), SLOT(focusAgain()));
  1021 + connect(p, SIGNAL(rejected()), SLOT(focusAgain()));
1022 1022 connect(p, SIGNAL(accepted()), SLOT(addFavorite()));
1023 1023  
1024 1024 if (startCookingTimer.isActive())
... ...
app/gui/oven_control/programmingnamepopup.cpp
... ... @@ -14,6 +14,12 @@ ProgrammingNamePopup::ProgrammingNamePopup(QWidget *parent, CookRecord record) :
14 14  
15 15 setAttribute(Qt::WA_DeleteOnClose);
16 16  
  17 + connect(ui->keyboard, SIGNAL(onOkKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard()));
  18 + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard()));
  19 + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), SLOT(revert()));
  20 +
  21 + ui->lineEdit->installEventFilter(this);
  22 +
17 23 ui->lineEdit->setText(record.name);
18 24 ui->lineEdit->setFocus();
19 25 ui->lineEdit->selectAll();
... ... @@ -27,6 +33,20 @@ ProgrammingNamePopup::~ProgrammingNamePopup()
27 33 delete ui;
28 34 }
29 35  
  36 +bool ProgrammingNamePopup::eventFilter(QObject */*watched*/, QEvent *event)
  37 +{
  38 + switch (event->type())
  39 + {
  40 + case QEvent::FocusIn:
  41 + lastLine = ui->lineEdit->text();
  42 + break;
  43 + default:
  44 + break;
  45 + }
  46 +
  47 + return false;
  48 +}
  49 +
30 50 void ProgrammingNamePopup::keyPressEvent(QKeyEvent *event)
31 51 {
32 52 switch (event->key())
... ... @@ -62,6 +82,14 @@ void ProgrammingNamePopup::keyReleaseEvent(QKeyEvent *event)
62 82 }
63 83 }
64 84  
  85 +void ProgrammingNamePopup::revert()
  86 +{
  87 + ui->lineEdit->setText(lastLine);
  88 +
  89 + if (focusWidget() == ui->lineEdit)
  90 + ui->lineEdit->selectAll();
  91 +}
  92 +
65 93 void ProgrammingNamePopup::on_okButton_clicked()
66 94 {
67 95 CookProgram::rename(record, ui->lineEdit->text());
... ... @@ -78,15 +106,32 @@ void ProgrammingNamePopup::on_cancelButton_clicked()
78 106  
79 107 void ProgrammingNamePopup::onEncoderLeft()
80 108 {
81   -
  109 + if (focusWidget() == ui->lineEdit)
  110 + ui->cancelButton->setFocus();
  111 + else
  112 + focusPreviousChild();
82 113 }
83 114  
84 115 void ProgrammingNamePopup::onEncoderRight()
85 116 {
86   -
  117 + if (focusWidget() == ui->cancelButton)
  118 + {
  119 + ui->lineEdit->setFocus();
  120 + ui->lineEdit->selectAll();
  121 + }
  122 + else
  123 + focusNextChild();
87 124 }
88 125  
89 126 void ProgrammingNamePopup::onEncoderClicked(QWidget *clicked)
90 127 {
91   -
  128 + QPushButton *b = qobject_cast<QPushButton *>(clicked);
  129 + if (b)
  130 + b->click();
  131 + else
  132 + {
  133 + QLineEdit *e = qobject_cast<QLineEdit *>(clicked);
  134 + if (e)
  135 + ui->keyboard->focusInKeyboard();
  136 + }
92 137 }
... ...
app/gui/oven_control/programmingnamepopup.h
... ... @@ -17,11 +17,15 @@ public:
17 17 explicit ProgrammingNamePopup(QWidget *parent, CookRecord record);
18 18 ~ProgrammingNamePopup();
19 19  
  20 + bool eventFilter(QObject *watched, QEvent *event);
  21 +
20 22 protected:
21 23 void keyPressEvent(QKeyEvent *event);
22 24 void keyReleaseEvent(QKeyEvent *event);
23 25  
24 26 private slots:
  27 + void revert();
  28 +
25 29 void on_okButton_clicked();
26 30  
27 31 void on_cancelButton_clicked();
... ... @@ -37,6 +41,8 @@ private:
37 41 void onEncoderRight();
38 42 void onEncoderClicked(QWidget *clicked);
39 43  
  44 + QString lastLine;
  45 +
40 46 signals:
41 47 void changed();
42 48 };
... ...
app/gui/oven_control/programmingnamepopup.ui
... ... @@ -165,6 +165,11 @@ QPushButton:pressed, QPushButton:focus { color: yellow; }&lt;/string&gt;
165 165 <container>1</container>
166 166 </customwidget>
167 167 </customwidgets>
  168 + <tabstops>
  169 + <tabstop>lineEdit</tabstop>
  170 + <tabstop>okButton</tabstop>
  171 + <tabstop>cancelButton</tabstop>
  172 + </tabstops>
168 173 <resources/>
169 174 <connections/>
170 175 </ui>
... ...
app/gui/oven_control/reservedtimepopup.cpp
... ... @@ -2,6 +2,7 @@
2 2 #include "ui_reservedtimepopup.h"
3 3  
4 4 #include <QDebug>
  5 +#include <QKeyEvent>
5 6  
6 7 #include "stringer.h"
7 8  
... ... @@ -18,6 +19,8 @@ ReservedTimePopup::ReservedTimePopup(QWidget *parent, QDateTime target) :
18 19 checkTimeTimer.start(100);
19 20  
20 21 checkTime();
  22 +
  23 + setFocus();
21 24 }
22 25  
23 26 ReservedTimePopup::~ReservedTimePopup()
... ... @@ -25,6 +28,37 @@ ReservedTimePopup::~ReservedTimePopup()
25 28 delete ui;
26 29 }
27 30  
  31 +void ReservedTimePopup::keyPressEvent(QKeyEvent *event)
  32 +{
  33 + switch (event->key())
  34 + {
  35 + case 0x01000030: // Turn left
  36 + ui->cancelButton->setFocus();
  37 + break;
  38 + case 0x01000031: // Push
  39 + break;
  40 + case 0x01000032: // Turn right
  41 + ui->cancelButton->setFocus();
  42 + break;
  43 + }
  44 +}
  45 +
  46 +void ReservedTimePopup::keyReleaseEvent(QKeyEvent *event)
  47 +{
  48 + switch (event->key())
  49 + {
  50 + case 0x01000030: // Turn left
  51 + ui->cancelButton->setFocus();
  52 + break;
  53 + case 0x01000031: // Push
  54 + ui->cancelButton->click();
  55 + break;
  56 + case 0x01000032: // Turn right
  57 + ui->cancelButton->setFocus();
  58 + break;
  59 + }
  60 +}
  61 +
28 62 void ReservedTimePopup::checkTime()
29 63 {
30 64 qint64 remaining = QDateTime::currentDateTime().msecsTo(target);
... ... @@ -39,6 +73,10 @@ void ReservedTimePopup::checkTime()
39 73  
40 74 void ReservedTimePopup::on_cancelButton_clicked()
41 75 {
  76 + QWidget *focused = focusWidget();
  77 + if (focused)
  78 + focused->clearFocus();
  79 +
42 80 emit canceled();
43 81 close();
44 82 }
... ...
app/gui/oven_control/reservedtimepopup.h
... ... @@ -17,6 +17,10 @@ public:
17 17 explicit ReservedTimePopup(QWidget *parent, QDateTime target);
18 18 ~ReservedTimePopup();
19 19  
  20 +protected:
  21 + void keyPressEvent(QKeyEvent* event);
  22 + void keyReleaseEvent(QKeyEvent* event);
  23 +
20 24 private:
21 25 Ui::ReservedTimePopup *ui;
22 26 QDateTime target;
... ...
app/gui/oven_control/reservetimepopup.cpp
... ... @@ -2,8 +2,11 @@
2 2 #include "ui_reservetimepopup.h"
3 3  
4 4 #include <QDateTime>
  5 +#include <QKeyEvent>
  6 +#include <QDebug>
5 7  
6 8 #include "reservedtimepopup.h"
  9 +#include "formatterspinbox.h"
7 10  
8 11 ReserveTimePopup::ReserveTimePopup(QWidget *parent) :
9 12 QWidget(parent),
... ... @@ -18,6 +21,16 @@ ReserveTimePopup::ReserveTimePopup(QWidget *parent) :
18 21 ui->day->setValue(dt.date().day());
19 22 ui->hour->setValue(dt.time().hour());
20 23 ui->min->setValue(dt.time().minute());
  24 +
  25 + connect(ui->keyboard, SIGNAL(onOkKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard()));
  26 + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard()));
  27 + connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), SLOT(revert()));
  28 +
  29 + foreach (FormatterSpinBox *b, findChildren<FormatterSpinBox *>())
  30 + b->installEventFilter(this);
  31 +
  32 + ui->min->setFocus();
  33 + ui->min->selectAll();
21 34 }
22 35  
23 36 ReserveTimePopup::~ReserveTimePopup()
... ... @@ -25,6 +38,68 @@ ReserveTimePopup::~ReserveTimePopup()
25 38 delete ui;
26 39 }
27 40  
  41 +bool ReserveTimePopup::eventFilter(QObject *watched, QEvent *event)
  42 +{
  43 + FormatterSpinBox *e = qobject_cast<FormatterSpinBox *>(watched);
  44 + if (e)
  45 + {
  46 + switch (event->type())
  47 + {
  48 + case QEvent::FocusIn:
  49 + lastValue = e->value();
  50 + break;
  51 + default:
  52 + break;
  53 + }
  54 + }
  55 +
  56 + return false;
  57 +}
  58 +
  59 +void ReserveTimePopup::keyPressEvent(QKeyEvent *event)
  60 +{
  61 + switch (event->key())
  62 + {
  63 + case 0x01000030: // Turn left
  64 + onEncoderLeft();
  65 + break;
  66 + case 0x01000031: // Push
  67 + pushed = focusWidget();
  68 + break;
  69 + case 0x01000032: // Turn right
  70 + onEncoderRight();
  71 + break;
  72 + }
  73 +}
  74 +
  75 +void ReserveTimePopup::keyReleaseEvent(QKeyEvent *event)
  76 +{
  77 + switch (event->key())
  78 + {
  79 + case 0x01000030: // Turn left
  80 + onEncoderLeft();
  81 + break;
  82 + case 0x01000031: // Push
  83 + if (focusWidget() == pushed)
  84 + onEncoderClicked(pushed);
  85 +
  86 + pushed = NULL;
  87 + break;
  88 + case 0x01000032: // Turn right
  89 + onEncoderRight();
  90 + break;
  91 + }
  92 +}
  93 +
  94 +void ReserveTimePopup::revert()
  95 +{
  96 + FormatterSpinBox *b = qobject_cast<FormatterSpinBox *>(focusWidget());
  97 + if (b)
  98 + b->setValue(lastValue);
  99 +
  100 + qDebug() << lastValue;
  101 +}
  102 +
28 103 void ReserveTimePopup::on_okButton_clicked()
29 104 {
30 105 QDateTime current = QDateTime::currentDateTime();
... ... @@ -49,3 +124,38 @@ void ReserveTimePopup::on_cancelButton_clicked()
49 124 emit canceled();
50 125 close();
51 126 }
  127 +
  128 +void ReserveTimePopup::onEncoderLeft()
  129 +{
  130 + if (focusWidget() == ui->month)
  131 + ui->cancelButton->setFocus();
  132 + else
  133 + focusPreviousChild();
  134 +}
  135 +
  136 +void ReserveTimePopup::onEncoderRight()
  137 +{
  138 + if (focusWidget() == ui->cancelButton)
  139 + {
  140 + ui->month->setFocus();
  141 + ui->month->selectAll();
  142 + }
  143 + else
  144 + focusNextChild();
  145 +}
  146 +
  147 +void ReserveTimePopup::onEncoderClicked(QWidget *clicked)
  148 +{
  149 + QPushButton *b = qobject_cast<QPushButton *>(clicked);
  150 + if (b)
  151 + b->click();
  152 + else
  153 + {
  154 + FormatterSpinBox *e = qobject_cast<FormatterSpinBox *>(clicked);
  155 + if (e)
  156 + {
  157 + qDebug() << "focusinkeyboard";
  158 + ui->keyboard->focusInKeyboard();
  159 + }
  160 + }
  161 +}
... ...
app/gui/oven_control/reservetimepopup.h
... ... @@ -15,7 +15,15 @@ public:
15 15 explicit ReserveTimePopup(QWidget *parent = 0);
16 16 ~ReserveTimePopup();
17 17  
  18 + bool eventFilter(QObject *watched, QEvent *event);
  19 +
  20 +protected:
  21 + void keyPressEvent(QKeyEvent* event);
  22 + void keyReleaseEvent(QKeyEvent* event);
  23 +
18 24 private slots:
  25 + void revert();
  26 +
19 27 void on_okButton_clicked();
20 28  
21 29 void on_cancelButton_clicked();
... ... @@ -23,6 +31,14 @@ private slots:
23 31 private:
24 32 Ui::ReserveTimePopup *ui;
25 33  
  34 + int lastValue;
  35 +
  36 + QWidget *pushed = NULL;
  37 +
  38 + void onEncoderLeft();
  39 + void onEncoderRight();
  40 + void onEncoderClicked(QWidget *clicked);
  41 +
26 42 signals:
27 43 void timeout();
28 44 void canceled();
... ...
app/gui/oven_control/reservetimepopup.ui
... ... @@ -426,6 +426,14 @@ QSpinBox{
426 426 <header>formatterspinbox.h</header>
427 427 </customwidget>
428 428 </customwidgets>
  429 + <tabstops>
  430 + <tabstop>month</tabstop>
  431 + <tabstop>day</tabstop>
  432 + <tabstop>hour</tabstop>
  433 + <tabstop>min</tabstop>
  434 + <tabstop>okButton</tabstop>
  435 + <tabstop>cancelButton</tabstop>
  436 + </tabstops>
429 437 <resources/>
430 438 <connections/>
431 439 </ui>
... ...