1 using System.Collections;
2 using System.Collections.Generic;
5 using System.Reflection;
11 namespace AVR.UI.Link {
17 public abstract class AVRUI_Link : AVR.Core.AVR_Behaviour
21 public abstract List<System.Type> validTypes {
get; }
36 if(target && field!=
"") updateOutput();
42 public abstract void init();
47 public abstract void setup();
53 public abstract void updateValue();
59 public abstract void updateOutput();
64 [CustomEditor(typeof(AVRUI_Link),
true)]
65 class AVRUI_Link_Editor : Editor
67 private bool show_fields =
false;
69 public override void OnInspectorGUI()
71 AVRUI_Link l = (AVRUI_Link)target;
73 DrawDefaultInspector();
75 EditorGUILayout.Space();
80 if (GUILayout.Button(
"Show available fields", GUILayout.MaxWidth(200))) show_fields =
true;
82 else if (GUILayout.Button(
"Hide available fields", GUILayout.MaxWidth(200)))
88 if (show_fields && l.target!=null)
91 GUIStyle bttnStyle =
new GUIStyle(GUI.skin.button);
92 bttnStyle.margin =
new RectOffset(0, 0, 0, 0);
94 BindingFlags commonFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.SetField | BindingFlags.SetProperty | BindingFlags.GetField | BindingFlags.GetProperty;
96 using (
new EditorGUILayout.HorizontalScope())
98 EditorGUILayout.BeginVertical();
99 EditorGUILayout.BeginFoldoutHeaderGroup(
true,
"Public Properties");
100 foreach (var v
in l.target.GetType().GetProperties(System.Reflection.BindingFlags.Public | commonFlags))
103 if (l.validTypes.Contains(v.PropertyType) || l.validTypes.Any((t) => v.PropertyType.IsSubclassOf(t)) && v.CanRead && v.CanWrite)
104 if (GUILayout.Button(v.Name, bttnStyle, GUILayout.MaxWidth(200)))
106 l.memberType = AVRUI_Link.MemberType.PROPERTY;
111 EditorGUILayout.EndFoldoutHeaderGroup();
112 EditorGUILayout.EndVertical();
114 EditorGUILayout.BeginVertical();
115 EditorGUILayout.BeginFoldoutHeaderGroup(
true,
"Private Properties");
116 foreach (var v
in l.target.GetType().GetProperties(System.Reflection.BindingFlags.NonPublic | commonFlags))
118 if (l.validTypes.Contains(v.PropertyType) || l.validTypes.Any((t) => v.PropertyType.IsSubclassOf(t)) && v.CanRead && v.CanWrite)
119 if (GUILayout.Button(v.Name, bttnStyle, GUILayout.MaxWidth(200)))
121 l.memberType = AVRUI_Link.MemberType.PROPERTY;
126 EditorGUILayout.EndFoldoutHeaderGroup();
127 EditorGUILayout.EndVertical();
130 using (
new EditorGUILayout.HorizontalScope())
132 EditorGUILayout.BeginVertical();
133 EditorGUILayout.BeginFoldoutHeaderGroup(
true,
"Public Fields");
134 foreach (var v
in l.target.GetType().GetFields(System.Reflection.BindingFlags.Public | commonFlags))
136 if (l.validTypes.Contains(v.FieldType) || l.validTypes.Any((t) => v.FieldType.IsSubclassOf(t)))
137 if (GUILayout.Button(v.Name, bttnStyle, GUILayout.MaxWidth(200)))
139 l.memberType = AVRUI_Link.MemberType.FIELD;
144 EditorGUILayout.EndFoldoutHeaderGroup();
145 EditorGUILayout.EndVertical();
147 EditorGUILayout.BeginVertical();
148 EditorGUILayout.BeginFoldoutHeaderGroup(
true,
"Private Fields");
149 foreach (var v
in l.target.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | commonFlags))
151 if (l.validTypes.Contains(v.FieldType) || l.validTypes.Any((t) => v.FieldType.IsSubclassOf(t)))
152 if (GUILayout.Button(v.Name, bttnStyle, GUILayout.MaxWidth(200)))
154 l.memberType = AVRUI_Link.MemberType.FIELD;
159 EditorGUILayout.EndFoldoutHeaderGroup();
160 EditorGUILayout.EndVertical();
165 private System.Boolean CanCovert(System.String value, System.Type type)
167 System.ComponentModel.TypeConverter converter = System.ComponentModel.TypeDescriptor.GetConverter(type);
168 return converter.IsValid(value);
Sets the documentation html file inside of Packages/com.avr.core/Documentation/html of a given class...
Makes a field read-only in the inspector
Binds a given UI element (such as slider, toggle, dropdown or inputfield) with a given property or fi...