| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- // Copyright 2020 yuzu Emulator Project
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #pragma once
- #include <array>
- #include <memory>
- #include <QDialog>
- #include "core/frontend/applets/controller.h"
- class GMainWindow;
- class QCheckBox;
- class QComboBox;
- class QDialogButtonBox;
- class QGroupBox;
- class QLabel;
- class InputProfiles;
- namespace InputCommon {
- class InputSubsystem;
- }
- namespace Settings {
- enum class ControllerType;
- }
- namespace Ui {
- class QtControllerSelectorDialog;
- }
- class QtControllerSelectorDialog final : public QDialog {
- Q_OBJECT
- public:
- explicit QtControllerSelectorDialog(QWidget* parent,
- Core::Frontend::ControllerParameters parameters_,
- InputCommon::InputSubsystem* input_subsystem_);
- ~QtControllerSelectorDialog() override;
- int exec() override;
- private:
- // Applies the current configuration.
- void ApplyConfiguration();
- // Loads the current input configuration into the frontend applet.
- void LoadConfiguration();
- // Initializes the "Configure Vibration" Dialog.
- void CallConfigureVibrationDialog();
- // Initializes the "Configure Motion / Touch" Dialog.
- void CallConfigureMotionTouchDialog();
- // Initializes the "Create Input Profile" Dialog.
- void CallConfigureInputProfileDialog();
- // Checks the current configuration against the given parameters.
- // This sets and returns the value of parameters_met.
- bool CheckIfParametersMet();
- // Sets the controller icons for "Supported Controller Types".
- void SetSupportedControllers();
- // Sets the emulated controllers per player.
- void SetEmulatedControllers(std::size_t player_index);
- // Gets the Controller Type for a given controller combobox index per player.
- Settings::ControllerType GetControllerTypeFromIndex(int index, std::size_t player_index) const;
- // Gets the controller combobox index for a given Controller Type per player.
- int GetIndexFromControllerType(Settings::ControllerType type, std::size_t player_index) const;
- // Updates the controller icons per player.
- void UpdateControllerIcon(std::size_t player_index);
- // Updates the controller state (type and connection status) per player.
- void UpdateControllerState(std::size_t player_index);
- // Updates the LED pattern per player.
- void UpdateLEDPattern(std::size_t player_index);
- // Updates the border color per player.
- void UpdateBorderColor(std::size_t player_index);
- // Sets the "Explain Text" per player.
- void SetExplainText(std::size_t player_index);
- // Updates the console mode.
- void UpdateDockedState(bool is_handheld);
- // Disables and disconnects unsupported players based on the given parameters.
- void DisableUnsupportedPlayers();
- std::unique_ptr<Ui::QtControllerSelectorDialog> ui;
- // Parameters sent in from the backend HLE applet.
- Core::Frontend::ControllerParameters parameters;
- InputCommon::InputSubsystem* input_subsystem;
- std::unique_ptr<InputProfiles> input_profiles;
- // This is true if and only if all parameters are met. Otherwise, this is false.
- // This determines whether the "OK" button can be clicked to exit the applet.
- bool parameters_met{false};
- static constexpr std::size_t NUM_PLAYERS = 8;
- // Widgets encapsulating the groupboxes and comboboxes per player.
- std::array<QWidget*, NUM_PLAYERS> player_widgets;
- // Groupboxes encapsulating the controller icons and LED patterns per player.
- std::array<QGroupBox*, NUM_PLAYERS> player_groupboxes;
- // Icons for currently connected controllers/players.
- std::array<QWidget*, NUM_PLAYERS> connected_controller_icons;
- // Labels that represent the player numbers in place of the controller icons.
- std::array<QLabel*, NUM_PLAYERS> player_labels;
- // LED patterns for currently connected controllers/players.
- std::array<std::array<QCheckBox*, 4>, NUM_PLAYERS> led_patterns_boxes;
- // Labels representing additional information known as "Explain Text" per player.
- std::array<QLabel*, NUM_PLAYERS> explain_text_labels;
- // Comboboxes with a list of emulated controllers per player.
- std::array<QComboBox*, NUM_PLAYERS> emulated_controllers;
- /// Pairs of emulated controller index and Controller Type enum per player.
- std::array<std::vector<std::pair<int, Settings::ControllerType>>, NUM_PLAYERS>
- index_controller_type_pairs;
- // Labels representing the number of connected controllers
- // above the "Connected Controllers" checkboxes.
- std::array<QLabel*, NUM_PLAYERS> connected_controller_labels;
- // Checkboxes representing the "Connected Controllers".
- std::array<QCheckBox*, NUM_PLAYERS> connected_controller_checkboxes;
- };
- class QtControllerSelector final : public QObject, public Core::Frontend::ControllerApplet {
- Q_OBJECT
- public:
- explicit QtControllerSelector(GMainWindow& parent);
- ~QtControllerSelector() override;
- void ReconfigureControllers(
- std::function<void()> callback_,
- const Core::Frontend::ControllerParameters& parameters) const override;
- signals:
- void MainWindowReconfigureControllers(
- const Core::Frontend::ControllerParameters& parameters) const;
- private:
- void MainWindowReconfigureFinished();
- mutable std::function<void()> callback;
- };
|