Add Variant enum parsing by name and fix enum printing to string
This commit is contained in:
@@ -2740,12 +2740,12 @@ String Variant::ToString() const
|
|||||||
const auto items = typeHandle.GetType().Enum.Items;
|
const auto items = typeHandle.GetType().Enum.Items;
|
||||||
for (int32 i = 0; items[i].Name; i++)
|
for (int32 i = 0; items[i].Name; i++)
|
||||||
{
|
{
|
||||||
if (items[i].Value == AsUint)
|
if (items[i].Value == AsUint64)
|
||||||
return String(items[i].Name);
|
return String(items[i].Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return StringUtils::ToString(AsUint);
|
return StringUtils::ToString(AsUint64);
|
||||||
case VariantType::Int64:
|
case VariantType::Int64:
|
||||||
return StringUtils::ToString(AsInt64);
|
return StringUtils::ToString(AsInt64);
|
||||||
case VariantType::Uint64:
|
case VariantType::Uint64:
|
||||||
@@ -3098,7 +3098,27 @@ Variant Variant::Parse(const StringView& text, const VariantType& type)
|
|||||||
break;
|
break;
|
||||||
case VariantType::Uint64:
|
case VariantType::Uint64:
|
||||||
case VariantType::Enum:
|
case VariantType::Enum:
|
||||||
StringUtils::Parse(text.Get(), &result.AsUint64);
|
if (!StringUtils::Parse(text.Get(), &result.AsUint64))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else if (type.TypeName)
|
||||||
|
{
|
||||||
|
const ScriptingTypeHandle typeHandle = Scripting::FindScriptingType(StringAnsiView(type.TypeName));
|
||||||
|
if (typeHandle && typeHandle.GetType().Type == ScriptingTypes::Enum)
|
||||||
|
{
|
||||||
|
const auto items = typeHandle.GetType().Enum.Items;
|
||||||
|
StringAsANSI<32> textAnsi(text.Get(), text.Length());
|
||||||
|
StringAnsiView textAnsiView(textAnsi.Get());
|
||||||
|
for (int32 i = 0; items[i].Name; i++)
|
||||||
|
{
|
||||||
|
if (textAnsiView == items[i].Name)
|
||||||
|
{
|
||||||
|
result.AsUint64 = items[i].Value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case VariantType::Float:
|
case VariantType::Float:
|
||||||
StringUtils::Parse(text.Get(), &result.AsFloat);
|
StringUtils::Parse(text.Get(), &result.AsFloat);
|
||||||
|
|||||||
Reference in New Issue
Block a user