/// <summary> /// Browse for field/property /// </summary> /// <param name="binderEditor"></param> /// <param name="field"></param> static public void Browse(BinderBaseEditor binderEditor, BindingField field) { curBinderEditor = binderEditor; curField = field; members = binderEditor.binder.GetMembers(MemberTypes.Field, MemberTypes.Property); FilterPopup.Browse(members, OnMemberSelected); }
/// <summary> /// Browse for field/property /// </summary> /// <param name="binderEditor"></param> /// <param name="field"></param> public static void Browse(BinderBaseEditor binderEditor, BindingField field, int selectedIndex, bool boldName = false, bool withReturnType = false, bool withDeclaringType = false, bool asPath = false) { curBinderEditor = binderEditor; curField = field; dataMembers = binderEditor.binder.GetMembers(false, false, false, false, MemberTypes.Field, MemberTypes.Property); viewMembers = binderEditor.binder.GetMembers(boldName, withReturnType, withDeclaringType, asPath, MemberTypes.Field, MemberTypes.Property); FilterPopup.Browse(selectedIndex, dataMembers, viewMembers, OnMemberSelected); }
/// <summary> /// Unsubscribe the on changed event /// </summary> /// <param name="_field"></param> /// <param name="onChanged"></param> protected void UnSubscribeOnChangedEvent(BindingField _field, Action <object> onChanged) { _field.UpdateAction -= onChanged; UnRegisterViewModel(_field.member, onChanged); }
public void DrawBindingField(BindingField field) { GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(new GUIContent(field.label)); var curMemberName = field.member; if (string.IsNullOrEmpty(curMemberName)) { curMemberName = BindingDefine.SELECT_MEMBER; } var viewMembers = this.binder.GetMembers(false, true, false, false, MemberTypes.Field, MemberTypes.Property); var dataMembers = this.binder.GetMembers(false, false, false, false, MemberTypes.Field, MemberTypes.Property); if (dataMembers == null) { EditorGUILayout.LabelField("<color=red>No target context found!</color>", EditorGUIHelper.RichText()); GUILayout.EndHorizontal(); } else { ArrayUtility.Insert(ref dataMembers, 0, "<None>"); ArrayUtility.Insert(ref viewMembers, 0, "<None>"); var selectedIndex = 0; for (var i = 0; i < dataMembers.Length; i++) { if (curMemberName == dataMembers[i]) { selectedIndex = i; break; } } GUILayout.Space(-7); EditorGUILayout.BeginVertical(); GUILayout.Space(5); var newSelectedIndex = EditorGUILayout.Popup(selectedIndex, viewMembers); if (newSelectedIndex != selectedIndex) { Undo.RecordObject(this.target, "Select Binder Member"); selectedIndex = newSelectedIndex; field.member = dataMembers[selectedIndex]; Apply(); } EditorGUILayout.EndVertical(); if (EditorGUIHelper.QuickPickerButton()) { ContextBrowser.Browse(this, field, selectedIndex, true, true, false); } GUILayout.EndHorizontal(); MemberInfo curMember = this.binder.GetMemberInfo(dataMembers[selectedIndex], MemberTypes.Property, MemberTypes.Field); if (curMember != null) { var attributes = curMember.GetCustomAttributes(typeof(UIManPropertyAttribute), false); if (attributes == null || attributes.Length == 0) { GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(" "); GUILayout.Label("<color=red>None observable field!</color>", EditorGUIHelper.RichText()); GUILayout.EndHorizontal(); } } } GUILayout.EndVertical(); }
/// <summary> /// All binder must implement this method to unsubsribe onchanged event when object is disable /// </summary> //public abstract void OnDisable (); /// <summary> /// Subscribe the on changed event /// </summary> /// <param name="field">_binding info.</param> /// <param name="onChanged">On changed.</param> protected void SubscribeOnChangedEvent(BindingField field, Action <object> onChanged) { field.UpdateAction += onChanged; RegisterViewModel(field.member, onChanged); }
public void DrawBindingField(BindingField field) { GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(new GUIContent(field.label)); string curMemberName = field.member; if (string.IsNullOrEmpty(curMemberName)) { curMemberName = BindingDefine.SELECT_MEMBER; } string[] members = binder.GetMembers(MemberTypes.Field, MemberTypes.Property); if (members == null) { EditorGUILayout.LabelField("<color=red>No target context found!</color>", EditorGUIHelper.RichText()); GUILayout.EndHorizontal(); } else { ArrayUtility.Insert(ref members, 0, "Null"); int selectedIndex = 0; for (int i = 0; i < members.Length; i++) { if (curMemberName == members [i]) { selectedIndex = i; break; } } GUILayout.Space(-7); EditorGUILayout.BeginVertical(); GUILayout.Space(5); int newSelectedIndex = EditorGUILayout.Popup(selectedIndex, members); if (newSelectedIndex != selectedIndex) { selectedIndex = newSelectedIndex; field.member = members [selectedIndex]; Apply(); } EditorGUILayout.EndVertical(); if (EditorGUIHelper.QuickPickerButton()) { ContextBrowser.Browse(this, field); } GUILayout.EndHorizontal(); MemberInfo curMember = binder.GetMemberInfo(members [selectedIndex], MemberTypes.Property, MemberTypes.Field); if (curMember != null) { object[] attributes = curMember.GetCustomAttributes(typeof(UIManProperty), false); if (attributes == null || attributes.Length == 0) { GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(" "); GUILayout.Label("<color=red>None observable field!</color>", EditorGUIHelper.RichText()); GUILayout.EndHorizontal(); } } } GUILayout.EndVertical(); }