1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Copyright 2011-2016, Rene Gollent, rene@gollent.com. 4 * Distributed under the terms of the MIT License. 5 */ 6#ifndef SETTING_H 7#define SETTING_H 8 9 10#include <String.h> 11 12#include <ObjectList.h> 13#include <Referenceable.h> 14#include <Variant.h> 15 16 17enum setting_type { 18 SETTING_TYPE_BOOL, 19 SETTING_TYPE_FLOAT, 20 SETTING_TYPE_OPTIONS, 21 SETTING_TYPE_BOUNDED, 22 SETTING_TYPE_RANGE, 23 SETTING_TYPE_RECT, 24 SETTING_TYPE_STRING 25}; 26 27 28class Setting : public BReferenceable { 29public: 30 virtual ~Setting(); 31 32 virtual setting_type Type() const = 0; 33 virtual const char* ID() const = 0; 34 virtual const char* Name() const = 0; 35 36 virtual BVariant DefaultValue() const = 0; 37}; 38 39 40class BoolSetting : public virtual Setting { 41public: 42 virtual setting_type Type() const; 43 44 virtual BVariant DefaultValue() const; 45 46 virtual bool DefaultBoolValue() const = 0; 47}; 48 49 50class FloatSetting : public virtual Setting { 51public: 52 virtual setting_type Type() const; 53 54 virtual BVariant DefaultValue() const; 55 56 virtual float DefaultFloatValue() const = 0; 57}; 58 59 60class SettingsOption : public BReferenceable { 61public: 62 virtual ~SettingsOption(); 63 64 virtual const char* ID() const = 0; 65 virtual const char* Name() const = 0; 66}; 67 68 69class OptionsSetting : public virtual Setting { 70public: 71 virtual setting_type Type() const; 72 73 virtual BVariant DefaultValue() const; 74 75 virtual int32 CountOptions() const = 0; 76 virtual SettingsOption* OptionAt(int32 index) const = 0; 77 virtual SettingsOption* OptionByID(const char* id) const = 0; 78 79 virtual SettingsOption* DefaultOption() const = 0; 80}; 81 82 83class BoundedSetting : public virtual Setting { 84public: 85 virtual setting_type Type() const; 86 87 virtual BVariant LowerBound() const = 0; 88 virtual BVariant UpperBound() const = 0; 89}; 90 91 92class RangeSetting : public virtual BoundedSetting { 93 virtual setting_type Type() const; 94 95 virtual BVariant LowerValue() const = 0; 96 virtual BVariant UpperValue() const = 0; 97}; 98 99 100class RectSetting : public virtual Setting { 101public: 102 virtual setting_type Type() const; 103 104 virtual BVariant DefaultValue() const; 105 106 virtual BRect DefaultRectValue() const = 0; 107}; 108 109 110class StringSetting : public virtual Setting { 111public: 112 virtual setting_type Type() const; 113 114 virtual BVariant DefaultValue() const; 115 116 virtual const BString& DefaultStringValue() const = 0; 117}; 118 119 120class AbstractSetting : public virtual Setting { 121public: 122 AbstractSetting(const BString& id, 123 const BString& name); 124 125 virtual const char* ID() const; 126 virtual const char* Name() const; 127 128private: 129 BString fID; 130 BString fName; 131}; 132 133 134class BoolSettingImpl : public AbstractSetting, public BoolSetting { 135public: 136 BoolSettingImpl(const BString& id, 137 const BString& name, bool defaultValue); 138 139 virtual bool DefaultBoolValue() const; 140 141private: 142 bool fDefaultValue; 143}; 144 145 146class FloatSettingImpl : public AbstractSetting, public FloatSetting { 147public: 148 FloatSettingImpl(const BString& id, 149 const BString& name, float defaultValue); 150 151 virtual float DefaultFloatValue() const; 152 153private: 154 float fDefaultValue; 155}; 156 157 158class OptionsSettingImpl : public AbstractSetting, public OptionsSetting { 159public: 160 OptionsSettingImpl(const BString& id, 161 const BString& name); 162 virtual ~OptionsSettingImpl(); 163 164 virtual SettingsOption* DefaultOption() const; 165 166 virtual int32 CountOptions() const; 167 virtual SettingsOption* OptionAt(int32 index) const; 168 virtual SettingsOption* OptionByID(const char* id) const; 169 170 bool AddOption(SettingsOption* option); 171 bool AddOption(const BString& id, 172 const BString& name); 173 174 void SetDefaultOption(SettingsOption* option); 175 176private: 177 class Option; 178 179 typedef BObjectList<SettingsOption> OptionList; 180 181private: 182 OptionList fOptions; 183 SettingsOption* fDefaultOption; 184}; 185 186 187class BoundedSettingImpl : public AbstractSetting, public BoundedSetting { 188public: 189 BoundedSettingImpl(const BString& id, 190 const BString& name, 191 const BVariant& lowerBound, 192 const BVariant& upperBound, 193 const BVariant& defaultValue); 194 195 virtual BVariant DefaultValue() const; 196 197 virtual BVariant LowerBound() const; 198 virtual BVariant UpperBound() const; 199 200private: 201 BVariant fLowerBound; 202 BVariant fUpperBound; 203 BVariant fDefaultValue; 204}; 205 206 207class RangeSettingImpl : public AbstractSetting, public RangeSetting { 208public: 209 RangeSettingImpl(const BString& id, 210 const BString& name, 211 const BVariant& lowerBound, 212 const BVariant& upperBound, 213 const BVariant& lowerValue, 214 const BVariant& upperValue); 215 216 virtual BVariant DefaultValue() const; 217 218 virtual BVariant LowerBound() const; 219 virtual BVariant UpperBound() const; 220 virtual BVariant LowerValue() const; 221 virtual BVariant UpperValue() const; 222 223private: 224 BVariant fLowerBound; 225 BVariant fUpperBound; 226 BVariant fLowerValue; 227 BVariant fUpperValue; 228}; 229 230 231class RectSettingImpl : public AbstractSetting, public RectSetting { 232public: 233 RectSettingImpl(const BString& id, 234 const BString& name, 235 const BRect& defaultValue); 236 237 virtual BRect DefaultRectValue() const; 238 239private: 240 BRect fDefaultValue; 241}; 242 243 244class StringSettingImpl : public AbstractSetting, public StringSetting { 245public: 246 StringSettingImpl(const BString& id, 247 const BString& name, 248 const BString& defaultValue); 249 250 virtual const BString& DefaultStringValue() const; 251 252private: 253 BString fDefaultValue; 254}; 255 256 257#endif // SETTING_H 258