blob: a0064bc7930bd8abbbf9395e8afd4d1a21fb1515 [file] [log] [blame]
#include "rive/data_bind/context/context_value_enum.hpp"
#include "rive/generated/core_registry.hpp"
using namespace rive;
DataBindContextValueEnum::DataBindContextValueEnum(ViewModelInstanceValue* value)
{
m_Source = value;
m_Value = m_Source->as<ViewModelInstanceEnum>()->propertyValue();
}
void DataBindContextValueEnum::apply(Core* target, uint32_t propertyKey)
{
auto enumSource = m_Source->as<ViewModelInstanceEnum>();
auto enumProperty = enumSource->viewModelProperty()->as<ViewModelPropertyEnum>();
auto enumValue = enumProperty->value(m_Source->as<ViewModelInstanceEnum>()->propertyValue());
// TODO: @hernan decide which one makes more sense. Probably setUint, but setString was used to
// update text input with enum values.
CoreRegistry::setString(target, propertyKey, enumValue);
CoreRegistry::setUint(target,
propertyKey,
m_Source->as<ViewModelInstanceEnum>()->propertyValue());
}
void DataBindContextValueEnum::applyToSource(Core* target, uint32_t propertyKey)
{
auto value = CoreRegistry::getString(target, propertyKey);
auto enumSource = m_Source->as<ViewModelInstanceEnum>();
auto enumProperty = enumSource->viewModelProperty()->as<ViewModelPropertyEnum>();
auto valueIndex = enumProperty->valueIndex(value);
if (valueIndex != -1 && m_Value != valueIndex)
{
m_Value = valueIndex;
m_Source->as<ViewModelInstanceEnum>()->value(static_cast<uint32_t>(valueIndex));
}
}