// Copyright 2010 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #pragma once #include #include #include #include #include "InputCommon/ControllerInterface/ControllerInterface.h" #include "InputCommon/DynamicInputTextureManager.h" namespace ControllerEmu { class EmulatedController; } class InputConfig { public: InputConfig(const std::string& ini_name, const std::string& gui_name, const std::string& profile_name); ~InputConfig(); bool LoadConfig(bool isGC); void SaveConfig(); template void CreateController(Args&&... args) { OnControllerCreated( *m_controllers.emplace_back(std::make_unique(std::forward(args)...))); } ControllerEmu::EmulatedController* GetController(int index); void ClearControllers(); bool ControllersNeedToBeCreated() const; bool IsControllerControlledByGamepadDevice(int index) const; std::string GetGUIName() const { return m_gui_name; } std::string GetProfileName() const { return m_profile_name; } std::size_t GetControllerCount() const; // These should be used after creating all controllers and before clearing them, respectively. void RegisterHotplugCallback(); void UnregisterHotplugCallback(); private: void OnControllerCreated(ControllerEmu::EmulatedController& controller); ControllerInterface::HotplugCallbackHandle m_hotplug_callback_handle; std::vector> m_controllers; const std::string m_ini_name; const std::string m_gui_name; const std::string m_profile_name; InputCommon::DynamicInputTextureManager m_dynamic_input_tex_config_manager; };