12 #include "ISettingCallback.h" 13 #include "ISettingControl.h" 14 #include "SettingDefinitions.h" 15 #include "SettingDependency.h" 16 #include "SettingLevel.h" 17 #include "SettingType.h" 18 #include "SettingUpdate.h" 19 #include "threads/SharedSection.h" 20 #include "utils/logtypes.h" 24 #include <shared_mutex> 29 enum class SettingOptionsType {
37 using SettingPtr = std::shared_ptr<CSetting>;
38 using SettingConstPtr = std::shared_ptr<const CSetting>;
39 using SettingList = std::vector<SettingPtr>;
48 public std::enable_shared_from_this<CSetting>
55 virtual std::shared_ptr<CSetting> Clone(
const std::string &
id)
const = 0;
56 void MergeBasics(
const CSetting& other);
57 virtual void MergeDetails(
const CSetting& other) = 0;
59 bool Deserialize(
const TiXmlNode *node,
bool update =
false)
override;
62 virtual bool FromString(
const std::string &value) = 0;
63 virtual std::string ToString()
const = 0;
64 virtual bool Equals(
const std::string &value)
const = 0;
65 virtual bool CheckValidity(
const std::string &value)
const = 0;
66 virtual void Reset() = 0;
68 bool IsEnabled()
const;
69 bool GetEnabled()
const {
return m_enabled; }
70 void SetEnabled(
bool enabled);
71 bool IsDefault()
const {
return !m_changed; }
72 const std::string& GetParent()
const {
return m_parentSetting; }
73 void SetParent(
const std::string& parentSetting) { m_parentSetting = parentSetting; }
76 std::shared_ptr<const ISettingControl> GetControl()
const {
return m_control; }
77 std::shared_ptr<ISettingControl> GetControl() {
return m_control; }
78 void SetControl(std::shared_ptr<ISettingControl> control) { m_control = std::move(control); }
79 const SettingDependencies& GetDependencies()
const {
return m_dependencies; }
80 void SetDependencies(
const SettingDependencies &dependencies) { m_dependencies = dependencies; }
81 const std::set<CSettingUpdate>& GetUpdates()
const {
return m_updates; }
85 bool IsReference()
const {
return !m_referencedId.empty(); }
86 const std::string& GetReferencedId()
const {
return m_referencedId; }
87 void SetReferencedId(
const std::string& referencedId) { m_referencedId = referencedId; }
88 void MakeReference(
const std::string& referencedId =
"");
92 bool IsVisible()
const override;
95 void OnSettingAction(
const std::shared_ptr<const CSetting>& setting)
override;
106 static bool DeserializeIdentification(
const TiXmlNode* node,
107 std::string& identification,
112 bool OnSettingChanging(
const std::shared_ptr<const CSetting>& setting)
override;
113 void OnSettingChanged(
const std::shared_ptr<const CSetting>& setting)
override;
114 bool OnSettingUpdate(
const std::shared_ptr<CSetting>& setting,
115 const char* oldSettingId,
116 const TiXmlNode* oldSettingNode)
override;
117 void OnSettingPropertyChanged(
const std::shared_ptr<const CSetting>& setting,
118 const char* propertyName)
override;
122 template<
class TSetting>
123 std::shared_ptr<TSetting> shared_from_base()
125 return std::static_pointer_cast<TSetting>(shared_from_this());
129 bool m_enabled =
true;
130 std::string m_parentSetting;
132 std::shared_ptr<ISettingControl> m_control;
133 SettingDependencies m_dependencies;
134 std::set<CSettingUpdate> m_updates;
135 bool m_changed =
false;
138 std::string m_referencedId;
141 static Logger s_logger;
144 template<
typename TValue, SettingType TSettingType>
148 typedef TValue Value;
151 SettingType GetType()
const override {
return TSettingType; }
172 CSettingList(
const std::string &
id, std::shared_ptr<CSetting> settingDefinition,
int label,
CSettingsManager *settingsManager =
nullptr);
176 std::shared_ptr<CSetting> Clone(
const std::string &
id)
const override;
177 void MergeDetails(
const CSetting& other)
override;
179 bool Deserialize(
const TiXmlNode *node,
bool update =
false)
override;
181 SettingType GetType()
const override {
return SettingType::List; }
182 bool FromString(
const std::string &value)
override;
183 std::string ToString()
const override;
184 bool Equals(
const std::string &value)
const override;
185 bool CheckValidity(
const std::string &value)
const override;
186 void Reset()
override;
189 std::shared_ptr<CSetting> GetDefinition() {
return m_definition; }
190 std::shared_ptr<const CSetting> GetDefinition()
const {
return m_definition; }
191 void SetDefinition(std::shared_ptr<CSetting> definition) { m_definition = std::move(definition); }
193 const std::string& GetDelimiter()
const {
return m_delimiter; }
194 void SetDelimiter(
const std::string &delimiter) { m_delimiter = delimiter; }
195 int GetMinimumItems()
const {
return m_minimumItems; }
196 void SetMinimumItems(
int minimumItems) { m_minimumItems = minimumItems; }
197 int GetMaximumItems()
const {
return m_maximumItems; }
198 void SetMaximumItems(
int maximumItems) { m_maximumItems = maximumItems; }
200 bool FromString(
const std::vector<std::string> &value);
202 const SettingList& GetValue()
const {
return m_values; }
203 bool SetValue(
const SettingList &values);
204 const SettingList& GetDefault()
const {
return m_defaults; }
205 void SetDefault(
const SettingList &values);
209 static void copy(
const SettingList &srcValues, SettingList &dstValues);
210 bool fromString(
const std::string &strValue, SettingList &values)
const;
211 bool fromValues(
const std::vector<std::string> &strValues, SettingList &values)
const;
212 std::string toString(
const SettingList &values)
const;
214 SettingList m_values;
215 SettingList m_defaults;
216 std::shared_ptr<CSetting> m_definition;
217 std::string m_delimiter =
"|";
218 int m_minimumItems = 0;
219 int m_maximumItems = -1;
221 static Logger s_logger;
237 std::shared_ptr<CSetting> Clone(
const std::string &
id)
const override;
238 void MergeDetails(
const CSetting& other)
override;
240 bool Deserialize(
const TiXmlNode *node,
bool update =
false)
override;
242 bool FromString(
const std::string &value)
override;
243 std::string ToString()
const override;
244 bool Equals(
const std::string &value)
const override;
245 bool CheckValidity(
const std::string &value)
const override;
246 void Reset()
override { SetValue(m_default); }
248 bool GetValue()
const 250 std::shared_lock<CSharedSection> lock(m_critical);
253 bool SetValue(
bool value);
254 bool GetDefault()
const {
return m_default; }
255 void SetDefault(
bool value);
258 static constexpr Value DefaultValue =
false;
261 bool fromString(
const std::string &strValue,
bool &value)
const;
263 bool m_value = DefaultValue;
264 bool m_default = DefaultValue;
266 static Logger s_logger;
280 CSettingInt(
const std::string &
id,
int label,
int value,
int minimum,
int step,
int maximum,
CSettingsManager *settingsManager =
nullptr);
281 CSettingInt(
const std::string &
id,
int label,
int value,
const TranslatableIntegerSettingOptions &options,
CSettingsManager *settingsManager =
nullptr);
284 std::shared_ptr<CSetting> Clone(
const std::string &
id)
const override;
285 void MergeDetails(
const CSetting& other)
override;
287 bool Deserialize(
const TiXmlNode *node,
bool update =
false)
override;
289 bool FromString(
const std::string &value)
override;
290 std::string ToString()
const override;
291 bool Equals(
const std::string &value)
const override;
292 bool CheckValidity(
const std::string &value)
const override;
293 virtual bool CheckValidity(
int value)
const;
294 void Reset()
override { SetValue(m_default); }
298 std::shared_lock<CSharedSection> lock(m_critical);
301 bool SetValue(
int value);
302 int GetDefault()
const {
return m_default; }
303 void SetDefault(
int value);
305 int GetMinimum()
const {
return m_min; }
306 void SetMinimum(
int minimum) { m_min = minimum; }
307 int GetStep()
const {
return m_step; }
308 void SetStep(
int step) { m_step = step; }
309 int GetMaximum()
const {
return m_max; }
310 void SetMaximum(
int maximum) { m_max = maximum; }
312 SettingOptionsType GetOptionsType()
const;
313 const TranslatableIntegerSettingOptions& GetTranslatableOptions()
const {
return m_translatableOptions; }
314 void SetTranslatableOptions(
const TranslatableIntegerSettingOptions &options) { m_translatableOptions = options; }
315 const IntegerSettingOptions& GetOptions()
const {
return m_options; }
316 void SetOptions(
const IntegerSettingOptions &options) { m_options = options; }
317 const std::string& GetOptionsFillerName()
const {
return m_optionsFillerName; }
318 void SetOptionsFillerName(
const std::string &optionsFillerName,
void *data =
nullptr)
320 m_optionsFillerName = optionsFillerName;
321 m_optionsFillerData = data;
323 void SetOptionsFiller(IntegerSettingOptionsFiller optionsFiller,
void *data =
nullptr)
325 m_optionsFiller = optionsFiller;
326 m_optionsFillerData = data;
328 IntegerSettingOptions GetDynamicOptions()
const {
return m_dynamicOptions; }
329 IntegerSettingOptions UpdateDynamicOptions();
330 SettingOptionsSort GetOptionsSort()
const {
return m_optionsSort; }
331 void SetOptionsSort(SettingOptionsSort optionsSort) { m_optionsSort = optionsSort; }
334 static constexpr Value DefaultValue = 0;
335 static constexpr Value DefaultMin = DefaultValue;
336 static constexpr Value DefaultStep = 1;
337 static constexpr Value DefaultMax = DefaultValue;
340 static bool fromString(
const std::string &strValue,
int &value);
342 int m_value = DefaultValue;
343 int m_default = DefaultValue;
344 int m_min = DefaultMin;
345 int m_step = DefaultStep;
346 int m_max = DefaultMax;
347 TranslatableIntegerSettingOptions m_translatableOptions;
348 IntegerSettingOptions m_options;
349 std::string m_optionsFillerName;
350 IntegerSettingOptionsFiller m_optionsFiller =
nullptr;
351 void *m_optionsFillerData =
nullptr;
352 IntegerSettingOptions m_dynamicOptions;
353 SettingOptionsSort m_optionsSort = SettingOptionsSort::NoSorting;
355 static Logger s_logger;
369 CSettingNumber(
const std::string &
id,
int label,
float value,
float minimum,
float step,
float maximum,
CSettingsManager *settingsManager =
nullptr);
372 std::shared_ptr<CSetting> Clone(
const std::string &
id)
const override;
373 void MergeDetails(
const CSetting& other)
override;
375 bool Deserialize(
const TiXmlNode *node,
bool update =
false)
override;
377 bool FromString(
const std::string &value)
override;
378 std::string ToString()
const override;
379 bool Equals(
const std::string &value)
const override;
380 bool CheckValidity(
const std::string &value)
const override;
381 virtual bool CheckValidity(
double value)
const;
382 void Reset()
override { SetValue(m_default); }
384 double GetValue()
const 386 std::shared_lock<CSharedSection> lock(m_critical);
389 bool SetValue(
double value);
390 double GetDefault()
const {
return m_default; }
391 void SetDefault(
double value);
393 double GetMinimum()
const {
return m_min; }
394 void SetMinimum(
double minimum) { m_min = minimum; }
395 double GetStep()
const {
return m_step; }
396 void SetStep(
double step) { m_step = step; }
397 double GetMaximum()
const {
return m_max; }
398 void SetMaximum(
double maximum) { m_max = maximum; }
401 static constexpr Value DefaultValue = 0.0;
402 static constexpr Value DefaultMin = DefaultValue;
403 static constexpr Value DefaultStep = 1.0;
404 static constexpr Value DefaultMax = DefaultValue;
407 static bool fromString(
const std::string &strValue,
double &value);
409 double m_value = DefaultValue;
410 double m_default = DefaultValue;
411 double m_min = DefaultMin;
412 double m_step = DefaultStep;
413 double m_max = DefaultMax;
415 static Logger s_logger;
431 std::shared_ptr<CSetting> Clone(
const std::string &
id)
const override;
432 void MergeDetails(
const CSetting& other)
override;
434 bool Deserialize(
const TiXmlNode *node,
bool update =
false)
override;
436 bool FromString(
const std::string &value)
override {
return SetValue(value); }
437 std::string ToString()
const override {
return m_value; }
438 bool Equals(
const std::string &value)
const override {
return m_value == value; }
439 bool CheckValidity(
const std::string &value)
const override;
440 void Reset()
override { SetValue(m_default); }
442 virtual const std::string& GetValue()
const 444 std::shared_lock<CSharedSection> lock(m_critical);
447 virtual bool SetValue(
const std::string &value);
448 virtual const std::string& GetDefault()
const {
return m_default; }
449 virtual void SetDefault(
const std::string &value);
451 virtual bool AllowEmpty()
const {
return m_allowEmpty; }
452 void SetAllowEmpty(
bool allowEmpty) { m_allowEmpty = allowEmpty; }
453 virtual bool AllowNewOption()
const {
return m_allowNewOption; }
454 void SetAllowNewOption(
bool allowNewOption) { m_allowNewOption = allowNewOption; }
456 SettingOptionsType GetOptionsType()
const;
457 const TranslatableStringSettingOptions& GetTranslatableOptions()
const {
return m_translatableOptions; }
458 void SetTranslatableOptions(
const TranslatableStringSettingOptions &options) { m_translatableOptions = options; }
459 const StringSettingOptions& GetOptions()
const {
return m_options; }
460 void SetOptions(
const StringSettingOptions &options) { m_options = options; }
461 const std::string& GetOptionsFillerName()
const {
return m_optionsFillerName; }
462 void SetOptionsFillerName(
const std::string &optionsFillerName,
void *data =
nullptr)
464 m_optionsFillerName = optionsFillerName;
465 m_optionsFillerData = data;
467 void SetOptionsFiller(StringSettingOptionsFiller optionsFiller,
void *data =
nullptr)
469 m_optionsFiller = optionsFiller;
470 m_optionsFillerData = data;
472 StringSettingOptions GetDynamicOptions()
const {
return m_dynamicOptions; }
473 StringSettingOptions UpdateDynamicOptions();
474 SettingOptionsSort GetOptionsSort()
const {
return m_optionsSort; }
475 void SetOptionsSort(SettingOptionsSort optionsSort) { m_optionsSort = optionsSort; }
478 static const Value DefaultValue;
483 std::string m_default;
484 bool m_allowEmpty =
false;
485 bool m_allowNewOption =
false;
486 TranslatableStringSettingOptions m_translatableOptions;
487 StringSettingOptions m_options;
488 std::string m_optionsFillerName;
489 StringSettingOptionsFiller m_optionsFiller =
nullptr;
490 void *m_optionsFillerData =
nullptr;
491 StringSettingOptions m_dynamicOptions;
492 SettingOptionsSort m_optionsSort = SettingOptionsSort::NoSorting;
494 static Logger s_logger;
514 std::shared_ptr<CSetting> Clone(
const std::string &
id)
const override;
515 void MergeDetails(
const CSetting& other)
override;
517 bool Deserialize(
const TiXmlNode *node,
bool update =
false)
override;
519 SettingType GetType()
const override {
return SettingType::Action; }
520 bool FromString(
const std::string &value)
override {
return CheckValidity(value); }
521 std::string ToString()
const override {
return ""; }
522 bool Equals(
const std::string &value)
const override {
return value.empty(); }
523 bool CheckValidity(
const std::string &value)
const override {
return value.empty(); }
524 void Reset()
override { }
526 bool HasData()
const {
return !m_data.empty(); }
527 const std::string& GetData()
const {
return m_data; }
528 void SetData(
const std::string& data) { m_data = data; }
535 static Logger s_logger;
List setting implementation.
Definition: Setting.h:168
Definition: ISettingCallback.h:16
Setting base class containing all the properties which are common to all settings independent of the ...
Definition: Setting.h:46
String setting implementation.
Definition: Setting.h:423
Interface defining the base of all setting objects.
Definition: ISetting.h:22
Definition: Setting.h:145
Real number setting implementation.
Definition: Setting.h:363
Action setting implementation.
Definition: Setting.h:506
virtual bool IsVisible() const
Whether the setting object is visible or hidden.
Definition: ISetting.h:58
A CSharedSection is a mutex that satisfies the Shared Lockable concept (see Lockables.h).
Definition: SharedSection.h:19
Settings manager responsible for initializing, loading and handling all settings. ...
Definition: SettingsManager.h:41
Boolean setting implementation.
Definition: Setting.h:229
Integer setting implementation.
Definition: Setting.h:274
SettingLevel
Levels which every setting is assigned to.
Definition: SettingLevel.h:15
SettingType
Basic setting types available in the settings system.
Definition: SettingType.h:15