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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// Demo code for the FocusManager utility.
package main
import (
"log"
"code.rocketnine.space/tslocum/cbind"
"code.rocketnine.space/tslocum/cview"
"github.com/gdamore/tcell/v2"
)
func wrap(f func()) func(ev *tcell.EventKey) *tcell.EventKey {
return func(ev *tcell.EventKey) *tcell.EventKey {
f()
return nil
}
}
func main() {
app := cview.NewApplication()
app.EnableMouse(true)
input1 := cview.NewInputField()
input1.SetLabel("InputField 1")
input2 := cview.NewInputField()
input2.SetLabel("InputField 2")
input3 := cview.NewInputField()
input3.SetLabel("InputField 3")
input4 := cview.NewInputField()
input4.SetLabel("InputField 4")
grid := cview.NewGrid()
grid.SetBorder(true)
grid.SetTitle(" Press Tab to advance focus ")
grid.AddItem(input1, 0, 0, 1, 1, 0, 0, true)
grid.AddItem(input2, 0, 1, 1, 1, 0, 0, false)
grid.AddItem(input3, 1, 1, 1, 1, 0, 0, false)
grid.AddItem(input4, 1, 0, 1, 1, 0, 0, false)
focusManager := cview.NewFocusManager(app.SetFocus)
focusManager.SetWrapAround(true)
focusManager.Add(input1, input2, input3, input4)
inputHandler := cbind.NewConfiguration()
for _, key := range cview.Keys.MovePreviousField {
err := inputHandler.Set(key, wrap(focusManager.FocusPrevious))
if err != nil {
log.Fatal(err)
}
}
for _, key := range cview.Keys.MoveNextField {
err := inputHandler.Set(key, wrap(focusManager.FocusNext))
if err != nil {
log.Fatal(err)
}
}
app.SetInputCapture(inputHandler.Capture)
app.SetRoot(grid, true)
if err := app.Run(); err != nil {
panic(err)
}
}
|