config.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. // SPDX-FileCopyrightText: 2014 Citra Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <array>
  5. #include <memory>
  6. #include <string>
  7. #include <QMetaType>
  8. #include <QVariant>
  9. #include "common/settings.h"
  10. #include "common/settings_enums.h"
  11. #include "yuzu/uisettings.h"
  12. class QSettings;
  13. namespace Core {
  14. class System;
  15. }
  16. class Config {
  17. public:
  18. enum class ConfigType {
  19. GlobalConfig,
  20. PerGameConfig,
  21. InputProfile,
  22. };
  23. explicit Config(const std::string& config_name = "qt-config",
  24. ConfigType config_type = ConfigType::GlobalConfig);
  25. ~Config();
  26. void Reload();
  27. void Save();
  28. void ReadControlPlayerValue(std::size_t player_index);
  29. void SaveControlPlayerValue(std::size_t player_index);
  30. void ClearControlPlayerValues();
  31. const std::string& GetConfigFilePath() const;
  32. static const std::array<int, Settings::NativeButton::NumButtons> default_buttons;
  33. static const std::array<int, Settings::NativeMotion::NumMotions> default_motions;
  34. static const std::array<std::array<int, 4>, Settings::NativeAnalog::NumAnalogs> default_analogs;
  35. static const std::array<int, 2> default_stick_mod;
  36. static const std::array<int, 2> default_ringcon_analogs;
  37. static const std::array<int, Settings::NativeMouseButton::NumMouseButtons>
  38. default_mouse_buttons;
  39. static const std::array<int, Settings::NativeKeyboard::NumKeyboardKeys> default_keyboard_keys;
  40. static const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> default_keyboard_mods;
  41. static const std::array<UISettings::Shortcut, 23> default_hotkeys;
  42. static const std::map<Settings::AntiAliasing, QString> anti_aliasing_texts_map;
  43. static const std::map<Settings::ScalingFilter, QString> scaling_filter_texts_map;
  44. static const std::map<Settings::ConsoleMode, QString> use_docked_mode_texts_map;
  45. static const std::map<Settings::GpuAccuracy, QString> gpu_accuracy_texts_map;
  46. static const std::map<Settings::RendererBackend, QString> renderer_backend_texts_map;
  47. static const std::map<Settings::ShaderBackend, QString> shader_backend_texts_map;
  48. static constexpr UISettings::Theme default_theme{
  49. #ifdef _WIN32
  50. UISettings::Theme::DarkColorful
  51. #else
  52. UISettings::Theme::DefaultColorful
  53. #endif
  54. };
  55. private:
  56. void Initialize(const std::string& config_name);
  57. bool IsCustomConfig();
  58. void ReadValues();
  59. void ReadPlayerValue(std::size_t player_index);
  60. void ReadDebugValues();
  61. void ReadKeyboardValues();
  62. void ReadMouseValues();
  63. void ReadTouchscreenValues();
  64. void ReadMotionTouchValues();
  65. void ReadHidbusValues();
  66. void ReadIrCameraValues();
  67. // Read functions bases off the respective config section names.
  68. void ReadAudioValues();
  69. void ReadControlValues();
  70. void ReadCoreValues();
  71. void ReadDataStorageValues();
  72. void ReadDebuggingValues();
  73. void ReadServiceValues();
  74. void ReadDisabledAddOnValues();
  75. void ReadMiscellaneousValues();
  76. void ReadPathValues();
  77. void ReadCpuValues();
  78. void ReadRendererValues();
  79. void ReadScreenshotValues();
  80. void ReadShortcutValues();
  81. void ReadSystemValues();
  82. void ReadUIValues();
  83. void ReadUIGamelistValues();
  84. void ReadUILayoutValues();
  85. void ReadWebServiceValues();
  86. void ReadMultiplayerValues();
  87. void ReadNetworkValues();
  88. void SaveValues();
  89. void SavePlayerValue(std::size_t player_index);
  90. void SaveDebugValues();
  91. void SaveMouseValues();
  92. void SaveTouchscreenValues();
  93. void SaveMotionTouchValues();
  94. void SaveHidbusValues();
  95. void SaveIrCameraValues();
  96. // Save functions based off the respective config section names.
  97. void SaveAudioValues();
  98. void SaveControlValues();
  99. void SaveCoreValues();
  100. void SaveDataStorageValues();
  101. void SaveDebuggingValues();
  102. void SaveNetworkValues();
  103. void SaveDisabledAddOnValues();
  104. void SaveMiscellaneousValues();
  105. void SavePathValues();
  106. void SaveCpuValues();
  107. void SaveRendererValues();
  108. void SaveScreenshotValues();
  109. void SaveShortcutValues();
  110. void SaveSystemValues();
  111. void SaveUIValues();
  112. void SaveUIGamelistValues();
  113. void SaveUILayoutValues();
  114. void SaveWebServiceValues();
  115. void SaveMultiplayerValues();
  116. /**
  117. * Reads a setting from the qt_config.
  118. *
  119. * @param name The setting's identifier
  120. * @param default_value The value to use when the setting is not already present in the config
  121. */
  122. QVariant ReadSetting(const QString& name) const;
  123. QVariant ReadSetting(const QString& name, const QVariant& default_value) const;
  124. /**
  125. * Writes a setting to the qt_config.
  126. *
  127. * @param name The setting's idetentifier
  128. * @param value Value of the setting
  129. * @param default_value Default of the setting if not present in qt_config
  130. * @param use_global Specifies if the custom or global config should be in use, for custom
  131. * configs
  132. */
  133. void WriteSetting(const QString& name, const QVariant& value);
  134. void WriteSetting(const QString& name, const QVariant& value, const QVariant& default_value);
  135. void WriteSetting(const QString& name, const QVariant& value, const QVariant& default_value,
  136. bool use_global);
  137. void ReadCategory(Settings::Category category);
  138. void WriteCategory(Settings::Category category);
  139. void ReadSettingGeneric(Settings::BasicSetting* const setting);
  140. void WriteSettingGeneric(Settings::BasicSetting* const setting) const;
  141. const ConfigType type;
  142. std::unique_ptr<QSettings> qt_config;
  143. std::string qt_config_loc;
  144. const bool global;
  145. };
  146. // These metatype declarations cannot be in common/settings.h because core is devoid of QT
  147. Q_DECLARE_METATYPE(Settings::CpuAccuracy);
  148. Q_DECLARE_METATYPE(Settings::GpuAccuracy);
  149. Q_DECLARE_METATYPE(Settings::FullscreenMode);
  150. Q_DECLARE_METATYPE(Settings::NvdecEmulation);
  151. Q_DECLARE_METATYPE(Settings::ResolutionSetup);
  152. Q_DECLARE_METATYPE(Settings::ScalingFilter);
  153. Q_DECLARE_METATYPE(Settings::AntiAliasing);
  154. Q_DECLARE_METATYPE(Settings::RendererBackend);
  155. Q_DECLARE_METATYPE(Settings::ShaderBackend);
  156. Q_DECLARE_METATYPE(Settings::AstcRecompression);
  157. Q_DECLARE_METATYPE(Settings::AstcDecodeMode);