* Copyright 2013-2016, Rene Gollent, rene@gollent.com.
* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include "Setting.h"
#include <new>
Setting::~Setting()
{
}
setting_type
BoolSetting::Type() const
{
return SETTING_TYPE_BOOL;
}
BVariant
BoolSetting::DefaultValue() const
{
return DefaultBoolValue();
}
setting_type
FloatSetting::Type() const
{
return SETTING_TYPE_FLOAT;
}
BVariant
FloatSetting::DefaultValue() const
{
return DefaultFloatValue();
}
SettingsOption::~SettingsOption()
{
}
setting_type
OptionsSetting::Type() const
{
return SETTING_TYPE_OPTIONS;
}
BVariant
OptionsSetting::DefaultValue() const
{
SettingsOption* option = DefaultOption();
return option != NULL
? BVariant(option->ID(), B_VARIANT_DONT_COPY_DATA) : BVariant();
}
setting_type
BoundedSetting::Type() const
{
return SETTING_TYPE_BOUNDED;
}
setting_type
RangeSetting::Type() const
{
return SETTING_TYPE_RANGE;
}
setting_type
RectSetting::Type() const
{
return SETTING_TYPE_RECT;
}
BVariant
RectSetting::DefaultValue() const
{
return DefaultRectValue();
}
setting_type
StringSetting::Type() const
{
return SETTING_TYPE_STRING;
}
BVariant
StringSetting::DefaultValue() const
{
return DefaultStringValue().String();
}
AbstractSetting::AbstractSetting(const BString& id, const BString& name)
:
fID(id),
fName(name)
{
}
const char*
AbstractSetting::ID() const
{
return fID;
}
const char*
AbstractSetting::Name() const
{
return fName;
}
BoolSettingImpl::BoolSettingImpl(const BString& id, const BString& name,
bool defaultValue)
:
AbstractSetting(id, name),
fDefaultValue(defaultValue)
{
}
bool
BoolSettingImpl::DefaultBoolValue() const
{
return fDefaultValue;
}
FloatSettingImpl::FloatSettingImpl(const BString& id, const BString& name,
float defaultValue)
:
AbstractSetting(id, name),
fDefaultValue(defaultValue)
{
}
float
FloatSettingImpl::DefaultFloatValue() const
{
return fDefaultValue;
}
class OptionsSettingImpl::Option : public SettingsOption {
public:
Option(const BString& id, const BString& name)
{
}
virtual const char* ID() const
{
return fID;
}
virtual const char* Name() const
{
return fName;
}
private:
BString fID;
BString fName;
};
OptionsSettingImpl::OptionsSettingImpl(const BString& id, const BString& name)
:
AbstractSetting(id, name),
fDefaultOption(NULL)
{
}
OptionsSettingImpl::~OptionsSettingImpl()
{
SetDefaultOption(NULL);
for (int32 i = 0; SettingsOption* option = fOptions.ItemAt(i); i++)
option->ReleaseReference();
}
SettingsOption*
OptionsSettingImpl::DefaultOption() const
{
return fDefaultOption != NULL ? fDefaultOption : fOptions.ItemAt(0);
}
int32
OptionsSettingImpl::CountOptions() const
{
return fOptions.CountItems();
}
SettingsOption*
OptionsSettingImpl::OptionAt(int32 index) const
{
return fOptions.ItemAt(index);
}
SettingsOption*
OptionsSettingImpl::OptionByID(const char* id) const
{
for (int32 i = 0; SettingsOption* option = fOptions.ItemAt(i); i++) {
if (strcmp(option->ID(), id) == 0)
return option;
}
return NULL;
}
bool
OptionsSettingImpl::AddOption(SettingsOption* option)
{
if (!fOptions.AddItem(option))
return false;
option->AcquireReference();
return true;
}
bool
OptionsSettingImpl::AddOption(const BString& id, const BString& name)
{
Option* option = new(std::nothrow) Option(id, name);
if (option == NULL)
return false;
BReference<Option> optionReference(option, true);
return AddOption(option);
}
void
OptionsSettingImpl::SetDefaultOption(SettingsOption* option)
{
if (option == fDefaultOption)
return;
if (fDefaultOption != NULL)
fDefaultOption->ReleaseReference();
fDefaultOption = option;
if (fDefaultOption != NULL)
fDefaultOption->AcquireReference();
}
BoundedSettingImpl::BoundedSettingImpl(const BString& id, const BString& name,
const BVariant& lowerBound, const BVariant& upperBound,
const BVariant& defaultValue)
:
AbstractSetting(id, name),
fLowerBound(lowerBound),
fUpperBound(upperBound),
fDefaultValue(defaultValue)
{
}
BVariant
BoundedSettingImpl::DefaultValue() const
{
return fDefaultValue;
}
BVariant
BoundedSettingImpl::LowerBound() const
{
return fLowerBound;
}
BVariant
BoundedSettingImpl::UpperBound() const
{
return fUpperBound;
}
RangeSettingImpl::RangeSettingImpl(const BString& id, const BString& name,
const BVariant& lowerBound, const BVariant& upperBound,
const BVariant& lowerValue, const BVariant& upperValue)
:
AbstractSetting(id, name),
fLowerBound(lowerBound),
fUpperBound(upperBound),
fLowerValue(lowerValue),
fUpperValue(upperValue)
{
}
BVariant
RangeSettingImpl::DefaultValue() const
{
return BVariant();
}
BVariant
RangeSettingImpl::LowerBound() const
{
return fLowerBound;
}
BVariant
RangeSettingImpl::UpperBound() const
{
return fUpperBound;
}
BVariant
RangeSettingImpl::LowerValue() const
{
return fLowerValue;
}
BVariant
RangeSettingImpl::UpperValue() const
{
return fUpperValue;
}
RectSettingImpl::RectSettingImpl(const BString& id, const BString& name,
const BRect& defaultValue)
:
AbstractSetting(id, name),
fDefaultValue(defaultValue)
{
}
BRect
RectSettingImpl::DefaultRectValue() const
{
return fDefaultValue;
}
StringSettingImpl::StringSettingImpl(const BString& id, const BString& name,
const BString& defaultValue)
:
AbstractSetting(id, name),
fDefaultValue(defaultValue)
{
}
const BString&
StringSettingImpl::DefaultStringValue() const
{
return fDefaultValue;
}