using System; using System.Collections.Generic; using System.Linq; namespace Unity.VisualScripting { public sealed class Sidebars { public Sidebars() { left = new Sidebar(this, SidebarAnchor.Left); right = new Sidebar(this, SidebarAnchor.Right); } [Serialize] public Sidebar left { get; private set; } [Serialize] public Sidebar right { get; private set; } [Serialize] public List panels { get; private set; } = new List(); [DoNotSerialize] public Sidebar this[SidebarAnchor anchor] { get { switch (anchor) { case SidebarAnchor.Left: return left; case SidebarAnchor.Right: return right; default: throw new UnexpectedEnumValueException(anchor); } } } public void Feed(IEnumerable panelContents) { Ensure.That(nameof(panelContents)).IsNotNull(panelContents); foreach (var panel in panels) { panel.Disable(); } foreach (var panelContent in panelContents) { Feed(panelContent); } } public void Feed(ISidebarPanelContent panelContent) { var associated = panels.Any(panel => panel.TryAssociate(panelContent)); if (!associated) { panels.Add(new SidebarPanel(panelContent)); } foreach (var panel in panels) { panel.sidebars = this; } } public void Remove() where T : ISidebarPanelContent { left.Remove(); right.Remove(); } } }