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

inputbindingwidgets.h (2845B)


      1 // SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
      2 // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
      3 
      4 #pragma once
      5 #include "common/types.h"
      6 #include "util/input_manager.h"
      7 #include <QtWidgets/QPushButton>
      8 #include <optional>
      9 
     10 class QTimer;
     11 
     12 class ControllerSettingsWindow;
     13 class SettingsInterface;
     14 
     15 class InputBindingWidget : public QPushButton
     16 {
     17   Q_OBJECT
     18 
     19 public:
     20   InputBindingWidget(QWidget* parent);
     21   InputBindingWidget(QWidget* parent, SettingsInterface* sif, InputBindingInfo::Type bind_type,
     22                      std::string section_name, std::string key_name);
     23   ~InputBindingWidget();
     24 
     25   static bool isMouseMappingEnabled(SettingsInterface* sif);
     26 
     27   void initialize(SettingsInterface* sif, InputBindingInfo::Type bind_type, std::string section_name,
     28                   std::string key_name);
     29 
     30 public Q_SLOTS:
     31   void clearBinding();
     32   void reloadBinding();
     33 
     34 protected Q_SLOTS:
     35   void onClicked();
     36   void onInputListenTimerTimeout();
     37   void inputManagerHookCallback(InputBindingKey key, float value);
     38 
     39 protected:
     40   enum : u32
     41   {
     42     TIMEOUT_FOR_SINGLE_BINDING = 5,
     43     TIMEOUT_FOR_ALL_BINDING = 10
     44   };
     45 
     46   virtual bool eventFilter(QObject* watched, QEvent* event) override;
     47   virtual bool event(QEvent* event) override;
     48   virtual void mouseReleaseEvent(QMouseEvent* e) override;
     49 
     50   virtual void startListeningForInput(u32 timeout_in_seconds);
     51   virtual void stopListeningForInput();
     52   virtual void openDialog();
     53 
     54   bool isListeningForInput() const { return m_input_listen_timer != nullptr; }
     55   void setNewBinding();
     56   void updateText();
     57 
     58   void hookInputManager();
     59   void unhookInputManager();
     60 
     61   SettingsInterface* m_sif = nullptr;
     62   InputBindingInfo::Type m_bind_type = InputBindingInfo::Type::Unknown;
     63   std::string m_section_name;
     64   std::string m_key_name;
     65   std::vector<std::string> m_bindings;
     66   std::vector<InputBindingKey> m_new_bindings;
     67   std::vector<std::pair<InputBindingKey, std::pair<float, float>>> m_value_ranges;
     68   QTimer* m_input_listen_timer = nullptr;
     69   u32 m_input_listen_remaining_seconds = 0;
     70   QPoint m_input_listen_start_position{};
     71   bool m_mouse_mapping_enabled = false;
     72 };
     73 
     74 class InputVibrationBindingWidget : public QPushButton
     75 {
     76   Q_OBJECT
     77 
     78 public:
     79   InputVibrationBindingWidget(QWidget* parent);
     80   InputVibrationBindingWidget(QWidget* parent, ControllerSettingsWindow* dialog, std::string section_name,
     81                               std::string key_name);
     82   ~InputVibrationBindingWidget();
     83 
     84   void setKey(ControllerSettingsWindow* dialog, std::string section_name, std::string key_name);
     85 
     86 public Q_SLOTS:
     87   void clearBinding();
     88 
     89 protected Q_SLOTS:
     90   void onClicked();
     91 
     92 protected:
     93   virtual void mouseReleaseEvent(QMouseEvent* e) override;
     94 
     95 private:
     96   std::string m_section_name;
     97   std::string m_key_name;
     98   std::string m_binding;
     99 
    100   ControllerSettingsWindow* m_dialog;
    101 };