k9s/internal/view/picker.go

94 lines
2.0 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package view
import (
"context"
"github.com/derailed/k9s/internal/model"
"github.com/derailed/k9s/internal/ui"
"github.com/derailed/k9s/internal/view/cmd"
"github.com/derailed/tcell/v2"
"github.com/derailed/tview"
"k8s.io/apimachinery/pkg/labels"
)
// Picker represents a container picker.
type Picker struct {
*tview.List
actions ui.KeyActions
}
// NewPicker returns a new picker.
func NewPicker() *Picker {
return &Picker{
List: tview.NewList(),
actions: *ui.NewKeyActions(),
}
}
func (*Picker) SetCommand(*cmd.Interpreter) {}
func (*Picker) SetFilter(string) {}
func (*Picker) SetLabelSelector(labels.Selector) {}
// Init initializes the view.
func (p *Picker) Init(ctx context.Context) error {
app, err := extractApp(ctx)
if err != nil {
return err
}
pickerView := app.Styles.Views().Picker
p.actions.Add(tcell.KeyEscape, ui.NewKeyAction("Back", app.PrevCmd, true))
p.SetBorder(true)
p.SetMainTextColor(pickerView.MainColor.Color())
p.ShowSecondaryText(false)
p.SetShortcutColor(pickerView.ShortcutColor.Color())
p.SetSelectedBackgroundColor(pickerView.FocusColor.Color())
p.SetTitle(" [aqua::b]Containers Picker ")
p.SetInputCapture(func(evt *tcell.EventKey) *tcell.EventKey {
if a, ok := p.actions.Get(evt.Key()); ok {
a.Action(evt)
evt = nil
}
return evt
})
return nil
}
// InCmdMode checks if prompt is active.
func (*Picker) InCmdMode() bool {
return false
}
// Start starts the view.
func (*Picker) Start() {}
// Stop stops the view.
func (*Picker) Stop() {}
// Name returns the component name.
func (*Picker) Name() string { return "picker" }
// Hints returns the view hints.
func (p *Picker) Hints() model.MenuHints {
return p.actions.Hints()
}
// ExtraHints returns additional hints.
func (*Picker) ExtraHints() map[string]string {
return nil
}
func (p *Picker) populate(ss []string) {
p.Clear()
for i, s := range ss {
p.AddItem(s, "Select a container", rune('a'+i), nil)
}
}