controllerbindingwidgets.h (3861B)
1 // SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com> 2 // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) 3 4 #pragma once 5 6 #include "core/controller.h" 7 #include "core/settings.h" 8 #include <QtWidgets/QWidget> 9 #include <functional> 10 #include <vector> 11 12 #include "ui_controllerbindingwidget.h" 13 #include "ui_controllermacroeditwidget.h" 14 #include "ui_controllermacrowidget.h" 15 16 class QVBoxLayout; 17 18 class InputBindingWidget; 19 class ControllerSettingsWindow; 20 class ControllerCustomSettingsWidget; 21 class ControllerMacroWidget; 22 class ControllerMacroEditWidget; 23 24 ////////////////////////////////////////////////////////////////////////// 25 26 class ControllerBindingWidget final : public QWidget 27 { 28 Q_OBJECT 29 30 public: 31 ControllerBindingWidget(QWidget* parent, ControllerSettingsWindow* dialog, u32 port); 32 ~ControllerBindingWidget(); 33 34 ALWAYS_INLINE ControllerSettingsWindow* getDialog() const { return m_dialog; } 35 ALWAYS_INLINE const std::string& getConfigSection() const { return m_config_section; } 36 ALWAYS_INLINE const Controller::ControllerInfo* getControllerInfo() const { return m_controller_info; } 37 ALWAYS_INLINE u32 getPortNumber() const { return m_port_number; } 38 ALWAYS_INLINE const QIcon& getIcon() { return m_icon; } 39 40 private Q_SLOTS: 41 void onTypeChanged(); 42 void onAutomaticBindingClicked(); 43 void onClearBindingsClicked(); 44 void onBindingsClicked(); 45 void onSettingsClicked(); 46 void onMacrosClicked(); 47 48 private: 49 void populateControllerTypes(); 50 void populateWidgets(); 51 void createBindingWidgets(QWidget* parent); 52 void bindBindingWidgets(QWidget* parent); 53 void updateHeaderToolButtons(); 54 void doDeviceAutomaticBinding(const QString& device); 55 void saveAndRefresh(); 56 57 Ui::ControllerBindingWidget m_ui; 58 59 ControllerSettingsWindow* m_dialog; 60 61 std::string m_config_section; 62 const Controller::ControllerInfo* m_controller_info; 63 u32 m_port_number; 64 65 QIcon m_icon; 66 QWidget* m_bindings_widget = nullptr; 67 ControllerCustomSettingsWidget* m_settings_widget = nullptr; 68 ControllerMacroWidget* m_macros_widget = nullptr; 69 }; 70 71 ////////////////////////////////////////////////////////////////////////// 72 73 class ControllerMacroWidget : public QWidget 74 { 75 Q_OBJECT 76 77 public: 78 ControllerMacroWidget(ControllerBindingWidget* parent); 79 ~ControllerMacroWidget(); 80 81 void updateListItem(u32 index); 82 83 private: 84 static constexpr u32 NUM_MACROS = InputManager::NUM_MACRO_BUTTONS_PER_CONTROLLER; 85 86 void createWidgets(ControllerBindingWidget* parent); 87 88 Ui::ControllerMacroWidget m_ui; 89 ControllerSettingsWindow* m_dialog; 90 std::array<ControllerMacroEditWidget*, NUM_MACROS> m_macros; 91 }; 92 93 ////////////////////////////////////////////////////////////////////////// 94 95 class ControllerMacroEditWidget : public QWidget 96 { 97 Q_OBJECT 98 99 public: 100 ControllerMacroEditWidget(ControllerMacroWidget* parent, ControllerBindingWidget* bwidget, u32 index); 101 ~ControllerMacroEditWidget(); 102 103 QString getSummary() const; 104 105 private Q_SLOTS: 106 void onSetFrequencyClicked(); 107 void updateBinds(); 108 109 private: 110 void modFrequency(s32 delta); 111 void updateFrequency(); 112 void updateFrequencyText(); 113 114 Ui::ControllerMacroEditWidget m_ui; 115 116 ControllerMacroWidget* m_parent; 117 ControllerBindingWidget* m_bwidget; 118 u32 m_index; 119 120 std::vector<const Controller::ControllerBindingInfo*> m_binds; 121 u32 m_frequency = 0; 122 }; 123 124 ////////////////////////////////////////////////////////////////////////// 125 126 class ControllerCustomSettingsWidget : public QWidget 127 { 128 Q_OBJECT 129 130 public: 131 ControllerCustomSettingsWidget(ControllerBindingWidget* parent); 132 ~ControllerCustomSettingsWidget(); 133 134 void createSettingWidgets(ControllerBindingWidget* parent, QWidget* parent_widget, QGridLayout* layout, 135 const Controller::ControllerInfo* cinfo); 136 137 private Q_SLOTS: 138 void restoreDefaults(); 139 140 private: 141 ControllerBindingWidget* m_parent; 142 };