@ -10,10 +10,12 @@
const QString BACKSPACE_KEY = " ⌫ " ;
const QString ENTER_KEY = " → " ;
const QString SHIFT_KEY = " ⇧ " ;
const QString CAPS_LOCK_KEY = " ⇪ " ;
const QMap < QString , int > KEY_STRETCH = { { " " , 3 } , { ENTER_KEY , 2 } } ;
const QStringList CONTROL_BUTTONS = { " ↑ " , " ↓ " , " ABC " , " #+= " , " 123 " , BACKSPACE_KEY , ENTER_KEY } ;
const QStringList CONTROL_BUTTONS = { SHIFT_KEY , CAPS_LOCK_KEY , " ABC " , " #+= " , " 123 " , BACKSPACE_KEY , ENTER_KEY } ;
const float key_spacing_vertical = 20 ;
const float key_spacing_horizontal = 15 ;
@ -106,7 +108,7 @@ Keyboard::Keyboard(QWidget *parent) : QFrame(parent) {
std : : vector < QVector < QString > > lowercase = {
{ " q " , " w " , " e " , " r " , " t " , " y " , " u " , " i " , " o " , " p " } ,
{ " a " , " s " , " d " , " f " , " g " , " h " , " j " , " k " , " l " } ,
{ " ↑ " , " z " , " x " , " c " , " v " , " b " , " n " , " m " , BACKSPACE_KEY } ,
{ SHIFT_KEY , " z " , " x " , " c " , " v " , " b " , " n " , " m " , BACKSPACE_KEY } ,
{ " 123 " , " / " , " - " , " " , " . " , ENTER_KEY } ,
} ;
main_layout - > addWidget ( new KeyboardLayout ( this , lowercase ) ) ;
@ -115,7 +117,7 @@ Keyboard::Keyboard(QWidget *parent) : QFrame(parent) {
std : : vector < QVector < QString > > uppercase = {
{ " Q " , " W " , " E " , " R " , " T " , " Y " , " U " , " I " , " O " , " P " } ,
{ " A " , " S " , " D " , " F " , " G " , " H " , " J " , " K " , " L " } ,
{ " ↓ " , " Z " , " X " , " C " , " V " , " B " , " N " , " M " , BACKSPACE_KEY } ,
{ SHIFT_KEY , " Z " , " X " , " C " , " V " , " B " , " N " , " M " , BACKSPACE_KEY } ,
{ " 123 " , " / " , " - " , " " , " . " , ENTER_KEY } ,
} ;
main_layout - > addWidget ( new KeyboardLayout ( this , uppercase ) ) ;
@ -141,26 +143,39 @@ Keyboard::Keyboard(QWidget *parent) : QFrame(parent) {
main_layout - > setCurrentIndex ( 0 ) ;
}
void Keyboard : : handleCapsPress ( ) {
shift_state = ( shift_state + 1 ) % 3 ;
bool is_uppercase = shift_state > 0 ;
main_layout - > setCurrentIndex ( is_uppercase ) ;
for ( KeyButton * btn : main_layout - > currentWidget ( ) - > findChildren < KeyButton * > ( ) ) {
if ( btn - > text ( ) = = SHIFT_KEY | | btn - > text ( ) = = CAPS_LOCK_KEY ) {
btn - > setText ( shift_state = = 2 ? CAPS_LOCK_KEY : SHIFT_KEY ) ;
btn - > setStyleSheet ( is_uppercase ? " background-color: #465BEA; " : " " ) ;
}
}
}
void Keyboard : : handleButton ( QAbstractButton * btn ) {
const QString & key = btn - > text ( ) ;
if ( CONTROL_BUTTONS . contains ( key ) ) {
if ( key = = " ↓ " | | key = = " ABC " ) {
main_layout - > setCurrentIndex ( 0 ) ;
} else if ( key = = " ↑ " ) {
main_layout - > setCurrentIndex ( 1 ) ;
} else if ( key = = " 123 " ) {
main_layout - > setCurrentIndex ( 2 ) ;
} else if ( key = = " #+= " ) {
main_layout - > setCurrentIndex ( 3 ) ;
if ( key = = " ABC " | | key = = " 123 " | | key = = " #+= " ) {
int index = ( key = = " ABC " ) ? 0 : ( key = = " 123 " ? 2 : 3 ) ;
main_layout - > setCurrentIndex ( index ) ;
shift_state = 0 ;
} else if ( key = = SHIFT_KEY | | key = = CAPS_LOCK_KEY ) {
handleCapsPress ( ) ;
} else if ( key = = ENTER_KEY ) {
main_layout - > setCurrentIndex ( 0 ) ;
shift_state = 0 ;
emit emitEnter ( ) ;
} else if ( key = = BACKSPACE_KEY ) {
emit emitBackspace ( ) ;
}
} else {
if ( " A " < = key & & key < = " Z " ) {
if ( shift_state = = 1 & & " A " < = key & & key < = " Z " ) {
main_layout - > setCurrentIndex ( 0 ) ;
shift_state = 0 ;
}
emit emitKey ( key ) ;
}