dive/runtime/ui/components/helpers/key_input_handler.go
dwillist 13c58c0055 refactor keybinding structures into separate package
Signed-off-by: dwillist <dthornton@vmware.com>
2021-02-06 12:47:28 -05:00

38 lines
909 B
Go

package helpers
import (
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
type InputHandleFunc func(event *tcell.EventKey, setFocus func(p tview.Primitive))
// TODO factor out KeyInputHandler and related structs into a separate file
type KeyInputHandler struct {
Order []KeyBindingDisplay
HandlerMap map[*tcell.EventKey]func()
}
func NewKeyInputHandler() *KeyInputHandler {
return &KeyInputHandler{
Order: []KeyBindingDisplay{},
HandlerMap: map[*tcell.EventKey]func(){},
}
}
func (k *KeyInputHandler) AddBinding(binding KeyBindingDisplay, f func()) *KeyInputHandler {
k.Order = append(k.Order, binding)
k.HandlerMap[binding.EventKey] = f
return k
}
func (k *KeyInputHandler) Handle() InputHandleFunc {
return func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
for _, m := range k.Order {
if m.Match(event) {
k.HandlerMap[m.EventKey]()
}
}
}
}