Tree widget
This commit is contained in:
127
_examples/tree.go
Normal file
127
_examples/tree.go
Normal file
@@ -0,0 +1,127 @@
|
||||
/// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
ui "github.com/gizak/termui/v3"
|
||||
"github.com/gizak/termui/v3/widgets"
|
||||
)
|
||||
|
||||
type nodeValue string
|
||||
|
||||
func (nv nodeValue) String() string {
|
||||
return string(nv)
|
||||
}
|
||||
|
||||
func main() {
|
||||
if err := ui.Init(); err != nil {
|
||||
log.Fatalf("failed to initialize termui: %v", err)
|
||||
}
|
||||
defer ui.Close()
|
||||
|
||||
nodes := []*widgets.TreeNode{
|
||||
{
|
||||
Value: nodeValue("Key 1"),
|
||||
Nodes: []*widgets.TreeNode{
|
||||
{
|
||||
Value: nodeValue("Key 1.1"),
|
||||
Nodes: []*widgets.TreeNode{
|
||||
{
|
||||
Value: nodeValue("Key 1.1.1"),
|
||||
Nodes: nil,
|
||||
},
|
||||
{
|
||||
Value: nodeValue("Key 1.1.2"),
|
||||
Nodes: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Value: nodeValue("Key 1.2"),
|
||||
Nodes: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Value: nodeValue("Key 2"),
|
||||
Nodes: []*widgets.TreeNode{
|
||||
{
|
||||
Value: nodeValue("Key 2.1"),
|
||||
Nodes: nil,
|
||||
},
|
||||
{
|
||||
Value: nodeValue("Key 2.2"),
|
||||
Nodes: nil,
|
||||
},
|
||||
{
|
||||
Value: nodeValue("Key 2.3"),
|
||||
Nodes: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Value: nodeValue("Key 3"),
|
||||
Nodes: nil,
|
||||
},
|
||||
}
|
||||
|
||||
l := widgets.NewTree()
|
||||
l.TextStyle = ui.NewStyle(ui.ColorYellow)
|
||||
l.WrapText = false
|
||||
l.Nodes = nodes
|
||||
|
||||
x, y := ui.TerminalDimensions()
|
||||
|
||||
l.SetRect(0, 0, x, y)
|
||||
|
||||
ui.Render(l)
|
||||
|
||||
previousKey := ""
|
||||
uiEvents := ui.PollEvents()
|
||||
for {
|
||||
e := <-uiEvents
|
||||
switch e.ID {
|
||||
case "q", "<C-c>":
|
||||
return
|
||||
case "j", "<Down>":
|
||||
l.ScrollDown()
|
||||
case "k", "<Up>":
|
||||
l.ScrollUp()
|
||||
case "<C-d>":
|
||||
l.ScrollHalfPageDown()
|
||||
case "<C-u>":
|
||||
l.ScrollHalfPageUp()
|
||||
case "<C-f>":
|
||||
l.ScrollPageDown()
|
||||
case "<C-b>":
|
||||
l.ScrollPageUp()
|
||||
case "g":
|
||||
if previousKey == "g" {
|
||||
l.ScrollTop()
|
||||
}
|
||||
case "<Home>":
|
||||
l.ScrollTop()
|
||||
case "<Enter>":
|
||||
l.ToggleExpand()
|
||||
case "G", "<End>":
|
||||
l.ScrollBottom()
|
||||
case "E":
|
||||
l.ExpandAll()
|
||||
case "C":
|
||||
l.CollapseAll()
|
||||
case "<Resize>":
|
||||
x, y := ui.TerminalDimensions()
|
||||
l.SetRect(0, 0, x, y)
|
||||
}
|
||||
|
||||
if previousKey == "g" {
|
||||
previousKey = ""
|
||||
} else {
|
||||
previousKey = e.ID
|
||||
}
|
||||
|
||||
ui.Render(l)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user