1 package main
2
3 import (
4 "github.com/gdamore/tcell/v2"
5 "github.com/rivo/tview"
6 )
7
8
9 func Grid(nextSlide func()) (title string, content tview.Primitive) {
10 modalShown := false
11 pages := tview.NewPages()
12
13 newPrimitive := func(text string) tview.Primitive {
14 return tview.NewFrame(nil).
15 SetBorders(0, 0, 0, 0, 0, 0).
16 AddText(text, true, tview.AlignCenter, tcell.ColorWhite)
17 }
18
19 menu := newPrimitive("Menu")
20 main := newPrimitive("Main content")
21 sideBar := newPrimitive("Side Bar")
22
23 grid := tview.NewGrid().
24 SetRows(3, 0, 3).
25 SetColumns(0, -4, 0).
26 SetBorders(true).
27 AddItem(newPrimitive("Header"), 0, 0, 1, 3, 0, 0, true).
28 AddItem(newPrimitive("Footer"), 2, 0, 1, 3, 0, 0, false)
29 grid.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
30 if modalShown {
31 nextSlide()
32 modalShown = false
33 } else {
34 pages.ShowPage("modal")
35 modalShown = true
36 }
37 return event
38 })
39
40
41 grid.AddItem(menu, 0, 0, 0, 0, 0, 0, false).
42 AddItem(main, 1, 0, 1, 3, 0, 0, false).
43 AddItem(sideBar, 0, 0, 0, 0, 0, 0, false)
44
45
46 grid.AddItem(menu, 1, 0, 1, 1, 0, 100, false).
47 AddItem(main, 1, 1, 1, 1, 0, 100, false).
48 AddItem(sideBar, 1, 2, 1, 1, 0, 100, false)
49
50 modal := tview.NewModal().
51 SetText("Resize the window to see how the grid layout adapts").
52 AddButtons([]string{"Ok"}).SetDoneFunc(func(buttonIndex int, buttonLabel string) {
53 pages.HidePage("modal")
54 })
55
56 pages.AddPage("grid", grid, true, true).
57 AddPage("modal", modal, false, false)
58
59 return "Grid", pages
60 }
61
View as plain text