Commit be7d2a6253b452fa29e07a25477adffc666a55c7

Authored by 고영탁
1 parent 79810624a1
Exists in master and in 2 other branches fhd, fhd-demo

엔코더 기능 구현

 - 키보드 기능 엔코더 구현(focusInKeyboard API 사용)
 - 날짜와 시간 적용
app/gui/oven_control/configdatetimedlg.cpp
1 #include <QDateTime> 1 #include <QDateTime>
  2 +#include <QKeyEvent>
2 #include "configdatetimedlg.h" 3 #include "configdatetimedlg.h"
3 #include "ui_configdatetimedlg.h" 4 #include "ui_configdatetimedlg.h"
4 #include "system.h" 5 #include "system.h"
@@ -12,6 +13,8 @@ ConfigDateTimeDlg::ConfigDateTimeDlg(QWidget *parent) : @@ -12,6 +13,8 @@ ConfigDateTimeDlg::ConfigDateTimeDlg(QWidget *parent) :
12 ui->setupUi(this); 13 ui->setupUi(this);
13 this->setWindowFlags( Qt::FramelessWindowHint); 14 this->setWindowFlags( Qt::FramelessWindowHint);
14 this->setAttribute( Qt::WA_DeleteOnClose); 15 this->setAttribute( Qt::WA_DeleteOnClose);
  16 + qApp->setActiveWindow(this);
  17 + this->setFocus();
15 18
16 foreach (QPushButton *button, findChildren<QPushButton *>()) 19 foreach (QPushButton *button, findChildren<QPushButton *>())
17 connect(button, &QPushButton::pressed, SoundPlayer::playClick); 20 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
@@ -25,6 +28,28 @@ ConfigDateTimeDlg::ConfigDateTimeDlg(QWidget *parent) : @@ -25,6 +28,28 @@ ConfigDateTimeDlg::ConfigDateTimeDlg(QWidget *parent) :
25 ui->ctrSpBxDay->setValue(dt_.day()); 28 ui->ctrSpBxDay->setValue(dt_.day());
26 ui->ctrSpBxHour->setValue(tm_.hour()); 29 ui->ctrSpBxHour->setValue(tm_.hour());
27 ui->ctrSpBxMin->setValue(tm_.minute()); 30 ui->ctrSpBxMin->setValue(tm_.minute());
  31 +
  32 + ui->ctrSpBxYear->setFocus();
  33 + m_bInputState = true;
  34 +
  35 +
  36 + connect(ui->keyboardwidget, SIGNAL(onOkKeyClicked()), this, SLOT(on_keyEnter_clicked()));
  37 + connect(ui->keyboardwidget, SIGNAL(onCancelKeyClicked()), this, SLOT(on_keyCancel_clicked()));
  38 +
  39 + m_pMapperSpins = new QSignalMapper(this);
  40 + m_pMapperSpins->setMapping(ui->ctrSpBxYear, ui->ctrSpBxYear);
  41 + m_pMapperSpins->setMapping(ui->ctrSpBxMonth, ui->ctrSpBxMonth);
  42 + m_pMapperSpins->setMapping(ui->ctrSpBxDay, ui->ctrSpBxDay);
  43 + m_pMapperSpins->setMapping(ui->ctrSpBxHour, ui->ctrSpBxHour);
  44 + m_pMapperSpins->setMapping(ui->ctrSpBxMin, ui->ctrSpBxMin);
  45 +
  46 + connect(ui->ctrSpBxYear, SIGNAL(focusInEdit()), m_pMapperSpins, SLOT(map()));
  47 + connect(ui->ctrSpBxMonth, SIGNAL(focusInEdit()), m_pMapperSpins, SLOT(map()));
  48 + connect(ui->ctrSpBxDay, SIGNAL(focusInEdit()), m_pMapperSpins, SLOT(map()));
  49 + connect(ui->ctrSpBxHour, SIGNAL(focusInEdit()), m_pMapperSpins, SLOT(map()));
  50 + connect(ui->ctrSpBxMin, SIGNAL(focusInEdit()), m_pMapperSpins, SLOT(map()));
  51 +
  52 + connect(m_pMapperSpins, SIGNAL(mapped(QWidget*)), this, SLOT(on_focusInSpinBox(QWidget*)));
28 } 53 }
29 54
30 ConfigDateTimeDlg::~ConfigDateTimeDlg() 55 ConfigDateTimeDlg::~ConfigDateTimeDlg()
@@ -55,3 +80,69 @@ void ConfigDateTimeDlg::on_ctrBtnCancel_clicked() @@ -55,3 +80,69 @@ void ConfigDateTimeDlg::on_ctrBtnCancel_clicked()
55 { 80 {
56 this->reject(); 81 this->reject();
57 } 82 }
  83 +
  84 +void ConfigDateTimeDlg::keyPressEvent(QKeyEvent *event){
  85 + int i = 0;
  86 + switch (event->key())
  87 + {
  88 + case 0x01000030: // Turn left
  89 + if(focusWidget() == ui->ctrSpBxYear) ui->ctrBtnCancel->setFocus();
  90 + else focusPreviousChild();
  91 + break;
  92 + case 0x01000031: // Push
  93 +
  94 + break;
  95 + case 0x01000032: // Turn right
  96 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrSpBxYear->setFocus();
  97 + else focusNextChild();
  98 +
  99 + break;
  100 + }
  101 +}
  102 +
  103 +void ConfigDateTimeDlg::keyReleaseEvent(QKeyEvent *event){
  104 + int i = 0;
  105 + switch (event->key())
  106 + {
  107 + case 0x01000030: // Turn left
  108 + if(focusWidget() == ui->ctrSpBxYear) ui->ctrBtnCancel->setFocus();
  109 + else focusPreviousChild();
  110 + break;
  111 + case 0x01000031: // Push
  112 + {
  113 + QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
  114 + if(btn != NULL){
  115 + btn->click();
  116 + }
  117 + else{
  118 + QSpinBox *spbx = qobject_cast<QSpinBox*>(focusWidget());
  119 + qDebug() << "grab keyboard";
  120 + if(spbx != NULL) ui->keyboardwidget->focusInKeyboard();
  121 + }
  122 + break;
  123 + }
  124 + case 0x01000032: // Turn right
  125 + if(focusWidget() == ui->ctrBtnCancel) ui->ctrSpBxYear->setFocus();
  126 + else focusNextChild();
  127 + break;
  128 + }
  129 +}
  130 +
  131 +void ConfigDateTimeDlg::on_keyCancel_clicked(){
  132 + QSpinBox *spbx = qobject_cast<QSpinBox*>(focusWidget());
  133 + if(spbx != NULL){
  134 + spbx->setValue(m_nFocusValue);
  135 + }
  136 + ui->keyboardwidget->focusOutKeyboard();
  137 +}
  138 +
  139 +void ConfigDateTimeDlg::on_keyEnter_clicked(){
  140 + ui->keyboardwidget->focusOutKeyboard();
  141 +}
  142 +
  143 +void ConfigDateTimeDlg::on_focusInSpinBox(QWidget *widget){
  144 + QSpinBox *spbx = qobject_cast<QSpinBox*>(widget);
  145 + if(spbx != NULL){
  146 + m_nFocusValue = spbx->value();
  147 + }
  148 +}
app/gui/oven_control/configdatetimedlg.h
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 #define CONFIGDATETIMEDLG_H 2 #define CONFIGDATETIMEDLG_H
3 3
4 #include <QDialog> 4 #include <QDialog>
  5 +#include <QSignalMapper>
5 6
6 7
7 namespace Ui { 8 namespace Ui {
@@ -24,8 +25,21 @@ private slots: @@ -24,8 +25,21 @@ private slots:
24 25
25 void on_ctrBtnCancel_clicked(); 26 void on_ctrBtnCancel_clicked();
26 27
  28 + void on_keyCancel_clicked();
  29 + void on_keyEnter_clicked();
  30 +
  31 + void on_focusInSpinBox(QWidget* widget);
  32 +
  33 +protected:
  34 + void keyReleaseEvent(QKeyEvent* event);
  35 + void keyPressEvent(QKeyEvent* event);
  36 +
  37 +
27 private: 38 private:
28 Ui::ConfigDateTimeDlg *ui; 39 Ui::ConfigDateTimeDlg *ui;
  40 + bool m_bInputState;
  41 + QSignalMapper* m_pMapperSpins;
  42 + int m_nFocusValue;
29 }; 43 };
30 44
31 #endif // CONFIGDATETIMEDLG_H 45 #endif // CONFIGDATETIMEDLG_H
app/gui/oven_control/configdatetimedlg.ui
@@ -483,6 +483,15 @@ QPushButton::pressed, QPushButton::focus{ @@ -483,6 +483,15 @@ QPushButton::pressed, QPushButton::focus{
483 <header>formatterspinbox.h</header> 483 <header>formatterspinbox.h</header>
484 </customwidget> 484 </customwidget>
485 </customwidgets> 485 </customwidgets>
  486 + <tabstops>
  487 + <tabstop>ctrSpBxYear</tabstop>
  488 + <tabstop>ctrSpBxMonth</tabstop>
  489 + <tabstop>ctrSpBxDay</tabstop>
  490 + <tabstop>ctrSpBxHour</tabstop>
  491 + <tabstop>ctrSpBxMin</tabstop>
  492 + <tabstop>ctrBtnOk</tabstop>
  493 + <tabstop>ctrBtnCancel</tabstop>
  494 + </tabstops>
486 <resources/> 495 <resources/>
487 <connections/> 496 <connections/>
488 </ui> 497 </ui>
app/gui/oven_control/electricmodelsettingwindow.cpp
@@ -13,6 +13,8 @@ ElectricModelSettingWindow::ElectricModelSettingWindow(QWidget *parent) : @@ -13,6 +13,8 @@ ElectricModelSettingWindow::ElectricModelSettingWindow(QWidget *parent) :
13 ui->clockContainer->setParent(ui->upperStack); 13 ui->clockContainer->setParent(ui->upperStack);
14 setAttribute(Qt::WA_DeleteOnClose); 14 setAttribute(Qt::WA_DeleteOnClose);
15 15
  16 +
  17 +
16 foreach (QPushButton *button, findChildren<QPushButton *>()) 18 foreach (QPushButton *button, findChildren<QPushButton *>())
17 connect(button, &QPushButton::pressed, SoundPlayer::playClick); 19 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
18 20
@@ -20,26 +22,27 @@ ElectricModelSettingWindow::ElectricModelSettingWindow(QWidget *parent) : @@ -20,26 +22,27 @@ ElectricModelSettingWindow::ElectricModelSettingWindow(QWidget *parent) :
20 Define::config_item item; 22 Define::config_item item;
21 item = cfg->getConfigValue(Define::config_model); 23 item = cfg->getConfigValue(Define::config_model);
22 selitem = item.d32; 24 selitem = item.d32;
23 - m_ctrChkedbtn = NULL;  
24 switch(selitem){ 25 switch(selitem){
25 case Define::model_electric_10: 26 case Define::model_electric_10:
26 ui->e10Button->setChecked(true); 27 ui->e10Button->setChecked(true);
27 - m_ctrChkedbtn = ui->e10Button;  
28 break; 28 break;
29 case Define::model_electric_20: 29 case Define::model_electric_20:
30 ui->e20Button->setChecked(true); 30 ui->e20Button->setChecked(true);
31 - m_ctrChkedbtn = ui->e20Button;  
32 break; 31 break;
33 case Define::model_electric_24: 32 case Define::model_electric_24:
34 ui->e24Button->setChecked(true); 33 ui->e24Button->setChecked(true);
35 - m_ctrChkedbtn = ui->e24Button;  
36 break; 34 break;
37 case Define::model_electric_40: 35 case Define::model_electric_40:
38 ui->e40Button->setChecked(true); 36 ui->e40Button->setChecked(true);
39 - m_ctrChkedbtn = ui->e40Button;  
40 break; 37 break;
41 } 38 }
42 this->setFocus(); 39 this->setFocus();
  40 + m_vectorTabOrder.append(this);
  41 + m_vectorTabOrder.append(ui->e10Button);
  42 + m_vectorTabOrder.append(ui->e20Button);
  43 + m_vectorTabOrder.append(ui->e24Button);
  44 + m_vectorTabOrder.append(ui->e40Button);
  45 + m_vectorTabOrder.append(ui->backButton);
43 } 46 }
44 47
45 ElectricModelSettingWindow::~ElectricModelSettingWindow() 48 ElectricModelSettingWindow::~ElectricModelSettingWindow()
@@ -47,41 +50,6 @@ ElectricModelSettingWindow::~ElectricModelSettingWindow() @@ -47,41 +50,6 @@ ElectricModelSettingWindow::~ElectricModelSettingWindow()
47 delete ui; 50 delete ui;
48 } 51 }
49 52
50 -void ElectricModelSettingWindow::keyPressEvent(QKeyEvent *event)  
51 -{  
52 - switch (event->key())  
53 - {  
54 - case 0x01000030: // Turn left  
55 - onEncoderLeft();  
56 - break;  
57 - case 0x01000031: // Push  
58 - pushed = focusWidget();  
59 - break;  
60 - case 0x01000032: // Turn right  
61 - onEncoderRight();  
62 - break;  
63 - }  
64 -}  
65 -  
66 -void ElectricModelSettingWindow::keyReleaseEvent(QKeyEvent *event)  
67 -{  
68 - switch (event->key())  
69 - {  
70 - case 0x01000030: // Turn left  
71 - onEncoderLeft();  
72 - break;  
73 - case 0x01000031: // Push  
74 - if (focusWidget() == pushed)  
75 - onEncoderClicked(pushed);  
76 -  
77 - pushed = NULL;  
78 - break;  
79 - case 0x01000032: // Turn right  
80 - onEncoderRight();  
81 - break;  
82 - }  
83 -}  
84 -  
85 void ElectricModelSettingWindow::setModel(Define::model_type model) 53 void ElectricModelSettingWindow::setModel(Define::model_type model)
86 { 54 {
87 Define::config_item item; 55 Define::config_item item;
@@ -95,24 +63,18 @@ void ElectricModelSettingWindow::setModel(Define::model_type model) @@ -95,24 +63,18 @@ void ElectricModelSettingWindow::setModel(Define::model_type model)
95 void ElectricModelSettingWindow::on_e10Button_clicked() 63 void ElectricModelSettingWindow::on_e10Button_clicked()
96 { 64 {
97 //setModel(Define::model_electric_10); 65 //setModel(Define::model_electric_10);
98 - if(m_ctrChkedbtn != NULL) m_ctrChkedbtn->setChecked(false);  
99 - m_ctrChkedbtn = ui->e10Button;  
100 selitem = Define::model_electric_10; 66 selitem = Define::model_electric_10;
101 } 67 }
102 68
103 void ElectricModelSettingWindow::on_e20Button_clicked() 69 void ElectricModelSettingWindow::on_e20Button_clicked()
104 { 70 {
105 //setModel(Define::model_electric_20); 71 //setModel(Define::model_electric_20);
106 - if(m_ctrChkedbtn != NULL) m_ctrChkedbtn->setChecked(false);  
107 - m_ctrChkedbtn = ui->e20Button;  
108 selitem = Define::model_electric_20; 72 selitem = Define::model_electric_20;
109 } 73 }
110 74
111 void ElectricModelSettingWindow::on_e24Button_clicked() 75 void ElectricModelSettingWindow::on_e24Button_clicked()
112 { 76 {
113 //setModel(Define::model_electric_24); 77 //setModel(Define::model_electric_24);
114 - if(m_ctrChkedbtn != NULL) m_ctrChkedbtn->setChecked(false);  
115 - m_ctrChkedbtn = ui->e24Button;  
116 78
117 selitem = Define::model_electric_24; 79 selitem = Define::model_electric_24;
118 80
@@ -121,8 +83,6 @@ void ElectricModelSettingWindow::on_e24Button_clicked() @@ -121,8 +83,6 @@ void ElectricModelSettingWindow::on_e24Button_clicked()
121 void ElectricModelSettingWindow::on_e40Button_clicked() 83 void ElectricModelSettingWindow::on_e40Button_clicked()
122 { 84 {
123 //setModel(Define::model_electric_40); 85 //setModel(Define::model_electric_40);
124 - if(m_ctrChkedbtn != NULL) m_ctrChkedbtn->setChecked(false);  
125 - m_ctrChkedbtn = ui->e40Button;  
126 86
127 selitem = Define::model_electric_40; 87 selitem = Define::model_electric_40;
128 } 88 }
@@ -144,19 +104,99 @@ void ElectricModelSettingWindow::on_backButton_clicked() @@ -144,19 +104,99 @@ void ElectricModelSettingWindow::on_backButton_clicked()
144 close(); 104 close();
145 } 105 }
146 106
147 -void ElectricModelSettingWindow::onEncoderLeft()  
148 -{  
149 - focusPreviousChild();  
150 -} 107 +void ElectricModelSettingWindow::keyPressEvent(QKeyEvent *event){
  108 + int i = 0;
  109 + switch (event->key())
  110 + {
  111 + case 0x01000030: // Turn left
  112 + for(i = 0; i < m_vectorTabOrder.size();i++){
  113 + if(focusWidget() == m_vectorTabOrder[i]) break;
  114 + }
151 115
152 -void ElectricModelSettingWindow::onEncoderRight()  
153 -{  
154 - focusNextChild(); 116 + if(i==0){
  117 + i = m_vectorTabOrder.size()-1;
  118 + m_vectorTabOrder[i]->setFocus();
  119 + }
  120 + else if(i < m_vectorTabOrder.size()) {
  121 + i = i - 1;
  122 + m_vectorTabOrder[i]->setFocus();
  123 + }
  124 + else{
  125 + i=0;
  126 + m_vectorTabOrder[i]->setFocus();
  127 + }
  128 + break;
  129 + case 0x01000031: // Push
  130 +
  131 + break;
  132 + case 0x01000032: // Turn right
  133 + for(i = 0; i < m_vectorTabOrder.size();i++){
  134 + if(focusWidget() == m_vectorTabOrder[i]) break;
  135 + }
  136 +
  137 + if(i<m_vectorTabOrder.size()-1){
  138 + i+=1;
  139 + m_vectorTabOrder[i]->setFocus();
  140 + }
  141 + else if(i== (m_vectorTabOrder.size()-1)){
  142 + i=0;
  143 + m_vectorTabOrder[i]->setFocus();
  144 + }
  145 + else{
  146 + i=0;
  147 + m_vectorTabOrder[i]->setFocus();
  148 + }
  149 + break;
  150 + }
155 } 151 }
156 152
157 -void ElectricModelSettingWindow::onEncoderClicked(QWidget *clicked)  
158 -{  
159 - QPushButton *b = qobject_cast<QPushButton *>(clicked);  
160 - if (b)  
161 - b->click(); 153 +void ElectricModelSettingWindow::keyReleaseEvent(QKeyEvent *event){
  154 + int i = 0;
  155 + switch (event->key())
  156 + {
  157 + case 0x01000030: // Turn left
  158 + for(i = 0; i < m_vectorTabOrder.size();i++){
  159 + if(focusWidget() == m_vectorTabOrder[i]) break;
  160 + }
  161 +
  162 + if(i==0){
  163 + i = m_vectorTabOrder.size()-1;
  164 + m_vectorTabOrder[i]->setFocus();
  165 + }
  166 + else if(i < m_vectorTabOrder.size()) {
  167 + i = i - 1;
  168 + m_vectorTabOrder[i]->setFocus();
  169 + }
  170 + else{
  171 + i=0;
  172 + m_vectorTabOrder[i]->setFocus();
  173 + }
  174 + break;
  175 + case 0x01000031: // Push
  176 + {
  177 + QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
  178 + if(btn != NULL){
  179 + btn->click();
  180 + }
  181 + break;
  182 + }
  183 + case 0x01000032: // Turn right
  184 + for(i = 0; i < m_vectorTabOrder.size();i++){
  185 + if(focusWidget() == m_vectorTabOrder[i]) break;
  186 + }
  187 +
  188 + if(i<m_vectorTabOrder.size()-1){
  189 + i+=1;
  190 + m_vectorTabOrder[i]->setFocus();
  191 + }
  192 + else if(i== (m_vectorTabOrder.size()-1)){
  193 + i=0;
  194 + m_vectorTabOrder[i]->setFocus();
  195 + }
  196 + else{
  197 + i=0;
  198 + m_vectorTabOrder[i]->setFocus();
  199 + }
  200 + break;
  201 + }
162 } 202 }
app/gui/oven_control/electricmodelsettingwindow.h
@@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
3 3
4 #include <QMainWindow> 4 #include <QMainWindow>
5 #include <QPushButton> 5 #include <QPushButton>
  6 +#include <QKeyEvent>
  7 +#include <QVector>
6 8
7 #include "config.h" 9 #include "config.h"
8 10
@@ -37,12 +39,7 @@ private: @@ -37,12 +39,7 @@ private:
37 int selitem; 39 int selitem;
38 40
39 QWidget *pushed = NULL; 41 QWidget *pushed = NULL;
40 -  
41 - void onEncoderLeft();  
42 - void onEncoderRight();  
43 - void onEncoderClicked(QWidget *clicked);  
44 -  
45 - QPushButton *m_ctrChkedbtn; 42 + QVector<QWidget*> m_vectorTabOrder;
46 }; 43 };
47 44
48 #endif // ELECTRICMODELSETTINGWINDOW_H 45 #endif // ELECTRICMODELSETTINGWINDOW_H
app/gui/oven_control/electricmodelsettingwindow.ui
@@ -49,7 +49,7 @@ QPushButton:pressed, QPushButton:checked, QPushButton:focus { border-image: url( @@ -49,7 +49,7 @@ QPushButton:pressed, QPushButton:checked, QPushButton:focus { border-image: url(
49 <bool>true</bool> 49 <bool>true</bool>
50 </property> 50 </property>
51 <property name="autoExclusive"> 51 <property name="autoExclusive">
52 - <bool>false</bool> 52 + <bool>true</bool>
53 </property> 53 </property>
54 </widget> 54 </widget>
55 <widget class="QWidget" name="widget" native="true"> 55 <widget class="QWidget" name="widget" native="true">
@@ -183,7 +183,7 @@ QPushButton:pressed, QPushButton:checked, QPushButton:focus { border-image: url( @@ -183,7 +183,7 @@ QPushButton:pressed, QPushButton:checked, QPushButton:focus { border-image: url(
183 <bool>true</bool> 183 <bool>true</bool>
184 </property> 184 </property>
185 <property name="autoExclusive"> 185 <property name="autoExclusive">
186 - <bool>false</bool> 186 + <bool>true</bool>
187 </property> 187 </property>
188 </widget> 188 </widget>
189 <widget class="QLabel" name="label_15"> 189 <widget class="QLabel" name="label_15">
@@ -396,7 +396,7 @@ QPushButton:pressed, QPushButton:checked, QPushButton:focus { border-image: url( @@ -396,7 +396,7 @@ QPushButton:pressed, QPushButton:checked, QPushButton:focus { border-image: url(
396 <bool>true</bool> 396 <bool>true</bool>
397 </property> 397 </property>
398 <property name="autoExclusive"> 398 <property name="autoExclusive">
399 - <bool>false</bool> 399 + <bool>true</bool>
400 </property> 400 </property>
401 </widget> 401 </widget>
402 <widget class="QPushButton" name="e20Button"> 402 <widget class="QPushButton" name="e20Button">
@@ -433,7 +433,7 @@ QPushButton:pressed, QPushButton:checked, QPushButton:focus { border-image: url( @@ -433,7 +433,7 @@ QPushButton:pressed, QPushButton:checked, QPushButton:focus { border-image: url(
433 <bool>true</bool> 433 <bool>true</bool>
434 </property> 434 </property>
435 <property name="autoExclusive"> 435 <property name="autoExclusive">
436 - <bool>false</bool> 436 + <bool>true</bool>
437 </property> 437 </property>
438 </widget> 438 </widget>
439 <widget class="Line" name="line_3"> 439 <widget class="Line" name="line_3">
app/gui/oven_control/formatterspinbox.cpp
@@ -7,7 +7,6 @@ FormatterSpinBox::FormatterSpinBox(QWidget *parent) @@ -7,7 +7,6 @@ FormatterSpinBox::FormatterSpinBox(QWidget *parent)
7 : QSpinBox(parent) 7 : QSpinBox(parent)
8 { 8 {
9 m_nwidth = 2; 9 m_nwidth = 2;
10 -  
11 } 10 }
12 11
13 //! [1] 12 //! [1]
@@ -31,9 +30,14 @@ FormatterSpinBox::FormatterSpinBox(QWidget *parent) @@ -31,9 +30,14 @@ FormatterSpinBox::FormatterSpinBox(QWidget *parent)
31 } 30 }
32 31
33 void FormatterSpinBox::focusInEvent(QFocusEvent *event){ 32 void FormatterSpinBox::focusInEvent(QFocusEvent *event){
34 - QTimer::singleShot(200,this,SLOT(selectAll())); 33 + qDebug() << "focus in";
  34 + if(event->reason() == Qt::MouseFocusReason) QTimer::singleShot(200,this,SLOT(selectAll()));
  35 + else selectAll();
  36 + emit focusInEdit();
35 } 37 }
36 38
37 - void FormatterSpinBox::mouseReleaseEvent(QMouseEvent *event){  
38 - this->selectAll(); 39 + void FormatterSpinBox::focusOutEvent(QFocusEvent *event){
  40 + QSpinBox::focusOutEvent(event);
  41 + emit focusOutEdit();
39 } 42 }
  43 +
app/gui/oven_control/formatterspinbox.h
@@ -12,6 +12,10 @@ class FormatterSpinBox : public QSpinBox @@ -12,6 +12,10 @@ class FormatterSpinBox : public QSpinBox
12 private: 12 private:
13 int m_nwidth; 13 int m_nwidth;
14 14
  15 +signals:
  16 + void focusInEdit(void);
  17 + void focusOutEdit(void);
  18 +
15 public: 19 public:
16 explicit FormatterSpinBox(QWidget *parent = Q_NULLPTR); 20 explicit FormatterSpinBox(QWidget *parent = Q_NULLPTR);
17 21
@@ -21,8 +25,7 @@ public: @@ -21,8 +25,7 @@ public:
21 void setFormatterWidth(int wid); 25 void setFormatterWidth(int wid);
22 26
23 void focusInEvent(QFocusEvent *event); 27 void focusInEvent(QFocusEvent *event);
24 -  
25 - void mouseReleaseEvent(QMouseEvent *event); 28 + void focusOutEvent(QFocusEvent *event);
26 }; 29 };
27 30
28 #endif // SPINBOX_H 31 #endif // SPINBOX_H
app/gui/oven_control/gasmodelsettingwindow.cpp
@@ -21,82 +21,50 @@ GasModelSettingWindow::GasModelSettingWindow(QWidget *parent) : @@ -21,82 +21,50 @@ GasModelSettingWindow::GasModelSettingWindow(QWidget *parent) :
21 Define::config_item item; 21 Define::config_item item;
22 item = cfg->getConfigValue(Define::config_model); 22 item = cfg->getConfigValue(Define::config_model);
23 selitem = item.d32; 23 selitem = item.d32;
24 - m_ctrChkedBtn = NULL;  
25 switch(item.d32){ 24 switch(item.d32){
26 case Define::model_gas_lng_10: 25 case Define::model_gas_lng_10:
27 ui->lng10Button->setChecked(true); 26 ui->lng10Button->setChecked(true);
28 - m_ctrChkedBtn = ui->lng10Button;  
29 break; 27 break;
30 case Define::model_gas_lng_20: 28 case Define::model_gas_lng_20:
31 ui->lng20Button->setChecked(true); 29 ui->lng20Button->setChecked(true);
32 - m_ctrChkedBtn = ui->lng20Button;  
33 break; 30 break;
34 case Define::model_gas_lng_24: 31 case Define::model_gas_lng_24:
35 ui->lng24Button->setChecked(true); 32 ui->lng24Button->setChecked(true);
36 - m_ctrChkedBtn = ui->lng24Button;  
37 break; 33 break;
38 case Define::model_gas_lng_40: 34 case Define::model_gas_lng_40:
39 ui->lng40Button->setChecked(true); 35 ui->lng40Button->setChecked(true);
40 - m_ctrChkedBtn = ui->lng40Button;  
41 break; 36 break;
42 case Define::model_gas_lpg_10: 37 case Define::model_gas_lpg_10:
43 ui->lpg10Button->setChecked(true); 38 ui->lpg10Button->setChecked(true);
44 - m_ctrChkedBtn = ui->lpg10Button;  
45 break; 39 break;
46 case Define::model_gas_lpg_20: 40 case Define::model_gas_lpg_20:
47 ui->lpg20Button->setChecked(true); 41 ui->lpg20Button->setChecked(true);
48 - m_ctrChkedBtn = ui->lpg20Button;  
49 break; 42 break;
50 case Define::model_gas_lpg_24: 43 case Define::model_gas_lpg_24:
51 ui->lpg24Button->setChecked(true); 44 ui->lpg24Button->setChecked(true);
52 - m_ctrChkedBtn = ui->lpg24Button;  
53 break; 45 break;
54 case Define::model_gas_lpg_40: 46 case Define::model_gas_lpg_40:
55 ui->lpg40Button->setChecked(true); 47 ui->lpg40Button->setChecked(true);
56 - m_ctrChkedBtn = ui->lpg40Button;  
57 break; 48 break;
58 } 49 }
59 this->setFocus(); 50 this->setFocus();
60 -}  
61 51
62 -GasModelSettingWindow::~GasModelSettingWindow()  
63 -{  
64 - delete ui;  
65 -} 52 + m_vectorTabOrder.append(this);
  53 + m_vectorTabOrder.append(ui->lpg10Button);
  54 + m_vectorTabOrder.append(ui->lng10Button);
  55 + m_vectorTabOrder.append(ui->lpg20Button);
  56 + m_vectorTabOrder.append(ui->lng20Button);
  57 + m_vectorTabOrder.append(ui->lpg24Button);
  58 + m_vectorTabOrder.append(ui->lng24Button);
  59 + m_vectorTabOrder.append(ui->lpg40Button);
  60 + m_vectorTabOrder.append(ui->lng40Button);
  61 + m_vectorTabOrder.append(ui->backButton);
66 62
67 -void GasModelSettingWindow::keyPressEvent(QKeyEvent *event)  
68 -{  
69 - switch (event->key())  
70 - {  
71 - case 0x01000030: // Turn left  
72 - onEncoderLeft();  
73 - break;  
74 - case 0x01000031: // Push  
75 - pushed = focusWidget();  
76 - break;  
77 - case 0x01000032: // Turn right  
78 - onEncoderRight();  
79 - break;  
80 - }  
81 } 63 }
82 64
83 -void GasModelSettingWindow::keyReleaseEvent(QKeyEvent *event) 65 +GasModelSettingWindow::~GasModelSettingWindow()
84 { 66 {
85 - switch (event->key())  
86 - {  
87 - case 0x01000030: // Turn left  
88 - onEncoderLeft();  
89 - break;  
90 - case 0x01000031: // Push  
91 - if (focusWidget() == pushed)  
92 - onEncoderClicked(pushed);  
93 -  
94 - pushed = NULL;  
95 - break;  
96 - case 0x01000032: // Turn right  
97 - onEncoderRight();  
98 - break;  
99 - } 67 + delete ui;
100 } 68 }
101 69
102 void GasModelSettingWindow::setModel(Define::model_type model) 70 void GasModelSettingWindow::setModel(Define::model_type model)
@@ -112,71 +80,48 @@ void GasModelSettingWindow::setModel(Define::model_type model) @@ -112,71 +80,48 @@ void GasModelSettingWindow::setModel(Define::model_type model)
112 void GasModelSettingWindow::on_lpg10Button_clicked() 80 void GasModelSettingWindow::on_lpg10Button_clicked()
113 { 81 {
114 //setModel(Define::model_gas_lpg_10); 82 //setModel(Define::model_gas_lpg_10);
115 - if(m_ctrChkedBtn != NULL)m_ctrChkedBtn->setChecked(false);  
116 - m_ctrChkedBtn = ui->lpg10Button;  
117 selitem = Define::model_gas_lpg_10; 83 selitem = Define::model_gas_lpg_10;
118 } 84 }
119 85
120 void GasModelSettingWindow::on_lng10Button_clicked() 86 void GasModelSettingWindow::on_lng10Button_clicked()
121 { 87 {
122 //setModel(Define::model_gas_lng_10); 88 //setModel(Define::model_gas_lng_10);
123 - if(m_ctrChkedBtn != NULL)m_ctrChkedBtn->setChecked(false);  
124 - m_ctrChkedBtn = ui->lng10Button;  
125 -  
126 selitem = Define::model_gas_lng_10; 89 selitem = Define::model_gas_lng_10;
127 } 90 }
128 91
129 void GasModelSettingWindow::on_lpg20Button_clicked() 92 void GasModelSettingWindow::on_lpg20Button_clicked()
130 { 93 {
131 //setModel(Define::model_gas_lpg_20); 94 //setModel(Define::model_gas_lpg_20);
132 - if(m_ctrChkedBtn != NULL)m_ctrChkedBtn->setChecked(false);  
133 - m_ctrChkedBtn = ui->lpg20Button;  
134 -  
135 selitem = Define::model_gas_lpg_20; 95 selitem = Define::model_gas_lpg_20;
136 } 96 }
137 97
138 void GasModelSettingWindow::on_lng20Button_clicked() 98 void GasModelSettingWindow::on_lng20Button_clicked()
139 { 99 {
140 //setModel(Define::model_gas_lng_20); 100 //setModel(Define::model_gas_lng_20);
141 - if(m_ctrChkedBtn != NULL)m_ctrChkedBtn->setChecked(false);  
142 - m_ctrChkedBtn = ui->lng20Button;  
143 -  
144 selitem = Define::model_gas_lng_20; 101 selitem = Define::model_gas_lng_20;
145 } 102 }
146 103
147 void GasModelSettingWindow::on_lpg24Button_clicked() 104 void GasModelSettingWindow::on_lpg24Button_clicked()
148 { 105 {
149 //setModel(Define::model_gas_lpg_24); 106 //setModel(Define::model_gas_lpg_24);
150 - if(m_ctrChkedBtn != NULL)m_ctrChkedBtn->setChecked(false);  
151 - m_ctrChkedBtn = ui->lpg24Button;  
152 -  
153 selitem = Define::model_gas_lpg_24; 107 selitem = Define::model_gas_lpg_24;
154 } 108 }
155 109
156 void GasModelSettingWindow::on_lng24Button_clicked() 110 void GasModelSettingWindow::on_lng24Button_clicked()
157 { 111 {
158 //setModel(Define::model_gas_lng_24); 112 //setModel(Define::model_gas_lng_24);
159 - if(m_ctrChkedBtn != NULL)m_ctrChkedBtn->setChecked(false);  
160 - m_ctrChkedBtn = ui->lng24Button;  
161 -  
162 selitem = Define::model_gas_lng_24; 113 selitem = Define::model_gas_lng_24;
163 } 114 }
164 115
165 void GasModelSettingWindow::on_lpg40Button_clicked() 116 void GasModelSettingWindow::on_lpg40Button_clicked()
166 { 117 {
167 //setModel(Define::model_gas_lpg_40); 118 //setModel(Define::model_gas_lpg_40);
168 - if(m_ctrChkedBtn != NULL)m_ctrChkedBtn->setChecked(false);  
169 - m_ctrChkedBtn = ui->lpg40Button;  
170 -  
171 selitem = Define::model_gas_lpg_40; 119 selitem = Define::model_gas_lpg_40;
172 } 120 }
173 121
174 void GasModelSettingWindow::on_lng40Button_clicked() 122 void GasModelSettingWindow::on_lng40Button_clicked()
175 { 123 {
176 //setModel(Define::model_gas_lng_40); 124 //setModel(Define::model_gas_lng_40);
177 - if(m_ctrChkedBtn != NULL)m_ctrChkedBtn->setChecked(false);  
178 - m_ctrChkedBtn = ui->lng40Button;  
179 -  
180 selitem = Define::model_gas_lng_40; 125 selitem = Define::model_gas_lng_40;
181 } 126 }
182 127
@@ -198,19 +143,100 @@ void GasModelSettingWindow::on_backButton_clicked() @@ -198,19 +143,100 @@ void GasModelSettingWindow::on_backButton_clicked()
198 close(); 143 close();
199 } 144 }
200 145
201 -void GasModelSettingWindow::onEncoderLeft()  
202 -{  
203 - focusPreviousChild();  
204 -} 146 +void GasModelSettingWindow::keyPressEvent(QKeyEvent *event){
  147 + int i = 0;
  148 + switch (event->key())
  149 + {
  150 + case 0x01000030: // Turn left
  151 + for(i = 0; i < m_vectorTabOrder.size();i++){
  152 + if(focusWidget() == m_vectorTabOrder[i]) break;
  153 + }
205 154
206 -void GasModelSettingWindow::onEncoderRight()  
207 -{  
208 - focusNextChild(); 155 + if(i==0){
  156 + i = m_vectorTabOrder.size()-1;
  157 + m_vectorTabOrder[i]->setFocus();
  158 + }
  159 + else if(i < m_vectorTabOrder.size()) {
  160 + i = i - 1;
  161 + m_vectorTabOrder[i]->setFocus();
  162 + }
  163 + else{
  164 + i=0;
  165 + m_vectorTabOrder[i]->setFocus();
  166 + }
  167 + break;
  168 + case 0x01000031: // Push
  169 +
  170 + break;
  171 + case 0x01000032: // Turn right
  172 + for(i = 0; i < m_vectorTabOrder.size();i++){
  173 + if(focusWidget() == m_vectorTabOrder[i]) break;
  174 + }
  175 +
  176 + if(i<m_vectorTabOrder.size()-1){
  177 + i+=1;
  178 + m_vectorTabOrder[i]->setFocus();
  179 + }
  180 + else if(i== (m_vectorTabOrder.size()-1)){
  181 + i=0;
  182 + m_vectorTabOrder[i]->setFocus();
  183 + }
  184 + else{
  185 + i=0;
  186 + m_vectorTabOrder[i]->setFocus();
  187 + }
  188 + break;
  189 + }
209 } 190 }
210 191
211 -void GasModelSettingWindow::onEncoderClicked(QWidget *clicked)  
212 -{  
213 - QPushButton *b = qobject_cast<QPushButton *>(clicked);  
214 - if (b)  
215 - b->click(); 192 +void GasModelSettingWindow::keyReleaseEvent(QKeyEvent *event){
  193 + int i = 0;
  194 + switch (event->key())
  195 + {
  196 + case 0x01000030: // Turn left
  197 + for(i = 0; i < m_vectorTabOrder.size();i++){
  198 + if(focusWidget() == m_vectorTabOrder[i]) break;
  199 + }
  200 +
  201 + if(i==0){
  202 + i = m_vectorTabOrder.size()-1;
  203 + m_vectorTabOrder[i]->setFocus();
  204 + }
  205 + else if(i < m_vectorTabOrder.size()) {
  206 + i = i - 1;
  207 + m_vectorTabOrder[i]->setFocus();
  208 + }
  209 + else{
  210 + i=0;
  211 + m_vectorTabOrder[i]->setFocus();
  212 + }
  213 + break;
  214 + case 0x01000031: // Push
  215 + {
  216 + QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
  217 + if(btn != NULL){
  218 + btn->click();
  219 + }
  220 + break;
  221 + }
  222 + case 0x01000032: // Turn right
  223 + for(i = 0; i < m_vectorTabOrder.size();i++){
  224 + if(focusWidget() == m_vectorTabOrder[i]) break;
  225 + }
  226 +
  227 + if(i<m_vectorTabOrder.size()-1){
  228 + i+=1;
  229 + m_vectorTabOrder[i]->setFocus();
  230 + }
  231 + else if(i== (m_vectorTabOrder.size()-1)){
  232 + i=0;
  233 + m_vectorTabOrder[i]->setFocus();
  234 + }
  235 + else{
  236 + i=0;
  237 + m_vectorTabOrder[i]->setFocus();
  238 + }
  239 + break;
  240 + }
216 } 241 }
  242 +
app/gui/oven_control/gasmodelsettingwindow.h
@@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
3 3
4 #include <QMainWindow> 4 #include <QMainWindow>
5 #include <QPushButton> 5 #include <QPushButton>
  6 +#include <QVector>
  7 +#include <QKeyEvent>
6 8
7 #include "config.h" 9 #include "config.h"
8 10
@@ -40,11 +42,7 @@ private: @@ -40,11 +42,7 @@ private:
40 uint32_t selitem; 42 uint32_t selitem;
41 43
42 QWidget *pushed = NULL; 44 QWidget *pushed = NULL;
43 -  
44 - void onEncoderLeft();  
45 - void onEncoderRight();  
46 - void onEncoderClicked(QWidget *clicked);  
47 - QPushButton* m_ctrChkedBtn; 45 + QVector<QWidget*> m_vectorTabOrder;
48 }; 46 };
49 47
50 #endif // GASMODELSETTINGWINDOW_H 48 #endif // GASMODELSETTINGWINDOW_H
app/gui/oven_control/gasmodelsettingwindow.ui
@@ -49,7 +49,7 @@ QPushButton:pressed, QPushButton::checked , QPushButton:focus{ border-image: url @@ -49,7 +49,7 @@ QPushButton:pressed, QPushButton::checked , QPushButton:focus{ border-image: url
49 <bool>true</bool> 49 <bool>true</bool>
50 </property> 50 </property>
51 <property name="autoExclusive"> 51 <property name="autoExclusive">
52 - <bool>false</bool> 52 + <bool>true</bool>
53 </property> 53 </property>
54 </widget> 54 </widget>
55 <widget class="QWidget" name="widget" native="true"> 55 <widget class="QWidget" name="widget" native="true">
@@ -196,7 +196,7 @@ QPushButton:pressed, QPushButton::checked, QPushButton:focus { border-image: url @@ -196,7 +196,7 @@ QPushButton:pressed, QPushButton::checked, QPushButton:focus { border-image: url
196 <bool>true</bool> 196 <bool>true</bool>
197 </property> 197 </property>
198 <property name="autoExclusive"> 198 <property name="autoExclusive">
199 - <bool>false</bool> 199 + <bool>true</bool>
200 </property> 200 </property>
201 </widget> 201 </widget>
202 <widget class="QPushButton" name="lng20Button"> 202 <widget class="QPushButton" name="lng20Button">
@@ -233,7 +233,7 @@ QPushButton:pressed , QPushButton::checked, QPushButton:focus { border-image: ur @@ -233,7 +233,7 @@ QPushButton:pressed , QPushButton::checked, QPushButton:focus { border-image: ur
233 <bool>true</bool> 233 <bool>true</bool>
234 </property> 234 </property>
235 <property name="autoExclusive"> 235 <property name="autoExclusive">
236 - <bool>false</bool> 236 + <bool>true</bool>
237 </property> 237 </property>
238 </widget> 238 </widget>
239 <widget class="QPushButton" name="lpg24Button"> 239 <widget class="QPushButton" name="lpg24Button">
@@ -270,7 +270,7 @@ QPushButton:pressed, QPushButton::checked, QPushButton:focus { border-image: url @@ -270,7 +270,7 @@ QPushButton:pressed, QPushButton::checked, QPushButton:focus { border-image: url
270 <bool>true</bool> 270 <bool>true</bool>
271 </property> 271 </property>
272 <property name="autoExclusive"> 272 <property name="autoExclusive">
273 - <bool>false</bool> 273 + <bool>true</bool>
274 </property> 274 </property>
275 </widget> 275 </widget>
276 <widget class="QLabel" name="label_15"> 276 <widget class="QLabel" name="label_15">
@@ -496,7 +496,7 @@ QPushButton:pressed, QPushButton::checked, QPushButton:focus{ border-image: url( @@ -496,7 +496,7 @@ QPushButton:pressed, QPushButton::checked, QPushButton:focus{ border-image: url(
496 <bool>true</bool> 496 <bool>true</bool>
497 </property> 497 </property>
498 <property name="autoExclusive"> 498 <property name="autoExclusive">
499 - <bool>false</bool> 499 + <bool>true</bool>
500 </property> 500 </property>
501 </widget> 501 </widget>
502 <widget class="QPushButton" name="lng10Button"> 502 <widget class="QPushButton" name="lng10Button">
@@ -533,7 +533,7 @@ QPushButton:pressed , QPushButton::checked, QPushButton:focus{ border-image: url @@ -533,7 +533,7 @@ QPushButton:pressed , QPushButton::checked, QPushButton:focus{ border-image: url
533 <bool>true</bool> 533 <bool>true</bool>
534 </property> 534 </property>
535 <property name="autoExclusive"> 535 <property name="autoExclusive">
536 - <bool>false</bool> 536 + <bool>true</bool>
537 </property> 537 </property>
538 </widget> 538 </widget>
539 <widget class="Line" name="line_3"> 539 <widget class="Line" name="line_3">
@@ -619,7 +619,7 @@ QPushButton:pressed,QPushButton::checked, QPushButton:focus { border-image: url( @@ -619,7 +619,7 @@ QPushButton:pressed,QPushButton::checked, QPushButton:focus { border-image: url(
619 <bool>true</bool> 619 <bool>true</bool>
620 </property> 620 </property>
621 <property name="autoExclusive"> 621 <property name="autoExclusive">
622 - <bool>false</bool> 622 + <bool>true</bool>
623 </property> 623 </property>
624 </widget> 624 </widget>
625 <widget class="Line" name="line_8"> 625 <widget class="Line" name="line_8">
@@ -682,7 +682,7 @@ QPushButton:pressed, QPushButton::checked, QPushButton:focus { border-image: url @@ -682,7 +682,7 @@ QPushButton:pressed, QPushButton::checked, QPushButton:focus { border-image: url
682 <bool>true</bool> 682 <bool>true</bool>
683 </property> 683 </property>
684 <property name="autoExclusive"> 684 <property name="autoExclusive">
685 - <bool>false</bool> 685 + <bool>true</bool>
686 </property> 686 </property>
687 </widget> 687 </widget>
688 </widget> 688 </widget>
app/gui/oven_control/keyboardwidget.cpp
@@ -5,52 +5,145 @@ @@ -5,52 +5,145 @@
5 5
6 #include "soundplayer.h" 6 #include "soundplayer.h"
7 7
  8 +static const QString m_mapKeyboard[] = {
  9 + "1",
  10 + "2",
  11 + "3",
  12 + "4",
  13 + "5",
  14 + "6",
  15 + "7",
  16 + "8",
  17 + "9",
  18 + "0",
  19 + "Q",
  20 + "W",
  21 + "E",
  22 + "R",
  23 + "T",
  24 + "Y",
  25 + "U",
  26 + "I",
  27 + "O",
  28 + "P",
  29 + "A",
  30 + "S",
  31 + "D",
  32 + "F",
  33 + "G",
  34 + "H",
  35 + "J",
  36 + "K",
  37 + "L",
  38 + "Z",
  39 + "X",
  40 + "C",
  41 + "V",
  42 + "B",
  43 + "N",
  44 + "M",
  45 + "-",
  46 + ",",
  47 + " "
  48 +};
  49 +
  50 +
  51 +
8 KeyboardWidget::KeyboardWidget(QWidget *parent) : 52 KeyboardWidget::KeyboardWidget(QWidget *parent) :
9 QWidget(parent), 53 QWidget(parent),
10 ui(new Ui::KeyboardWidget) 54 ui(new Ui::KeyboardWidget)
11 { 55 {
12 ui->setupUi(this); 56 ui->setupUi(this);
  57 +
  58 + m_pCurCheckedBtn = NULL;
  59 + m_vectorTabOrder.append(ui->pushButton_1);
  60 + m_vectorTabOrder.append(ui->pushButton_2);
  61 + m_vectorTabOrder.append(ui->pushButton_3);
  62 + m_vectorTabOrder.append(ui->pushButton_4);
  63 + m_vectorTabOrder.append(ui->pushButton_5);
  64 + m_vectorTabOrder.append(ui->pushButton_6);
  65 + m_vectorTabOrder.append(ui->pushButton_7);
  66 + m_vectorTabOrder.append(ui->pushButton_8);
  67 + m_vectorTabOrder.append(ui->pushButton_9);
  68 + m_vectorTabOrder.append(ui->pushButton_10);
  69 + m_vectorTabOrder.append(ui->pushButton_11);
  70 + m_vectorTabOrder.append(ui->pushButton_12);
  71 + m_vectorTabOrder.append(ui->pushButton_13);
  72 + m_vectorTabOrder.append(ui->pushButton_14);
  73 + m_vectorTabOrder.append(ui->pushButton_15);
  74 + m_vectorTabOrder.append(ui->pushButton_16);
  75 + m_vectorTabOrder.append(ui->pushButton_17);
  76 + m_vectorTabOrder.append(ui->pushButton_18);
  77 + m_vectorTabOrder.append(ui->pushButton_19);
  78 + m_vectorTabOrder.append(ui->pushButton_20);
  79 + m_vectorTabOrder.append(ui->pushButton_21);
  80 + m_vectorTabOrder.append(ui->pushButton_22);
  81 + m_vectorTabOrder.append(ui->pushButton_23);
  82 + m_vectorTabOrder.append(ui->pushButton_24);
  83 + m_vectorTabOrder.append(ui->pushButton_25);
  84 + m_vectorTabOrder.append(ui->pushButton_26);
  85 + m_vectorTabOrder.append(ui->pushButton_27);
  86 + m_vectorTabOrder.append(ui->pushButton_28);
  87 + m_vectorTabOrder.append(ui->pushButton_29);
  88 + m_vectorTabOrder.append(ui->pushButton_30);
  89 + m_vectorTabOrder.append(ui->pushButton_31);
  90 + m_vectorTabOrder.append(ui->pushButton_32);
  91 + m_vectorTabOrder.append(ui->pushButton_33);
  92 + m_vectorTabOrder.append(ui->pushButton_34);
  93 + m_vectorTabOrder.append(ui->pushButton_35);
  94 + m_vectorTabOrder.append(ui->pushButton_36);
  95 + m_vectorTabOrder.append(ui->pushButton_37);
  96 + m_vectorTabOrder.append(ui->pushButton_38);
  97 + m_vectorTabOrder.append(ui->pushButton_39);
  98 + m_vectorTabOrder.append(ui->pushButton_40);
  99 + m_vectorTabOrder.append(ui->pushButton_41);
  100 + m_vectorTabOrder.append(ui->pushButton_42);
  101 +
  102 +
  103 +
13 m_pSignalMapper = new QSignalMapper(this); 104 m_pSignalMapper = new QSignalMapper(this);
14 105
15 - m_pSignalMapper->setMapping(ui->pushButton_1, tr("1"));  
16 - m_pSignalMapper->setMapping(ui->pushButton_2, tr("2"));  
17 - m_pSignalMapper->setMapping(ui->pushButton_3, tr("3"));  
18 - m_pSignalMapper->setMapping(ui->pushButton_4, tr("4"));  
19 - m_pSignalMapper->setMapping(ui->pushButton_5, tr("5"));  
20 - m_pSignalMapper->setMapping(ui->pushButton_6, tr("6"));  
21 - m_pSignalMapper->setMapping(ui->pushButton_7, tr("7"));  
22 - m_pSignalMapper->setMapping(ui->pushButton_8, tr("8"));  
23 - m_pSignalMapper->setMapping(ui->pushButton_9, tr("9"));  
24 - m_pSignalMapper->setMapping(ui->pushButton_10, tr("0"));  
25 - m_pSignalMapper->setMapping(ui->pushButton_11, tr("Q"));  
26 - m_pSignalMapper->setMapping(ui->pushButton_12, tr("W"));  
27 - m_pSignalMapper->setMapping(ui->pushButton_13, tr("E"));  
28 - m_pSignalMapper->setMapping(ui->pushButton_14, tr("R"));  
29 - m_pSignalMapper->setMapping(ui->pushButton_15, tr("T"));  
30 - m_pSignalMapper->setMapping(ui->pushButton_16, tr("Y"));  
31 - m_pSignalMapper->setMapping(ui->pushButton_17, tr("U"));  
32 - m_pSignalMapper->setMapping(ui->pushButton_18, tr("I"));  
33 - m_pSignalMapper->setMapping(ui->pushButton_19, tr("O"));  
34 - m_pSignalMapper->setMapping(ui->pushButton_20, tr("P"));  
35 - m_pSignalMapper->setMapping(ui->pushButton_21, tr("A"));  
36 - m_pSignalMapper->setMapping(ui->pushButton_22, tr("S"));  
37 - m_pSignalMapper->setMapping(ui->pushButton_23, tr("D"));  
38 - m_pSignalMapper->setMapping(ui->pushButton_24, tr("F"));  
39 - m_pSignalMapper->setMapping(ui->pushButton_25, tr("G"));  
40 - m_pSignalMapper->setMapping(ui->pushButton_26, tr("H"));  
41 - m_pSignalMapper->setMapping(ui->pushButton_27, tr("J"));  
42 - m_pSignalMapper->setMapping(ui->pushButton_28, tr("K"));  
43 - m_pSignalMapper->setMapping(ui->pushButton_29, tr("L"));  
44 - m_pSignalMapper->setMapping(ui->pushButton_30, tr("Z"));  
45 - m_pSignalMapper->setMapping(ui->pushButton_31, tr("X"));  
46 - m_pSignalMapper->setMapping(ui->pushButton_32, tr("C"));  
47 - m_pSignalMapper->setMapping(ui->pushButton_33, tr("V"));  
48 - m_pSignalMapper->setMapping(ui->pushButton_34, tr("B"));  
49 - m_pSignalMapper->setMapping(ui->pushButton_35, tr("N"));  
50 - m_pSignalMapper->setMapping(ui->pushButton_36, tr("M"));  
51 - m_pSignalMapper->setMapping(ui->pushButton_37, tr("-"));  
52 - m_pSignalMapper->setMapping(ui->pushButton_38, tr(","));  
53 - m_pSignalMapper->setMapping(ui->pushButton_40, tr(" ")); 106 + m_pSignalMapper->setMapping(ui->pushButton_1, 0);
  107 + m_pSignalMapper->setMapping(ui->pushButton_2, 1);
  108 + m_pSignalMapper->setMapping(ui->pushButton_3, 2);
  109 + m_pSignalMapper->setMapping(ui->pushButton_4, 3);
  110 + m_pSignalMapper->setMapping(ui->pushButton_5, 4);
  111 + m_pSignalMapper->setMapping(ui->pushButton_6, 5);
  112 + m_pSignalMapper->setMapping(ui->pushButton_7, 6);
  113 + m_pSignalMapper->setMapping(ui->pushButton_8, 7);
  114 + m_pSignalMapper->setMapping(ui->pushButton_9, 8);
  115 + m_pSignalMapper->setMapping(ui->pushButton_10, 9);
  116 + m_pSignalMapper->setMapping(ui->pushButton_11, 10);
  117 + m_pSignalMapper->setMapping(ui->pushButton_12, 11);
  118 + m_pSignalMapper->setMapping(ui->pushButton_13, 12);
  119 + m_pSignalMapper->setMapping(ui->pushButton_14, 13);
  120 + m_pSignalMapper->setMapping(ui->pushButton_15, 14);
  121 + m_pSignalMapper->setMapping(ui->pushButton_16, 15);
  122 + m_pSignalMapper->setMapping(ui->pushButton_17, 16);
  123 + m_pSignalMapper->setMapping(ui->pushButton_18, 17);
  124 + m_pSignalMapper->setMapping(ui->pushButton_19, 18);
  125 + m_pSignalMapper->setMapping(ui->pushButton_20, 19);
  126 + m_pSignalMapper->setMapping(ui->pushButton_21, 20);
  127 + m_pSignalMapper->setMapping(ui->pushButton_22, 21);
  128 + m_pSignalMapper->setMapping(ui->pushButton_23, 22);
  129 + m_pSignalMapper->setMapping(ui->pushButton_24, 23);
  130 + m_pSignalMapper->setMapping(ui->pushButton_25, 24);
  131 + m_pSignalMapper->setMapping(ui->pushButton_26, 25);
  132 + m_pSignalMapper->setMapping(ui->pushButton_27, 26);
  133 + m_pSignalMapper->setMapping(ui->pushButton_28, 27);
  134 + m_pSignalMapper->setMapping(ui->pushButton_29, 28);
  135 + m_pSignalMapper->setMapping(ui->pushButton_30, 29);
  136 + m_pSignalMapper->setMapping(ui->pushButton_31, 30);
  137 + m_pSignalMapper->setMapping(ui->pushButton_32, 31);
  138 + m_pSignalMapper->setMapping(ui->pushButton_33, 32);
  139 + m_pSignalMapper->setMapping(ui->pushButton_34, 33);
  140 + m_pSignalMapper->setMapping(ui->pushButton_35, 34);
  141 + m_pSignalMapper->setMapping(ui->pushButton_36, 35);
  142 + m_pSignalMapper->setMapping(ui->pushButton_37, 36);
  143 + m_pSignalMapper->setMapping(ui->pushButton_38, 37);
  144 + m_pSignalMapper->setMapping(ui->pushButton_40, 38);
  145 +
  146 +
54 147
55 148
56 connect(ui->pushButton_1,SIGNAL(clicked(bool)),m_pSignalMapper,SLOT(map())); 149 connect(ui->pushButton_1,SIGNAL(clicked(bool)),m_pSignalMapper,SLOT(map()));
@@ -93,7 +186,7 @@ KeyboardWidget::KeyboardWidget(QWidget *parent) : @@ -93,7 +186,7 @@ KeyboardWidget::KeyboardWidget(QWidget *parent) :
93 connect(ui->pushButton_38,SIGNAL(clicked(bool)),m_pSignalMapper,SLOT(map())); 186 connect(ui->pushButton_38,SIGNAL(clicked(bool)),m_pSignalMapper,SLOT(map()));
94 connect(ui->pushButton_40,SIGNAL(clicked(bool)),m_pSignalMapper,SLOT(map())); 187 connect(ui->pushButton_40,SIGNAL(clicked(bool)),m_pSignalMapper,SLOT(map()));
95 188
96 - connect(m_pSignalMapper,SIGNAL(mapped(QString)), this, SLOT(onKeyboardClicked(QString))); 189 + connect(m_pSignalMapper,SIGNAL(mapped(int)), this, SLOT(onKeyboardClicked(int)));
97 190
98 foreach (QPushButton *button, findChildren<QPushButton *>()) 191 foreach (QPushButton *button, findChildren<QPushButton *>())
99 connect(button, &QPushButton::pressed, SoundPlayer::playClick); 192 connect(button, &QPushButton::pressed, SoundPlayer::playClick);
@@ -106,6 +199,10 @@ KeyboardWidget::~KeyboardWidget() @@ -106,6 +199,10 @@ KeyboardWidget::~KeyboardWidget()
106 199
107 void KeyboardWidget::on_pushButton_41_clicked() 200 void KeyboardWidget::on_pushButton_41_clicked()
108 { 201 {
  202 + if(m_pCurCheckedBtn != NULL) m_pCurCheckedBtn->setChecked(false);
  203 + m_nCurTabPos = 40;
  204 + m_pCurCheckedBtn = m_vectorTabOrder[m_nCurTabPos];
  205 + m_pCurCheckedBtn->setChecked(true);
109 QKeyEvent key(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier); 206 QKeyEvent key(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
110 QGuiApplication::sendEvent(QApplication::focusObject(),&key); 207 QGuiApplication::sendEvent(QApplication::focusObject(),&key);
111 emit onOkKeyClicked(); 208 emit onOkKeyClicked();
@@ -113,25 +210,87 @@ void KeyboardWidget::on_pushButton_41_clicked() @@ -113,25 +210,87 @@ void KeyboardWidget::on_pushButton_41_clicked()
113 210
114 void KeyboardWidget::on_pushButton_42_clicked() 211 void KeyboardWidget::on_pushButton_42_clicked()
115 { 212 {
  213 + if(m_pCurCheckedBtn != NULL) m_pCurCheckedBtn->setChecked(false);
  214 + m_nCurTabPos = 41;
  215 + m_pCurCheckedBtn = m_vectorTabOrder[m_nCurTabPos];
  216 + m_pCurCheckedBtn->setChecked(true);
  217 + if(m_pCurCheckedBtn != NULL) m_pCurCheckedBtn->setChecked(false);
116 emit onCancelKeyClicked(); 218 emit onCancelKeyClicked();
117 } 219 }
118 220
119 void KeyboardWidget::on_pushButton_39_clicked() 221 void KeyboardWidget::on_pushButton_39_clicked()
120 { 222 {
121 qDebug() << qApp->focusObject(); 223 qDebug() << qApp->focusObject();
  224 + if(m_pCurCheckedBtn != NULL) m_pCurCheckedBtn->setChecked(false);
  225 + m_nCurTabPos = 38;
  226 + m_pCurCheckedBtn = m_vectorTabOrder[m_nCurTabPos];
  227 + m_pCurCheckedBtn->setChecked(true);
122 QKeyEvent key(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier); 228 QKeyEvent key(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
123 QGuiApplication::sendEvent(QApplication::focusObject(),&key); 229 QGuiApplication::sendEvent(QApplication::focusObject(),&key);
124 emit onBackspaceKeyClicked(); 230 emit onBackspaceKeyClicked();
125 } 231 }
126 232
127 -void KeyboardWidget::onKeyboardClicked(const QString in){ 233 +void KeyboardWidget::onKeyboardClicked(const int in){
128 QInputMethodEvent event; 234 QInputMethodEvent event;
129 - event.setCommitString(in); 235 + qDebug()<< "keyboard clicked" << in;
  236 + event.setCommitString(m_mapKeyboard[in]);
  237 + if(m_pCurCheckedBtn != NULL) m_pCurCheckedBtn->setChecked(false);
  238 + if( in < 38) m_nCurTabPos = in;
  239 + else if( in == 38) m_nCurTabPos = 39;
  240 + m_pCurCheckedBtn = m_vectorTabOrder[m_nCurTabPos];
  241 + m_pCurCheckedBtn->setChecked(true);
130 QGuiApplication::sendEvent(QApplication::focusObject(),&event); 242 QGuiApplication::sendEvent(QApplication::focusObject(),&event);
131 - emit onKeyboardClickSignal(in); 243 + emit onKeyboardClickSignal(m_mapKeyboard[in]);
132 } 244 }
133 245
134 void KeyboardWidget::on_pushButton_40_clicked() 246 void KeyboardWidget::on_pushButton_40_clicked()
135 { 247 {
136 emit onSpaceKeyClicked(); 248 emit onSpaceKeyClicked();
137 } 249 }
  250 +
  251 +void KeyboardWidget::keyPressEvent(QKeyEvent *event){
  252 +
  253 +}
  254 +
  255 +void KeyboardWidget::keyReleaseEvent(QKeyEvent *event){
  256 + switch (event->key())
  257 + {
  258 + case 0x01000030: // Turn left
  259 + if(m_nCurTabPos > 0 ) m_nCurTabPos--;
  260 + else m_nCurTabPos = m_vectorTabOrder.size()-1;
  261 + if(m_pCurCheckedBtn !=NULL) m_pCurCheckedBtn->setChecked(false);
  262 + m_pCurCheckedBtn = m_vectorTabOrder[m_nCurTabPos];
  263 + m_pCurCheckedBtn->setChecked(true);
  264 + break;
  265 + case 0x01000031: // Push
  266 + {
  267 + if(m_pCurCheckedBtn != NULL){
  268 + m_pCurCheckedBtn->click();
  269 + }
  270 + break;
  271 + }
  272 + case 0x01000032: // Turn right
  273 + if(m_nCurTabPos < (m_vectorTabOrder.size() -1)) m_nCurTabPos++;
  274 + else m_nCurTabPos=0;
  275 + if(m_pCurCheckedBtn !=NULL) m_pCurCheckedBtn->setChecked(false);
  276 + m_pCurCheckedBtn = m_vectorTabOrder[m_nCurTabPos];
  277 + m_pCurCheckedBtn->setChecked(true);
  278 + break;
  279 + }
  280 +}
  281 +
  282 +void KeyboardWidget::focusInKeyboard(){
  283 + m_nCurTabPos = 0;
  284 + if(m_pCurCheckedBtn != NULL) m_pCurCheckedBtn->setChecked(false);
  285 + m_pCurCheckedBtn = m_vectorTabOrder[0];
  286 + m_pCurCheckedBtn->setChecked(true);
  287 + this->grabKeyboard();
  288 +}
  289 +
  290 +void KeyboardWidget::focusOutKeyboard(){
  291 + m_nCurTabPos = 0;
  292 + if(m_pCurCheckedBtn != NULL) m_pCurCheckedBtn->setChecked(false);
  293 + this->releaseKeyboard();
  294 +}
  295 +
  296 +
app/gui/oven_control/keyboardwidget.h
@@ -4,6 +4,9 @@ @@ -4,6 +4,9 @@
4 #include <QWidget> 4 #include <QWidget>
5 #include <QSignalMapper> 5 #include <QSignalMapper>
6 #include <QChar> 6 #include <QChar>
  7 +#include <QVector>
  8 +#include <QPushButton>
  9 +
7 10
8 namespace Ui { 11 namespace Ui {
9 class KeyboardWidget; 12 class KeyboardWidget;
@@ -34,12 +37,23 @@ signals: @@ -34,12 +37,23 @@ signals:
34 void onSpaceKeyClicked(); 37 void onSpaceKeyClicked();
35 38
36 public slots: 39 public slots:
37 - void onKeyboardClicked(const QString in); 40 + void onKeyboardClicked(int in);
  41 + void focusInKeyboard();
  42 + void focusOutKeyboard();
  43 +
  44 +protected:
  45 + void keyPressEvent(QKeyEvent* event);
  46 + void keyReleaseEvent(QKeyEvent* event);
  47 +
38 48
39 private: 49 private:
40 Ui::KeyboardWidget *ui; 50 Ui::KeyboardWidget *ui;
41 51
42 QSignalMapper *m_pSignalMapper; 52 QSignalMapper *m_pSignalMapper;
  53 +
  54 + QVector<QPushButton*> m_vectorTabOrder;
  55 + QPushButton* m_pCurCheckedBtn;
  56 + int m_nCurTabPos;
43 }; 57 };
44 58
45 #endif // KEYBOARDWIDGET_H 59 #endif // KEYBOARDWIDGET_H
app/gui/oven_control/keyboardwidget.ui
@@ -49,12 +49,15 @@ @@ -49,12 +49,15 @@
49 </property> 49 </property>
50 <property name="styleSheet"> 50 <property name="styleSheet">
51 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a033.png);} 51 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a033.png);}
52 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a033_ov.png); } 52 +QPushButton:pressed, QPushButton:checked , QPushButton:checked{ border-image: url(:/images/keyboard/088_keyboard_a033_ov.png); }
53 </string> 53 </string>
54 </property> 54 </property>
55 <property name="text"> 55 <property name="text">
56 <string/> 56 <string/>
57 </property> 57 </property>
  58 + <property name="checkable">
  59 + <bool>true</bool>
  60 + </property>
58 <property name="autoDefault"> 61 <property name="autoDefault">
59 <bool>false</bool> 62 <bool>false</bool>
60 </property> 63 </property>
@@ -79,12 +82,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a033_ov.p @@ -79,12 +82,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a033_ov.p
79 </property> 82 </property>
80 <property name="styleSheet"> 83 <property name="styleSheet">
81 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a016.png);} 84 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a016.png);}
82 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a016_ov.png); } 85 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a016_ov.png); }
83 </string> 86 </string>
84 </property> 87 </property>
85 <property name="text"> 88 <property name="text">
86 <string/> 89 <string/>
87 </property> 90 </property>
  91 + <property name="checkable">
  92 + <bool>true</bool>
  93 + </property>
88 <property name="autoDefault"> 94 <property name="autoDefault">
89 <bool>false</bool> 95 <bool>false</bool>
90 </property> 96 </property>
@@ -109,12 +115,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a016_ov.p @@ -109,12 +115,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a016_ov.p
109 </property> 115 </property>
110 <property name="styleSheet"> 116 <property name="styleSheet">
111 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a009.png);} 117 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a009.png);}
112 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a009_ov.png); } 118 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a009_ov.png); }
113 </string> 119 </string>
114 </property> 120 </property>
115 <property name="text"> 121 <property name="text">
116 <string/> 122 <string/>
117 </property> 123 </property>
  124 + <property name="checkable">
  125 + <bool>true</bool>
  126 + </property>
118 <property name="autoDefault"> 127 <property name="autoDefault">
119 <bool>false</bool> 128 <bool>false</bool>
120 </property> 129 </property>
@@ -139,12 +148,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a009_ov.p @@ -139,12 +148,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a009_ov.p
139 </property> 148 </property>
140 <property name="styleSheet"> 149 <property name="styleSheet">
141 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a020.png);} 150 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a020.png);}
142 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a020_ov.png); } 151 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a020_ov.png); }
143 </string> 152 </string>
144 </property> 153 </property>
145 <property name="text"> 154 <property name="text">
146 <string/> 155 <string/>
147 </property> 156 </property>
  157 + <property name="checkable">
  158 + <bool>true</bool>
  159 + </property>
148 <property name="autoDefault"> 160 <property name="autoDefault">
149 <bool>false</bool> 161 <bool>false</bool>
150 </property> 162 </property>
@@ -169,12 +181,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a020_ov.p @@ -169,12 +181,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a020_ov.p
169 </property> 181 </property>
170 <property name="styleSheet"> 182 <property name="styleSheet">
171 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a012.png);} 183 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a012.png);}
172 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a012_ov.png); } 184 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a012_ov.png); }
173 </string> 185 </string>
174 </property> 186 </property>
175 <property name="text"> 187 <property name="text">
176 <string/> 188 <string/>
177 </property> 189 </property>
  190 + <property name="checkable">
  191 + <bool>true</bool>
  192 + </property>
178 <property name="autoDefault"> 193 <property name="autoDefault">
179 <bool>false</bool> 194 <bool>false</bool>
180 </property> 195 </property>
@@ -199,12 +214,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a012_ov.p @@ -199,12 +214,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a012_ov.p
199 </property> 214 </property>
200 <property name="styleSheet"> 215 <property name="styleSheet">
201 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a022.png);} 216 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a022.png);}
202 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a022_ov.png); } 217 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a022_ov.png); }
203 </string> 218 </string>
204 </property> 219 </property>
205 <property name="text"> 220 <property name="text">
206 <string/> 221 <string/>
207 </property> 222 </property>
  223 + <property name="checkable">
  224 + <bool>true</bool>
  225 + </property>
208 <property name="autoDefault"> 226 <property name="autoDefault">
209 <bool>false</bool> 227 <bool>false</bool>
210 </property> 228 </property>
@@ -229,12 +247,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a022_ov.p @@ -229,12 +247,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a022_ov.p
229 </property> 247 </property>
230 <property name="styleSheet"> 248 <property name="styleSheet">
231 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a034.png);} 249 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a034.png);}
232 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a034_ov.png); } 250 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a034_ov.png); }
233 </string> 251 </string>
234 </property> 252 </property>
235 <property name="text"> 253 <property name="text">
236 <string/> 254 <string/>
237 </property> 255 </property>
  256 + <property name="checkable">
  257 + <bool>true</bool>
  258 + </property>
238 <property name="autoDefault"> 259 <property name="autoDefault">
239 <bool>false</bool> 260 <bool>false</bool>
240 </property> 261 </property>
@@ -259,12 +280,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a034_ov.p @@ -259,12 +280,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a034_ov.p
259 </property> 280 </property>
260 <property name="styleSheet"> 281 <property name="styleSheet">
261 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a036.png);} 282 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a036.png);}
262 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a036_ov.png); } 283 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a036_ov.png); }
263 </string> 284 </string>
264 </property> 285 </property>
265 <property name="text"> 286 <property name="text">
266 <string/> 287 <string/>
267 </property> 288 </property>
  289 + <property name="checkable">
  290 + <bool>true</bool>
  291 + </property>
268 <property name="autoDefault"> 292 <property name="autoDefault">
269 <bool>false</bool> 293 <bool>false</bool>
270 </property> 294 </property>
@@ -289,12 +313,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a036_ov.p @@ -289,12 +313,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a036_ov.p
289 </property> 313 </property>
290 <property name="styleSheet"> 314 <property name="styleSheet">
291 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a038.png);} 315 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a038.png);}
292 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a038_ov.png); } 316 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a038_ov.png); }
293 </string> 317 </string>
294 </property> 318 </property>
295 <property name="text"> 319 <property name="text">
296 <string/> 320 <string/>
297 </property> 321 </property>
  322 + <property name="checkable">
  323 + <bool>true</bool>
  324 + </property>
298 <property name="autoDefault"> 325 <property name="autoDefault">
299 <bool>false</bool> 326 <bool>false</bool>
300 </property> 327 </property>
@@ -319,12 +346,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a038_ov.p @@ -319,12 +346,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a038_ov.p
319 </property> 346 </property>
320 <property name="styleSheet"> 347 <property name="styleSheet">
321 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a019.png);} 348 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a019.png);}
322 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a019_ov.png); } 349 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a019_ov.png); }
323 </string> 350 </string>
324 </property> 351 </property>
325 <property name="text"> 352 <property name="text">
326 <string/> 353 <string/>
327 </property> 354 </property>
  355 + <property name="checkable">
  356 + <bool>true</bool>
  357 + </property>
328 <property name="autoDefault"> 358 <property name="autoDefault">
329 <bool>false</bool> 359 <bool>false</bool>
330 </property> 360 </property>
@@ -349,12 +379,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a019_ov.p @@ -349,12 +379,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a019_ov.p
349 </property> 379 </property>
350 <property name="styleSheet"> 380 <property name="styleSheet">
351 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a006.png);} 381 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a006.png);}
352 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a006_ov.png); } 382 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a006_ov.png); }
353 </string> 383 </string>
354 </property> 384 </property>
355 <property name="text"> 385 <property name="text">
356 <string/> 386 <string/>
357 </property> 387 </property>
  388 + <property name="checkable">
  389 + <bool>true</bool>
  390 + </property>
358 <property name="autoDefault"> 391 <property name="autoDefault">
359 <bool>false</bool> 392 <bool>false</bool>
360 </property> 393 </property>
@@ -379,12 +412,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a006_ov.p @@ -379,12 +412,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a006_ov.p
379 </property> 412 </property>
380 <property name="styleSheet"> 413 <property name="styleSheet">
381 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a021.png);} 414 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a021.png);}
382 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a021_ov.png); } 415 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a021_ov.png); }
383 </string> 416 </string>
384 </property> 417 </property>
385 <property name="text"> 418 <property name="text">
386 <string/> 419 <string/>
387 </property> 420 </property>
  421 + <property name="checkable">
  422 + <bool>true</bool>
  423 + </property>
388 <property name="autoDefault"> 424 <property name="autoDefault">
389 <bool>false</bool> 425 <bool>false</bool>
390 </property> 426 </property>
@@ -409,12 +445,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a021_ov.p @@ -409,12 +445,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a021_ov.p
409 </property> 445 </property>
410 <property name="styleSheet"> 446 <property name="styleSheet">
411 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a014.png);} 447 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a014.png);}
412 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a014_ov.png); } 448 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a014_ov.png); }
413 </string> 449 </string>
414 </property> 450 </property>
415 <property name="text"> 451 <property name="text">
416 <string/> 452 <string/>
417 </property> 453 </property>
  454 + <property name="checkable">
  455 + <bool>true</bool>
  456 + </property>
418 <property name="autoDefault"> 457 <property name="autoDefault">
419 <bool>false</bool> 458 <bool>false</bool>
420 </property> 459 </property>
@@ -439,12 +478,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a014_ov.p @@ -439,12 +478,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a014_ov.p
439 </property> 478 </property>
440 <property name="styleSheet"> 479 <property name="styleSheet">
441 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a023.png);} 480 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a023.png);}
442 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a023_ov.png); } 481 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a023_ov.png); }
443 </string> 482 </string>
444 </property> 483 </property>
445 <property name="text"> 484 <property name="text">
446 <string/> 485 <string/>
447 </property> 486 </property>
  487 + <property name="checkable">
  488 + <bool>true</bool>
  489 + </property>
448 <property name="autoDefault"> 490 <property name="autoDefault">
449 <bool>false</bool> 491 <bool>false</bool>
450 </property> 492 </property>
@@ -469,12 +511,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a023_ov.p @@ -469,12 +511,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a023_ov.p
469 </property> 511 </property>
470 <property name="styleSheet"> 512 <property name="styleSheet">
471 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a008.png);} 513 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a008.png);}
472 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a008_ov.png); } 514 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a008_ov.png); }
473 </string> 515 </string>
474 </property> 516 </property>
475 <property name="text"> 517 <property name="text">
476 <string/> 518 <string/>
477 </property> 519 </property>
  520 + <property name="checkable">
  521 + <bool>true</bool>
  522 + </property>
478 <property name="autoDefault"> 523 <property name="autoDefault">
479 <bool>false</bool> 524 <bool>false</bool>
480 </property> 525 </property>
@@ -495,16 +540,19 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a008_ov.p @@ -495,16 +540,19 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a008_ov.p
495 </size> 540 </size>
496 </property> 541 </property>
497 <property name="focusPolicy"> 542 <property name="focusPolicy">
498 - <enum>Qt::NoFocus</enum> 543 + <enum>Qt::TabFocus</enum>
499 </property> 544 </property>
500 <property name="styleSheet"> 545 <property name="styleSheet">
501 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a003.png);} 546 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a003.png);}
502 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a003_ov.png); } 547 +QPushButton:pressed, QPushButton:checked{ border-image: url(:/images/keyboard/088_keyboard_a003_ov.png); }
503 </string> 548 </string>
504 </property> 549 </property>
505 <property name="text"> 550 <property name="text">
506 <string/> 551 <string/>
507 </property> 552 </property>
  553 + <property name="checkable">
  554 + <bool>true</bool>
  555 + </property>
508 <property name="autoDefault"> 556 <property name="autoDefault">
509 <bool>false</bool> 557 <bool>false</bool>
510 </property> 558 </property>
@@ -525,16 +573,19 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a003_ov.p @@ -525,16 +573,19 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a003_ov.p
525 </size> 573 </size>
526 </property> 574 </property>
527 <property name="focusPolicy"> 575 <property name="focusPolicy">
528 - <enum>Qt::NoFocus</enum> 576 + <enum>Qt::TabFocus</enum>
529 </property> 577 </property>
530 <property name="styleSheet"> 578 <property name="styleSheet">
531 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a002.png);} 579 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a002.png);}
532 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a002_ov.png); } 580 +QPushButton:pressed , QPushButton:checked{ border-image: url(:/images/keyboard/088_keyboard_a002_ov.png); }
533 </string> 581 </string>
534 </property> 582 </property>
535 <property name="text"> 583 <property name="text">
536 <string/> 584 <string/>
537 </property> 585 </property>
  586 + <property name="checkable">
  587 + <bool>true</bool>
  588 + </property>
538 <property name="autoDefault"> 589 <property name="autoDefault">
539 <bool>false</bool> 590 <bool>false</bool>
540 </property> 591 </property>
@@ -559,12 +610,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a002_ov.p @@ -559,12 +610,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a002_ov.p
559 </property> 610 </property>
560 <property name="styleSheet"> 611 <property name="styleSheet">
561 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a029.png);} 612 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a029.png);}
562 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a029_ov.png); } 613 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a029_ov.png); }
563 </string> 614 </string>
564 </property> 615 </property>
565 <property name="text"> 616 <property name="text">
566 <string/> 617 <string/>
567 </property> 618 </property>
  619 + <property name="checkable">
  620 + <bool>true</bool>
  621 + </property>
568 <property name="autoDefault"> 622 <property name="autoDefault">
569 <bool>false</bool> 623 <bool>false</bool>
570 </property> 624 </property>
@@ -589,12 +643,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a029_ov.p @@ -589,12 +643,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a029_ov.p
589 </property> 643 </property>
590 <property name="styleSheet"> 644 <property name="styleSheet">
591 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a010.png);} 645 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a010.png);}
592 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a010_ov.png); } 646 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a010_ov.png); }
593 </string> 647 </string>
594 </property> 648 </property>
595 <property name="text"> 649 <property name="text">
596 <string/> 650 <string/>
597 </property> 651 </property>
  652 + <property name="checkable">
  653 + <bool>true</bool>
  654 + </property>
598 <property name="autoDefault"> 655 <property name="autoDefault">
599 <bool>false</bool> 656 <bool>false</bool>
600 </property> 657 </property>
@@ -619,12 +676,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a010_ov.p @@ -619,12 +676,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a010_ov.p
619 </property> 676 </property>
620 <property name="styleSheet"> 677 <property name="styleSheet">
621 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a028.png);} 678 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a028.png);}
622 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a028_ov.png); } 679 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a028_ov.png); }
623 </string> 680 </string>
624 </property> 681 </property>
625 <property name="text"> 682 <property name="text">
626 <string/> 683 <string/>
627 </property> 684 </property>
  685 + <property name="checkable">
  686 + <bool>true</bool>
  687 + </property>
628 <property name="autoDefault"> 688 <property name="autoDefault">
629 <bool>false</bool> 689 <bool>false</bool>
630 </property> 690 </property>
@@ -649,12 +709,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a028_ov.p @@ -649,12 +709,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a028_ov.p
649 </property> 709 </property>
650 <property name="styleSheet"> 710 <property name="styleSheet">
651 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a018.png);} 711 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a018.png);}
652 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a018_ov.png); } 712 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a018_ov.png); }
653 </string> 713 </string>
654 </property> 714 </property>
655 <property name="text"> 715 <property name="text">
656 <string/> 716 <string/>
657 </property> 717 </property>
  718 + <property name="checkable">
  719 + <bool>true</bool>
  720 + </property>
658 <property name="autoDefault"> 721 <property name="autoDefault">
659 <bool>false</bool> 722 <bool>false</bool>
660 </property> 723 </property>
@@ -675,16 +738,19 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a018_ov.p @@ -675,16 +738,19 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a018_ov.p
675 </size> 738 </size>
676 </property> 739 </property>
677 <property name="focusPolicy"> 740 <property name="focusPolicy">
678 - <enum>Qt::NoFocus</enum> 741 + <enum>Qt::TabFocus</enum>
679 </property> 742 </property>
680 <property name="styleSheet"> 743 <property name="styleSheet">
681 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a001.png);} 744 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a001.png);}
682 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a001_ov.png); } 745 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a001_ov.png); }
683 </string> 746 </string>
684 </property> 747 </property>
685 <property name="text"> 748 <property name="text">
686 <string/> 749 <string/>
687 </property> 750 </property>
  751 + <property name="checkable">
  752 + <bool>true</bool>
  753 + </property>
688 <property name="autoDefault"> 754 <property name="autoDefault">
689 <bool>false</bool> 755 <bool>false</bool>
690 </property> 756 </property>
@@ -709,12 +775,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a001_ov.p @@ -709,12 +775,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a001_ov.p
709 </property> 775 </property>
710 <property name="styleSheet"> 776 <property name="styleSheet">
711 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a015.png);} 777 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a015.png);}
712 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a015_ov.png); } 778 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a015_ov.png); }
713 </string> 779 </string>
714 </property> 780 </property>
715 <property name="text"> 781 <property name="text">
716 <string/> 782 <string/>
717 </property> 783 </property>
  784 + <property name="checkable">
  785 + <bool>true</bool>
  786 + </property>
718 <property name="autoDefault"> 787 <property name="autoDefault">
719 <bool>false</bool> 788 <bool>false</bool>
720 </property> 789 </property>
@@ -739,12 +808,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a015_ov.p @@ -739,12 +808,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a015_ov.p
739 </property> 808 </property>
740 <property name="styleSheet"> 809 <property name="styleSheet">
741 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a035.png);} 810 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a035.png);}
742 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a035_ov.png); } 811 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a035_ov.png); }
743 </string> 812 </string>
744 </property> 813 </property>
745 <property name="text"> 814 <property name="text">
746 <string/> 815 <string/>
747 </property> 816 </property>
  817 + <property name="checkable">
  818 + <bool>true</bool>
  819 + </property>
748 <property name="autoDefault"> 820 <property name="autoDefault">
749 <bool>false</bool> 821 <bool>false</bool>
750 </property> 822 </property>
@@ -769,12 +841,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a035_ov.p @@ -769,12 +841,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a035_ov.p
769 </property> 841 </property>
770 <property name="styleSheet"> 842 <property name="styleSheet">
771 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a026.png);} 843 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a026.png);}
772 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a026_ov.png); } 844 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a026_ov.png); }
773 </string> 845 </string>
774 </property> 846 </property>
775 <property name="text"> 847 <property name="text">
776 <string/> 848 <string/>
777 </property> 849 </property>
  850 + <property name="checkable">
  851 + <bool>true</bool>
  852 + </property>
778 <property name="autoDefault"> 853 <property name="autoDefault">
779 <bool>false</bool> 854 <bool>false</bool>
780 </property> 855 </property>
@@ -799,12 +874,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a026_ov.p @@ -799,12 +874,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a026_ov.p
799 </property> 874 </property>
800 <property name="styleSheet"> 875 <property name="styleSheet">
801 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a011.png);} 876 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a011.png);}
802 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a011_ov.png); } 877 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a011_ov.png); }
803 </string> 878 </string>
804 </property> 879 </property>
805 <property name="text"> 880 <property name="text">
806 <string/> 881 <string/>
807 </property> 882 </property>
  883 + <property name="checkable">
  884 + <bool>true</bool>
  885 + </property>
808 <property name="autoDefault"> 886 <property name="autoDefault">
809 <bool>false</bool> 887 <bool>false</bool>
810 </property> 888 </property>
@@ -829,12 +907,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a011_ov.p @@ -829,12 +907,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a011_ov.p
829 </property> 907 </property>
830 <property name="styleSheet"> 908 <property name="styleSheet">
831 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a031.png);} 909 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a031.png);}
832 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a031_ov.png); } 910 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a031_ov.png); }
833 </string> 911 </string>
834 </property> 912 </property>
835 <property name="text"> 913 <property name="text">
836 <string/> 914 <string/>
837 </property> 915 </property>
  916 + <property name="checkable">
  917 + <bool>true</bool>
  918 + </property>
838 <property name="autoDefault"> 919 <property name="autoDefault">
839 <bool>false</bool> 920 <bool>false</bool>
840 </property> 921 </property>
@@ -859,12 +940,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a031_ov.p @@ -859,12 +940,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a031_ov.p
859 </property> 940 </property>
860 <property name="styleSheet"> 941 <property name="styleSheet">
861 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a004.png);} 942 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a004.png);}
862 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a004_ov.png); } 943 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a004_ov.png); }
863 </string> 944 </string>
864 </property> 945 </property>
865 <property name="text"> 946 <property name="text">
866 <string/> 947 <string/>
867 </property> 948 </property>
  949 + <property name="checkable">
  950 + <bool>true</bool>
  951 + </property>
868 <property name="autoDefault"> 952 <property name="autoDefault">
869 <bool>false</bool> 953 <bool>false</bool>
870 </property> 954 </property>
@@ -889,12 +973,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a004_ov.p @@ -889,12 +973,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a004_ov.p
889 </property> 973 </property>
890 <property name="styleSheet"> 974 <property name="styleSheet">
891 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a017.png);} 975 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a017.png);}
892 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a017_ov.png); } 976 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a017_ov.png); }
893 </string> 977 </string>
894 </property> 978 </property>
895 <property name="text"> 979 <property name="text">
896 <string/> 980 <string/>
897 </property> 981 </property>
  982 + <property name="checkable">
  983 + <bool>true</bool>
  984 + </property>
898 <property name="autoDefault"> 985 <property name="autoDefault">
899 <bool>false</bool> 986 <bool>false</bool>
900 </property> 987 </property>
@@ -919,12 +1006,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a017_ov.p @@ -919,12 +1006,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a017_ov.p
919 </property> 1006 </property>
920 <property name="styleSheet"> 1007 <property name="styleSheet">
921 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a030.png);} 1008 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a030.png);}
922 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a030_ov.png); } 1009 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a030_ov.png); }
923 </string> 1010 </string>
924 </property> 1011 </property>
925 <property name="text"> 1012 <property name="text">
926 <string/> 1013 <string/>
927 </property> 1014 </property>
  1015 + <property name="checkable">
  1016 + <bool>true</bool>
  1017 + </property>
928 <property name="autoDefault"> 1018 <property name="autoDefault">
929 <bool>false</bool> 1019 <bool>false</bool>
930 </property> 1020 </property>
@@ -949,12 +1039,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a030_ov.p @@ -949,12 +1039,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a030_ov.p
949 </property> 1039 </property>
950 <property name="styleSheet"> 1040 <property name="styleSheet">
951 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a005.png);} 1041 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a005.png);}
952 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a005_ov.png); } 1042 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a005_ov.png); }
953 </string> 1043 </string>
954 </property> 1044 </property>
955 <property name="text"> 1045 <property name="text">
956 <string/> 1046 <string/>
957 </property> 1047 </property>
  1048 + <property name="checkable">
  1049 + <bool>true</bool>
  1050 + </property>
958 <property name="autoDefault"> 1051 <property name="autoDefault">
959 <bool>false</bool> 1052 <bool>false</bool>
960 </property> 1053 </property>
@@ -979,12 +1072,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a005_ov.p @@ -979,12 +1072,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a005_ov.p
979 </property> 1072 </property>
980 <property name="styleSheet"> 1073 <property name="styleSheet">
981 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a007.png);} 1074 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a007.png);}
982 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a007_ov.png); } 1075 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a007_ov.png); }
983 </string> 1076 </string>
984 </property> 1077 </property>
985 <property name="text"> 1078 <property name="text">
986 <string/> 1079 <string/>
987 </property> 1080 </property>
  1081 + <property name="checkable">
  1082 + <bool>true</bool>
  1083 + </property>
988 <property name="autoDefault"> 1084 <property name="autoDefault">
989 <bool>false</bool> 1085 <bool>false</bool>
990 </property> 1086 </property>
@@ -1009,12 +1105,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a007_ov.p @@ -1009,12 +1105,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a007_ov.p
1009 </property> 1105 </property>
1010 <property name="styleSheet"> 1106 <property name="styleSheet">
1011 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a032.png);} 1107 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a032.png);}
1012 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a032_ov.png); } 1108 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a032_ov.png); }
1013 </string> 1109 </string>
1014 </property> 1110 </property>
1015 <property name="text"> 1111 <property name="text">
1016 <string/> 1112 <string/>
1017 </property> 1113 </property>
  1114 + <property name="checkable">
  1115 + <bool>true</bool>
  1116 + </property>
1018 <property name="autoDefault"> 1117 <property name="autoDefault">
1019 <bool>false</bool> 1118 <bool>false</bool>
1020 </property> 1119 </property>
@@ -1039,12 +1138,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a032_ov.p @@ -1039,12 +1138,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a032_ov.p
1039 </property> 1138 </property>
1040 <property name="styleSheet"> 1139 <property name="styleSheet">
1041 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a013.png);} 1140 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a013.png);}
1042 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a013_ov.png); } 1141 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a013_ov.png); }
1043 </string> 1142 </string>
1044 </property> 1143 </property>
1045 <property name="text"> 1144 <property name="text">
1046 <string/> 1145 <string/>
1047 </property> 1146 </property>
  1147 + <property name="checkable">
  1148 + <bool>true</bool>
  1149 + </property>
1048 <property name="autoDefault"> 1150 <property name="autoDefault">
1049 <bool>false</bool> 1151 <bool>false</bool>
1050 </property> 1152 </property>
@@ -1069,12 +1171,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a013_ov.p @@ -1069,12 +1171,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a013_ov.p
1069 </property> 1171 </property>
1070 <property name="styleSheet"> 1172 <property name="styleSheet">
1071 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a025.png);} 1173 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a025.png);}
1072 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a025_ov.png); } 1174 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a025_ov.png); }
1073 </string> 1175 </string>
1074 </property> 1176 </property>
1075 <property name="text"> 1177 <property name="text">
1076 <string/> 1178 <string/>
1077 </property> 1179 </property>
  1180 + <property name="checkable">
  1181 + <bool>true</bool>
  1182 + </property>
1078 <property name="autoDefault"> 1183 <property name="autoDefault">
1079 <bool>false</bool> 1184 <bool>false</bool>
1080 </property> 1185 </property>
@@ -1099,12 +1204,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a025_ov.p @@ -1099,12 +1204,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a025_ov.p
1099 </property> 1204 </property>
1100 <property name="styleSheet"> 1205 <property name="styleSheet">
1101 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a039.png);} 1206 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a039.png);}
1102 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a039_ov.png); } 1207 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a039_ov.png); }
1103 </string> 1208 </string>
1104 </property> 1209 </property>
1105 <property name="text"> 1210 <property name="text">
1106 <string/> 1211 <string/>
1107 </property> 1212 </property>
  1213 + <property name="checkable">
  1214 + <bool>true</bool>
  1215 + </property>
1108 <property name="autoRepeat"> 1216 <property name="autoRepeat">
1109 <bool>true</bool> 1217 <bool>true</bool>
1110 </property> 1218 </property>
@@ -1132,12 +1240,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a039_ov.p @@ -1132,12 +1240,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a039_ov.p
1132 </property> 1240 </property>
1133 <property name="styleSheet"> 1241 <property name="styleSheet">
1134 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a024.png);} 1242 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a024.png);}
1135 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a024_ov.png); } 1243 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a024_ov.png); }
1136 </string> 1244 </string>
1137 </property> 1245 </property>
1138 <property name="text"> 1246 <property name="text">
1139 <string/> 1247 <string/>
1140 </property> 1248 </property>
  1249 + <property name="checkable">
  1250 + <bool>true</bool>
  1251 + </property>
1141 <property name="autoDefault"> 1252 <property name="autoDefault">
1142 <bool>false</bool> 1253 <bool>false</bool>
1143 </property> 1254 </property>
@@ -1162,12 +1273,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a024_ov.p @@ -1162,12 +1273,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a024_ov.p
1162 </property> 1273 </property>
1163 <property name="styleSheet"> 1274 <property name="styleSheet">
1164 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a037.png);} 1275 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a037.png);}
1165 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a037_ov.png); } 1276 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a037_ov.png); }
1166 </string> 1277 </string>
1167 </property> 1278 </property>
1168 <property name="text"> 1279 <property name="text">
1169 <string/> 1280 <string/>
1170 </property> 1281 </property>
  1282 + <property name="checkable">
  1283 + <bool>true</bool>
  1284 + </property>
1171 <property name="autoDefault"> 1285 <property name="autoDefault">
1172 <bool>false</bool> 1286 <bool>false</bool>
1173 </property> 1287 </property>
@@ -1192,12 +1306,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a037_ov.p @@ -1192,12 +1306,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a037_ov.p
1192 </property> 1306 </property>
1193 <property name="styleSheet"> 1307 <property name="styleSheet">
1194 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a027.png);} 1308 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a027.png);}
1195 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a027_ov.png); } 1309 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a027_ov.png); }
1196 </string> 1310 </string>
1197 </property> 1311 </property>
1198 <property name="text"> 1312 <property name="text">
1199 <string/> 1313 <string/>
1200 </property> 1314 </property>
  1315 + <property name="checkable">
  1316 + <bool>true</bool>
  1317 + </property>
1201 <property name="autoDefault"> 1318 <property name="autoDefault">
1202 <bool>false</bool> 1319 <bool>false</bool>
1203 </property> 1320 </property>
@@ -1222,12 +1339,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a027_ov.p @@ -1222,12 +1339,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a027_ov.p
1222 </property> 1339 </property>
1223 <property name="styleSheet"> 1340 <property name="styleSheet">
1224 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a040.png);} 1341 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a040.png);}
1225 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a040_ov.png); } 1342 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a040_ov.png); }
1226 </string> 1343 </string>
1227 </property> 1344 </property>
1228 <property name="text"> 1345 <property name="text">
1229 <string/> 1346 <string/>
1230 </property> 1347 </property>
  1348 + <property name="checkable">
  1349 + <bool>true</bool>
  1350 + </property>
1231 <property name="autoDefault"> 1351 <property name="autoDefault">
1232 <bool>false</bool> 1352 <bool>false</bool>
1233 </property> 1353 </property>
@@ -1252,12 +1372,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a040_ov.p @@ -1252,12 +1372,15 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a040_ov.p
1252 </property> 1372 </property>
1253 <property name="styleSheet"> 1373 <property name="styleSheet">
1254 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a041.png);} 1374 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a041.png);}
1255 -QPushButton:pressed , QPushButton::focus { border-image: url(:/images/keyboard/088_keyboard_a041_ov.png); } 1375 +QPushButton:pressed , QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a041_ov.png); }
1256 </string> 1376 </string>
1257 </property> 1377 </property>
1258 <property name="text"> 1378 <property name="text">
1259 <string/> 1379 <string/>
1260 </property> 1380 </property>
  1381 + <property name="checkable">
  1382 + <bool>true</bool>
  1383 + </property>
1261 <property name="autoDefault"> 1384 <property name="autoDefault">
1262 <bool>false</bool> 1385 <bool>false</bool>
1263 </property> 1386 </property>
@@ -1282,12 +1405,15 @@ QPushButton:pressed , QPushButton::focus { border-image: url(:/images/keyboard/0 @@ -1282,12 +1405,15 @@ QPushButton:pressed , QPushButton::focus { border-image: url(:/images/keyboard/0
1282 </property> 1405 </property>
1283 <property name="styleSheet"> 1406 <property name="styleSheet">
1284 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a042.png);} 1407 <string notr="true">QPushButton { border-image: url(:/images/keyboard/088_keyboard_a042.png);}
1285 -QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a042_ov.png); } 1408 +QPushButton:pressed, QPushButton:checked { border-image: url(:/images/keyboard/088_keyboard_a042_ov.png); }
1286 </string> 1409 </string>
1287 </property> 1410 </property>
1288 <property name="text"> 1411 <property name="text">
1289 <string/> 1412 <string/>
1290 </property> 1413 </property>
  1414 + <property name="checkable">
  1415 + <bool>true</bool>
  1416 + </property>
1291 <property name="autoDefault"> 1417 <property name="autoDefault">
1292 <bool>false</bool> 1418 <bool>false</bool>
1293 </property> 1419 </property>
@@ -1296,6 +1422,11 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a042_ov.p @@ -1296,6 +1422,11 @@ QPushButton:pressed { border-image: url(:/images/keyboard/088_keyboard_a042_ov.p
1296 </layout> 1422 </layout>
1297 </widget> 1423 </widget>
1298 </widget> 1424 </widget>
  1425 + <tabstops>
  1426 + <tabstop>pushButton_1</tabstop>
  1427 + <tabstop>pushButton_2</tabstop>
  1428 + <tabstop>pushButton_3</tabstop>
  1429 + </tabstops>
1299 <resources/> 1430 <resources/>
1300 <connections/> 1431 <connections/>
1301 </ui> 1432 </ui>