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(); } }
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; }
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(); } }
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; }