Path: blob/master/src/duckstation-qt/controllerbindingwidgets.h
4246 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"7#include <QtWidgets/QDialog>8#include <QtWidgets/QWidget>9#include <functional>10#include <vector>1112#include "ui_controllerbindingwidget.h"13#include "ui_controllermacroeditwidget.h"14#include "ui_controllermacrowidget.h"1516class QVBoxLayout;1718class InputBindingWidget;19class ControllerSettingsWindow;20class ControllerCustomSettingsWidget;21class ControllerMacroWidget;22class ControllerMacroEditWidget;2324//////////////////////////////////////////////////////////////////////////2526class ControllerBindingWidget final : public QWidget27{28Q_OBJECT2930public:31ControllerBindingWidget(QWidget* parent, ControllerSettingsWindow* dialog, u32 port);32~ControllerBindingWidget();3334ALWAYS_INLINE ControllerSettingsWindow* getDialog() const { return m_dialog; }35ALWAYS_INLINE const std::string& getConfigSection() const { return m_config_section; }36ALWAYS_INLINE const Controller::ControllerInfo* getControllerInfo() const { return m_controller_info; }37ALWAYS_INLINE u32 getPortNumber() const { return m_port_number; }38ALWAYS_INLINE const QIcon& getIcon() { return m_icon; }3940static bool doMultipleDeviceAutomaticBinding(QWidget* parent, ControllerSettingsWindow* parent_dialog, u32 port);4142private Q_SLOTS:43void onTypeChanged();44void onAutomaticBindingClicked();45void onClearBindingsClicked();46void onBindingsClicked();47void onSettingsClicked();48void onMacrosClicked();49void onMultipleDeviceAutomaticBindingTriggered();5051private:52void populateControllerTypes();53void populateWidgets();54void createBindingWidgets(QWidget* parent);55void bindBindingWidgets(QWidget* parent);56void updateHeaderToolButtons();57void doDeviceAutomaticBinding(const QString& device);58void saveAndRefresh();5960Ui::ControllerBindingWidget m_ui;6162ControllerSettingsWindow* m_dialog;6364std::string m_config_section;65const Controller::ControllerInfo* m_controller_info;66u32 m_port_number;6768QIcon m_icon;69QWidget* m_bindings_widget = nullptr;70ControllerCustomSettingsWidget* m_settings_widget = nullptr;71ControllerMacroWidget* m_macros_widget = nullptr;72};7374//////////////////////////////////////////////////////////////////////////7576class ControllerMacroWidget : public QWidget77{78Q_OBJECT7980public:81explicit ControllerMacroWidget(ControllerBindingWidget* parent);82~ControllerMacroWidget();8384void updateListItem(u32 index);8586private:87static constexpr u32 NUM_MACROS = InputManager::NUM_MACRO_BUTTONS_PER_CONTROLLER;8889void createWidgets(ControllerBindingWidget* parent);9091Ui::ControllerMacroWidget m_ui;92ControllerSettingsWindow* m_dialog;93std::array<ControllerMacroEditWidget*, NUM_MACROS> m_macros;94};9596//////////////////////////////////////////////////////////////////////////9798class ControllerMacroEditWidget : public QWidget99{100Q_OBJECT101102public:103ControllerMacroEditWidget(ControllerMacroWidget* parent, ControllerBindingWidget* bwidget, u32 index);104~ControllerMacroEditWidget();105106QString getSummary() const;107108private Q_SLOTS:109void onPressureChanged();110void onDeadzoneChanged();111void onSetFrequencyClicked();112void updateBinds();113114private:115void modFrequency(s32 delta);116void updateFrequency();117void updateFrequencyText();118119Ui::ControllerMacroEditWidget m_ui;120121ControllerMacroWidget* m_parent;122ControllerBindingWidget* m_bwidget;123u32 m_index;124125std::vector<const Controller::ControllerBindingInfo*> m_binds;126u32 m_frequency = 0;127};128129//////////////////////////////////////////////////////////////////////////130131class ControllerCustomSettingsWidget : public QWidget132{133Q_OBJECT134135public:136explicit ControllerCustomSettingsWidget(ControllerBindingWidget* parent);137~ControllerCustomSettingsWidget();138139private Q_SLOTS:140void restoreDefaults();141142private:143ControllerBindingWidget* m_parent;144};145146//////////////////////////////////////////////////////////////////////////147148class ControllerCustomSettingsDialog : public QDialog149{150Q_OBJECT151152public:153explicit ControllerCustomSettingsDialog(QWidget* parent, SettingsInterface* sif, const std::string& section,154std::span<const SettingInfo> settings, const char* tr_context,155const QString& window_title);156~ControllerCustomSettingsDialog();157};158159160