From 924692bf1c975479b1dae3b85f46fea95ffb5048 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Thu, 15 Jun 2023 20:18:12 +0200 Subject: [PATCH] Qt: use shift+click to append the button instead of replacing it --- rpcs3/rpcs3qt/pad_settings_dialog.cpp | 29 ++++++++++++++++++--------- rpcs3/rpcs3qt/pad_settings_dialog.h | 5 +++-- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.cpp b/rpcs3/rpcs3qt/pad_settings_dialog.cpp index 6777ae2aaf..3d8b0625b8 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/pad_settings_dialog.cpp @@ -53,9 +53,13 @@ inline bool CreateConfigFile(const QString& dir, const QString& name) return true; } -void pad_settings_dialog::pad_button::insert_key(const std::string& key) +void pad_settings_dialog::pad_button::insert_key(const std::string& key, bool append_key) { - std::vector buttons = cfg_pad::get_buttons(keys); + std::vector buttons; + if (append_key) + { + buttons = cfg_pad::get_buttons(keys); + } buttons.push_back(key); keys = cfg_pad::get_buttons(std::move(buttons)); @@ -458,7 +462,7 @@ void pad_settings_dialog::InitButtons() if (m_button_id > button_ids::id_pad_begin && m_button_id < button_ids::id_pad_end) { - m_cfg_entries[m_button_id].insert_key(name); + m_cfg_entries[m_button_id].insert_key(name, m_enable_multi_binding); ReactivateButtons(); } }; @@ -709,6 +713,7 @@ void pad_settings_dialog::ReactivateButtons() { m_remap_timer.stop(); m_seconds = MAX_SECONDS; + m_enable_multi_binding = false; if (m_button_id == button_ids::id_pad_begin) { @@ -763,8 +768,8 @@ void pad_settings_dialog::RepaintPreviewLabel(QLabel* l, int deadzone, int desir const bool show_emulated_values = ui->chb_show_emulated_values->isChecked(); - [[maybe_unused]] qreal ingame_x = 0.0; - [[maybe_unused]] qreal ingame_y = 0.0; + qreal ingame_x = 0.0; + qreal ingame_y = 0.0; // Set up the canvas for our work of art QPixmap pixmap(scaled_width, scaled_width); @@ -852,7 +857,7 @@ void pad_settings_dialog::keyPressEvent(QKeyEvent *keyEvent) } else { - m_cfg_entries[m_button_id].insert_key(keyboard_pad_handler::GetKeyName(keyEvent)); + m_cfg_entries[m_button_id].insert_key(keyboard_pad_handler::GetKeyName(keyEvent), m_enable_multi_binding); } ReactivateButtons(); @@ -879,7 +884,7 @@ void pad_settings_dialog::mouseReleaseEvent(QMouseEvent* event) } else { - m_cfg_entries[m_button_id].insert_key((static_cast(m_handler.get()))->GetMouseName(event)); + m_cfg_entries[m_button_id].insert_key((static_cast(m_handler.get()))->GetMouseName(event), m_enable_multi_binding); } ReactivateButtons(); @@ -941,7 +946,7 @@ void pad_settings_dialog::wheelEvent(QWheelEvent *event) } } - m_cfg_entries[m_button_id].insert_key((static_cast(m_handler.get()))->GetMouseName(key)); + m_cfg_entries[m_button_id].insert_key((static_cast(m_handler.get()))->GetMouseName(key), m_enable_multi_binding); ReactivateButtons(); } @@ -991,7 +996,7 @@ void pad_settings_dialog::mouseMoveEvent(QMouseEvent* event) if (key != 0) { - m_cfg_entries[m_button_id].insert_key((static_cast(m_handler.get()))->GetMouseName(key)); + m_cfg_entries[m_button_id].insert_key((static_cast(m_handler.get()))->GetMouseName(key), m_enable_multi_binding); ReactivateButtons(); } } @@ -1251,6 +1256,12 @@ void pad_settings_dialog::OnPadButtonClicked(int id) break; } + // On shift+click or shift+space enable multi key binding + if (QApplication::keyboardModifiers() & Qt::KeyboardModifier::ShiftModifier) + { + m_enable_multi_binding = true; + } + for (auto but : m_pad_buttons->buttons()) { but->setFocusPolicy(Qt::ClickFocus); diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.h b/rpcs3/rpcs3qt/pad_settings_dialog.h index e4bd7e5841..903f87aff9 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.h +++ b/rpcs3/rpcs3qt/pad_settings_dialog.h @@ -83,7 +83,7 @@ class pad_settings_dialog : public QDialog std::string keys; QString text; - void insert_key(const std::string& key); + void insert_key(const std::string& key, bool append_key); }; const QString Disconnected_suffix = tr(" (disconnected)"); @@ -152,9 +152,10 @@ private: int m_last_player_id = 0; // Remap Timer - const int MAX_SECONDS = 5; + static constexpr int MAX_SECONDS = 5; int m_seconds = MAX_SECONDS; QTimer m_remap_timer; + bool m_enable_multi_binding = false; // Mouse Move QPoint m_last_pos;