1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "Setting.h" 8 9#include <new> 10 11 12// #pragma mark - Setting 13 14 15Setting::~Setting() 16{ 17} 18 19 20// #pragma mark - BoolSetting 21 22 23setting_type 24BoolSetting::Type() const 25{ 26 return SETTING_TYPE_BOOL; 27} 28 29 30BVariant 31BoolSetting::DefaultValue() const 32{ 33 return DefaultBoolValue(); 34} 35 36 37// #pragma mark - FloatSetting 38 39 40setting_type 41FloatSetting::Type() const 42{ 43 return SETTING_TYPE_FLOAT; 44} 45 46 47BVariant 48FloatSetting::DefaultValue() const 49{ 50 return DefaultFloatValue(); 51} 52 53 54// #pragma mark - SettingsOption 55 56 57SettingsOption::~SettingsOption() 58{ 59} 60 61 62// #pragma mark - OptionsSetting 63 64 65setting_type 66OptionsSetting::Type() const 67{ 68 return SETTING_TYPE_OPTIONS; 69} 70 71 72BVariant 73OptionsSetting::DefaultValue() const 74{ 75 SettingsOption* option = DefaultOption(); 76 return option != NULL 77 ? BVariant(option->ID(), B_VARIANT_DONT_COPY_DATA) : BVariant(); 78} 79 80 81// #pragma mark - RangeSetting 82 83 84setting_type 85RangeSetting::Type() const 86{ 87 return SETTING_TYPE_RANGE; 88} 89 90 91// #pragma mark - RectSetting 92 93setting_type 94RectSetting::Type() const 95{ 96 return SETTING_TYPE_RECT; 97} 98 99 100BVariant 101RectSetting::DefaultValue() const 102{ 103 return DefaultRectValue(); 104} 105 106 107// #pragma mark - AbstractSetting 108 109 110AbstractSetting::AbstractSetting(const BString& id, const BString& name) 111 : 112 fID(id), 113 fName(name) 114{ 115} 116 117 118const char* 119AbstractSetting::ID() const 120{ 121 return fID; 122} 123 124 125const char* 126AbstractSetting::Name() const 127{ 128 return fName; 129} 130 131 132// #pragma mark - BoolSettingImpl 133 134 135BoolSettingImpl::BoolSettingImpl(const BString& id, const BString& name, 136 bool defaultValue) 137 : 138 AbstractSetting(id, name), 139 fDefaultValue(defaultValue) 140{ 141} 142 143 144bool 145BoolSettingImpl::DefaultBoolValue() const 146{ 147 return fDefaultValue; 148} 149 150 151// #pragma mark - FloatSettingImpl 152 153 154FloatSettingImpl::FloatSettingImpl(const BString& id, const BString& name, 155 float defaultValue) 156 : 157 AbstractSetting(id, name), 158 fDefaultValue(defaultValue) 159{ 160} 161 162 163float 164FloatSettingImpl::DefaultFloatValue() const 165{ 166 return fDefaultValue; 167} 168 169 170// #pragma mark - OptionsSettingImpl 171 172 173class OptionsSettingImpl::Option : public SettingsOption { 174public: 175 Option(const BString& id, const BString& name) 176 { 177 } 178 179 virtual const char* ID() const 180 { 181 return fID; 182 } 183 184 virtual const char* Name() const 185 { 186 return fName; 187 } 188 189private: 190 BString fID; 191 BString fName; 192}; 193 194 195OptionsSettingImpl::OptionsSettingImpl(const BString& id, const BString& name) 196 : 197 AbstractSetting(id, name), 198 fDefaultOption(NULL) 199{ 200} 201 202 203OptionsSettingImpl::~OptionsSettingImpl() 204{ 205 SetDefaultOption(NULL); 206 207 for (int32 i = 0; SettingsOption* option = fOptions.ItemAt(i); i++) 208 option->ReleaseReference(); 209} 210 211 212SettingsOption* 213OptionsSettingImpl::DefaultOption() const 214{ 215 return fDefaultOption != NULL ? fDefaultOption : fOptions.ItemAt(0); 216} 217 218 219int32 220OptionsSettingImpl::CountOptions() const 221{ 222 return fOptions.CountItems(); 223} 224 225 226SettingsOption* 227OptionsSettingImpl::OptionAt(int32 index) const 228{ 229 return fOptions.ItemAt(index); 230} 231 232 233SettingsOption* 234OptionsSettingImpl::OptionByID(const char* id) const 235{ 236 for (int32 i = 0; SettingsOption* option = fOptions.ItemAt(i); i++) { 237 if (strcmp(option->ID(), id) == 0) 238 return option; 239 } 240 241 return NULL; 242} 243 244 245bool 246OptionsSettingImpl::AddOption(SettingsOption* option) 247{ 248 if (!fOptions.AddItem(option)) 249 return false; 250 251 option->AcquireReference(); 252 return true; 253} 254 255 256bool 257OptionsSettingImpl::AddOption(const BString& id, const BString& name) 258{ 259 Option* option = new(std::nothrow) Option(id, name); 260 if (option == NULL) 261 return false; 262 BReference<Option> optionReference(option, true); 263 264 return AddOption(option); 265} 266 267 268void 269OptionsSettingImpl::SetDefaultOption(SettingsOption* option) 270{ 271 if (option == fDefaultOption) 272 return; 273 274 if (fDefaultOption != NULL) 275 fDefaultOption->ReleaseReference(); 276 277 fDefaultOption = option; 278 279 if (fDefaultOption != NULL) 280 fDefaultOption->AcquireReference(); 281} 282 283 284// #pragma mark - RangeSettingImpl 285 286 287RangeSettingImpl::RangeSettingImpl(const BString& id, const BString& name, 288 const BVariant& lowerBound, const BVariant& upperBound, 289 const BVariant& defaultValue) 290 : 291 AbstractSetting(id, name), 292 fLowerBound(lowerBound), 293 fUpperBound(upperBound), 294 fDefaultValue(defaultValue) 295{ 296} 297 298 299BVariant 300RangeSettingImpl::DefaultValue() const 301{ 302 return fDefaultValue; 303} 304 305 306BVariant 307RangeSettingImpl::LowerBound() const 308{ 309 return fLowerBound; 310} 311 312 313BVariant 314RangeSettingImpl::UpperBound() const 315{ 316 return fUpperBound; 317} 318 319 320// #pragma mark - RectSettingImpl 321 322 323RectSettingImpl::RectSettingImpl(const BString& id, const BString& name, 324 const BRect& defaultValue) 325 : 326 AbstractSetting(id, name), 327 fDefaultValue(defaultValue) 328{ 329} 330 331 332BRect 333RectSettingImpl::DefaultRectValue() const 334{ 335 return fDefaultValue; 336} 337