예제 #1
0
        void TypeReferencePicker(SerializedProperty iterator, TypeSearcherAttribute attribute, GUIContent label, Action onChangedCallback)
        {
            //Fetch typename
            var typeHandleIdProperty       = iterator.FindPropertyRelative(nameof(TypeHandle.Identification));
            var typeHandleAssetRefProperty = iterator.FindPropertyRelative(nameof(TypeHandle.GraphModelReference));

            var handle  = new TypeHandle(typeHandleAssetRefProperty.objectReferenceValue as VSGraphModel, typeHandleIdProperty.stringValue);
            var stencil = model.GraphModel.Stencil;

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(label);

            var friendlyName = handle.GetMetadata(stencil).FriendlyName;

            if (GUILayout.Button(friendlyName))
            {
                var mousePosition = mainContainer.LocalToWorld(Event.current.mousePosition);
                void Callback(TypeHandle type, int index)
                {
                    Assert.IsNotNull(typeHandleIdProperty);
                    Assert.IsNotNull(typeHandleAssetRefProperty);
                    typeHandleIdProperty.stringValue = type.Identification;
                    typeHandleAssetRefProperty.objectReferenceValue = type.GraphModelReference;
                    iterator.serializedObject.ApplyModifiedProperties();
                    onChangedCallback();
                }

                SearcherService.ShowTypes(stencil, mousePosition, Callback, attribute.Filter?.GetFilter(model));
            }

            EditorGUILayout.EndHorizontal();
        }
예제 #2
0
        public static void TypeEditor(this Stencil stencil, TypeHandle typeHandle, Action <TypeHandle, int> onSelection,
                                      SearcherFilter filter = null, TypeOptions options = TypeOptions.None)
        {
            var wasArray             = typeHandle.IsVsArrayType(stencil);
            var missingTypeReference = TypeHandle.MissingType;

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Type");

            var selected = EditorGUILayout.DropdownButton(new GUIContent(typeHandle != missingTypeReference ? typeHandle.GetMetadata(stencil).FriendlyName : "<unknown type>"), FocusType.Passive, GUI.skin.button);

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

            if (selected)
            {
                SearcherService.ShowTypes(
                    stencil,
                    EditorWindow.focusedWindow.rootVisualElement.LocalToWorld(s_ButtonRect.center),
                    (t, i) => onSelection(wasArray ? t.MakeVsArrayType(stencil) : t, i),
                    filter
                    );
            }
            EditorGUILayout.EndHorizontal();

            if (!options.HasFlag(TypeOptions.AllowArray))
            {
                return;
            }

            var newIsArray = EditorGUILayout.Toggle("Is Array", wasArray);

            if (newIsArray != wasArray)
            {
                onSelection(newIsArray ? typeHandle.MakeVsArrayType(stencil) : typeHandle.GetVsArrayElementType(stencil), 0);
            }
        }
        public static void TypeEditor(this Stencil stencil, TypeHandle typeHandle, Action <TypeHandle, int> onSelection,
                                      SearcherFilter filter = null, TypeOptions options = TypeOptions.None)
        {
            var missingTypeReference = TypeHandle.MissingType;

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Type");

            var selected = EditorGUILayout.DropdownButton(new GUIContent(typeHandle != missingTypeReference ? typeHandle.GetMetadata(stencil).FriendlyName : "<unknown type>"), FocusType.Passive, GUI.skin.button);

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

            if (selected)
            {
                SearcherService.ShowTypes(
                    stencil,
                    EditorWindow.focusedWindow.rootVisualElement.LocalToWorld(s_ButtonRect.center),
                    onSelection,
                    filter
                    );
            }
            EditorGUILayout.EndHorizontal();
        }