Path: blob/master/src/duckstation-qt/controllerbindingwidgets.h
4802 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:43void populateControllerTypes();44void populateWidgets();45void createBindingWidgets(QWidget* parent);46void bindBindingWidgets(QWidget* parent);47void updateHeaderToolButtons();48void doDeviceAutomaticBinding(const QString& device);49void saveAndRefresh();5051void onTypeChanged();52void onAutomaticBindingClicked();53void onClearBindingsClicked();54void onBindingsClicked();55void onSettingsClicked();56void onMacrosClicked();57void onMultipleDeviceAutomaticBindingTriggered();5859Ui::ControllerBindingWidget m_ui;6061ControllerSettingsWindow* m_dialog;6263std::string m_config_section;64const Controller::ControllerInfo* m_controller_info;65u32 m_port_number;6667QIcon m_icon;68QWidget* m_bindings_widget = nullptr;69ControllerCustomSettingsWidget* m_settings_widget = nullptr;70ControllerMacroWidget* m_macros_widget = nullptr;71};7273//////////////////////////////////////////////////////////////////////////7475class ControllerMacroWidget : public QWidget76{77Q_OBJECT7879public:80explicit ControllerMacroWidget(ControllerBindingWidget* parent);81~ControllerMacroWidget();8283void updateListItem(u32 index);8485private:86static constexpr u32 NUM_MACROS = InputManager::NUM_MACRO_BUTTONS_PER_CONTROLLER;8788void createWidgets(ControllerBindingWidget* parent);8990Ui::ControllerMacroWidget m_ui;91std::array<ControllerMacroEditWidget*, NUM_MACROS> m_macros;92};9394//////////////////////////////////////////////////////////////////////////9596class ControllerMacroEditWidget : public QWidget97{98Q_OBJECT99100public:101ControllerMacroEditWidget(ControllerMacroWidget* parent, ControllerBindingWidget* bwidget, u32 index);102~ControllerMacroEditWidget();103104QString getSummary() const;105106private:107void modFrequency(s32 delta);108void updateFrequency();109void updateFrequencyText();110111void onPressureChanged();112void onDeadzoneChanged();113void onSetFrequencyClicked();114void updateBinds();115116Ui::ControllerMacroEditWidget m_ui;117118ControllerMacroWidget* m_parent;119ControllerBindingWidget* m_bwidget;120u32 m_index;121122std::vector<const Controller::ControllerBindingInfo*> m_binds;123u32 m_frequency = 0;124};125126//////////////////////////////////////////////////////////////////////////127128class ControllerCustomSettingsWidget : public QWidget129{130Q_OBJECT131132public:133explicit ControllerCustomSettingsWidget(ControllerBindingWidget* parent);134~ControllerCustomSettingsWidget();135136private:137void restoreDefaults();138139ControllerBindingWidget* m_parent;140};141142//////////////////////////////////////////////////////////////////////////143144class ControllerCustomSettingsDialog : public QDialog145{146public:147explicit ControllerCustomSettingsDialog(QWidget* parent, SettingsInterface* sif, const std::string& section,148std::span<const SettingInfo> settings, const char* tr_context,149const QString& window_title);150~ControllerCustomSettingsDialog();151};152153154