applet/swkbd: Implement optional symbol keys

These are only used in the numeric keyboard, and correspond to the keys to the left and right of the "0" key on the numeric keyboard.
This commit is contained in:
Morph 2022-07-24 07:21:02 -04:00
parent 97729fd8e9
commit bee823db3a
5 changed files with 67 additions and 4 deletions

View File

@ -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;

View File

@ -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},

View File

@ -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;
} }

View File

@ -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};

View File

@ -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"/>