pelican/internal/ui/column.go

72 lines
1.3 KiB
Go
Raw Normal View History

package ui
import (
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
type column struct {
statusID int
statusName string
cards *tview.List
}
2023-04-22 17:50:27 +01:00
func (u *UI) newColumn(statusID int, statusName string) column {
2023-04-23 00:17:34 +01:00
cards := tview.NewList()
2023-04-23 00:17:34 +01:00
cards.SetBorder(true)
cards.ShowSecondaryText(false)
cards.SetTitle(" " + statusName + " ")
cards.SetHighlightFullLine(true)
cards.SetSelectedFocusOnly(true)
cards.SetWrapAround(false)
2023-04-23 00:17:34 +01:00
cards.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
2023-04-23 04:27:16 +01:00
switch event.Rune() {
case 'q':
u.pages.ShowPage(quitPageName)
u.SetFocus(u.quit)
case 'a':
u.pages.ShowPage(addPageName)
u.SetFocus(u.add)
case 'h':
2023-04-22 17:50:27 +01:00
u.shiftColumnFocus(shiftLeft)
2023-04-23 04:27:16 +01:00
case 'l':
2023-04-22 17:50:27 +01:00
u.shiftColumnFocus(shiftRight)
}
return event
})
c := column{
statusID: statusID,
statusName: statusName,
2023-04-23 00:17:34 +01:00
cards: cards,
}
return c
}
2023-04-23 00:17:34 +01:00
func (u *UI) setColumnFocus() {
u.SetFocus(u.columns[u.focusedColumn].cards)
}
func (u *UI) shiftColumnFocus(s int) {
switch s {
case shiftRight:
if u.focusedColumn == len(u.columns)-1 {
u.focusedColumn = 0
} else {
u.focusedColumn++
}
case shiftLeft:
if u.focusedColumn == 0 {
u.focusedColumn = len(u.columns) - 1
} else {
u.focusedColumn--
}
}
u.setColumnFocus()
}