Did a lot of work off-repo, basically init
This commit is contained in:
79
ui/button.go
Normal file
79
ui/button.go
Normal file
@ -0,0 +1,79 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gdamore/tcell/v2"
|
||||
)
|
||||
|
||||
type Button struct {
|
||||
Text string
|
||||
Callback func()
|
||||
|
||||
x, y int
|
||||
width, height int
|
||||
focused bool
|
||||
|
||||
Theme *Theme
|
||||
}
|
||||
|
||||
func NewButton(text string, theme *Theme, callback func()) *Button {
|
||||
return &Button{
|
||||
Text: text,
|
||||
Callback: callback,
|
||||
Theme: theme,
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Button) Draw(s tcell.Screen) {
|
||||
var str string
|
||||
if b.focused {
|
||||
str = fmt.Sprintf("🭬 %s 🭮", b.Text)
|
||||
} else {
|
||||
str = fmt.Sprintf(" %s ", b.Text)
|
||||
}
|
||||
DrawStr(s, b.x, b.y, str, b.Theme.GetOrDefault("Button"))
|
||||
}
|
||||
|
||||
func (b *Button) SetFocused(v bool) {
|
||||
b.focused = v
|
||||
}
|
||||
|
||||
func (b *Button) SetTheme(theme *Theme) {
|
||||
b.Theme = theme
|
||||
}
|
||||
|
||||
func (b *Button) GetPos() (int, int) {
|
||||
return b.x, b.y
|
||||
}
|
||||
|
||||
func (b *Button) SetPos(x, y int) {
|
||||
b.x, b.y = x, y
|
||||
}
|
||||
|
||||
func (b *Button) GetMinSize() (int, int) {
|
||||
return len(b.Text) + 4, 1
|
||||
}
|
||||
|
||||
func (b *Button) GetSize() (int, int) {
|
||||
return b.GetMinSize()
|
||||
}
|
||||
|
||||
func (b *Button) SetSize(width, height int) {}
|
||||
|
||||
func (b *Button) HandleEvent(event tcell.Event) bool {
|
||||
if b.focused {
|
||||
switch ev := event.(type) {
|
||||
case *tcell.EventKey:
|
||||
if ev.Key() == tcell.KeyEnter {
|
||||
if b.Callback != nil {
|
||||
b.Callback()
|
||||
}
|
||||
}
|
||||
default:
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
Reference in New Issue
Block a user