Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        public override void OnInspectorGUI()
        {
            DrawDefaultInspector();

            binder = (BinderBase)target;

            DataContext context = (DataContext)EditorGUILayout.ObjectField(new GUIContent("Data Context"), binder.mDataContext, typeof(DataContext), true);

            if (context == null)
            {
                GUILayout.Label(BindingDefine.FIND_CONTEXT_AUTO);
                if (GUILayout.Button(BindingDefine.FIND_CONTEXT))
                {
                    context = binder.FindDataContext();
                }
            }

            if (binder.mDataContext != context)
            {
                binder.mDataContext = context;
                EditorUtility.SetDirty(target);
            }

            if (binder.mDataContext == null)
            {
                return;
            }

            BindingField[] arrFields = binder.GetBindingFields();

            GUILayout.BeginVertical();

            for (int i = 0; i < arrFields.Length; i++)
            {
                DrawBindingField(arrFields [i]);
            }

            GUILayout.EndVertical();

            if (Event.current.type == EventType.Repaint)
            {
                FilterPopup.SetPopupRect(GUILayoutUtility.GetLastRect());
            }
        }
Beispiel #3
0
        public override void OnInspectorGUI()
        {
            DataContext context = (DataContext)target;

            context.type = (ContextType)EditorGUILayout.EnumPopup(lblType, context.type);

            if (context.type == ContextType.NONE)
            {
                context.Clear();
                GUILayout.Label(BindingDefine.NO_CONTEXT_TYPE);
            }
            else if (context.type == ContextType.MONO_BEHAVIOR)
            {
                context.viewModel = (ViewModelBehaviour)EditorGUILayout.ObjectField(lblContext, (Object)context.viewModel, typeof(ViewModelBehaviour), true);
                if (context.viewModel.GetCachedType() != null)
                {
                    GUILayout.BeginHorizontal();
                    EditorGUILayout.PrefixLabel(" ");
                    EditorGUILayout.LabelField("<color=blue>[" + context.viewModel.GetCachedType().FullName + "]</color>", EditorGUIHelper.RichText());
                    GUILayout.EndHorizontal();
                }
            }
            else if (context.type == ContextType.TYPE_INSTANCE)
            {
                context.viewModel = (ViewModelBehaviour)EditorGUILayout.ObjectField(lblContext, (Object)context.viewModel, typeof(ViewModelBehaviour), true);

                string[] members = context.viewModel.GetAllMembers(MemberTypes.Field, MemberTypes.Property, MemberTypes.Field);
                if (members != null)
                {
                    for (int i = 0; i < members.Length; i++)
                    {
                        if (members [i] == context.propertyName)
                        {
                            selected = i;
                            break;
                        }
                    }

                    GUILayout.BeginVertical();
                    GUILayout.BeginHorizontal();

                    GUILayout.BeginVertical();
                    GUILayout.Space(5);
                    int newSelected = EditorGUILayout.Popup("Field/Property", selected, members);
                    GUILayout.EndVertical();

                    if (selected != newSelected)
                    {
                        context.propertyName = members [newSelected];
                        selected             = newSelected;
                    }

                    if (EditorGUIHelper.QuickPickerButton())
                    {
                        ContextBrowser.Browse(members, selectedMember => {
                            context.propertyName = selectedMember;
                            FilterPopup.Close();
                        });
                    }

                    GUILayout.EndHorizontal();

                    MemberInfo curMember = context.viewModel.GetMemberInfo(members [selected], 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/property!</color>", EditorGUIHelper.RichText());
                            GUILayout.EndHorizontal();
                        }
                    }
                    GUILayout.EndVertical();
                }

                if (Event.current.type == EventType.Repaint)
                {
                    FilterPopup.SetPopupRect(GUILayoutUtility.GetLastRect());
                }
            }
        }