diff options
Diffstat (limited to '')
| -rw-r--r-- | src/common/settings_common.h | 96 |
1 files changed, 71 insertions, 25 deletions
diff --git a/src/common/settings_common.h b/src/common/settings_common.h index 93fddeba6..81d59115d 100644 --- a/src/common/settings_common.h +++ b/src/common/settings_common.h | |||
| @@ -1,3 +1,6 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 1 | #pragma once | 4 | #pragma once |
| 2 | 5 | ||
| 3 | #include <forward_list> | 6 | #include <forward_list> |
| @@ -40,31 +43,7 @@ enum class Category : u32 { | |||
| 40 | MaxEnum, | 43 | MaxEnum, |
| 41 | }; | 44 | }; |
| 42 | 45 | ||
| 43 | class BasicSetting { | 46 | class BasicSetting; |
| 44 | protected: | ||
| 45 | explicit BasicSetting() = default; | ||
| 46 | |||
| 47 | public: | ||
| 48 | virtual ~BasicSetting() = default; | ||
| 49 | |||
| 50 | virtual Category Category() const = 0; | ||
| 51 | virtual constexpr bool Switchable() const = 0; | ||
| 52 | virtual std::string ToString() const = 0; | ||
| 53 | virtual std::string ToStringGlobal() const; | ||
| 54 | virtual void LoadString(const std::string& load) = 0; | ||
| 55 | virtual std::string Canonicalize() const = 0; | ||
| 56 | virtual const std::string& GetLabel() const = 0; | ||
| 57 | virtual std::string DefaultToString() const = 0; | ||
| 58 | virtual bool Save() const = 0; | ||
| 59 | virtual std::type_index TypeId() const = 0; | ||
| 60 | virtual constexpr bool IsEnum() const = 0; | ||
| 61 | virtual bool RuntimeModfiable() const = 0; | ||
| 62 | virtual void SetGlobal(bool global) {} | ||
| 63 | virtual constexpr u32 Id() const = 0; | ||
| 64 | virtual std::string MinVal() const = 0; | ||
| 65 | virtual std::string MaxVal() const = 0; | ||
| 66 | virtual bool UsingGlobal() const; | ||
| 67 | }; | ||
| 68 | 47 | ||
| 69 | class Linkage { | 48 | class Linkage { |
| 70 | public: | 49 | public: |
| @@ -75,4 +54,71 @@ public: | |||
| 75 | u32 count; | 54 | u32 count; |
| 76 | }; | 55 | }; |
| 77 | 56 | ||
| 57 | class BasicSetting { | ||
| 58 | protected: | ||
| 59 | explicit BasicSetting(Linkage& linkage, const std::string& name, enum Category category_, | ||
| 60 | bool save_, bool runtime_modifiable_); | ||
| 61 | |||
| 62 | public: | ||
| 63 | virtual ~BasicSetting(); | ||
| 64 | |||
| 65 | /* Data retrieval */ | ||
| 66 | |||
| 67 | [[nodiscard]] virtual std::string ToString() const = 0; | ||
| 68 | [[nodiscard]] virtual std::string ToStringGlobal() const; | ||
| 69 | [[nodiscard]] virtual std::string DefaultToString() const = 0; | ||
| 70 | [[nodiscard]] virtual std::string MinVal() const = 0; | ||
| 71 | [[nodiscard]] virtual std::string MaxVal() const = 0; | ||
| 72 | virtual void LoadString(const std::string& load) = 0; | ||
| 73 | [[nodiscard]] virtual std::string Canonicalize() const = 0; | ||
| 74 | |||
| 75 | /* Identification */ | ||
| 76 | |||
| 77 | [[nodiscard]] virtual std::type_index TypeId() const = 0; | ||
| 78 | [[nodiscard]] virtual constexpr bool IsEnum() const = 0; | ||
| 79 | /** | ||
| 80 | * Returns whether the current setting is Switchable. | ||
| 81 | * | ||
| 82 | * @returns If the setting is a SwitchableSetting | ||
| 83 | */ | ||
| 84 | [[nodiscard]] virtual constexpr bool Switchable() const { | ||
| 85 | return false; | ||
| 86 | } | ||
| 87 | /** | ||
| 88 | * Returns the save preference of the setting i.e. when saving or reading the setting from a | ||
| 89 | * frontend, whether this setting should be skipped. | ||
| 90 | * | ||
| 91 | * @returns The save preference | ||
| 92 | */ | ||
| 93 | [[nodiscard]] bool Save() const; | ||
| 94 | [[nodiscard]] bool RuntimeModfiable() const; | ||
| 95 | [[nodiscard]] constexpr u32 Id() const { | ||
| 96 | return id; | ||
| 97 | } | ||
| 98 | /** | ||
| 99 | * Returns the setting's category AKA INI group. | ||
| 100 | * | ||
| 101 | * @returns The setting's category | ||
| 102 | */ | ||
| 103 | [[nodiscard]] Category Category() const; | ||
| 104 | /** | ||
| 105 | * Returns the label this setting was created with. | ||
| 106 | * | ||
| 107 | * @returns A reference to the label | ||
| 108 | */ | ||
| 109 | [[nodiscard]] const std::string& GetLabel() const; | ||
| 110 | |||
| 111 | /* Switchable settings */ | ||
| 112 | |||
| 113 | virtual void SetGlobal(bool global); | ||
| 114 | [[nodiscard]] virtual bool UsingGlobal() const; | ||
| 115 | |||
| 116 | private: | ||
| 117 | const std::string label; ///< The setting's label | ||
| 118 | const enum Category category; ///< The setting's category AKA INI group | ||
| 119 | const u32 id; | ||
| 120 | const bool save; | ||
| 121 | const bool runtime_modifiable; | ||
| 122 | }; | ||
| 123 | |||
| 78 | } // namespace Settings | 124 | } // namespace Settings |