Exemple #1
0
        private void SetIconExpansion(SiblingOrder siblingOrder, TextureIcons middle, TextureIcons last)
        {
            bool result;

            switch (siblingOrder)
            {
            case SiblingOrder.FIRST_CHILD:
            case SiblingOrder.MIDDLE_CHILD:
                result = ParentControl.Button(middle);
                break;

            case SiblingOrder.LAST_CHILD:
                result = ParentControl.Button(last);
                break;

            default:
                result = false;
                break;
            }

            if (result)
            {
                IsExpanded = !IsExpanded;
            }
        }
        public void DisplayItem(int levels, SiblingOrder siblingOrder)
        {
            if (null == ParentControl || IsHidden)
            {
                return;
            }

            GUILayout.BeginHorizontal();

            for (int index = 0; index < levels; ++index)
            {
                ParentControl.Button(TextureIcons.GUIDE);
            }

            if (!HasChildItems())
            {
                bool result;
                switch (siblingOrder)
                {
                case SiblingOrder.FIRST_CHILD:
                    result = ParentControl.Button(TextureIcons.MIDDLE_SIBLING_NO_CHILD);
                    break;

                case SiblingOrder.MIDDLE_CHILD:
                    result = ParentControl.Button(TextureIcons.MIDDLE_SIBLING_NO_CHILD);
                    break;

                case SiblingOrder.LAST_CHILD:
                    result = ParentControl.Button(TextureIcons.LAST_SIBLING_NO_CHILD);
                    break;

                default:
                    result = false;
                    break;
                }
                if (result)
                {
                    IsExpanded = !IsExpanded;
                }
            }
            else
            {
                if (IsExpanded)
                {
                    bool result;
                    switch (siblingOrder)
                    {
                    case SiblingOrder.FIRST_CHILD:
                        result = ParentControl.Button(TextureIcons.MIDDLE_SIBLING_EXPANDED);
                        break;

                    case SiblingOrder.MIDDLE_CHILD:
                        result = ParentControl.Button(TextureIcons.MIDDLE_SIBLING_EXPANDED);
                        break;

                    case SiblingOrder.LAST_CHILD:
                        result = ParentControl.Button(TextureIcons.LAST_SIBLING_EXPANDED);
                        break;

                    default:
                        result = false;
                        break;
                    }
                    if (result)
                    {
                        IsExpanded = !IsExpanded;
                    }
                }
                else
                {
                    bool result;
                    switch (siblingOrder)
                    {
                    case SiblingOrder.FIRST_CHILD:
                        result = ParentControl.Button(TextureIcons.MIDDLE_SIBLING_COLLAPSED);
                        break;

                    case SiblingOrder.MIDDLE_CHILD:
                        result = ParentControl.Button(TextureIcons.MIDDLE_SIBLING_COLLAPSED);
                        break;

                    case SiblingOrder.LAST_CHILD:
                        result = ParentControl.Button(TextureIcons.LAST_SIBLING_COLLAPSED);
                        break;

                    default:
                        result = false;
                        break;
                    }
                    if (result)
                    {
                        IsExpanded = !IsExpanded;
                    }
                }
            }


            bool clicked = false;

            // display the text for the tree view
            if (!string.IsNullOrEmpty(Header))
            {
                bool isSelected;
                if (ParentControl.SelectedItem == this &&
                    !ParentControl.m_forceDefaultSkin)
                {
                    //use selected skin
                    GUI.skin   = ParentControl.m_skinSelected;
                    isSelected = true;
                }
                else
                {
                    isSelected = false;
                }

                if (IsCheckBox)
                {
                    if (IsChecked &&
                        ParentControl.Button(TextureIcons.NORMAL_CHECKED))
                    {
                        IsChecked = false;
                        if (ParentControl.SelectedItem != this)
                        {
                            ParentControl.SelectedItem = this;
                            this.IsSelected            = true;
                            if (null != Selected)
                            {
                                Selected.Invoke(this, new SelectedEventArgs());
                            }
                        }
                        if (null != Unchecked)
                        {
                            Unchecked.Invoke(this, new UncheckedEventArgs());
                        }
                    }
                    else if (!IsChecked &&
                             ParentControl.Button(TextureIcons.NORMAL_UNCHECKED))
                    {
                        IsChecked = true;
                        if (ParentControl.SelectedItem != this)
                        {
                            ParentControl.SelectedItem = this;
                            this.IsSelected            = true;
                            if (null != Selected)
                            {
                                Selected.Invoke(this, new SelectedEventArgs());
                            }
                        }
                        if (null != Checked)
                        {
                            Checked.Invoke(this, new CheckedEventArgs());
                        }
                    }

                    ParentControl.Button(TextureIcons.BLANK);
                }

                // Add a custom icon, if any
                if (null != CustomIconBuilder)
                {
                    CustomIconBuilder.Invoke(this, new CustomIconEventArgs());
                    ParentControl.Button(TextureIcons.BLANK);
                }

                if (UnityEngine.Event.current.isMouse)
                {
                    s_clickCount = UnityEngine.Event.current.clickCount;
                }


                if (ParentControl.IsHoverEnabled)
                {
                    GUISkin oldSkin = GUI.skin;
                    if (isSelected)
                    {
                        GUI.skin = ParentControl.m_skinSelected;
                    }
                    else if (IsHover)
                    {
                        GUI.skin = ParentControl.m_skinHover;
                    }
                    else
                    {
                        GUI.skin = ParentControl.m_skinUnselected;
                    }
                    if (ParentControl.IsHoverAnimationEnabled)
                    {
                        GUI.skin.button.fontSize = (int)Mathf.Lerp(20f, 12f, m_hoverTime);
                    }
                    GUI.SetNextControlName("toggleButton");                     //workaround to dirty GUI
                    if (GUILayout.Button(Header))
                    {
                        GUI.FocusControl("toggleButton");                         //workaround to dirty GUI
                        if (ParentControl.SelectedItem != this)
                        {
                            ParentControl.SelectedItem = this;
                            this.IsSelected            = true;
                            if (null != Selected)
                            {
                                Selected.Invoke(this, new SelectedEventArgs());
                            }
                        }
                        if (null != Click && (uint)s_clickCount <= 2)
                        {
                            clicked = true;
                        }
                    }
                    GUI.skin = oldSkin;
                }
                else
                {
                    GUI.SetNextControlName("toggleButton");                     //workaround to dirty GUI
                    if (GUILayout.RepeatButton(Header))
                    {
                        GUI.FocusControl("toggleButton");                         //workaround to dirty GUI
                        if (ParentControl.SelectedItem != this)
                        {
                            ParentControl.SelectedItem = this;
                            this.IsSelected            = true;
                            if (null != Selected)
                            {
                                Selected.Invoke(this, new SelectedEventArgs());
                            }
                        }
                        if (null != Click && (uint)s_clickCount <= 2)
                        {
                            clicked = true;;
                        }
                    }
                }

                if (isSelected &&
                    !ParentControl.m_forceDefaultSkin)
                {
                    //return to default skin
                    GUI.skin = ParentControl.m_skinUnselected;
                }
            }

            GUILayout.EndHorizontal();

            if (ParentControl.IsHoverEnabled)
            {
                if (null != UnityEngine.Event.current &&
                    UnityEngine.Event.current.type == EventType.Repaint)
                {
                    Vector2 mousePos = UnityEngine.Event.current.mousePosition;
                    if (ParentControl.HasFocus(mousePos))
                    {
                        Rect lastRect = GUILayoutUtility.GetLastRect();
                        if (lastRect.Contains(mousePos))
                        {
                            IsHover = true;
                            ParentControl.HoverItem = this;
                        }
                        else
                        {
                            IsHover = false;
                        }
                        if (ParentControl.IsHoverEnabled &&
                            ParentControl.IsHoverAnimationEnabled)
                        {
                            m_hoverTime = CalculateHoverTime(lastRect, UnityEngine.Event.current.mousePosition);
                        }
                    }
                }
            }

            if (HasChildItems() &&
                IsExpanded)
            {
                for (int index = 0; index < Items.Count; ++index)
                {
                    TreeViewItem child = Items[index];
                    child.Parent = this;
                    if ((index + 1) == Items.Count)
                    {
                        child.DisplayItem(levels + 1, SiblingOrder.LAST_CHILD);
                    }
                    else if (index == 0)
                    {
                        child.DisplayItem(levels + 1, SiblingOrder.FIRST_CHILD);
                    }
                    else
                    {
                        child.DisplayItem(levels + 1, SiblingOrder.MIDDLE_CHILD);
                    }
                }
            }

            if (clicked)
            {
                Click.Invoke(this, new ClickEventArgs((uint)s_clickCount));
            }

            if (IsSelected &&
                ParentControl.SelectedItem != this)
            {
                if (null != Unselected)
                {
                    Unselected.Invoke(this, new UnselectedEventArgs());
                }
            }
            IsSelected = ParentControl.SelectedItem == this;


            if (IsDraggable)
            {
                HandleGUIEvents();
            }
        }