...

Source file src/github.com/rivo/tview/demos/presentation/grid.go

Documentation: github.com/rivo/tview/demos/presentation

     1  package main
     2  
     3  import (
     4  	"github.com/gdamore/tcell/v2"
     5  	"github.com/rivo/tview"
     6  )
     7  
     8  // Grid demonstrates the grid layout.
     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  	// Layout for screens narrower than 100 cells (menu and side bar are hidden).
    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  	// Layout for screens wider than 100 cells.
    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