You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

112 lines
2.7 KiB

package help
import (
"fmt"
"git.brettb.xyz/goinv/client/internal/ui/style"
"git.brettb.xyz/goinv/client/internal/ui/utils"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
type Help struct {
*tview.Box
title string
layout *tview.Flex
}
func NewHelp(appName string, appVersion string) *Help {
help := &Help{
Box: tview.NewBox(),
title: "help",
}
headerColor := style.HelpHeaderFgColor
fgColor := style.FgColor
bgColor := style.BgColor
borderColor := style.BorderColor
keyinfo := tview.NewTable()
keyinfo.SetBackgroundColor(bgColor)
keyinfo.SetFixed(1, 1)
keyinfo.SetSelectable(false, false)
appinfo := tview.NewTextView().
SetDynamicColors(true).
SetWrap(true).
SetTextAlign(tview.AlignLeft)
appinfo.SetBackgroundColor(bgColor)
appInfoText := fmt.Sprintf("%s %s - (C) 2024 Brett Bender", appName, appVersion)
appinfo.SetText(appInfoText)
appinfo.SetTextColor(headerColor)
rowIndex := 0
colIndex := 0
needInit := true
maxRowIndex := len(utils.UIKeyBindings) / 2
for i := 0; i < len(utils.UIKeyBindings); i++ {
if i >= maxRowIndex {
if needInit {
colIndex = 2
rowIndex = 0
needInit = false
}
}
keyinfo.SetCell(rowIndex, colIndex,
tview.NewTableCell(fmt.Sprintf("%s:", utils.UIKeyBindings[i].Label())).
SetAlign(tview.AlignRight).
SetBackgroundColor(bgColor).
SetSelectable(true).SetTextColor(headerColor))
keyinfo.SetCell(rowIndex, colIndex+1,
tview.NewTableCell(utils.UIKeyBindings[i].Description()).
SetAlign(tview.AlignLeft).
SetBackgroundColor(bgColor).
SetSelectable(true).
SetTextColor(fgColor))
rowIndex++
}
mlayout := tview.NewFlex().SetDirection(tview.FlexRow)
mlayout.AddItem(appinfo, 1, 0, false)
mlayout.AddItem(utils.EmptyBoxSpace(bgColor), 1, 0, false)
mlayout.AddItem(keyinfo, 0, 1, false)
mlayout.AddItem(utils.EmptyBoxSpace(bgColor), 1, 0, false)
help.layout = tview.NewFlex().SetDirection(tview.FlexColumn)
help.layout.AddItem(utils.EmptyBoxSpace(bgColor), 1, 0, false)
help.layout.AddItem(mlayout, 0, 1, false)
help.layout.AddItem(utils.EmptyBoxSpace(bgColor), 1, 0, false)
help.layout.SetBorder(true)
help.layout.SetBackgroundColor(bgColor)
help.layout.SetBorderColor(borderColor)
return help
}
func (help *Help) GetTitle() string {
return help.title
}
func (help *Help) HasFocus() bool {
return utils.CheckFocus(help.Box, help.layout)
}
func (help *Help) Focus(delegate func(tview.Primitive)) {
delegate(help.layout)
}
func (help *Help) Draw(screen tcell.Screen) {
x, y, width, height := help.Box.GetInnerRect()
if height <= 3 {
return
}
help.Box.DrawForSubclass(screen, help)
help.layout.SetRect(x, y, width, height)
help.layout.Draw(screen)
}