Merge pull request #8633 from Morph1984/optional-keys
applet/swkbd: Implement optional symbol keys
This commit is contained in:
commit
a761d020c6
|
@ -17,6 +17,8 @@ struct KeyboardInitializeParameters {
|
||||||
std::u16string sub_text;
|
std::u16string sub_text;
|
||||||
std::u16string guide_text;
|
std::u16string guide_text;
|
||||||
std::u16string initial_text;
|
std::u16string initial_text;
|
||||||
|
char16_t left_optional_symbol_key;
|
||||||
|
char16_t right_optional_symbol_key;
|
||||||
u32 max_text_length;
|
u32 max_text_length;
|
||||||
u32 min_text_length;
|
u32 min_text_length;
|
||||||
s32 initial_cursor_position;
|
s32 initial_cursor_position;
|
||||||
|
|
|
@ -536,6 +536,8 @@ void SoftwareKeyboard::InitializeFrontendNormalKeyboard() {
|
||||||
.sub_text{std::move(sub_text)},
|
.sub_text{std::move(sub_text)},
|
||||||
.guide_text{std::move(guide_text)},
|
.guide_text{std::move(guide_text)},
|
||||||
.initial_text{initial_text},
|
.initial_text{initial_text},
|
||||||
|
.left_optional_symbol_key{swkbd_config_common.left_optional_symbol_key},
|
||||||
|
.right_optional_symbol_key{swkbd_config_common.right_optional_symbol_key},
|
||||||
.max_text_length{max_text_length},
|
.max_text_length{max_text_length},
|
||||||
.min_text_length{min_text_length},
|
.min_text_length{min_text_length},
|
||||||
.initial_cursor_position{initial_cursor_position},
|
.initial_cursor_position{initial_cursor_position},
|
||||||
|
@ -591,6 +593,8 @@ void SoftwareKeyboard::InitializeFrontendInlineKeyboardOld() {
|
||||||
.sub_text{},
|
.sub_text{},
|
||||||
.guide_text{},
|
.guide_text{},
|
||||||
.initial_text{current_text},
|
.initial_text{current_text},
|
||||||
|
.left_optional_symbol_key{appear_arg.left_optional_symbol_key},
|
||||||
|
.right_optional_symbol_key{appear_arg.right_optional_symbol_key},
|
||||||
.max_text_length{max_text_length},
|
.max_text_length{max_text_length},
|
||||||
.min_text_length{min_text_length},
|
.min_text_length{min_text_length},
|
||||||
.initial_cursor_position{initial_cursor_position},
|
.initial_cursor_position{initial_cursor_position},
|
||||||
|
@ -632,6 +636,8 @@ void SoftwareKeyboard::InitializeFrontendInlineKeyboardNew() {
|
||||||
.sub_text{},
|
.sub_text{},
|
||||||
.guide_text{},
|
.guide_text{},
|
||||||
.initial_text{current_text},
|
.initial_text{current_text},
|
||||||
|
.left_optional_symbol_key{appear_arg.left_optional_symbol_key},
|
||||||
|
.right_optional_symbol_key{appear_arg.right_optional_symbol_key},
|
||||||
.max_text_length{max_text_length},
|
.max_text_length{max_text_length},
|
||||||
.min_text_length{min_text_length},
|
.min_text_length{min_text_length},
|
||||||
.initial_cursor_position{initial_cursor_position},
|
.initial_cursor_position{initial_cursor_position},
|
||||||
|
|
|
@ -213,9 +213,9 @@ QtSoftwareKeyboardDialog::QtSoftwareKeyboardDialog(
|
||||||
ui->button_ok_num,
|
ui->button_ok_num,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
nullptr,
|
ui->button_left_optional_num,
|
||||||
ui->button_0_num,
|
ui->button_0_num,
|
||||||
nullptr,
|
ui->button_right_optional_num,
|
||||||
ui->button_ok_num,
|
ui->button_ok_num,
|
||||||
},
|
},
|
||||||
}};
|
}};
|
||||||
|
@ -330,7 +330,9 @@ QtSoftwareKeyboardDialog::QtSoftwareKeyboardDialog(
|
||||||
ui->button_7_num,
|
ui->button_7_num,
|
||||||
ui->button_8_num,
|
ui->button_8_num,
|
||||||
ui->button_9_num,
|
ui->button_9_num,
|
||||||
|
ui->button_left_optional_num,
|
||||||
ui->button_0_num,
|
ui->button_0_num,
|
||||||
|
ui->button_right_optional_num,
|
||||||
};
|
};
|
||||||
|
|
||||||
SetupMouseHover();
|
SetupMouseHover();
|
||||||
|
@ -342,6 +344,9 @@ QtSoftwareKeyboardDialog::QtSoftwareKeyboardDialog(
|
||||||
ui->label_header->setText(QString::fromStdU16String(initialize_parameters.header_text));
|
ui->label_header->setText(QString::fromStdU16String(initialize_parameters.header_text));
|
||||||
ui->label_sub->setText(QString::fromStdU16String(initialize_parameters.sub_text));
|
ui->label_sub->setText(QString::fromStdU16String(initialize_parameters.sub_text));
|
||||||
|
|
||||||
|
ui->button_left_optional_num->setText(QChar{initialize_parameters.left_optional_symbol_key});
|
||||||
|
ui->button_right_optional_num->setText(QChar{initialize_parameters.right_optional_symbol_key});
|
||||||
|
|
||||||
current_text = initialize_parameters.initial_text;
|
current_text = initialize_parameters.initial_text;
|
||||||
cursor_position = initialize_parameters.initial_cursor_position;
|
cursor_position = initialize_parameters.initial_cursor_position;
|
||||||
|
|
||||||
|
@ -932,6 +937,15 @@ void QtSoftwareKeyboardDialog::DisableKeyboardButtons() {
|
||||||
button->setEnabled(true);
|
button->setEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto enable_left_optional = initialize_parameters.left_optional_symbol_key != '\0';
|
||||||
|
const auto enable_right_optional = initialize_parameters.right_optional_symbol_key != '\0';
|
||||||
|
|
||||||
|
ui->button_left_optional_num->setEnabled(enable_left_optional);
|
||||||
|
ui->button_left_optional_num->setVisible(enable_left_optional);
|
||||||
|
|
||||||
|
ui->button_right_optional_num->setEnabled(enable_right_optional);
|
||||||
|
ui->button_right_optional_num->setVisible(enable_right_optional);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1019,7 +1033,10 @@ bool QtSoftwareKeyboardDialog::ValidateInputText(const QString& input_text) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bottom_osk_index == BottomOSKIndex::NumberPad &&
|
if (bottom_osk_index == BottomOSKIndex::NumberPad &&
|
||||||
std::any_of(input_text.begin(), input_text.end(), [](QChar c) { return !c.isDigit(); })) {
|
std::any_of(input_text.begin(), input_text.end(), [this](QChar c) {
|
||||||
|
return !c.isDigit() && c != QChar{initialize_parameters.left_optional_symbol_key} &&
|
||||||
|
c != QChar{initialize_parameters.right_optional_symbol_key};
|
||||||
|
})) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1384,6 +1401,10 @@ void QtSoftwareKeyboardDialog::MoveButtonDirection(Direction direction) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Store the initial row and column.
|
||||||
|
const auto initial_row = row;
|
||||||
|
const auto initial_column = column;
|
||||||
|
|
||||||
switch (bottom_osk_index) {
|
switch (bottom_osk_index) {
|
||||||
case BottomOSKIndex::LowerCase:
|
case BottomOSKIndex::LowerCase:
|
||||||
case BottomOSKIndex::UpperCase: {
|
case BottomOSKIndex::UpperCase: {
|
||||||
|
@ -1394,6 +1415,11 @@ void QtSoftwareKeyboardDialog::MoveButtonDirection(Direction direction) {
|
||||||
auto* curr_button = keyboard_buttons[index][row][column];
|
auto* curr_button = keyboard_buttons[index][row][column];
|
||||||
|
|
||||||
while (!curr_button || !curr_button->isEnabled() || curr_button == prev_button) {
|
while (!curr_button || !curr_button->isEnabled() || curr_button == prev_button) {
|
||||||
|
// If we returned back to where we started from, break the loop.
|
||||||
|
if (row == initial_row && column == initial_column) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
move_direction(NUM_ROWS_NORMAL, NUM_COLUMNS_NORMAL);
|
move_direction(NUM_ROWS_NORMAL, NUM_COLUMNS_NORMAL);
|
||||||
curr_button = keyboard_buttons[index][row][column];
|
curr_button = keyboard_buttons[index][row][column];
|
||||||
}
|
}
|
||||||
|
@ -1408,6 +1434,11 @@ void QtSoftwareKeyboardDialog::MoveButtonDirection(Direction direction) {
|
||||||
auto* curr_button = numberpad_buttons[row][column];
|
auto* curr_button = numberpad_buttons[row][column];
|
||||||
|
|
||||||
while (!curr_button || !curr_button->isEnabled() || curr_button == prev_button) {
|
while (!curr_button || !curr_button->isEnabled() || curr_button == prev_button) {
|
||||||
|
// If we returned back to where we started from, break the loop.
|
||||||
|
if (row == initial_row && column == initial_column) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
move_direction(NUM_ROWS_NUMPAD, NUM_COLUMNS_NUMPAD);
|
move_direction(NUM_ROWS_NUMPAD, NUM_COLUMNS_NUMPAD);
|
||||||
curr_button = numberpad_buttons[row][column];
|
curr_button = numberpad_buttons[row][column];
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,7 +211,7 @@ private:
|
||||||
std::array<std::array<QPushButton*, NUM_COLUMNS_NUMPAD>, NUM_ROWS_NUMPAD> numberpad_buttons;
|
std::array<std::array<QPushButton*, NUM_COLUMNS_NUMPAD>, NUM_ROWS_NUMPAD> numberpad_buttons;
|
||||||
|
|
||||||
// Contains a set of all buttons used in keyboard_buttons and numberpad_buttons.
|
// Contains a set of all buttons used in keyboard_buttons and numberpad_buttons.
|
||||||
std::array<QPushButton*, 110> all_buttons;
|
std::array<QPushButton*, 112> all_buttons;
|
||||||
|
|
||||||
std::size_t row{0};
|
std::size_t row{0};
|
||||||
std::size_t column{0};
|
std::size_t column{0};
|
||||||
|
|
|
@ -3298,6 +3298,24 @@ p, li { white-space: pre-wrap; }
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QPushButton" name="button_left_optional_num">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>1</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>28</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="4" column="3">
|
<item row="4" column="3">
|
||||||
<widget class="QPushButton" name="button_0_num">
|
<widget class="QPushButton" name="button_0_num">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -3316,6 +3334,24 @@ p, li { white-space: pre-wrap; }
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="4" column="4">
|
||||||
|
<widget class="QPushButton" name="button_right_optional_num">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>1</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>28</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="4">
|
<item row="1" column="4">
|
||||||
<widget class="QPushButton" name="button_3_num">
|
<widget class="QPushButton" name="button_3_num">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -3494,7 +3530,9 @@ p, li { white-space: pre-wrap; }
|
||||||
<tabstop>button_7_num</tabstop>
|
<tabstop>button_7_num</tabstop>
|
||||||
<tabstop>button_8_num</tabstop>
|
<tabstop>button_8_num</tabstop>
|
||||||
<tabstop>button_9_num</tabstop>
|
<tabstop>button_9_num</tabstop>
|
||||||
|
<tabstop>button_left_optional_num</tabstop>
|
||||||
<tabstop>button_0_num</tabstop>
|
<tabstop>button_0_num</tabstop>
|
||||||
|
<tabstop>button_right_optional_num</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../../../dist/icons/overlay/overlay.qrc"/>
|
<include location="../../../dist/icons/overlay/overlay.qrc"/>
|
||||||
|
|
Reference in New Issue