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(Event.current.isMouse)
				s_clickCount = 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 != Event.current &&
                Event.current.type == EventType.Repaint)
            {
                Vector2 mousePos = 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, 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();
        }
    }
示例#3
0
        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();
            }
        }
    public void DisplayItem(int levels, SiblingOrder siblingOrder)
    {
		Rect lastRect;
		int offset = ParentControlEditor.m_textureGuide.width + ParentControlEditor.m_textureNormalChecked.width;
        if (null == ParentControlEditor)
        {
            return;
        }

        GUILayout.BeginHorizontal();

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

        if (!HasChildItems())
        {
            bool result;
            switch (siblingOrder)
            {
                case SiblingOrder.FIRST_CHILD:
                    result = ParentControlEditor.Button(TextureIcons.MIDDLE_SIBLING_NO_CHILD);
                    break;
                case SiblingOrder.MIDDLE_CHILD:
                    result = ParentControlEditor.Button(TextureIcons.MIDDLE_SIBLING_NO_CHILD);
                    break;
                case SiblingOrder.LAST_CHILD:
                    result = ParentControlEditor.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 = ParentControlEditor.Button(TextureIcons.MIDDLE_SIBLING_EXPANDED);
                        break;
                    case SiblingOrder.MIDDLE_CHILD:
                        result = ParentControlEditor.Button(TextureIcons.MIDDLE_SIBLING_EXPANDED);
                        break;
                    case SiblingOrder.LAST_CHILD:
                        result = ParentControlEditor.Button(TextureIcons.LAST_SIBLING_EXPANDED);
                        break;
                    default:
                        result = false;
                        break;
                }
                if (result)
                {
                    IsExpanded = !IsExpanded;
                }
            }
            else
            {
                bool result;
                switch (siblingOrder)
                {
                    case SiblingOrder.FIRST_CHILD:
                        result = ParentControlEditor.Button(TextureIcons.MIDDLE_SIBLING_COLLAPSED);
                        break;
                    case SiblingOrder.MIDDLE_CHILD:
                        result = ParentControlEditor.Button(TextureIcons.MIDDLE_SIBLING_COLLAPSED);
                        break;
                    case SiblingOrder.LAST_CHILD:
                        result = ParentControlEditor.Button(TextureIcons.LAST_SIBLING_COLLAPSED);
                        break;
                    default:
                        result = false;
                        break;
                }
                if (result)
                {
                    IsExpanded = !IsExpanded;
                }
            }
        }

        // display the text for the tree view
		//also compute the size max>
        if (!string.IsNullOrEmpty(Header))
        {
            bool isSelected;
            if (ParentControlEditor.SelectedItemEditor == this &&
                !ParentControlEditor.m_forceDefaultSkin)
            {
                //use selected skin
                GUI.skin = ParentControlEditor.m_skinSelected;
                isSelected = true;
            }
            else
            {
                isSelected = false;
            }

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

                ParentControlEditor.Button(TextureIcons.BLANK);
            }

            if (ParentControlEditor.IsHoverEnabled)
            {
                GUISkin oldSkin = GUI.skin;
                if (isSelected)
                {
                    GUI.skin = ParentControlEditor.m_skinSelected;
                }
                else if (IsHover)
                {
                    GUI.skin = ParentControlEditor.m_skinHover;
                }
                else
                {
                    GUI.skin = ParentControlEditor.m_skinUnselected;
                }
                if (ParentControlEditor.IsHoverAnimationEnabled)
                {
                    GUI.skin.button.fontSize = (int)Mathf.Lerp(12f, 12f, m_hoverTime);
                }
                GUI.SetNextControlName("toggleButton"); //workaround to dirty GUI
				//var size : Vector2 = GUI.skin.GetStyle("ProgressBarText").CalcSize(GUIContent(label));
				Vector2 size = GUI.skin.label.CalcSize(new GUIContent(Header));
				if (size.x+(levels*offset)+15 > ParentControlEditor.maxWidth) ParentControlEditor.maxWidth = (int)size.x+(levels*offset)+15;
				//Debug.Log (size.x.ToString()+" size and level*offset "+(levels*offset).ToString());
                if (GUILayout.Button(Header))
                {
                    GUI.FocusControl("toggleButton"); //workaround to dirty GUI
                    if (ParentControlEditor.SelectedItemEditor != this)
                    {
                        ParentControlEditor.SelectedItemEditor = this;
                        this.IsSelected = true;
                        if (null != Selected)
                        {
                            Selected.Invoke(this, new SelectedEventArgs());
                        }
                    }
                    if (null != Click)
                    {
                        Click.Invoke(this, new ClickEventArgs());
                    }
                }
                GUI.skin = oldSkin;
            }
            else
            {
                GUI.SetNextControlName("toggleButton"); //workaround to dirty GUI
				Vector2 size = GUI.skin.label.CalcSize(new GUIContent(Header));
				if (size.x+(levels*offset)+15 > ParentControlEditor.maxWidth) ParentControlEditor.maxWidth = (int)size.x+(levels*offset)+15;
				if (GUILayout.Button(Header))
                {
					GUI.FocusControl("toggleButton"); //workaround to dirty GUI
                    if (ParentControlEditor.SelectedItemEditor != this)
                    {
                        ParentControlEditor.SelectedItemEditor = this;
                        this.IsSelected = true;
                        if (null != Selected)
                        {
                            Selected.Invoke(this, new SelectedEventArgs());
                        }
                    }
                    if (null != Click)
                    {
                        Click.Invoke(this, new ClickEventArgs());
                    }
                }
            }

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

        GUILayout.EndHorizontal();

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

        if (HasChildItems() &&
            IsExpanded)
        {
            for (int index = 0; index < Items.Count; ++index)
            {
                TreeViewItemEditor 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 (IsSelected &&
            ParentControlEditor.SelectedItemEditor != this)
        {
            if (null != Unselected)
            {
                Unselected.Invoke(this, new UnselectedEventArgs());
            }
        }
        IsSelected = ParentControlEditor.SelectedItemEditor == this;
    }
示例#5
0
        public void DisplayItem(int levels, SiblingOrder siblingOrder)
        {
            if (null == ParentControl || IsHidden)
            {
                return;
            }

            var clicked = false;

            using (new GUILayout.HorizontalScope())
            {
                for (var index = 0; index < levels; ++index)
                {
                    ParentControl.Button(TextureIcons.GUIDE);
                }

                if (!HasChildItems())
                {
                    SetIconExpansion(siblingOrder, TextureIcons.MIDDLE_SIBLING_NO_CHILD, TextureIcons.LAST_SIBLING_NO_CHILD);
                }
                else if (IsExpanded)
                {
                    SetIconExpansion(siblingOrder, TextureIcons.MIDDLE_SIBLING_EXPANDED, TextureIcons.LAST_SIBLING_EXPANDED);
                }
                else
                {
                    SetIconExpansion(siblingOrder, TextureIcons.MIDDLE_SIBLING_COLLAPSED, TextureIcons.LAST_SIBLING_COLLAPSED);
                }

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

                    if (IsCheckBox)
                    {
                        if (IsChecked && ParentControl.Button(TextureIcons.NORMAL_CHECKED))
                        {
                            IsChecked = false;
                            if (ParentControl.SelectedItem != this)
                            {
                                ParentControl.SelectedItem = 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;
                                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 (Event.current.isMouse)
                    {
                        s_clickCount = Event.current.clickCount;
                    }

                    if (ParentControl.IsHoverEnabled)
                    {
                        var oldSkin = GUI.skin;
                        GUI.skin = isSelected ? ParentControl.m_skinSelected :
                                   IsHover ? ParentControl.m_skinHover : 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;
                                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;
                                IsSelected = true;
                                if (null != Selected)
                                {
                                    Selected.Invoke(this, new SelectedEventArgs());
                                }
                            }

                            if (null != Click && (uint)s_clickCount <= 2)
                            {
                                clicked = true;
                            }
                        }
                    }

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

            if (ParentControl.IsHoverEnabled)
            {
                if (null != Event.current && Event.current.type == EventType.Repaint)
                {
                    var mousePos = Event.current.mousePosition;
                    if (ParentControl.HasFocus(mousePos))
                    {
                        var lastRect = GUILayoutUtility.GetLastRect();
                        IsHover = lastRect.Contains(mousePos);
                        if (IsHover)
                        {
                            ParentControl.HoverItem = this;
                        }

                        if (ParentControl.IsHoverEnabled && ParentControl.IsHoverAnimationEnabled)
                        {
                            m_hoverTime = CalculateHoverTime(lastRect, Event.current.mousePosition);
                        }
                    }
                }
            }

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

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

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

            IsSelected = ParentControl.SelectedItem == this;

            if (IsDraggable)
            {
                HandleGUIEvents();
            }
        }
示例#6
0
    public void DisplayItem(int levels, SiblingOrder siblingOrder)
    {
        Rect lastRect;
        int  offset = ParentControlEditor.m_textureGuide.width + ParentControlEditor.m_textureNormalChecked.width;

        if (null == ParentControlEditor)
        {
            return;
        }

        GUILayout.BeginHorizontal();

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

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

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

            case SiblingOrder.LAST_CHILD:
                result = ParentControlEditor.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 = ParentControlEditor.Button(TextureIcons.MIDDLE_SIBLING_EXPANDED);
                    break;

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

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

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

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

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

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

        // display the text for the tree view
        //also compute the size max>
        if (!string.IsNullOrEmpty(Header))
        {
            bool isSelected;
            if (ParentControlEditor.SelectedItemEditor == this &&
                !ParentControlEditor.m_forceDefaultSkin)
            {
                //use selected skin
                GUI.skin   = ParentControlEditor.m_skinSelected;
                isSelected = true;
            }
            else
            {
                isSelected = false;
            }

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

                ParentControlEditor.Button(TextureIcons.BLANK);
            }

            if (ParentControlEditor.IsHoverEnabled)
            {
                GUISkin oldSkin = GUI.skin;
                if (isSelected)
                {
                    GUI.skin = ParentControlEditor.m_skinSelected;
                }
                else if (IsHover)
                {
                    GUI.skin = ParentControlEditor.m_skinHover;
                }
                else
                {
                    GUI.skin = ParentControlEditor.m_skinUnselected;
                }
                if (ParentControlEditor.IsHoverAnimationEnabled)
                {
                    GUI.skin.button.fontSize = (int)Mathf.Lerp(12f, 12f, m_hoverTime);
                }
                GUI.SetNextControlName("toggleButton"); //workaround to dirty GUI
                //var size : Vector2 = GUI.skin.GetStyle("ProgressBarText").CalcSize(GUIContent(label));
                Vector2 size = GUI.skin.label.CalcSize(new GUIContent(Header));
                if (size.x + (levels * offset) + 15 > ParentControlEditor.maxWidth)
                {
                    ParentControlEditor.maxWidth = (int)size.x + (levels * offset) + 15;
                }
                //Debug.Log (size.x.ToString()+" size and level*offset "+(levels*offset).ToString());
                if (GUILayout.Button(Header))
                {
                    GUI.FocusControl("toggleButton"); //workaround to dirty GUI
                    if (ParentControlEditor.SelectedItemEditor != this)
                    {
                        ParentControlEditor.SelectedItemEditor = this;
                        this.IsSelected = true;
                        if (null != Selected)
                        {
                            Selected.Invoke(this, new SelectedEventArgs());
                        }
                    }
                    if (null != Click)
                    {
                        Click.Invoke(this, new ClickEventArgs());
                    }
                }
                GUI.skin = oldSkin;
            }
            else
            {
                GUI.SetNextControlName("toggleButton"); //workaround to dirty GUI
                Vector2 size = GUI.skin.label.CalcSize(new GUIContent(Header));
                if (size.x + (levels * offset) + 15 > ParentControlEditor.maxWidth)
                {
                    ParentControlEditor.maxWidth = (int)size.x + (levels * offset) + 15;
                }
                if (GUILayout.Button(Header))
                {
                    GUI.FocusControl("toggleButton");                     //workaround to dirty GUI
                    if (ParentControlEditor.SelectedItemEditor != this)
                    {
                        ParentControlEditor.SelectedItemEditor = this;
                        this.IsSelected = true;
                        if (null != Selected)
                        {
                            Selected.Invoke(this, new SelectedEventArgs());
                        }
                    }
                    if (null != Click)
                    {
                        Click.Invoke(this, new ClickEventArgs());
                    }
                }
            }

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

        GUILayout.EndHorizontal();

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

        if (HasChildItems() &&
            IsExpanded)
        {
            for (int index = 0; index < Items.Count; ++index)
            {
                TreeViewItemEditor 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 (IsSelected &&
            ParentControlEditor.SelectedItemEditor != this)
        {
            if (null != Unselected)
            {
                Unselected.Invoke(this, new UnselectedEventArgs());
            }
        }
        IsSelected = ParentControlEditor.SelectedItemEditor == this;
    }