summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/settings/AddonSettings.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/settings/AddonSettings.h')
-rw-r--r--xbmc/addons/settings/AddonSettings.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/xbmc/addons/settings/AddonSettings.h b/xbmc/addons/settings/AddonSettings.h
new file mode 100644
index 0000000..811ded1
--- /dev/null
+++ b/xbmc/addons/settings/AddonSettings.h
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2017-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "addons/IAddon.h"
+#include "settings/SettingControl.h"
+#include "settings/SettingCreator.h"
+#include "settings/SettingsBase.h"
+#include "settings/lib/ISettingCallback.h"
+
+#include <map>
+#include <memory>
+#include <set>
+#include <string>
+#include <vector>
+
+enum class SettingDependencyOperator;
+
+class CSettingCategory;
+class CSettingGroup;
+class CSettingDependency;
+class CXBMCTinyXML;
+
+struct StringSettingOption;
+
+namespace ADDON
+{
+
+class IAddon;
+class IAddonInstanceHandler;
+
+class CAddonSettings : public CSettingControlCreator,
+ public CSettingCreator,
+ public CSettingsBase,
+ public ISettingCallback
+{
+public:
+ CAddonSettings(const std::shared_ptr<const IAddon>& addon, AddonInstanceId instanceId);
+ ~CAddonSettings() override = default;
+
+ // specialization of CSettingsBase
+ bool Initialize() override { return false; }
+
+ // implementations of CSettingsBase
+ bool Load() override { return false; }
+ bool Save() override { return false; }
+
+ // specialization of CSettingCreator
+ std::shared_ptr<CSetting> CreateSetting(
+ const std::string& settingType,
+ const std::string& settingId,
+ CSettingsManager* settingsManager = nullptr) const override;
+
+ // implementation of ISettingCallback
+ void OnSettingAction(const std::shared_ptr<const CSetting>& setting) override;
+
+ const std::string& GetAddonId() const { return m_addonId; }
+
+ bool Initialize(const CXBMCTinyXML& doc, bool allowEmpty = false);
+ bool Load(const CXBMCTinyXML& doc);
+ bool Save(CXBMCTinyXML& doc) const;
+
+ bool HasSettings() const;
+
+ std::string GetSettingLabel(int label) const;
+
+ std::shared_ptr<CSetting> AddSetting(const std::string& settingId, bool value);
+ std::shared_ptr<CSetting> AddSetting(const std::string& settingId, int value);
+ std::shared_ptr<CSetting> AddSetting(const std::string& settingId, double value);
+ std::shared_ptr<CSetting> AddSetting(const std::string& settingId, const std::string& value);
+
+protected:
+ // specializations of CSettingsBase
+ void InitializeSettingTypes() override;
+ void InitializeControls() override;
+ void InitializeConditions() override;
+
+ // implementation of CSettingsBase
+ bool InitializeDefinitions() override { return false; }
+
+private:
+ bool AddInstanceSettings();
+ bool InitializeDefinitions(const CXBMCTinyXML& doc);
+
+ bool ParseSettingVersion(const CXBMCTinyXML& doc, uint32_t& version) const;
+
+ std::shared_ptr<CSettingGroup> ParseOldSettingElement(
+ const TiXmlElement* categoryElement,
+ const std::shared_ptr<CSettingCategory>& category,
+ std::set<std::string>& settingIds);
+
+ std::shared_ptr<CSettingCategory> ParseOldCategoryElement(uint32_t& categoryId,
+ const TiXmlElement* categoryElement,
+ std::set<std::string>& settingIds);
+
+ bool InitializeFromOldSettingDefinitions(const CXBMCTinyXML& doc);
+ std::shared_ptr<CSetting> InitializeFromOldSettingAction(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue);
+ std::shared_ptr<CSetting> InitializeFromOldSettingLabel();
+ std::shared_ptr<CSetting> InitializeFromOldSettingBool(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue);
+ std::shared_ptr<CSetting> InitializeFromOldSettingTextIpAddress(
+ const std::string& settingId,
+ const std::string& settingType,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const int settingLabel);
+ std::shared_ptr<CSetting> InitializeFromOldSettingNumber(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const int settingLabel);
+ std::shared_ptr<CSetting> InitializeFromOldSettingPath(const std::string& settingId,
+ const std::string& settingType,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const int settingLabel);
+ std::shared_ptr<CSetting> InitializeFromOldSettingDate(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const int settingLabel);
+ std::shared_ptr<CSetting> InitializeFromOldSettingTime(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const int settingLabel);
+ std::shared_ptr<CSetting> InitializeFromOldSettingSelect(
+ const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const int settingLabel,
+ const std::string& settingValues,
+ const std::vector<std::string>& settingLValues);
+ std::shared_ptr<CSetting> InitializeFromOldSettingAddon(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const int settingLabel);
+ std::shared_ptr<CSetting> InitializeFromOldSettingEnums(
+ const std::string& settingId,
+ const std::string& settingType,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const std::string& settingValues,
+ const std::vector<std::string>& settingLValues);
+ std::shared_ptr<CSetting> InitializeFromOldSettingFileEnum(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ const std::string& settingValues);
+ std::shared_ptr<CSetting> InitializeFromOldSettingRangeOfNum(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue);
+ std::shared_ptr<CSetting> InitializeFromOldSettingSlider(const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue);
+ std::shared_ptr<CSetting> InitializeFromOldSettingFileWithSource(
+ const std::string& settingId,
+ const TiXmlElement* settingElement,
+ const std::string& defaultValue,
+ std::string source);
+
+ bool LoadOldSettingValues(const CXBMCTinyXML& doc,
+ std::map<std::string, std::string>& settings) const;
+
+ struct ConditionExpression
+ {
+ SettingDependencyOperator m_operator;
+ bool m_negated;
+ int32_t m_relativeSettingIndex;
+ std::string m_value;
+ };
+
+ bool ParseOldLabel(const TiXmlElement* element, const std::string& settingId, int& labelId);
+ bool ParseOldCondition(const std::shared_ptr<const CSetting>& setting,
+ const std::vector<std::shared_ptr<const CSetting>>& settings,
+ const std::string& condition,
+ CSettingDependency& dependeny) const;
+ static bool ParseOldConditionExpression(std::string str, ConditionExpression& expression);
+
+ static void FileEnumSettingOptionsFiller(const std::shared_ptr<const CSetting>& setting,
+ std::vector<StringSettingOption>& list,
+ std::string& current,
+ void* data);
+
+ // store these values so that we don't always have to access the weak pointer
+ const std::string m_addonId;
+ const std::string m_addonPath;
+ const std::string m_addonProfile;
+ const AddonInstanceId m_instanceId{ADDON_SETTINGS_ID};
+
+ uint32_t m_unidentifiedSettingId;
+ int m_unknownSettingLabelId;
+ std::map<int, std::string> m_unknownSettingLabels;
+
+ Logger m_logger;
+};
+
+} // namespace ADDON