mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-03 10:37:05 +02:00
63 lines
2.2 KiB
C#
63 lines
2.2 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Reflection;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Shared.Maths;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Robust.Client.ViewVariables.Editors
|
|
{
|
|
class ViewVariablesPropertyEditorEnum : ViewVariablesPropertyEditor
|
|
{
|
|
protected override Control MakeUI(object value)
|
|
{
|
|
DebugTools.Assert(value.GetType().IsEnum);
|
|
var enumVal = (Enum)value;
|
|
var enumType = value.GetType();
|
|
var enumStorageType = enumType.GetEnumUnderlyingType();
|
|
|
|
var hBox = new HBoxContainer
|
|
{
|
|
CustomMinimumSize = new Vector2(200, 0)
|
|
};
|
|
|
|
var lineEdit = new LineEdit
|
|
{
|
|
Text = enumVal.ToString(),
|
|
Editable = !ReadOnly,
|
|
SizeFlagsHorizontal = Control.SizeFlags.FillExpand
|
|
};
|
|
|
|
if (!ReadOnly)
|
|
{
|
|
lineEdit.OnTextEntered += e =>
|
|
{
|
|
var parseSig = new []{typeof(string), typeof(NumberStyles), typeof(CultureInfo), enumStorageType.MakeByRefType()};
|
|
var parseMethod = enumStorageType.GetMethod("TryParse", parseSig);
|
|
DebugTools.AssertNotNull(parseMethod);
|
|
|
|
var parameters = new object[] {e.Text, NumberStyles.Integer, CultureInfo.InvariantCulture, null};
|
|
var parseWorked = (bool)parseMethod.Invoke(null, parameters);
|
|
|
|
if (parseWorked) // textbox was the underlying type
|
|
{
|
|
DebugTools.AssertNotNull(parameters[3]);
|
|
ValueChanged(parameters[3]);
|
|
}
|
|
else if(EnumHelper.TryParse(enumType, e.Text, true, out var enumValue))
|
|
{
|
|
var underlyingVal = Convert.ChangeType(enumValue, enumStorageType);
|
|
ValueChanged(underlyingVal);
|
|
}
|
|
};
|
|
}
|
|
|
|
hBox.AddChild(lineEdit);
|
|
return hBox;
|
|
}
|
|
|
|
//TODO: https://github.com/dotnet/corefx/issues/692
|
|
}
|
|
}
|