Exemple #1
0
        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();
            }
        }
Exemple #2
0
        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());
            }
        }
Exemple #3
0
        public GUIDockNode(GUIDockNode parent, GUIDockContentBase c)
        {
            m_parent  = parent;
            m_content = new List <GUIDockContentBase>();
            m_content.Add(c);
            m_contentFocus = c;

            SwithcMode(true);
        }
Exemple #4
0
        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;
        }
Exemple #5
0
 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);
         }
     }
 }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        private void SetDockPlaceImpl(GUIDockPlace place, GUIDockContentBase content, GUIDockNode src, GUIDockNode dst)
        {
            //remove
            src.RemoveContent(content);

            //append
            dst.AddContent(content, place);

            m_dockChanged = true;
        }
Exemple #9
0
 public void SetDockPlace(GUIDockPlace place, GUIDockContentBase content, GUIDockNode src, GUIDockNode dst)
 {
     m_slotDockPlace += () => { SetDockPlaceImpl(place, content, src, dst); };
 }
Exemple #10
0
 public GUIDockMgr()
 {
     m_root       = new GUIDockNode();
     m_root.m_mgr = this;
 }
Exemple #11
0
        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);
        }
Exemple #12
0
 public GUIDockSeparator(GUIDockNode parent)
 {
     m_parent = parent;
 }