cview/demos/presentation/grid.go

62 lines
1.6 KiB
Go
Raw Normal View History

package main
import (
"code.rocketnine.space/tslocum/cview"
2020-08-30 15:36:03 +00:00
"github.com/gdamore/tcell/v2"
)
// Grid demonstrates the grid layout.
func Grid(nextSlide func()) (title string, info string, content cview.Primitive) {
modalShown := false
2020-10-15 16:12:10 +00:00
panels := cview.NewPanels()
newPrimitive := func(text string) cview.Primitive {
tv := cview.NewTextView()
tv.SetTextAlign(cview.AlignCenter)
tv.SetText(text)
tv.SetDoneFunc(func(key tcell.Key) {
if modalShown {
nextSlide()
modalShown = false
} else {
2020-10-16 01:50:10 +00:00
panels.ShowPanel("modal")
modalShown = true
}
})
return tv
}
menu := newPrimitive("Menu")
main := newPrimitive("Main content")
sideBar := newPrimitive("Side Bar")
grid := cview.NewGrid()
grid.SetRows(3, 0, 3)
grid.SetColumns(0, -4, 0)
grid.SetBorders(true)
grid.AddItem(newPrimitive("Header"), 0, 0, 1, 3, 0, 0, true)
grid.AddItem(newPrimitive("Footer"), 2, 0, 1, 3, 0, 0, false)
// Layout for screens narrower than 100 cells (menu and side bar are hidden).
grid.AddItem(menu, 0, 0, 0, 0, 0, 0, false)
grid.AddItem(main, 1, 0, 1, 3, 0, 0, false)
grid.AddItem(sideBar, 0, 0, 0, 0, 0, 0, false)
// Layout for screens wider than 100 cells.
grid.AddItem(menu, 1, 0, 1, 1, 0, 100, false)
grid.AddItem(main, 1, 1, 1, 1, 0, 100, false)
grid.AddItem(sideBar, 1, 2, 1, 1, 0, 100, false)
modal := cview.NewModal()
modal.SetText("Resize the window to see how the grid layout adapts")
modal.AddButtons([]string{"Ok"})
modal.SetDoneFunc(func(buttonIndex int, buttonLabel string) {
2020-10-16 01:50:10 +00:00
panels.HidePanel("modal")
})
2020-10-16 01:50:10 +00:00
panels.AddPanel("grid", grid, true, true)
panels.AddPanel("modal", modal, false, false)
return "Grid", "", panels
}