duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

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 };