summaryrefslogtreecommitdiff
path: root/src/common/settings_common.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/common/settings_common.h96
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
43class BasicSetting { 46class BasicSetting;
44protected:
45 explicit BasicSetting() = default;
46
47public:
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
69class Linkage { 48class Linkage {
70public: 49public:
@@ -75,4 +54,71 @@ public:
75 u32 count; 54 u32 count;
76}; 55};
77 56
57class BasicSetting {
58protected:
59 explicit BasicSetting(Linkage& linkage, const std::string& name, enum Category category_,
60 bool save_, bool runtime_modifiable_);
61
62public:
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
116private:
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