Esempio n. 1
0
        protected override void OnGUI()
        {
            base.OnGUI();

            if (!Validate())
            {
                return;
            }

            if (e.type == EventType.KeyDown &&
                e.modifiers == EventModifiers.None &&
                e.keyCode == KeyCode.Escape)
            {
                Close();
                return;
            }

            var position = this.position;

            position.x = position.y = 0;
            var height          = 0f;
            var calculateHeight = isPopup;
            var applyHeight     = calculateHeight && e.type == EventType.Repaint;

            var editable = editor.targets.None(t => t.HasHideFlag(HideFlags.NotEditable));

            EditorGUI.BeginChangeCheck();

            GUILayout.BeginVertical(Styles.background, GUILayout.ExpandHeight(true));

            var largeHeader = editor.targets.Any(t => !(t is Component));

            EditorGUIUtility.wideMode = position.width >= 330;

            EditorGUIUtility.hierarchyMode = false;

            GUILayout.BeginHorizontal();

            EditorGUI.BeginDisabledGroup(!editable);

            if (largeHeader)
            {
                GUILayout.BeginVertical();
                GUILayout.Space(0);                 // Fix to stick to top
                editor.DrawHeader();
                GUILayout.EndVertical();
            }
            else
            {
                GUILayout.BeginVertical(Styles.smallHeader);
                GUILayout.Space(EditorGUIUtility.isProSkin && !LudiqGUIUtility.isFlatSkin ? -3 : -4);
                GUILayout.BeginHorizontal();
                GUILayout.Space(-12);
                EditorGUILayout.InspectorTitlebar(true, editor.targets, false);
                GUILayout.EndHorizontal();

                if (LudiqGUIUtility.isFlatSkin)
                {
                    GUILayout.Space(-5);
                }

                GUILayout.EndVertical();
            }

            GUILayout.BeginVertical(Styles.smallHeaderExtra, GUILayout.ExpandHeight(true));

            if (largeHeader)
            {
                GUILayout.Space(6);
            }
            else
            {
                if (LudiqGUIUtility.isFlatSkin)
                {
                    GUILayout.Space(5);
                }
                else
                {
                    if (EditorGUIUtility.isProSkin)
                    {
                        var topBorderRect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Width(16), GUILayout.Height(1));
                        topBorderRect.y += 1;
                        EditorGUI.DrawRect(topBorderRect, Color.Lerp(ColorPalette.unityBackgroundLighter, ColorPalette.unityForegroundDim, 0.25f));
                        GUILayout.Space(2);
                    }
                    else
                    {
                        GUILayout.Space(2);
                    }
                }
            }

            EditorGUI.EndDisabledGroup();

            var wantsPin = GUILayout.Toggle(isPinned, GUIContent.none, PeekStyles.pinButton);

            EditorGUI.BeginDisabledGroup(!editable);

            if (isPinned != wantsPin)
            {
                if (wantsPin)
                {
                    Pin();
                }
                else
                {
                    Close();
                }

                GUIUtility.ExitGUI();
            }

            GUILayout.EndVertical();

            if (largeHeader)
            {
                GUILayout.Space(2);
            }

            GUILayout.EndHorizontal();

            if (editor.targets.Length == 1 && editor.targets[0] is GameObject go)
            {
                GUILayout.Space(-1);

                GUILayout.BeginHorizontal(Styles.prefabTools);

                if (PrefabUtility.IsPartOfAnyPrefab(go))
                {
                    GUILayout.Label("Unpack", GUILayout.ExpandWidth(false));

                    if (GUILayout.Button("Root", EditorStyles.miniButtonLeft, GUILayout.ExpandWidth(true)))
                    {
                        PrefabUtility.UnpackPrefabInstance(go, PrefabUnpackMode.OutermostRoot, InteractionMode.UserAction);
                    }

                    if (GUILayout.Button("Completely", EditorStyles.miniButtonRight, GUILayout.ExpandWidth(true)))
                    {
                        PrefabUtility.UnpackPrefabInstance(go, PrefabUnpackMode.Completely, InteractionMode.UserAction);
                    }

                    GUILayout.Space(2);
                    GUILayout.Label("Create", GUILayout.ExpandWidth(false));

                    if (GUILayout.Button("Prefab", EditorStyles.miniButtonLeft, GUILayout.ExpandWidth(true)))
                    {
                        GameObjectOperations.CreateOriginalPrefab(go);
                    }

                    if (GUILayout.Button("Variant", EditorStyles.miniButtonRight, GUILayout.ExpandWidth(true)))
                    {
                        GameObjectOperations.CreatePrefabVariant(go);
                    }
                }
                else
                {
                    GUILayout.Space(LudiqGUIUtility.isFlatSkin ? 4 : 9);
                    GUILayout.Label("Prefab", GUILayout.ExpandWidth(false));

                    if (GUILayout.Button("Create Prefab", EditorStyles.miniButton))
                    {
                        GameObjectOperations.CreatePrefab(go);
                    }
                }

                GUILayout.Space(14);

                GUILayout.EndHorizontal();

                if (LudiqGUIUtility.isFlatSkin)
                {
                    GUILayout.Space(-1);
                }
            }

            if (calculateHeight)
            {
                height += GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Height(0)).yMin;
            }

            EditorGUI.EndDisabledGroup();

            scroll = EditorGUILayout.BeginScrollView(scroll);

            if (!largeHeader)
            {
                GUILayout.Space(3);
            }

            GUILayout.BeginVertical(Styles.inspectorBackground);
            EditorGUIUtility.hierarchyMode = true;
            EditorGUI.BeginDisabledGroup(!editable);
            editor.OnInspectorGUI();
            EditorGUI.EndDisabledGroup();
            GUILayout.EndVertical();

            if (isPinned)
            {
                GUILayout.FlexibleSpace();
            }

            if (HasPreview())
            {
                var previewArea = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Height(120));
                editor.DrawPreview(previewArea);
            }
            else
            {
                GUILayout.Space(2);
            }

            if (calculateHeight)
            {
                height += GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Height(0)).yMin;
            }

            GUILayout.EndVertical();

            GUILayout.EndScrollView();

            if (applyHeight)
            {
                autoHeight = height;
            }

            if (EditorGUI.EndChangeCheck())
            {
            }

            if (e.type == EventType.KeyDown &&
                e.keyCode == KeyCode.Space)
            {
                if (isPopup)
                {
                    Pin();
                }
                else
                {
                    Close();
                }

                e.Use();
                return;
            }

            if (e.type == EventType.Repaint)
            {
                LudiqGUI.DrawEmptyRect(new Rect(Vector2.zero, this.position.size), ColorPalette.unityBackgroundVeryDark);
            }

            if (editor.RequiresConstantRepaint())
            {
                Repaint();
            }
        }
Esempio n. 2
0
        private static void CreatePrefab(MenuCommand menuCommand)
        {
            var target = GetTarget(menuCommand);

            GuiCallback.Enqueue(() => { GameObjectOperations.CreatePrefab(target); });
        }