# TilingPanels ## Tiling window manager control library for WPF ### CopaData.Ui.Wpf.TilingPanels Cool Library to have tiling panels. Is that not cool? I think it very much is cool. Very nice, yes. Alpha & Beta. No Gamma or Delta. Just Alpha-Beta. Data structure resembles a binary tree with uniform branch- and end-nodes (TilingPanels & TilingHosts). ### Node ### Panel ### Host ### Frame ### Window ### Node Structure ```cs RootPanel / \ A B / \ Panel Host / \ |-Frame (Single Frame) / \ Panel Host / \ |-Frame (Tab) / . |-Frame (Tab) Host |-Frame (Tab) |-Frame (Tab) |-Frame (Tab) ``` Key Behaviours: - All Panels have information about how and where their content is split in two. - Every panel may have up to two children (Alpha/Beta), where Alpha is never null. - Beta may not be set (In a case of a single frame with no splits, for example). - If a child located at Alpha is detached, Beta will move to alpha, to ensure the 'Alpha is always set' paradigm. - If a child is detached and both alpha and beta result in being null, the entire Panel is detached from its parent. - Hosts are always at the end of the branches, everything above a Node is a Panel. - The things you're dragging around to re-order, separate and split panels are Frames. - Hosts contain Frames, which will be displayed as tabs if stacked atop each other, or as a single frame if only one is present. - All mutations of the tree structure expect the root node as their first argument. That is done so there's no two-way referencing and to keep stuff simple.