Fix tree rendering

Fixes some tree rendering problems where lines were not properly drawn
at some levels during some circumstances.

* Change the API back to only allow one root.
* Now uses a stack based approach to rendering instead of recursion.
* Removes the need for measuring the whole tree in advance.
  Leave this up to each child to render.
This commit is contained in:
Patrik Svensson
2021-01-09 18:34:07 +01:00
committed by Patrik Svensson
parent 0e0f4b4220
commit 8261b25e5c
34 changed files with 697 additions and 446 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,5 +1,5 @@
Title: Bar Chart
Order: 1
Order: 20
---
Use `BarChart` to render bar charts to the console.

View File

@ -1,5 +1,5 @@
Title: Calendar
Order: 3
Order: 40
RedirectFrom: calendar
---

View File

@ -1,5 +1,5 @@
Title: Canvas Image
Order: 6
Order: 70
---
To add [ImageSharp](https://github.com/SixLabors/ImageSharp) superpowers to

View File

@ -1,5 +1,5 @@
Title: Canvas
Order: 5
Order: 60
---
`Canvas` is a widget that allows you to render arbitrary "pixels"

View File

@ -1,5 +1,5 @@
Title: Figlet
Order: 4
Order: 50
RedirectFrom: figlet
---

View File

@ -1,5 +1,5 @@
Title: Rule
Order: 2
Order: 30
RedirectFrom: rule
---

View File

@ -0,0 +1,70 @@
Title: Tree
Order: 10
---
The `Tree` widget can be used to render hierarchical data.
<img src="../assets/images/tree.png" style="width: 100%;" />
# Usage
```csharp
// Create the tree
var tree = new Tree("Root");
// Add some nodes
var foo = tree.AddNode("[yellow]Foo[/]");
var table = foo.AddNode(new Table()
.RoundedBorder()
.AddColumn("First")
.AddColumn("Second")
.AddRow("1", "2")
.AddRow("3", "4")
.AddRow("5", "6"));
table.AddNode("[blue]Baz[/]");
foo.AddNode("Qux");
var bar = tree.AddNode("[yellow]Bar[/]");
bar.AddNode(new Calendar(2020, 12)
.AddCalendarEvent(2020, 12, 12)
.HideHeader());
// Render the tree
AnsiConsole.Render(root);
```
# Collapsing nodes
```csharp
root.AddNode("Label").Collapsed();
```
# Appearance
## Style
```csharp
var root = new Tree("Root")
.Style("white on red");
```
## Guide lines
```csharp
// ASCII guide lines
var root = new Tree("Root")
.Guide(TreeGuide.Ascii);
// Default guide lines
var root = new Tree("Root")
.Guide(TreeGuide.Line);
// Double guide lines
var root = new Tree("Root")
.Guide(TreeGuide.DoubleLine);
// Bold guide lines
var root = new Tree("Root")
.Guide(TreeGuide.BoldLine);
```