Files
gspt/ui/menu.go
2023-04-17 23:02:50 +05:30

65 lines
1.2 KiB
Go

package ui
import (
"github.com/gdamore/tcell/v2"
"github.com/aditya-K2/tview"
)
var (
minheight = 7
)
// Menu implements the CenteredWidget interface for the Main Screen.
type menu struct {
Menu *tview.Table
title string
content []string
sHandler func(s int)
}
func NewMenu() *menu {
c := &menu{}
menu := tview.NewTable()
menu.SetBorder(true)
menu.SetBorderPadding(1, 1, 1, 1)
menu.SetBorderStyle(tcell.StyleDefault.Foreground(tcell.ColorWhite))
menu.SetBackgroundColor(tcell.ColorDefault)
menu.SetSelectable(true, false)
c.Menu = menu
return c
}
func (c *menu) Size(mw, mh int) (int, int, int, int) {
cheight := mh / 5
if cheight < minheight {
cheight = minheight
}
cwidth := 30
epx := 4
return mw/2 - (cwidth/2 + epx), (mh/2 - (cheight/2 + epx)), cwidth, cheight
}
func (c *menu) ContentHandler() {
for k := range c.content {
c.Menu.SetCell(k, 0,
GetCell(c.content[k], ContextMenuStyle))
}
}
func (c *menu) SelectionHandler() func(s int) {
return c.sHandler
}
func (c *menu) SetSelectionHandler(f func(s int)) {
c.sHandler = f
}
func (c *menu) Primitive() *tview.Table { return c.Menu }
func (c *menu) Content(s []string) { c.content = s }
func (c *menu) Title(s string) { c.Menu.SetTitle(s) }