Exemplo n.º 1
0
        private void OnGUI()
        {
            GUI.depth = -100;

            //handle assembly reload causing drawer to go null, resulting in null reference exceptions
            if (drawer == null)
            {
                Close();
                return;
            }

            var preferences = inspector.Preferences;

            DrawGUI.BeginOnGUI(preferences, true);

            bool addedComponent = false;

            EditorGUI.BeginChangeCheck();
            {
                if (drawer.OnGUI(ref addedComponent))
                {
                    GUI.changed = true;
                    Repaint();
                    isDirty = 3;
                }
            }
            if (EditorGUI.EndChangeCheck())
            {
                isDirty = 3;
            }

            if (addedComponent)
            {
                Close();
                return;
            }

            if (isDirty > 0)
            {
                GUI.changed = true;
                Repaint();
            }

            var rect = position;

            rect.x = 0f;
            rect.y = 0f;
            DrawGUI.DrawRect(rect, preferences.theme.ComponentSeparatorLine);
        }
Exemplo n.º 2
0
        /// <inheritdoc cref="IDrawer.DrawSelectionRect" />
        public override void DrawSelectionRect()
        {
            //when editing text field we use the internally created selection rect
            if (!DrawGUI.EditingTextField || !Inspector.InspectorDrawer.HasFocus)
            {
                var rect = controlLastDrawPosition;
                rect.yMin   += 1f;
                rect.height -= 1f;
                var theme = InspectorUtility.Preferences.theme;
                var color = Inspector.InspectorDrawer.HasFocus ? theme.ControlSelectedRect : theme.ControlSelectedUnfocusedRect;
                DrawGUI.DrawRect(rect, color, localDrawAreaOffset);
            }

            base.DrawSelectionRect();
        }
Exemplo n.º 3
0
        /// <inheritdoc />
        public sealed override void DrawSelectionRect()
        {
            //when editing text field we use the internally created selection rect
            if (!DrawGUI.EditingTextField && HasNumberField)
            {
                var rect = NumberFieldPosition;
                rect.yMin   += 1f;
                rect.height -= 1f;
                DrawGUI.DrawRect(rect, InspectorUtility.Preferences.theme.ControlSelectedRect, localDrawAreaOffset);
            }

            if (IsFullInspectorWidth)
            {
                DrawGUI.DrawSelectionRect(SelectionRect, localDrawAreaOffset);
            }
        }
Exemplo n.º 4
0
        private bool Draw(ref bool menuItemWasClicked)
        {
            if (instance == null)
            {
                return(false);
            }

                        #if DEV_MODE || PROFILE_POWER_INSPECTOR
            Profiler.BeginSample("PopupMenu.Draw");
                        #endif

            PopupMenuItemUtility.drawWithFullPath = filter.Length > 0;

            bool dirty = false;
            var  e     = Event.current;
            //using raw type, since we consume all click events
            var  eventType = e.rawType;
            bool lmbClick  = eventType == EventType.MouseDown && e.button == 0;
            bool mmbClick  = eventType == EventType.MouseDown && e.button == 2;

            if (clearingText)
            {
                if (eventType == EventType.Layout)
                {
                    clearingText = false;
                }
                GUI.changed = true;
                dirty       = true;
            }
            else
            {
                if (!DrawGUI.EditingTextField)
                {
                    DrawGUI.EditingTextField = true;
                    GUI.changed = true;
                    dirty       = true;
                }

                if (!string.Equals(GUI.GetNameOfFocusedControl(), ControlName))
                {
                    DrawGUI.FocusControl(ControlName);
                    GUI.changed = true;
                    dirty       = true;
                }
            }

            if (DrawFilterField())
            {
                dirty = true;
            }

            DrawGUI.Active.ColorRect(headerRect, BgColorNavigationBar);

            bool hasFilter      = FilterString.Length > 0;
            bool drawBackArrow  = !hasFilter && activeGroup != null;
            bool drawLabelField = currentViewLabel.text.Length > 0;

            if (drawBackArrow || drawLabelField)
            {
                if (drawBackArrow)
                {
                    GUI.Label(backArrowRect, GUIContent.none, "AC LeftArrow");
                    if (lmbClick && backArrowRect.Contains(e.mousePosition))
                    {
                        goBackLevelNextLayout = true;
                        dirty = true;
                    }
                }

                DrawGUI.DrawRect(headerRect, new Color32(24, 24, 24, 255), localDrawAreaOffset);

                if (drawLabelField)
                {
                    GUI.Label(headerLabelRect, currentViewLabel, InspectorPreferences.Styles.PopupMenuTitle);
                }

                GUI.DrawTexture(dividerRect, InspectorUtility.Preferences.graphics.horizontalSplitterBg);
            }

                        #if DEV_MODE && PI_ASSERTATIONS
            Debug.Assert(contentRect.x == 0f, "contentRect.x=" + contentRect.x);
            Debug.Assert(contentRect.y == 0f, "contentRect.y=" + contentRect.y);
            Debug.Assert(contentRect.height == currentViewItemCount * DrawGUI.SingleLineHeight, "contentRect.height=" + contentRect.height + ", currentViewItemCount=" + currentViewItemCount);
            Debug.Assert(currentViewItemCount == currentViewItems.Count, "currentViewItemCount=" + currentViewItemCount + ", currentViewItems.Count=" + currentViewItems.Count);
            Debug.Assert(viewRect.height == contentRect.height || viewRect.height == ScrollAreaMaxHeight, "viewRect.height (" + viewRect.height + ") != contentRect.height (" + contentRect.height + ") NOR ScrollAreaMaxHeight (" + ScrollAreaMaxHeight + ")");
                        #endif

            var setScrollPos = GUI.BeginScrollView(viewRect, scrollPos, contentRect);
            {
                if (setScrollPos.y != scrollPos.y)
                {
                    SetScrollPos(setScrollPos.y, true);
                    dirty = true;
                }

                var memberRect = contentRect;
                DrawGUI.Active.ColorRect(memberRect, BgColor);

                memberRect.height = DrawGUI.SingleLineHeight;

                //only start drawing from first visible member
                memberRect.y += firstVisibleIndex * DrawGUI.SingleLineHeight;

                int last = lastVisibleIndex;
                if (last >= currentViewItemCount)
                {
                                        #if DEV_MODE
                    Debug.LogWarning(ToString() + " - last (" + last + ") >= visibleCount (" + (lastVisibleIndex - firstVisibleIndex + 1) + ") with firstVisibleIndex=" + firstVisibleIndex + " and lastVisibleIndex=" + lastVisibleIndex);
                                        #endif
                    last = currentViewItemCount - 1;
                }

                for (int n = firstVisibleIndex; n <= last; n++)
                {
                    var  item     = currentViewItems[n];
                    bool selected = n == selectedMemberIndex;

                    if (selected)
                    {
                        DrawGUI.Active.ColorRect(memberRect, InspectorUtility.Preferences.theme.BackgroundSelected);
                    }

                    if (memberRect.Contains(e.mousePosition))
                    {
                        if (!selected)
                        {
                            SetSelectedMember(n, false);
                            dirty = true;
                        }

                        if (lmbClick)
                        {
                            dirty = true;
                            if (item.IsGroup)
                            {
                                SetActiveItem(item);
                                break;
                            }

                            menuItemWasClicked = true;
                            inspector.OnNextLayout(() => OnMenuItemClicked(item));
                            break;
                        }

                        if (mmbClick)
                        {
                            if (item.IsGroup)
                            {
                                var unityObjects = item.children.Select(menuItem => menuItem.IdentifyingObject as Object).ToArray();
                                if (unityObjects.Length > 0)
                                {
                                    DrawGUI.Ping(unityObjects);
                                }
                            }
                            else
                            {
                                var itemValue   = item.IdentifyingObject;
                                var unityObject = itemValue as Object;
                                if (unityObject != null)
                                {
                                    DrawGUI.Ping(unityObject);
                                }
                                var unityObjects = itemValue as Object[];
                                if (unityObjects != null)
                                {
                                    DrawGUI.Ping(unityObjects);
                                }
                            }
                        }
                    }

                    if (PopupMenuItemUtility.Draw(memberRect, selectedMemberIndex == n, item))
                    {
                                                #if DEV_MODE
                        Debug.Log(GetType().Name + " - member " + item + " clicked with eventType " + eventType + "! (member returned true)");
                                                #endif

                        dirty = true;

                        if (item.IsGroup)
                        {
                            SetActiveItem(item);
                            break;
                        }

                        menuItemWasClicked = true;
                        inspector.OnNextLayout(() => OnMenuItemClicked(item));
                        DrawGUI.Use(e);
                        break;
                    }

                    if (!item.IsGroup)
                    {
                        bool ticked = tickedItems != null && tickedItems.Contains(item);

                        var toggleRect = memberRect;
                        toggleRect.width = 16f;
                        toggleRect.x    += memberRect.width - toggleRect.width;

                        if (canTickMultiple)
                        {
                            bool setTicked = GUI.Toggle(toggleRect, ticked, GUIContent.none, InspectorUtility.Preferences.GetStyle("OL Toggle"));
                            if (setTicked != ticked)
                            {
                                if (ticked)
                                {
                                    tickedItems.Add(item);
                                }
                                else
                                {
                                    tickedItems.Remove(item);
                                }

                                menuItemWasClicked = true;
                                inspector.OnNextLayout(() => OnMenuItemClicked(item));
                                DrawGUI.Use(e);
                                break;
                            }
                        }
                        else if (ticked)
                        {
                            GUI.Toggle(toggleRect, true, GUIContent.none, InspectorUtility.Preferences.GetStyle("OL Toggle"));
                        }
                    }

                    GUI.enabled   = true;
                    memberRect.y += DrawGUI.SingleLineHeight;
                }

                ///after visible part, count * DrawGUI.singleLineHeight
                GUI.EndScrollView();
            }

                        #if DEV_MODE || PROFILE_POWER_INSPECTOR
            Profiler.EndSample();
                        #endif

            return(dirty);
        }
Exemplo n.º 5
0
        /// <inheritdoc/>
        public override bool DrawPrefix(Rect position)
        {
            if (Event.current.type == EventType.Repaint)
            {
                //hide prefix resizer line behind the field
                EditorGUI.DrawRect(lastDrawPosition, DrawGUI.Active.InspectorBackgroundColor);

                if (backgroundRect.width > 0f)
                {
                    GUI.Label(backgroundRect, "", InspectorPreferences.Styles.MethodBackground);
                }
            }

            bool drawBackgroundBehindFoldoutsWas = DrawGUI.drawBackgroundBehindFoldouts;

            DrawGUI.drawBackgroundBehindFoldouts = false;

            var prefixDrawRect      = PrefixLabelPosition;
            var clipLabelInsideRect = prefixDrawRect;

            clipLabelInsideRect.width += clipLabelInsideRect.x;
            clipLabelInsideRect.x      = 0f;
            prefixDrawRect.y           = 0f;

            //use BeginArea to prevent foldout text clipping past the Button
            GUILayout.BeginArea(clipLabelInsideRect);
            bool dirty = base.DrawPrefix(prefixDrawRect);

            GUILayout.EndArea();

            DrawGUI.drawBackgroundBehindFoldouts = drawBackgroundBehindFoldoutsWas;

            if (GUI.Button(buttonRect, buttonLabel, Style))
            {
                DrawGUI.UseEvent();
                if (Event.current.button == 0)
                {
                    dirty = true;
                    Select(ReasonSelectionChanged.ControlClicked);
                    Invoke();
                }
                else if (Event.current.button == 1)
                {
                    var menu = Menu.Create();

                    menu.Add(Menu.Item("Invoke", () => Invoke(false, false, false, false)));

                    if (hasReturnValue)
                    {
                                                #if !POWER_INSPECTOR_LITE
                        menu.AddSeparator();
                        menu.Add(Menu.Item("Copy Return Value", () => Invoke(false, false, true, false)));
                                                #endif
                        if (UnityObjectExtensions.IsUnityObjectOrUnityObjectCollectionType(Type))
                        {
                            menu.Add(Menu.Item("Ping Return Value", () => Invoke(true, false, false, false)));
                            menu.Add(Menu.Item("Select Return Value", () => Invoke(false, false, false, true)));
                        }
                    }

                    if (isCoroutine)
                    {
                        bool addedSeparator = false;

                        var    monoBehaviour = UnityObject as MonoBehaviour;
                        string methodName    = MethodInfo.Name;

                        if (monoBehaviour != null && Application.isPlaying)
                        {
                            menu.AddSeparator();
                            addedSeparator = true;

                            menu.Add("Invoke Repeating/Every Second", () => monoBehaviour.InvokeRepeating(methodName, 1f, 1f));
                            menu.Add("Invoke Repeating/Every 5 Seconds", () => monoBehaviour.InvokeRepeating(methodName, 5f, 5f));
                            menu.Add("Invoke Repeating/Every 10 Seconds", () => monoBehaviour.InvokeRepeating(methodName, 10f, 10f));
                        }

                        if (IsInvoking())
                        {
                            if (!addedSeparator)
                            {
                                menu.AddSeparator();
                            }

                            menu.Add("Stop Coroutine", () => monoBehaviour.StopCoroutine(methodName));
                            menu.Add("Cancel Invoke", () => monoBehaviour.CancelInvoke(methodName));
                        }
                    }

                    ContextMenuUtility.Open(menu, this);
                }
                else if (Event.current.button == 2)
                {
                    Invoke(true, false, true, false);
                }
            }

            if (IsInvoking())
            {
                var buttonUnderlineRect = buttonRect;
                buttonUnderlineRect.x     += 1f;
                buttonUnderlineRect.y     += buttonUnderlineRect.height - 3f;
                buttonUnderlineRect.width -= 2f;
                buttonUnderlineRect.height = 2f;
                DrawGUI.DrawRect(buttonUnderlineRect, Color.green);
            }

            return(dirty);
        }
Exemplo n.º 6
0
        private bool Draw(ref bool addedComponent)
        {
            if (instance == null)
            {
                return(false);
            }

            bool dirty = false;
            var  e     = Event.current;
            //using raw type, since we consume all click events
            var  eventType = e.rawType;
            bool lmbClick  = eventType == EventType.MouseDown && e.button == 0;

            if (clearingText)
            {
                if (eventType == EventType.Layout)
                {
                    clearingText = false;
                }
                GUI.changed = true;
                dirty       = true;
            }
            else
            {
                if (!DrawGUI.EditingTextField)
                {
                    DrawGUI.EditingTextField = true;
                    GUI.changed = true;
                    dirty       = true;
                }

                if (!string.Equals(GUI.GetNameOfFocusedControl(), ControlName))
                {
                    DrawGUI.FocusControl(ControlName);
                    GUI.changed = true;
                    dirty       = true;
                }
            }

            if (DrawFilterField())
            {
                dirty = true;
            }

            DrawGUI.Active.ColorRect(headerRect, BgColorNavigationBar);

                        #if UNITY_EDITOR
            GUI.Label(createScriptButtonRect, GUIContent.none, "OL Plus");
            if (lmbClick && createScriptButtonRect.Contains(Event.current.mousePosition))
            {
                dirty = true;
                openCreateNewScriptViewNextLayout = true;
            }
                        #endif

            bool hasFilter = FilterString.Length > 0;

            if (!hasFilter && activeItem != null)
            {
                GUI.Label(backArrowRect, GUIContent.none, "AC LeftArrow");
                if (lmbClick && backArrowRect.Contains(Event.current.mousePosition))
                {
                                        #if UNITY_EDITOR
                    if (!openCreateNewScriptViewNextLayout)
                                        #endif
                    {
                        goBackLevelNextLayout = true;
                        dirty = true;
                    }
                }
            }

            DrawGUI.DrawRect(headerRect, new Color32(24, 24, 24, 255), localDrawAreaOffset);

            GUI.Label(headerLabelRect, categoryLabel, InspectorPreferences.Styles.PopupMenuTitle);

            GUI.DrawTexture(dividerRect, InspectorUtility.Preferences.graphics.horizontalSplitterBg);

            var setScrollPos = GUI.BeginScrollView(viewRect, scrollPos, contentRect);
            {
                if (setScrollPos.y != scrollPos.y)
                {
                    SetScrollPos(setScrollPos.y, true);
                    dirty = true;
                }

                var memberRect = contentRect;
                DrawGUI.Active.ColorRect(memberRect, BgColor);

                memberRect.height = DrawGUI.SingleLineHeight;

                //only start drawing from first visible member
                memberRect.y += firstVisibleIndex * DrawGUI.SingleLineHeight;

                int last         = lastVisibleIndex - firstVisibleIndex;
                int visibleCount = visibleMembers.Length;
                if (last >= visibleCount)
                {
                                        #if DEV_MODE
                    Debug.LogWarning(ToString() + " - last (" + last + ") >= visibleCount (" + visibleCount + ") with firstVisibleIndex=" + firstVisibleIndex + " and lastVisibleIndex=" + lastVisibleIndex);
                                        #endif

                    last = visibleCount - 1;
                }

                for (int n = 0; n <= last; n++)
                {
                    int memberIndex = firstVisibleIndex + n;

                    //TEMP
                    if (last >= visibleMembers.Length)
                    {
                                                #if DEV_MODE
                        Debug.LogError("n=" + n + ", last=" + last + ", visibleMembers.Length=" + visibleMembers.Length + ", ");
                                                #endif
                        break;
                    }

                    var member = visibleMembers[n];

                    bool selected = memberIndex == selectedComponentIndex;

                    if (selected)
                    {
                        DrawGUI.Active.ColorRect(memberRect, InspectorUtility.Preferences.theme.BackgroundSelected);
                    }

                    if (memberRect.Contains(e.mousePosition))
                    {
                        if (memberIndex != selectedComponentIndex)
                        {
                            SetSelectedMember(memberIndex, false);
                            dirty = true;
                        }

                        if (lmbClick)
                        {
                            var type = member.Type;

                                                        #if DEV_MODE
                            Debug.Log(GetType().Name + " - member " + member.Label.text + " clicked! (custom detection)");
                                                        #endif

                            dirty = true;

                            if (type == null)
                            {
                                SetActiveItem((member as AddComponentMenuItemDrawer).Item);
                                break;
                            }

                            addedComponent = true;

                            inspector.OnNextLayout(() => AddComponent(type));
                            break;
                        }
                    }

                    if (visibleMembersHaveConflicts[n])
                    {
                        GUI.enabled = false;
                    }

                    if (member.Draw(memberRect))
                    {
                        var type = member.Type;

                                                #if DEV_MODE
                        Debug.Log(GetType().Name + " - member " + member.Label.text + " clicked with eventType " + eventType + "! (member returned true)");
                                                #endif

                        dirty = true;

                        if (type == null)
                        {
                            SetActiveItem((member as AddComponentMenuItemDrawer).Item);
                            break;
                        }

                        addedComponent = true;
                        inspector.OnNextLayout(() => AddComponent(type));
                        DrawGUI.Use(e);
                        break;
                    }

                    GUI.enabled   = true;
                    memberRect.y += DrawGUI.SingleLineHeight;
                }

                GUI.EndScrollView();
            }

            return(dirty);
        }