1/* 2 * Copyright 2013, Rene Gollent, rene@gollent.com. 3 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 4 * Distributed under the terms of the MIT License. 5 */ 6#ifndef SETTINGS_H 7#define SETTINGS_H 8 9 10#include <Locker.h> 11#include <Message.h> 12 13#include <ObjectList.h> 14#include <Referenceable.h> 15#include <Variant.h> 16 17#include "Setting.h" 18 19 20class SettingsDescription; 21 22 23class Settings : public BReferenceable { 24public: 25 class Listener; 26 27public: 28 Settings(SettingsDescription* description); 29 virtual ~Settings(); 30 31 status_t Init(); 32 33 bool Lock() { return fLock.Lock(); } 34 void Unlock() { fLock.Unlock(); } 35 36 SettingsDescription* Description() const { return fDescription; } 37 const BMessage& Message() const { return fValues; } 38 39 BVariant Value(Setting* setting) const; 40 BVariant Value(const char* settingID) const; 41 bool SetValue(Setting* setting, 42 const BVariant& value); 43 44 bool RestoreValues(const BMessage& message); 45 46 bool BoolValue(BoolSetting* setting) const 47 { return Value(setting).ToBool(); } 48 SettingsOption* OptionValue(OptionsSetting* setting) const; 49 BVariant RangeValue(RangeSetting* setting) const 50 { return Value(setting); } 51 52 bool AddListener(Listener* listener); 53 void RemoveListener(Listener* listener); 54 55private: 56 typedef BObjectList<Listener> ListenerList; 57 58private: 59 mutable BLocker fLock; 60 SettingsDescription* fDescription; 61 BMessage fValues; 62 ListenerList fListeners; 63}; 64 65 66class Settings::Listener { 67public: 68 virtual ~Listener(); 69 70 virtual void SettingValueChanged(Setting* setting) = 0; 71}; 72 73 74#endif // SETTINGS_H 75