Exemple #1
0
 public PanelPlacement AddPanel(Panel panel, Placement targetPlacement, DockSite site, float stretch = 0.25f)
 {
     return(Model.AddPanel(panel, targetPlacement, site, stretch));
 }
Exemple #2
0
        public void DockPlacementTo(Placement placement, Placement target, DockSite site, float stretch)
        {
            if (site == DockSite.Fill)
            {
                target.SwitchType(
                    targetPanelPlacement => {
                    switch (placement)
                    {
                    case TabBarPlacement tabBarPlacement:
                        DockPlacementTo(tabBarPlacement, targetPanelPlacement);
                        break;

                    case PanelPlacement panelPlacement:
                        DockPlacementTo(panelPlacement, targetPanelPlacement);
                        break;

                    case LinearPlacement linearPlacement:
                        DockPlacementTo(linearPlacement, targetPanelPlacement);
                        break;
                    }
                },
                    targetTabBarPlacement => {
                    switch (placement)
                    {
                    case TabBarPlacement tabBarPlacement:
                        DockPlacementTo(tabBarPlacement, targetTabBarPlacement);
                        break;

                    case PanelPlacement panelPlacement:
                        targetTabBarPlacement.Placements.Insert(0, panelPlacement);
                        break;

                    case LinearPlacement linearPlacement:
                        DockPlacementTo(linearPlacement, targetTabBarPlacement);
                        break;
                    }
                },
                    targetLinearPlacement => {
                    switch (placement)
                    {
                    case LinearPlacement linearPlacement:
                        DockPlacementTo(linearPlacement, targetLinearPlacement);
                        break;

                    case TabBarPlacement _:
                    case PanelPlacement _:
                        targetLinearPlacement.Placements.Add(placement);
                        targetLinearPlacement.Stretches.Add(
                            AdjustStretch(targetLinearPlacement, stretch, targetLinearPlacement.Placements.Count - 1));
                        break;
                    }
                }
                    );
                return;
            }
            int index = 0;

            if (!(target is LinearPlacement parent))
            {
                if (target.Parent is TabBarPlacement parentTabBarPlacement)
                {
                    target = parentTabBarPlacement;
                }
                if (!CheckPlacement((LinearPlacement)target.Parent, site, out parent))
                {
                    ReplacePlacement(target, parent, site, ref stretch, ref index);
                }
                else
                {
                    index   = parent.Placements.IndexOf(target);
                    stretch = AdjustStretch(parent, stretch, index);
                    if (site == DockSite.Right || site == DockSite.Bottom)
                    {
                        ++index;
                    }
                }
            }