/* * Copyright 2013, Rene Gollent, rene@gollent.com. * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ #ifndef SETTINGS_H #define SETTINGS_H #include #include #include #include #include #include "Setting.h" class SettingsDescription; class Settings : public BReferenceable { public: class Listener; public: Settings(SettingsDescription* description); virtual ~Settings(); status_t Init(); bool Lock() { return fLock.Lock(); } void Unlock() { fLock.Unlock(); } SettingsDescription* Description() const { return fDescription; } const BMessage& Message() const { return fValues; } BVariant Value(Setting* setting) const; BVariant Value(const char* settingID) const; bool SetValue(Setting* setting, const BVariant& value); bool RestoreValues(const BMessage& message); bool BoolValue(BoolSetting* setting) const { return Value(setting).ToBool(); } SettingsOption* OptionValue(OptionsSetting* setting) const; BVariant RangeValue(RangeSetting* setting) const { return Value(setting); } bool AddListener(Listener* listener); void RemoveListener(Listener* listener); private: typedef BObjectList ListenerList; private: mutable BLocker fLock; SettingsDescription* fDescription; BMessage fValues; ListenerList fListeners; }; class Settings::Listener { public: virtual ~Listener(); virtual void SettingValueChanged(Setting* setting) = 0; }; #endif // SETTINGS_H