kodi
SettingConditions.h
1 /*
2  * Copyright (C) 2013-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "SettingDefinitions.h"
12 #include "utils/BooleanLogic.h"
13 
14 #include <map>
15 #include <set>
16 #include <string>
17 #include <utility>
18 
19 class CSettingsManager;
20 class CSetting;
21 
22 using SettingConditionCheck = bool (*)(const std::string& condition,
23  const std::string& value,
24  const std::shared_ptr<const CSetting>& setting,
25  void* data);
26 
28 {
29 public:
30  explicit ISettingCondition(CSettingsManager *settingsManager)
31  : m_settingsManager(settingsManager)
32  { }
33  virtual ~ISettingCondition() = default;
34 
35  virtual bool Check() const = 0;
36 
37 protected:
38  CSettingsManager *m_settingsManager;
39 };
40 
42 {
43 public:
44  explicit CSettingConditionItem(CSettingsManager *settingsManager = nullptr)
45  : ISettingCondition(settingsManager)
46  { }
47  ~CSettingConditionItem() override = default;
48 
49  bool Deserialize(const TiXmlNode *node) override;
50  const char* GetTag() const override { return SETTING_XML_ELM_CONDITION; }
51  bool Check() const override;
52 
53 protected:
54  std::string m_name;
55  std::string m_setting;
56 };
57 
59 {
60 public:
61  explicit CSettingConditionCombination(CSettingsManager *settingsManager = nullptr)
62  : ISettingCondition(settingsManager)
63  { }
64  ~CSettingConditionCombination() override = default;
65 
66  bool Check() const override;
67 
68 private:
69  CBooleanLogicOperation* newOperation() override { return new CSettingConditionCombination(m_settingsManager); }
70  CBooleanLogicValue* newValue() override { return new CSettingConditionItem(m_settingsManager); }
71 };
72 
74 {
75 public:
76  explicit CSettingCondition(CSettingsManager *settingsManager = nullptr);
77  ~CSettingCondition() override = default;
78 
79  bool Check() const override;
80 };
81 
83 {
84 public:
85  CSettingConditionsManager() = default;
87  CSettingConditionsManager const& operator=(CSettingConditionsManager const&) = delete;
88  virtual ~CSettingConditionsManager() = default;
89 
90  void AddCondition(std::string condition);
91  void AddDynamicCondition(std::string identifier, SettingConditionCheck condition, void *data = nullptr);
92  void RemoveDynamicCondition(std::string identifier);
93 
94  bool Check(
95  std::string condition,
96  const std::string& value = "",
97  const std::shared_ptr<const CSetting>& setting = std::shared_ptr<const CSetting>()) const;
98 
99 private:
100  using SettingConditionPair = std::pair<std::string, std::pair<SettingConditionCheck, void*>>;
101  using SettingConditionMap = std::map<std::string, std::pair<SettingConditionCheck, void*>>;
102 
103  SettingConditionMap m_conditions;
104  std::set<std::string> m_defines;
105 };
Definition: SettingConditions.h:41
Definition: SettingConditions.h:58
Setting base class containing all the properties which are common to all settings independent of the ...
Definition: Setting.h:46
Definition: SettingConditions.h:82
Definition: BooleanLogic.h:22
Settings manager responsible for initializing, loading and handling all settings. ...
Definition: SettingsManager.h:41
Definition: BooleanLogic.h:76
Definition: SettingConditions.h:73
Definition: SettingConditions.h:27
Definition: BooleanLogic.h:51