You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.9 KiB
58 lines
1.9 KiB
using System;
|
|
using System.Reflection;
|
|
using UnityEditor.Graphing.Util;
|
|
using UnityEditor.ShaderGraph.Drawing;
|
|
using UnityEditor.UIElements;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace UnityEditor.ShaderGraph.Drawing.Inspector.PropertyDrawers
|
|
{
|
|
[SGPropertyDrawer(typeof(Enum))]
|
|
class EnumPropertyDrawer : IPropertyDrawer
|
|
{
|
|
internal delegate void ValueChangedCallback(Enum newValue);
|
|
|
|
internal VisualElement CreateGUI(
|
|
ValueChangedCallback valueChangedCallback,
|
|
Enum fieldToDraw,
|
|
string labelName,
|
|
Enum defaultValue,
|
|
out VisualElement propertyVisualElement,
|
|
int indentLevel = 0,
|
|
string tooltip = null)
|
|
{
|
|
var row = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));
|
|
row.tooltip = tooltip;
|
|
propertyVisualElement = new EnumField(defaultValue);
|
|
row.Add((EnumField)propertyVisualElement, (field) =>
|
|
{
|
|
field.value = fieldToDraw;
|
|
});
|
|
|
|
if (valueChangedCallback != null)
|
|
{
|
|
var enumField = (EnumField)propertyVisualElement;
|
|
enumField.RegisterValueChangedCallback(evt => valueChangedCallback(evt.newValue));
|
|
}
|
|
|
|
return row;
|
|
}
|
|
|
|
public Action inspectorUpdateDelegate { get; set; }
|
|
|
|
public VisualElement DrawProperty(
|
|
PropertyInfo propertyInfo,
|
|
object actualObject,
|
|
InspectableAttribute attribute)
|
|
{
|
|
return this.CreateGUI(newEnumValue =>
|
|
propertyInfo.GetSetMethod(true).Invoke(actualObject, new object[] { newEnumValue }),
|
|
(Enum)propertyInfo.GetValue(actualObject),
|
|
attribute.labelName,
|
|
(Enum)attribute.defaultValue,
|
|
out var propertyVisualElement);
|
|
}
|
|
|
|
void IPropertyDrawer.DisposePropertyDrawer() { }
|
|
}
|
|
}
|