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.
master
Morph 2022-07-24 07:21:02 +07:00
parent 97729fd8e9
commit bee823db3a
5 changed files with 67 additions and 4 deletions

@ -17,6 +17,8 @@ struct KeyboardInitializeParameters {
std::u16string sub_text;
std::u16string guide_text;
std::u16string initial_text;
char16_t left_optional_symbol_key;
char16_t right_optional_symbol_key;
u32 max_text_length;
u32 min_text_length;
s32 initial_cursor_position;

@ -536,6 +536,8 @@ void SoftwareKeyboard::InitializeFrontendNormalKeyboard() {
.sub_text{std::move(sub_text)},
.guide_text{std::move(guide_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},
.min_text_length{min_text_length},
.initial_cursor_position{initial_cursor_position},
@ -591,6 +593,8 @@ void SoftwareKeyboard::InitializeFrontendInlineKeyboardOld() {
.sub_text{},
.guide_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},
.min_text_length{min_text_length},
.initial_cursor_position{initial_cursor_position},
@ -632,6 +636,8 @@ void SoftwareKeyboard::InitializeFrontendInlineKeyboardNew() {
.sub_text{},
.guide_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},
.min_text_length{min_text_length},
.initial_cursor_position{initial_cursor_position},

@ -213,9 +213,9 @@ QtSoftwareKeyboardDialog::QtSoftwareKeyboardDialog(
ui->button_ok_num,
},
{
nullptr,
ui->button_left_optional_num,
ui->button_0_num,
nullptr,
ui->button_right_optional_num,
ui->button_ok_num,
},
}};
@ -330,7 +330,9 @@ QtSoftwareKeyboardDialog::QtSoftwareKeyboardDialog(
ui->button_7_num,
ui->button_8_num,
ui->button_9_num,
ui->button_left_optional_num,
ui->button_0_num,
ui->button_right_optional_num,
};
SetupMouseHover();
@ -342,6 +344,9 @@ QtSoftwareKeyboardDialog::QtSoftwareKeyboardDialog(
ui->label_header->setText(QString::fromStdU16String(initialize_parameters.header_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;
cursor_position = initialize_parameters.initial_cursor_position;
@ -932,6 +937,15 @@ void QtSoftwareKeyboardDialog::DisableKeyboardButtons() {
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;
}
}
@ -1019,7 +1033,10 @@ bool QtSoftwareKeyboardDialog::ValidateInputText(const QString& input_text) {
}
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;
}

@ -211,7 +211,7 @@ private:
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.
std::array<QPushButton*, 110> all_buttons;
std::array<QPushButton*, 112> all_buttons;
std::size_t row{0};
std::size_t column{0};

@ -3298,6 +3298,24 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</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">
<widget class="QPushButton" name="button_0_num">
<property name="sizePolicy">
@ -3316,6 +3334,24 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</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">
<widget class="QPushButton" name="button_3_num">
<property name="sizePolicy">
@ -3494,7 +3530,9 @@ p, li { white-space: pre-wrap; }
<tabstop>button_7_num</tabstop>
<tabstop>button_8_num</tabstop>
<tabstop>button_9_num</tabstop>
<tabstop>button_left_optional_num</tabstop>
<tabstop>button_0_num</tabstop>
<tabstop>button_right_optional_num</tabstop>
</tabstops>
<resources>
<include location="../../../dist/icons/overlay/overlay.qrc"/>