public PanelPlacement AddPanel(Panel panel, Placement targetPlacement, DockSite site, float stretch = 0.25f) { return(Model.AddPanel(panel, targetPlacement, site, stretch)); }
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; } } }