summaryrefslogtreecommitdiff
path: root/src/settings.h
diff options
context:
space:
mode:
authorFabien Proriol <fabien.proriol@kazoe.org>2025-05-22 17:10:35 +0200
committerFabien Proriol <fabien.proriol@kazoe.org>2025-05-26 10:48:46 +0200
commit2feba4447a482840e21fa2d3b33f1a5da12d09b7 (patch)
tree83a790b1ae5b5f32f5964350856a160dbed52e05 /src/settings.h
parentc842548fef050ac5f8b56a5fcb4f579820247434 (diff)
qt: Add Qt Wrapper library and QML module
Diffstat (limited to 'src/settings.h')
-rw-r--r--src/settings.h180
1 files changed, 0 insertions, 180 deletions
diff --git a/src/settings.h b/src/settings.h
deleted file mode 100644
index 5dfe90b..0000000
--- a/src/settings.h
+++ /dev/null
@@ -1,180 +0,0 @@
-#ifndef KAZOESETTINGS_H
-#define KAZOESETTINGS_H
-
-#include <functional>
-#include <memory>
-#include <variant>
-#include <string>
-#include <algorithm>
-
-/** @brief Key type for settings, composed of category and name */
-using SettingKey = std::pair<std::string, std::string>;
-
-/** @brief Value type that can hold string, int, double or boolean */
-using SettingValue = std::variant<std::string, int, double, bool>;
-
-
-namespace KaZoe {
-
-class SettingsPrivate;
-
-/**
- * @brief Main class for managing KaZoe settings
- *
- * This class provides a thread-safe interface for storing and retrieving
- * configuration settings with support for different value types.
- */
-class Settings
-{
-public:
- /** @brief Constructs a new Settings instance */
- explicit Settings();
-
- /** @brief Virtual destructor */
- virtual ~Settings();
-
- /**
- * @brief Retrieves a setting value
- * @param key The setting key
- * @param category The setting category (optional)
- * @param def Default value if setting not found (optional)
- * @return The setting value or default if not found
- */
- SettingValue get(const std::string &key, const std::string &category = "", SettingValue def = SettingValue()) const;
-
- /**
- * @brief Sets a setting value
- * @param key The setting key
- * @param value The value to set
- * @param category The setting category (optional)
- * @return true if successful, false otherwise
- */
- bool set(const std::string &key, SettingValue value, const std::string &category = "");
-
- /**
- * @brief Gets the current instance identifier
- * @return The instance ID string, by default, this is the excecutable filename
- */
- std::string id() const;
-
- /**
- * @brief Sets the instance identifier
- * @param newid The new ID to set
- */
- void setId(const std::string &newid);
-
- /**
- * @brief Sets a callback for setting changes notification
- * @param callback Function to call when settings change
- */
- void setNotifier(const std::function<void(const std::string&, const std::string&, SettingValue)>& callback);
-
- /**
- * @brief Gets the number of settings
- * @return The total count of settings
- */
- std::size_t size() const;
-
- /**
- * @brief Iterates over all settings in a thread-safe manner
- * @param callback Function called for each key-value pair
- */
- void forEach(const std::function<void(const SettingKey&, const SettingValue&)>& callback) const;
-
-private:
- std::unique_ptr<SettingsPrivate> m_ptr; ///< Private implementation pointer
-};
-
-
-/**
- * @brief Functor to convert SettingValue variants to string
- *
- * Provides string conversion for all supported setting value types
- */
-struct settingValueFunctor {
- std::string operator()(const std::string &x) const { return x; }
- std::string operator()(int x) const { return std::to_string(x); }
- std::string operator()(double x) const { return std::to_string(x); }
- std::string operator()(bool x) const { return x ? "true" : "false"; }
-};
-
-/**
- * @brief Convert a SettingValue into a string for display
- * @param value Input SettingValue to convert
- * @return std::string containing the converted value
- */
-static inline std::string valueToStr(const SettingValue &value)
-{
- return std::visit(settingValueFunctor(), value);
-}
-
-/**
- * @brief Check if a string represents a valid numeric value
- * @param str String to check
- * @return true if string is numeric, false otherwise
- */
-static inline bool is_numeric(const std::string& str) {
- return !str.empty() &&
- str.find_first_not_of("0123456789.-") == std::string::npos &&
- (std::count(str.begin(), str.end(), '.') <= 1) &&
- (std::count(str.begin(), str.end(), '-') <= 1) &&
- (str[0] == '-' || std::isdigit(str[0]));
-}
-
-/**
- * @brief Convert a string to appropriate SettingValue type
- * @param value Input string to convert
- * @return SettingValue containing the converted value
- *
- * Conversion rules:
- * - Quoted strings -> string without quotes
- * - Numeric values -> int or double
- * - "true"/"on" -> boolean true
- * - "false"/"off" -> boolean false
- * - Other -> string
- */
-static inline SettingValue makeValue(const std::string &value)
-{
- if(value.starts_with('"') || value.starts_with('\''))
- {
- return value.substr(1, value.length() - 2);
- }
-
- if(is_numeric(value))
- {
- // double
- if(value.find('.') != value.npos)
- {
- return std::stod(value);
- }
- else
- {
- return std::stoi(value);
- }
- }
-
- // To Lower case
- std::string lvalue = value;
- std::transform(lvalue.begin(), lvalue.end(), lvalue.begin(),
- [](unsigned char c){ return std::tolower(c); });
-
-
- // bool true
- if(lvalue == "true" || lvalue == "on")
- {
- return true;
- }
-
- // bool false
- if(lvalue == "false" || lvalue == "off")
- {
- return false;
- }
-
- // else, string without quote
- return value;
-}
-
-};
-
-#endif // KAZOESETTINGS_H