Path: blob/master/src/duckstation-qt/controllerbindingwidgets.h
7447 views
// SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <[email protected]>1// SPDX-License-Identifier: CC-BY-NC-ND-4.023#pragma once45#include "core/controller.h"6#include "core/settings.h"78#include <QtWidgets/QDialog>9#include <QtWidgets/QSplitter>10#include <QtWidgets/QWidget>11#include <functional>12#include <vector>1314#include "ui_controllerbindingwidget.h"15#include "ui_controllermacroeditwidget.h"1617class InputBindingWidget;18class ControllerSettingsWindow;19class ControllerCustomSettingsWidget;20class ControllerMacroWidget;21class ControllerMacroEditWidget;2223//////////////////////////////////////////////////////////////////////////2425class ControllerBindingWidget final : public QWidget26{27Q_OBJECT2829public:30ControllerBindingWidget(QWidget* parent, ControllerSettingsWindow* dialog, u32 port);31~ControllerBindingWidget();3233ALWAYS_INLINE ControllerSettingsWindow* getDialog() const { return m_dialog; }34ALWAYS_INLINE const std::string& getConfigSection() const { return m_config_section; }35ALWAYS_INLINE const Controller::ControllerInfo* getControllerInfo() const { return m_controller_info; }36ALWAYS_INLINE u32 getPortNumber() const { return m_port_number; }37ALWAYS_INLINE const QIcon& getIcon() { return m_icon; }3839private:40void populateControllerTypes();41void populateWidgets();42void createBindingWidgets(QWidget* parent);43void bindBindingWidgets(QWidget* parent);44void updateHeaderToolButtons();45void doDeviceAutomaticBinding(const QString& device);46void saveAndRefresh();4748void onTypeChanged();49void onAutomaticBindingClicked();50void onClearBindingsClicked();51void onBindingsClicked();52void onSettingsClicked();53void onMacrosClicked();54void onMultipleDeviceAutomaticBindingTriggered();5556Ui::ControllerBindingWidget m_ui;5758ControllerSettingsWindow* m_dialog;5960std::string m_config_section;61const Controller::ControllerInfo* m_controller_info;62u32 m_port_number;6364QIcon m_icon;65QWidget* m_bindings_widget = nullptr;66ControllerCustomSettingsWidget* m_settings_widget = nullptr;67ControllerMacroWidget* m_macros_widget = nullptr;68};6970//////////////////////////////////////////////////////////////////////////7172class ControllerMacroWidget : public QSplitter73{74Q_OBJECT7576public:77explicit ControllerMacroWidget(ControllerBindingWidget* parent);78~ControllerMacroWidget();7980void updateListItem(u32 index);8182private:83void createWidgets(ControllerBindingWidget* bwidget);8485QListWidget* m_macroList;86QStackedWidget* m_container;87std::array<ControllerMacroEditWidget*, InputManager::NUM_MACRO_BUTTONS_PER_CONTROLLER> m_macros;88};8990//////////////////////////////////////////////////////////////////////////9192class ControllerMacroEditWidget : public QWidget93{94Q_OBJECT9596public:97ControllerMacroEditWidget(ControllerMacroWidget* parent, ControllerBindingWidget* bwidget, u32 index);98~ControllerMacroEditWidget();99100QString getSummary() const;101102private:103void modFrequency(s32 delta);104void updateFrequency();105void updateFrequencyText();106107void onPressureChanged();108void onDeadzoneChanged();109void onSetFrequencyClicked();110void updateBinds();111112Ui::ControllerMacroEditWidget m_ui;113114ControllerMacroWidget* m_parent;115ControllerBindingWidget* m_bwidget;116u32 m_index;117118std::vector<const Controller::ControllerBindingInfo*> m_binds;119u32 m_frequency = 0;120};121122//////////////////////////////////////////////////////////////////////////123124class ControllerCustomSettingsWidget : public QWidget125{126Q_OBJECT127128public:129explicit ControllerCustomSettingsWidget(ControllerBindingWidget* parent);130~ControllerCustomSettingsWidget();131132private:133void restoreDefaults();134135ControllerBindingWidget* m_parent;136};137138//////////////////////////////////////////////////////////////////////////139140class ControllerCustomSettingsDialog final : public QDialog141{142public:143ControllerCustomSettingsDialog(QWidget* parent, SettingsInterface* sif, const std::string& section,144std::span<const SettingInfo> settings, const char* tr_context,145const QString& window_title);146~ControllerCustomSettingsDialog();147};148149//////////////////////////////////////////////////////////////////////////150151class MultipleDeviceAutobindDialog final : public QDialog152{153Q_OBJECT154155public:156MultipleDeviceAutobindDialog(QWidget* parent, ControllerSettingsWindow* settings_window, u32 port);157~MultipleDeviceAutobindDialog();158159private:160void doAutomaticBinding();161162QListWidget* m_list;163ControllerSettingsWindow* m_settings_window;164u32 m_port;165};166167168