File: flex.go

package info (click to toggle)
golang-github-rivo-tview 0.0~git20230530.8bd761d-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,868 kB
  • sloc: makefile: 3
file content (38 lines) | stat: -rw-r--r-- 1,304 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import (
	"github.com/gdamore/tcell/v2"
	"github.com/rivo/tview"
)

// Flex demonstrates flexbox layout.
func Flex(nextSlide func()) (title string, content tview.Primitive) {
	modalShown := false
	pages := tview.NewPages()
	flex := tview.NewFlex().
		AddItem(tview.NewBox().SetBorder(true).SetTitle("Flexible width, twice of middle column"), 0, 2, true).
		AddItem(tview.NewFlex().
			SetDirection(tview.FlexRow).
			AddItem(tview.NewBox().SetBorder(true).SetTitle("Flexible width"), 0, 1, false).
			AddItem(tview.NewBox().SetBorder(true).SetTitle("Fixed height"), 15, 1, false).
			AddItem(tview.NewBox().SetBorder(true).SetTitle("Flexible height"), 0, 1, false), 0, 1, false).
		AddItem(tview.NewBox().SetBorder(true).SetTitle("Fixed width"), 30, 1, false)
	flex.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
		if modalShown {
			nextSlide()
			modalShown = false
		} else {
			pages.ShowPage("modal")
			modalShown = true
		}
		return event
	})
	modal := tview.NewModal().
		SetText("Resize the window to see the effect of the flexbox parameters").
		AddButtons([]string{"Ok"}).SetDoneFunc(func(buttonIndex int, buttonLabel string) {
		pages.HidePage("modal")
	})
	pages.AddPage("flex", flex, true, true).
		AddPage("modal", modal, false, false)
	return "Flex", pages
}