⛏️ index : haiku.git

/*
 * Copyright 2015, Rene Gollent, rene@gollent.com.
 * Distributed under the terms of the MIT License.
 */

#include "TableCellEnumerationEditor.h"

#include "EnumerationValue.h"
#include "Type.h"


TableCellEnumerationEditor::TableCellEnumerationEditor(::Value* initialValue,
	ValueFormatter* formatter)
	:
	TableCellOptionPopUpEditor(initialValue, formatter)
{
}


TableCellEnumerationEditor::~TableCellEnumerationEditor()
{
}


status_t
TableCellEnumerationEditor::ConfigureOptions()
{
	EnumerationValue* initialValue = dynamic_cast<EnumerationValue*>(
		InitialValue());
	if (initialValue == NULL)
		return B_BAD_VALUE;

	EnumerationType* type = initialValue->GetType();
	for (int32 i = 0; i < type->CountValues(); i++) {
		EnumeratorValue* value = type->ValueAt(i);
		BString output;

		status_t error = AddOption(value->Name(), value->Value().ToInt32());
		if (error != B_OK)
			return error;
	}

	BVariant integerValue;
	if (!initialValue->ToVariant(integerValue))
		return B_NO_MEMORY;

	SelectOptionFor(integerValue.ToInt32());

	return B_OK;
}


status_t
TableCellEnumerationEditor::GetSelectedValue(::Value*& _value) const
{
	EnumerationValue* initialValue = dynamic_cast<EnumerationValue*>(
		InitialValue());
	EnumerationType* type = initialValue->GetType();
	const char* name = NULL;
	int32 selectedValue = 0;
	SelectedOption(&name, &selectedValue);

	EnumerationValue* value = new(std::nothrow) EnumerationValue(type,
		BVariant(selectedValue));
	if (value == NULL)
		return B_NO_MEMORY;

	_value = value;
	return B_OK;
}