xref: /haiku/src/kits/debugger/settings/generic/Setting.cpp (revision 25ec63dbf549021ab04886bc960d771fcc2ef488)
1fce4895dSRene Gollent /*
2*25ec63dbSRene Gollent  * Copyright 2013-2016, Rene Gollent, rene@gollent.com.
3fce4895dSRene Gollent  * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
4fce4895dSRene Gollent  * Distributed under the terms of the MIT License.
5fce4895dSRene Gollent  */
6fce4895dSRene Gollent 
7fce4895dSRene Gollent 
8fce4895dSRene Gollent #include "Setting.h"
9fce4895dSRene Gollent 
10fce4895dSRene Gollent #include <new>
11fce4895dSRene Gollent 
12fce4895dSRene Gollent 
13fce4895dSRene Gollent // #pragma mark - Setting
14fce4895dSRene Gollent 
15fce4895dSRene Gollent 
~Setting()16fce4895dSRene Gollent Setting::~Setting()
17fce4895dSRene Gollent {
18fce4895dSRene Gollent }
19fce4895dSRene Gollent 
20fce4895dSRene Gollent 
21fce4895dSRene Gollent // #pragma mark - BoolSetting
22fce4895dSRene Gollent 
23fce4895dSRene Gollent 
24fce4895dSRene Gollent setting_type
Type() const25fce4895dSRene Gollent BoolSetting::Type() const
26fce4895dSRene Gollent {
27fce4895dSRene Gollent 	return SETTING_TYPE_BOOL;
28fce4895dSRene Gollent }
29fce4895dSRene Gollent 
30fce4895dSRene Gollent 
31fce4895dSRene Gollent BVariant
DefaultValue() const32fce4895dSRene Gollent BoolSetting::DefaultValue() const
33fce4895dSRene Gollent {
34fce4895dSRene Gollent 	return DefaultBoolValue();
35fce4895dSRene Gollent }
36fce4895dSRene Gollent 
37fce4895dSRene Gollent 
38fce4895dSRene Gollent // #pragma mark - FloatSetting
39fce4895dSRene Gollent 
40fce4895dSRene Gollent 
41fce4895dSRene Gollent setting_type
Type() const42fce4895dSRene Gollent FloatSetting::Type() const
43fce4895dSRene Gollent {
44fce4895dSRene Gollent 	return SETTING_TYPE_FLOAT;
45fce4895dSRene Gollent }
46fce4895dSRene Gollent 
47fce4895dSRene Gollent 
48fce4895dSRene Gollent BVariant
DefaultValue() const49fce4895dSRene Gollent FloatSetting::DefaultValue() const
50fce4895dSRene Gollent {
51fce4895dSRene Gollent 	return DefaultFloatValue();
52fce4895dSRene Gollent }
53fce4895dSRene Gollent 
54fce4895dSRene Gollent 
55fce4895dSRene Gollent // #pragma mark - SettingsOption
56fce4895dSRene Gollent 
57fce4895dSRene Gollent 
~SettingsOption()58fce4895dSRene Gollent SettingsOption::~SettingsOption()
59fce4895dSRene Gollent {
60fce4895dSRene Gollent }
61fce4895dSRene Gollent 
62fce4895dSRene Gollent 
63fce4895dSRene Gollent // #pragma mark - OptionsSetting
64fce4895dSRene Gollent 
65fce4895dSRene Gollent 
66fce4895dSRene Gollent setting_type
Type() const67fce4895dSRene Gollent OptionsSetting::Type() const
68fce4895dSRene Gollent {
69fce4895dSRene Gollent 	return SETTING_TYPE_OPTIONS;
70fce4895dSRene Gollent }
71fce4895dSRene Gollent 
72fce4895dSRene Gollent 
73fce4895dSRene Gollent BVariant
DefaultValue() const74fce4895dSRene Gollent OptionsSetting::DefaultValue() const
75fce4895dSRene Gollent {
76fce4895dSRene Gollent 	SettingsOption* option = DefaultOption();
77fce4895dSRene Gollent 	return option != NULL
78fce4895dSRene Gollent 		? BVariant(option->ID(), B_VARIANT_DONT_COPY_DATA) : BVariant();
79fce4895dSRene Gollent }
80fce4895dSRene Gollent 
81fce4895dSRene Gollent 
82fce4895dSRene Gollent // #pragma mark - BoundedSetting
83fce4895dSRene Gollent 
84fce4895dSRene Gollent 
85fce4895dSRene Gollent setting_type
Type() const86fce4895dSRene Gollent BoundedSetting::Type() const
87fce4895dSRene Gollent {
88fce4895dSRene Gollent 	return SETTING_TYPE_BOUNDED;
89fce4895dSRene Gollent }
90fce4895dSRene Gollent 
91fce4895dSRene Gollent 
92fce4895dSRene Gollent // #pragma mark - RangeSetting
93fce4895dSRene Gollent 
94fce4895dSRene Gollent 
95fce4895dSRene Gollent setting_type
Type() const96fce4895dSRene Gollent RangeSetting::Type() const
97fce4895dSRene Gollent {
98fce4895dSRene Gollent 	return SETTING_TYPE_RANGE;
99fce4895dSRene Gollent }
100fce4895dSRene Gollent 
101fce4895dSRene Gollent 
102fce4895dSRene Gollent // #pragma mark - RectSetting
103fce4895dSRene Gollent 
104fce4895dSRene Gollent setting_type
Type() const105fce4895dSRene Gollent RectSetting::Type() const
106fce4895dSRene Gollent {
107fce4895dSRene Gollent 	return SETTING_TYPE_RECT;
108fce4895dSRene Gollent }
109fce4895dSRene Gollent 
110fce4895dSRene Gollent 
111fce4895dSRene Gollent BVariant
DefaultValue() const112fce4895dSRene Gollent RectSetting::DefaultValue() const
113fce4895dSRene Gollent {
114fce4895dSRene Gollent 	return DefaultRectValue();
115fce4895dSRene Gollent }
116fce4895dSRene Gollent 
117fce4895dSRene Gollent 
118*25ec63dbSRene Gollent // #pragma mark - StringSetting
119*25ec63dbSRene Gollent 
120*25ec63dbSRene Gollent 
121*25ec63dbSRene Gollent setting_type
Type() const122*25ec63dbSRene Gollent StringSetting::Type() const
123*25ec63dbSRene Gollent {
124*25ec63dbSRene Gollent 	return SETTING_TYPE_STRING;
125*25ec63dbSRene Gollent }
126*25ec63dbSRene Gollent 
127*25ec63dbSRene Gollent 
128*25ec63dbSRene Gollent BVariant
DefaultValue() const129*25ec63dbSRene Gollent StringSetting::DefaultValue() const
130*25ec63dbSRene Gollent {
131*25ec63dbSRene Gollent 	return DefaultStringValue().String();
132*25ec63dbSRene Gollent }
133*25ec63dbSRene Gollent 
134*25ec63dbSRene Gollent 
135fce4895dSRene Gollent // #pragma mark - AbstractSetting
136fce4895dSRene Gollent 
137fce4895dSRene Gollent 
AbstractSetting(const BString & id,const BString & name)138fce4895dSRene Gollent AbstractSetting::AbstractSetting(const BString& id, const BString& name)
139fce4895dSRene Gollent 	:
140fce4895dSRene Gollent 	fID(id),
141fce4895dSRene Gollent 	fName(name)
142fce4895dSRene Gollent {
143fce4895dSRene Gollent }
144fce4895dSRene Gollent 
145fce4895dSRene Gollent 
146fce4895dSRene Gollent const char*
ID() const147fce4895dSRene Gollent AbstractSetting::ID() const
148fce4895dSRene Gollent {
149fce4895dSRene Gollent 	return fID;
150fce4895dSRene Gollent }
151fce4895dSRene Gollent 
152fce4895dSRene Gollent 
153fce4895dSRene Gollent const char*
Name() const154fce4895dSRene Gollent AbstractSetting::Name() const
155fce4895dSRene Gollent {
156fce4895dSRene Gollent 	return fName;
157fce4895dSRene Gollent }
158fce4895dSRene Gollent 
159fce4895dSRene Gollent 
160fce4895dSRene Gollent // #pragma mark - BoolSettingImpl
161fce4895dSRene Gollent 
162fce4895dSRene Gollent 
BoolSettingImpl(const BString & id,const BString & name,bool defaultValue)163fce4895dSRene Gollent BoolSettingImpl::BoolSettingImpl(const BString& id, const BString& name,
164fce4895dSRene Gollent 	bool defaultValue)
165fce4895dSRene Gollent 	:
166fce4895dSRene Gollent 	AbstractSetting(id, name),
167fce4895dSRene Gollent 	fDefaultValue(defaultValue)
168fce4895dSRene Gollent {
169fce4895dSRene Gollent }
170fce4895dSRene Gollent 
171fce4895dSRene Gollent 
172fce4895dSRene Gollent bool
DefaultBoolValue() const173fce4895dSRene Gollent BoolSettingImpl::DefaultBoolValue() const
174fce4895dSRene Gollent {
175fce4895dSRene Gollent 	return fDefaultValue;
176fce4895dSRene Gollent }
177fce4895dSRene Gollent 
178fce4895dSRene Gollent 
179fce4895dSRene Gollent // #pragma mark - FloatSettingImpl
180fce4895dSRene Gollent 
181fce4895dSRene Gollent 
FloatSettingImpl(const BString & id,const BString & name,float defaultValue)182fce4895dSRene Gollent FloatSettingImpl::FloatSettingImpl(const BString& id, const BString& name,
183fce4895dSRene Gollent 	float defaultValue)
184fce4895dSRene Gollent 	:
185fce4895dSRene Gollent 	AbstractSetting(id, name),
186fce4895dSRene Gollent 	fDefaultValue(defaultValue)
187fce4895dSRene Gollent {
188fce4895dSRene Gollent }
189fce4895dSRene Gollent 
190fce4895dSRene Gollent 
191fce4895dSRene Gollent float
DefaultFloatValue() const192fce4895dSRene Gollent FloatSettingImpl::DefaultFloatValue() const
193fce4895dSRene Gollent {
194fce4895dSRene Gollent 	return fDefaultValue;
195fce4895dSRene Gollent }
196fce4895dSRene Gollent 
197fce4895dSRene Gollent 
198fce4895dSRene Gollent // #pragma mark - OptionsSettingImpl
199fce4895dSRene Gollent 
200fce4895dSRene Gollent 
201fce4895dSRene Gollent class OptionsSettingImpl::Option : public SettingsOption {
202fce4895dSRene Gollent public:
Option(const BString & id,const BString & name)203fce4895dSRene Gollent 	Option(const BString& id, const BString& name)
204fce4895dSRene Gollent 	{
205fce4895dSRene Gollent 	}
206fce4895dSRene Gollent 
ID() const207fce4895dSRene Gollent 	virtual const char* ID() const
208fce4895dSRene Gollent 	{
209fce4895dSRene Gollent 		return fID;
210fce4895dSRene Gollent 	}
211fce4895dSRene Gollent 
Name() const212fce4895dSRene Gollent 	virtual const char* Name() const
213fce4895dSRene Gollent 	{
214fce4895dSRene Gollent 		return fName;
215fce4895dSRene Gollent 	}
216fce4895dSRene Gollent 
217fce4895dSRene Gollent private:
218fce4895dSRene Gollent 	BString	fID;
219fce4895dSRene Gollent 	BString	fName;
220fce4895dSRene Gollent };
221fce4895dSRene Gollent 
222fce4895dSRene Gollent 
OptionsSettingImpl(const BString & id,const BString & name)223fce4895dSRene Gollent OptionsSettingImpl::OptionsSettingImpl(const BString& id, const BString& name)
224fce4895dSRene Gollent 	:
225fce4895dSRene Gollent 	AbstractSetting(id, name),
226fce4895dSRene Gollent 	fDefaultOption(NULL)
227fce4895dSRene Gollent {
228fce4895dSRene Gollent }
229fce4895dSRene Gollent 
230fce4895dSRene Gollent 
~OptionsSettingImpl()231fce4895dSRene Gollent OptionsSettingImpl::~OptionsSettingImpl()
232fce4895dSRene Gollent {
233fce4895dSRene Gollent 	SetDefaultOption(NULL);
234fce4895dSRene Gollent 
235fce4895dSRene Gollent 	for (int32 i = 0; SettingsOption* option = fOptions.ItemAt(i); i++)
236fce4895dSRene Gollent 		option->ReleaseReference();
237fce4895dSRene Gollent }
238fce4895dSRene Gollent 
239fce4895dSRene Gollent 
240fce4895dSRene Gollent SettingsOption*
DefaultOption() const241fce4895dSRene Gollent OptionsSettingImpl::DefaultOption() const
242fce4895dSRene Gollent {
243fce4895dSRene Gollent 	return fDefaultOption != NULL ? fDefaultOption : fOptions.ItemAt(0);
244fce4895dSRene Gollent }
245fce4895dSRene Gollent 
246fce4895dSRene Gollent 
247fce4895dSRene Gollent int32
CountOptions() const248fce4895dSRene Gollent OptionsSettingImpl::CountOptions() const
249fce4895dSRene Gollent {
250fce4895dSRene Gollent 	return fOptions.CountItems();
251fce4895dSRene Gollent }
252fce4895dSRene Gollent 
253fce4895dSRene Gollent 
254fce4895dSRene Gollent SettingsOption*
OptionAt(int32 index) const255fce4895dSRene Gollent OptionsSettingImpl::OptionAt(int32 index) const
256fce4895dSRene Gollent {
257fce4895dSRene Gollent 	return fOptions.ItemAt(index);
258fce4895dSRene Gollent }
259fce4895dSRene Gollent 
260fce4895dSRene Gollent 
261fce4895dSRene Gollent SettingsOption*
OptionByID(const char * id) const262fce4895dSRene Gollent OptionsSettingImpl::OptionByID(const char* id) const
263fce4895dSRene Gollent {
264fce4895dSRene Gollent 	for (int32 i = 0; SettingsOption* option = fOptions.ItemAt(i); i++) {
265fce4895dSRene Gollent 		if (strcmp(option->ID(), id) == 0)
266fce4895dSRene Gollent 			return option;
267fce4895dSRene Gollent 	}
268fce4895dSRene Gollent 
269fce4895dSRene Gollent 	return NULL;
270fce4895dSRene Gollent }
271fce4895dSRene Gollent 
272fce4895dSRene Gollent 
273fce4895dSRene Gollent bool
AddOption(SettingsOption * option)274fce4895dSRene Gollent OptionsSettingImpl::AddOption(SettingsOption* option)
275fce4895dSRene Gollent {
276fce4895dSRene Gollent 	if (!fOptions.AddItem(option))
277fce4895dSRene Gollent 		return false;
278fce4895dSRene Gollent 
279fce4895dSRene Gollent 	option->AcquireReference();
280fce4895dSRene Gollent 	return true;
281fce4895dSRene Gollent }
282fce4895dSRene Gollent 
283fce4895dSRene Gollent 
284fce4895dSRene Gollent bool
AddOption(const BString & id,const BString & name)285fce4895dSRene Gollent OptionsSettingImpl::AddOption(const BString& id, const BString& name)
286fce4895dSRene Gollent {
287fce4895dSRene Gollent 	Option* option = new(std::nothrow) Option(id, name);
288fce4895dSRene Gollent 	if (option == NULL)
289fce4895dSRene Gollent 		return false;
290fce4895dSRene Gollent 	BReference<Option> optionReference(option, true);
291fce4895dSRene Gollent 
292fce4895dSRene Gollent 	return AddOption(option);
293fce4895dSRene Gollent }
294fce4895dSRene Gollent 
295fce4895dSRene Gollent 
296fce4895dSRene Gollent void
SetDefaultOption(SettingsOption * option)297fce4895dSRene Gollent OptionsSettingImpl::SetDefaultOption(SettingsOption* option)
298fce4895dSRene Gollent {
299fce4895dSRene Gollent 	if (option == fDefaultOption)
300fce4895dSRene Gollent 		return;
301fce4895dSRene Gollent 
302fce4895dSRene Gollent 	if (fDefaultOption != NULL)
303fce4895dSRene Gollent 		fDefaultOption->ReleaseReference();
304fce4895dSRene Gollent 
305fce4895dSRene Gollent 	fDefaultOption = option;
306fce4895dSRene Gollent 
307fce4895dSRene Gollent 	if (fDefaultOption != NULL)
308fce4895dSRene Gollent 		fDefaultOption->AcquireReference();
309fce4895dSRene Gollent }
310fce4895dSRene Gollent 
311fce4895dSRene Gollent 
312fce4895dSRene Gollent // #pragma mark - RangeSettingImpl
313fce4895dSRene Gollent 
314fce4895dSRene Gollent 
BoundedSettingImpl(const BString & id,const BString & name,const BVariant & lowerBound,const BVariant & upperBound,const BVariant & defaultValue)315fce4895dSRene Gollent BoundedSettingImpl::BoundedSettingImpl(const BString& id, const BString& name,
316fce4895dSRene Gollent 	const BVariant& lowerBound, const BVariant& upperBound,
317fce4895dSRene Gollent 	const BVariant& defaultValue)
318fce4895dSRene Gollent 	:
319fce4895dSRene Gollent 	AbstractSetting(id, name),
320fce4895dSRene Gollent 	fLowerBound(lowerBound),
321fce4895dSRene Gollent 	fUpperBound(upperBound),
322fce4895dSRene Gollent 	fDefaultValue(defaultValue)
323fce4895dSRene Gollent {
324fce4895dSRene Gollent }
325fce4895dSRene Gollent 
326fce4895dSRene Gollent 
327fce4895dSRene Gollent BVariant
DefaultValue() const328fce4895dSRene Gollent BoundedSettingImpl::DefaultValue() const
329fce4895dSRene Gollent {
330fce4895dSRene Gollent 	return fDefaultValue;
331fce4895dSRene Gollent }
332fce4895dSRene Gollent 
333fce4895dSRene Gollent 
334fce4895dSRene Gollent BVariant
LowerBound() const335fce4895dSRene Gollent BoundedSettingImpl::LowerBound() const
336fce4895dSRene Gollent {
337fce4895dSRene Gollent 	return fLowerBound;
338fce4895dSRene Gollent }
339fce4895dSRene Gollent 
340fce4895dSRene Gollent 
341fce4895dSRene Gollent BVariant
UpperBound() const342fce4895dSRene Gollent BoundedSettingImpl::UpperBound() const
343fce4895dSRene Gollent {
344fce4895dSRene Gollent 	return fUpperBound;
345fce4895dSRene Gollent }
346fce4895dSRene Gollent 
347fce4895dSRene Gollent 
348fce4895dSRene Gollent // #pragma mark - RangeSettingImpl
349fce4895dSRene Gollent 
350fce4895dSRene Gollent 
RangeSettingImpl(const BString & id,const BString & name,const BVariant & lowerBound,const BVariant & upperBound,const BVariant & lowerValue,const BVariant & upperValue)351fce4895dSRene Gollent RangeSettingImpl::RangeSettingImpl(const BString& id, const BString& name,
352fce4895dSRene Gollent 	const BVariant& lowerBound, const BVariant& upperBound,
353fce4895dSRene Gollent 	const BVariant& lowerValue, const BVariant& upperValue)
354fce4895dSRene Gollent 	:
355fce4895dSRene Gollent 	AbstractSetting(id, name),
356fce4895dSRene Gollent 	fLowerBound(lowerBound),
357fce4895dSRene Gollent 	fUpperBound(upperBound),
358fce4895dSRene Gollent 	fLowerValue(lowerValue),
359fce4895dSRene Gollent 	fUpperValue(upperValue)
360fce4895dSRene Gollent {
361fce4895dSRene Gollent }
362fce4895dSRene Gollent 
363fce4895dSRene Gollent 
364fce4895dSRene Gollent BVariant
DefaultValue() const365fce4895dSRene Gollent RangeSettingImpl::DefaultValue() const
366fce4895dSRene Gollent {
367fce4895dSRene Gollent 	// this one doesn't really make sense for RangeSetting since it
368fce4895dSRene Gollent 	// describes a pair of values, which BVariant can't readily
369fce4895dSRene Gollent 	// represent.
370fce4895dSRene Gollent 	return BVariant();
371fce4895dSRene Gollent }
372fce4895dSRene Gollent 
373fce4895dSRene Gollent 
374fce4895dSRene Gollent BVariant
LowerBound() const375fce4895dSRene Gollent RangeSettingImpl::LowerBound() const
376fce4895dSRene Gollent {
377fce4895dSRene Gollent 	return fLowerBound;
378fce4895dSRene Gollent }
379fce4895dSRene Gollent 
380fce4895dSRene Gollent 
381fce4895dSRene Gollent BVariant
UpperBound() const382fce4895dSRene Gollent RangeSettingImpl::UpperBound() const
383fce4895dSRene Gollent {
384fce4895dSRene Gollent 	return fUpperBound;
385fce4895dSRene Gollent }
386fce4895dSRene Gollent 
387fce4895dSRene Gollent 
388fce4895dSRene Gollent BVariant
LowerValue() const389fce4895dSRene Gollent RangeSettingImpl::LowerValue() const
390fce4895dSRene Gollent {
391fce4895dSRene Gollent 	return fLowerValue;
392fce4895dSRene Gollent }
393fce4895dSRene Gollent 
394fce4895dSRene Gollent 
395fce4895dSRene Gollent BVariant
UpperValue() const396fce4895dSRene Gollent RangeSettingImpl::UpperValue() const
397fce4895dSRene Gollent {
398fce4895dSRene Gollent 	return fUpperValue;
399fce4895dSRene Gollent }
400fce4895dSRene Gollent 
401fce4895dSRene Gollent 
402fce4895dSRene Gollent // #pragma mark - RectSettingImpl
403fce4895dSRene Gollent 
404fce4895dSRene Gollent 
RectSettingImpl(const BString & id,const BString & name,const BRect & defaultValue)405fce4895dSRene Gollent RectSettingImpl::RectSettingImpl(const BString& id, const BString& name,
406fce4895dSRene Gollent 	const BRect& defaultValue)
407fce4895dSRene Gollent 	:
408fce4895dSRene Gollent 	AbstractSetting(id, name),
409fce4895dSRene Gollent 	fDefaultValue(defaultValue)
410fce4895dSRene Gollent {
411fce4895dSRene Gollent }
412fce4895dSRene Gollent 
413fce4895dSRene Gollent 
414fce4895dSRene Gollent BRect
DefaultRectValue() const415fce4895dSRene Gollent RectSettingImpl::DefaultRectValue() const
416fce4895dSRene Gollent {
417fce4895dSRene Gollent 	return fDefaultValue;
418fce4895dSRene Gollent }
419*25ec63dbSRene Gollent 
420*25ec63dbSRene Gollent 
421*25ec63dbSRene Gollent // #pragma mark - StringSettingImpl
422*25ec63dbSRene Gollent 
423*25ec63dbSRene Gollent 
StringSettingImpl(const BString & id,const BString & name,const BString & defaultValue)424*25ec63dbSRene Gollent StringSettingImpl::StringSettingImpl(const BString& id, const BString& name,
425*25ec63dbSRene Gollent 	const BString& defaultValue)
426*25ec63dbSRene Gollent 	:
427*25ec63dbSRene Gollent 	AbstractSetting(id, name),
428*25ec63dbSRene Gollent 	fDefaultValue(defaultValue)
429*25ec63dbSRene Gollent {
430*25ec63dbSRene Gollent }
431*25ec63dbSRene Gollent 
432*25ec63dbSRene Gollent 
433*25ec63dbSRene Gollent const BString&
DefaultStringValue() const434*25ec63dbSRene Gollent StringSettingImpl::DefaultStringValue() const
435*25ec63dbSRene Gollent {
436*25ec63dbSRene Gollent 	return fDefaultValue;
437*25ec63dbSRene Gollent }
438