Ejemplo n.º 1
0
        /// <summary>
        /// Create child dock panel
        /// </summary>
        /// <param name="state">Dock panel state</param>
        /// <param name="splitterValue">Initial splitter value</param>
        /// <returns>Child panel</returns>
        public DockPanel CreateChildPanel(DockState state, float splitterValue)
        {
            CreateTabsProxy();

            // Create child dock panel
            var dockPanel = new DockPanel(this);

            // Switch dock mode
            Control     c1;
            Control     c2;
            Orientation o;

            switch (state)
            {
            case DockState.DockTop:
            {
                o  = Orientation.Vertical;
                c1 = dockPanel;
                c2 = _tabsProxy;
                break;
            }

            case DockState.DockBottom:
            {
                splitterValue = 1 - splitterValue;
                o             = Orientation.Vertical;
                c1            = _tabsProxy;
                c2            = dockPanel;
                break;
            }

            case DockState.DockLeft:
            {
                o  = Orientation.Horizontal;
                c1 = dockPanel;
                c2 = _tabsProxy;
                break;
            }

            case DockState.DockRight:
            {
                splitterValue = 1 - splitterValue;
                o             = Orientation.Horizontal;
                c1            = _tabsProxy;
                c2            = dockPanel;
                break;
            }

            default: throw new ArgumentOutOfRangeException();
            }

            // Create splitter and link controls
            var        parent   = _tabsProxy.Parent;
            SplitPanel splitter = new SplitPanel(o, ScrollBars.None, ScrollBars.None);

            splitter.DockStyle     = DockStyle.Fill;
            splitter.SplitterValue = splitterValue;
            splitter.Panel1.AddChild(c1);
            splitter.Panel2.AddChild(c2);
            parent.AddChild(splitter);

            // Update
            splitter.UnlockChildrenRecursive();
            splitter.PerformLayout();

            return(dockPanel);
        }