public void CollapseNode(bool left) { var nodeA = left ? m_nodeL : m_nodeR; var nodeB = left ? m_nodeR : m_nodeL; if (nodeB.IsContentNode()) { m_content = nodeB.m_content; m_contentFocus = nodeB.m_contentFocus; nodeB.Clear(); nodeA.Clear(); m_nodeL = null; m_nodeR = null; } else { m_info.m_orient = nodeB.m_info.m_orient; m_nodeL = nodeB.m_nodeL; m_nodeR = nodeB.m_nodeR; m_nodeL.m_parent = this; m_nodeR.m_parent = this; m_separator = nodeB.m_separator; m_separator.m_parent = this; nodeB.Clear(); nodeA.Clear(); } }
public void AddContent(GUIDockContentBase c, GUIDockPlace place) { if (place == GUIDockPlace.center) { AddContent(c); return; } else if (place != GUIDockPlace.none) { bool p = (place == GUIDockPlace.left || place == GUIDockPlace.top); var contents = m_content; var node1 = new GUIDockNode(this, c); var node2 = new GUIDockNode(this, contents); node1.m_contentFocus = c; node2.m_contentFocus = m_contentFocus; m_nodeL = p ? node1 : node2; m_nodeR = p ? node2 : node1; SwithcMode(false); m_info.m_orient = (place == GUIDockPlace.left || place == GUIDockPlace.right) ? GUIDockOrient.Horizontal : GUIDockOrient.Vertical; Console.WriteLine(m_info.m_orient.ToString()); } }
public GUIDockNode(GUIDockNode parent, GUIDockContentBase c) { m_parent = parent; m_content = new List <GUIDockContentBase>(); m_content.Add(c); m_contentFocus = c; SwithcMode(true); }
public void Clear() { m_nodeL = null; m_nodeR = null; m_content = null; m_contentFocus = null; m_info = null; m_parent = null; m_mgr = null; m_separator = null; }
public void SwithcMode(bool contentMode) { if (contentMode) { m_nodeL = null; m_nodeR = null; } else { m_content = null; m_contentFocus = null; if (m_separator == null) { m_separator = new GUIDockSeparator(this); } } }
public GUIDockNode(GUIDockNode parent, List <GUIDockContentBase> cs) { m_parent = parent; m_content = cs; if (m_contentFocus == null || !cs.Contains(m_contentFocus)) { if (cs.Count > 0) { m_contentFocus = m_content[0]; } else { m_contentFocus = null; } } SwithcMode(true); }
private bool CheckPlaceValid(GUIDockPlace place, GUIDockNode src) { if (this == src) { if (src.m_content.Count == 1) { return(false); } if (place == GUIDockPlace.center) { return(false); } return(true); } else if (this.m_parent == src.m_parent) { bool nodeatleft = m_parent.m_nodeL == this; bool horizontal = m_parent.m_info.m_orient == GUIDockOrient.Horizontal; if (horizontal) { if (place == GUIDockPlace.left && !nodeatleft) { return(false); } if (place == GUIDockPlace.right && nodeatleft) { return(false); } } else { if (place == GUIDockPlace.top && !nodeatleft) { return(false); } if (place == GUIDockPlace.bottom && nodeatleft) { return(false); } } } return(true); }
private void SetDockPlaceImpl(GUIDockPlace place, GUIDockContentBase content, GUIDockNode src, GUIDockNode dst) { //remove src.RemoveContent(content); //append dst.AddContent(content, place); m_dockChanged = true; }
public void SetDockPlace(GUIDockPlace place, GUIDockContentBase content, GUIDockNode src, GUIDockNode dst) { m_slotDockPlace += () => { SetDockPlaceImpl(place, content, src, dst); }; }
public GUIDockMgr() { m_root = new GUIDockNode(); m_root.m_mgr = this; }
private GUIDockPlace DrawOnDockContentDrag(GUIDockContentBase content, GUIDockNode src) { GUIDockPlace dockPlace = GUIDockPlace.none; GUI.BeginGroup(m_info.m_sizeab, null, true); { GUI.BeginDepthLayer(1); { float rsize = 40; var center = m_info.m_sizeab.Size() * 0.5f; var rectbasic = new Vector4(center - rsize * 0.5f * Vector2.One, rsize, rsize); bool activeChecked = false; var pointer = GUI.Event.Pointer; //center if (CheckPlaceValid(GUIDockPlace.center, src)) { if (!activeChecked && GUIUtility.RectContainsCheck(GUI.GetRectAbsolute(rectbasic), pointer)) { GUI.Rect(rectbasic, GUIStyle.Current.ColorActive); activeChecked = true; dockPlace = GUIDockPlace.center; } else { GUI.Rect(rectbasic, GUIStyle.Current.ColorActiveD); } } else { GUI.Rect(rectbasic, GUIStyle.Current.ColorDisabled); } //left var rect = rectbasic.Move(-35, 0).SetSize(30, rsize); if (CheckPlaceValid(GUIDockPlace.left, src)) { if (!activeChecked && GUIUtility.RectContainsCheck(GUI.GetRectAbsolute(rect), pointer)) { GUI.Rect(rect, GUIStyle.Current.ColorActive); activeChecked = true; dockPlace = GUIDockPlace.left; } else { GUI.Rect(rect, GUIStyle.Current.ColorActiveD); } } else { GUI.Rect(rect, GUIStyle.Current.ColorDisabled); } //right rect = rectbasic.Move(45, 0).SetSize(30, rsize); if (CheckPlaceValid(GUIDockPlace.right, src)) { if (!activeChecked && GUIUtility.RectContainsCheck(GUI.GetRectAbsolute(rect), pointer)) { GUI.Rect(rect, GUIStyle.Current.ColorActive); activeChecked = true; dockPlace = GUIDockPlace.right; } else { GUI.Rect(rect, GUIStyle.Current.ColorActiveD); } } else { GUI.Rect(rect, GUIStyle.Current.ColorDisabled); } //top rect = rectbasic.Move(0, -35).SetSize(rsize, 30); if (CheckPlaceValid(GUIDockPlace.top, src)) { if (!activeChecked && GUIUtility.RectContainsCheck(GUI.GetRectAbsolute(rect), pointer)) { GUI.Rect(rect, GUIStyle.Current.ColorActive); activeChecked = true; dockPlace = GUIDockPlace.top; } else { GUI.Rect(rect, GUIStyle.Current.ColorActiveD); } } else { GUI.Rect(rect, GUIStyle.Current.ColorDisabled); } //bottom rect = rectbasic.Move(0, 45).SetSize(rsize, 30); if (CheckPlaceValid(GUIDockPlace.bottom, src)) { if (!activeChecked && GUIUtility.RectContainsCheck(GUI.GetRectAbsolute(rect), pointer)) { GUI.Rect(rect, GUIStyle.Current.ColorActive); activeChecked = true; dockPlace = GUIDockPlace.bottom; } else { GUI.Rect(rect, GUIStyle.Current.ColorActiveD); } } else { GUI.Rect(rect, GUIStyle.Current.ColorDisabled); } } GUI.EndDepthLayer(); } GUI.EndGroup(); if (content.InternalTabBtnDragState.Stage != GUIDragStateStage.Exit) { return(GUIDockPlace.none); } return(dockPlace); }
public GUIDockSeparator(GUIDockNode parent) { m_parent = parent; }