k9s/internal/views/select_list.go

78 lines
1.5 KiB
Go

package views
import (
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/ui"
"github.com/derailed/tview"
"github.com/gdamore/tcell"
)
type selectList struct {
*tview.List
parent loggable
actions ui.KeyActions
}
func newSelectList(parent loggable) *selectList {
v := selectList{List: tview.NewList(), actions: ui.KeyActions{}}
{
v.parent = parent
v.SetBorder(true)
v.SetMainTextColor(tcell.ColorWhite)
v.ShowSecondaryText(false)
v.SetShortcutColor(tcell.ColorAqua)
v.SetSelectedBackgroundColor(tcell.ColorAqua)
v.SetTitle(" [aqua::b]Container Selector ")
v.SetInputCapture(func(evt *tcell.EventKey) *tcell.EventKey {
if a, ok := v.actions[evt.Key()]; ok {
a.Action(evt)
evt = nil
}
return evt
})
}
return &v
}
func (v *selectList) back(evt *tcell.EventKey) *tcell.EventKey {
v.parent.switchPage("master")
return nil
}
// Protocol...
func (v *selectList) switchPage(p string) {
v.parent.switchPage(p)
}
func (v *selectList) getList() resource.List {
return v.parent.getList()
}
func (v *selectList) getSelection() string {
return v.parent.getSelection()
}
// SetActions to handle keyboard events.
func (v *selectList) setActions(aa ui.KeyActions) {
v.actions = aa
}
func (v *selectList) Hints() ui.Hints {
if v.actions != nil {
return v.actions.Hints()
}
return nil
}
func (v *selectList) populate(ss []string) {
v.Clear()
for i, s := range ss {
v.AddItem(s, "Select a container", rune('a'+i), nil)
}
}