updated structure

This commit is contained in:
2024-10-12 17:49:55 +02:00
parent d4f6c4104d
commit 039bc27999
9 changed files with 201 additions and 285 deletions
+18 -38
View File
@@ -8,26 +8,10 @@ import (
"github.com/orus-dev/osui/isKey"
)
type MenuParams struct {
Style MenuStyle
OnSelected func(*MenuComponent, bool)
}
type MenuStyle struct {
Fg string `default:"" type:"fg"`
Bg string `default:"" type:"bg"`
SelectedFg string `default:"\x1b[34m" type:"fg"`
SelectedBg string `default:"" type:"bg"`
Cursor string `default:"> " type:"fg"`
CursorInactive string `default:" " type:"fg"`
}
type MenuComponent struct {
Data osui.ComponentData
Style *MenuStyle
Items []string
SelectedItem int
OnSelected func(*MenuComponent, bool)
}
func (m *MenuComponent) GetComponentData() *osui.ComponentData {
@@ -35,21 +19,21 @@ func (m *MenuComponent) GetComponentData() *osui.ComponentData {
}
func (m *MenuComponent) Render() string {
osui.UseStyle(m.Style)
m.Data.Style.UseStyle()
res := []string{}
cursor := m.Style.Cursor
cursor := m.Data.Style.Cursor
if !m.Data.IsActive {
cursor = m.Style.CursorInactive
cursor = m.Data.Style.InactiveCursor
}
d, _ := osui.CompressString(m.Style.Cursor)
d, _ := osui.CompressString(m.Data.Style.Cursor)
empty := strings.Repeat(" ", len(d))
for i, item := range m.Items {
if i == m.SelectedItem {
res = append(res, cursor+colors.Combine(m.Style.SelectedFg, m.Style.SelectedBg)+item+colors.Reset+m.Data.DefaultColor)
res = append(res, cursor+colors.Combine(m.Data.Style.SelectedBackground, m.Data.Style.SelectedBackground)+item+colors.Reset+m.Data.DefaultColor)
} else {
res = append(res, empty+colors.Combine(m.Style.Fg, m.Style.Bg)+item+colors.Reset+m.Data.DefaultColor)
res = append(res, empty+colors.Combine(m.Data.Style.Foreground, m.Data.Style.Background)+item+colors.Reset+m.Data.DefaultColor)
}
}
@@ -57,37 +41,33 @@ func (m *MenuComponent) Render() string {
}
func (m *MenuComponent) Update(key string) bool {
if isKey.Char(key, "s") {
ctx := osui.Context{Key: key}
m.Data.OnUpdate(&ctx)
if ctx.Response != 0 {
return false
}
if isKey.Down(key) {
if m.SelectedItem+1 < len(m.Items) {
m.SelectedItem++
} else {
m.SelectedItem = 0
}
} else if isKey.Char(key, "w") {
} else if isKey.Up(key) {
if m.SelectedItem > 0 {
m.SelectedItem--
} else {
m.SelectedItem = len(m.Items) - 1
}
} else if isKey.Enter(key) {
m.OnSelected(m, true)
return true
} else if isKey.Char(key, "q") {
m.OnSelected(m, false)
m.Data.OnClick()
return true
}
return false
}
func (b *MenuComponent) Params(param MenuParams) *MenuComponent {
b.Style = osui.SetDefaults(&param.Style).(*MenuStyle)
b.OnSelected = param.OnSelected
return b
}
func Menu(items ...string) *MenuComponent {
return &MenuComponent{
func Menu(param osui.Param, items ...string) *MenuComponent {
return param.UseParam(&MenuComponent{
Items: items,
Style: osui.SetDefaults(&MenuStyle{}).(*MenuStyle),
}
}).(*MenuComponent)
}