Exemplo n.º 1
0
        public void DockPlacementTo(Placement placement, Placement target, DockSite site, float stretch)
        {
            if (site == DockSite.Fill)
            {
                target.SwitchType(
                    targetPanelPlacement => {
                    if (placement is TabBarPlacement tabBarPlacement)
                    {
                        DockPlacementTo(tabBarPlacement, targetPanelPlacement);
                    }
                    if (placement is PanelPlacement panelPlacement)
                    {
                        DockPlacementTo(panelPlacement, targetPanelPlacement);
                    }
                },
                    targetTabBarPlacement => {
                    if (placement is TabBarPlacement tabBarPlacement)
                    {
                        DockPlacementTo(tabBarPlacement, targetTabBarPlacement);
                    }
                    if (placement is PanelPlacement panelPlacement)
                    {
                        targetTabBarPlacement.Placements.Add(panelPlacement);
                    }
                },
                    targetSplitPlacement => targetSplitPlacement.Append(placement)
                    );
                return;
            }
            if (target.Parent is TabBarPlacement)
            {
                target = target.Parent;
            }
            var parent         = (SplitPlacement)target.Parent;
            var splitPlacement = new SplitPlacement();
            var isFirst        = site == DockSite.Left || site == DockSite.Top;
            var wasFirst       = parent.FirstChild == target;

            target.Unlink();
            if (isFirst)
            {
                splitPlacement.Initialize(placement, target, site.GetSeparator(), stretch);
            }
            else
            {
                splitPlacement.Initialize(target, placement, site.GetSeparator(), 1 - stretch);
            }
            if (wasFirst)
            {
                parent.FirstChild = splitPlacement;
            }
            else
            {
                parent.SecondChild = splitPlacement;
            }
        }