qamp/Qrakhen.TilingFrames/README.md

45 lines
1.6 KiB
Markdown

# 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).
### TilingNode
### TilingPanel
### TilingHost
### HostFrame
### 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.