Added Primitive demo to go along with the GitHub Wiki entry on how to create your own primitive.
parent
b357eaf10f
commit
761e3d72da
@ -0,0 +1 @@
|
||||

|
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
@ -0,0 +1,70 @@
|
||||
// Demo code which illustrates how to implement your own primitive.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gdamore/tcell"
|
||||
"github.com/rivo/tview"
|
||||
)
|
||||
|
||||
// RadioButtons implements a simple primitive for radio button selections.
|
||||
type RadioButtons struct {
|
||||
*tview.Box
|
||||
options []string
|
||||
currentOption int
|
||||
}
|
||||
|
||||
// NewRadioButtons returns a new radio button primitive.
|
||||
func NewRadioButtons(options []string) *RadioButtons {
|
||||
return &RadioButtons{
|
||||
Box: tview.NewBox(),
|
||||
options: options,
|
||||
}
|
||||
}
|
||||
|
||||
// Draw draws this primitive onto the screen.
|
||||
func (r *RadioButtons) Draw(screen tcell.Screen) {
|
||||
r.Box.Draw(screen)
|
||||
x, y, width, height := r.GetInnerRect()
|
||||
|
||||
for index, option := range r.options {
|
||||
if index >= height {
|
||||
break
|
||||
}
|
||||
radioButton := "\u25ef" // Unchecked.
|
||||
if index == r.currentOption {
|
||||
radioButton = "\u25c9" // Checked.
|
||||
}
|
||||
line := fmt.Sprintf(`%s[white] %s`, radioButton, option)
|
||||
tview.Print(screen, line, x, y+index, width, tview.AlignLeft, tcell.ColorYellow)
|
||||
}
|
||||
}
|
||||
|
||||
// InputHandler returns the handler for this primitive.
|
||||
func (r *RadioButtons) InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
|
||||
return r.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
|
||||
switch event.Key() {
|
||||
case tcell.KeyUp:
|
||||
r.currentOption--
|
||||
if r.currentOption < 0 {
|
||||
r.currentOption = 0
|
||||
}
|
||||
case tcell.KeyDown:
|
||||
r.currentOption++
|
||||
if r.currentOption >= len(r.options) {
|
||||
r.currentOption = len(r.options) - 1
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func main() {
|
||||
radioButtons := NewRadioButtons([]string{"Lions", "Elephants", "Giraffes"})
|
||||
radioButtons.SetBorder(true).
|
||||
SetTitle("Radio Button Demo").
|
||||
SetRect(0, 0, 30, 5)
|
||||
if err := tview.NewApplication().SetRoot(radioButtons, false).Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Loading…
Reference in New Issue