Class TypeReferencePropertyDrawer
Namespace: RealityCollective.ServiceFramework.Editor.PropertyDrawers
Custom property drawer for SystemType properties.
public class TypeReferencePropertyDrawer : PropertyDrawer
Inheritance
PropertyDrawer ← TypeReferencePropertyDrawer
Fields
TypeReferenceUpdated
public const string TypeReferenceUpdated = "TypeReferenceUpdated"
Field Value
string
Properties
CreateNewTypeOverride
Gets or sets a Type to be created using the "Create new ..." menu.
public static Type CreateNewTypeOverride { get; set; }
Property Value
Type
Remarks
This property must be set immediately before presenting a class
type reference property field using EditorGUI.PropertyField(Rect,SerializedProperty)
or EditorGUILayout.PropertyField(SerializedProperty,UnityEngine.GUILayoutOption[]) since the value of this
property is reset to null each time the control is drawn.
ExcludedTypeCollectionGetter
Gets or sets a function that returns a collection of types that are
to be excluded from drop-down. A value of null specifies that
no types are to be excluded.
public static Func<ICollection<Type>> ExcludedTypeCollectionGetter { get; set; }
Property Value
Func<ICollection<Type>>
Examples
Exclude a specific type from being selected:
private SerializedProperty someTypeReferenceProperty;
public override void OnInspectorGUI()
{
serializedObject.Update();
ClassTypeReferencePropertyDrawer.ExcludedTypeCollectionGetter = GetExcludedTypeCollection;
EditorGUILayout.PropertyField(someTypeReferenceProperty);
serializedObject.ApplyModifiedProperties();
}
private ICollection<Type> GetExcludedTypeCollection()
{
var set = new HashSet<Type>();
set.Add(typeof(SpecialClassToHideInDropdown));
return set;
}
Remarks
This property must be set immediately before presenting a class
type reference property field using EditorGUI.PropertyField(Rect,SerializedProperty)
or EditorGUILayout.PropertyField(SerializedProperty,UnityEngine.GUILayoutOption[]) since the value of this
property is reset to null each time the control is drawn.
Since filtering makes extensive use of Contains
it is recommended to use a collection that is optimized for fast
look ups such as HashSet%601 for better performance.
FilterConstraintOverride
Gets or sets a function that returns if the constraint has been satisfied.
public static Func<Type, bool> FilterConstraintOverride { get; set; }
Property Value
Func<Type, bool>
Examples
Override the constraint for the property:
private SerializedProperty someTypeReferenceProperty;
public override void OnInspectorGUI()
{
serializedObject.Update();
ClassTypeReferencePropertyDrawer.FilterConstraintOverride = IsConstraintSatisfied;
EditorGUILayout.PropertyField(someTypeReferenceProperty);
serializedObject.ApplyModifiedProperties();
}
private bool IsConstraintSatisfied(Type type)
{
return !type.IsAbstract && type.GetInterfaces().Any(interfaceType => interfaceType == ServiceConstraint);
}
Remarks
This will override any attribute filter already set.
This property must be set immediately before presenting a class
type reference property field using EditorGUI.PropertyField(Rect,SerializedProperty)
or EditorGUILayout.PropertyField(SerializedProperty,UnityEngine.GUILayoutOption[]) since the value of this
property is reset to null each time the control is drawn.
GroupingOverride
This will override any grouping drawn for the drop-down.
This property must be set immediately before presenting a class
type reference property field using EditorGUI.PropertyField(Rect,SerializedProperty)
or EditorGUILayout.PropertyField(SerializedProperty,UnityEngine.GUILayoutOption[]) since the value of this
property is reset to null each time the control is drawn.
public static TypeGrouping? GroupingOverride { get; set; }
Property Value
SelectedType
The currently selected Type in the dropdown menu.
public static Type SelectedType { get; }
Property Value
Type
Methods
DisplayDropDown(Rect, IEnumerable<Type>, Type, TypeGrouping, Type)
Displays the type picker dropdown.
public static void DisplayDropDown(Rect position, IEnumerable<Type> types, Type selectedType, TypeGrouping grouping, Type newType = null)
Parameters
position Rect
types IEnumerable<Type>
selectedType Type
grouping TypeGrouping
newType Type
GetPropertyHeight(SerializedProperty, GUIContent)
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
Parameters
property SerializedProperty
label GUIContent
Returns
float
OnGUI(Rect, SerializedProperty, GUIContent)
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
Parameters
position Rect
property SerializedProperty
label GUIContent