add SetCursor method to menu

This commit is contained in:
Bradley Cicenas 2017-02-19 03:54:24 +00:00
parent db050031df
commit 84849a0c9f
2 changed files with 21 additions and 9 deletions

View File

@ -64,7 +64,7 @@ func SortMenu() {
}
// set cursor position to current sort field
//current := config.GetVal("sortField")
m.SetCursor(config.GetVal("sortField"))
//for n, item := range m.Items {
//if item.Val == current {
//m.CursorPos = n

View File

@ -14,7 +14,7 @@ type Menu struct {
TextFgColor ui.Attribute
TextBgColor ui.Attribute
Selectable bool
CursorPos int
cursorPos int
items Items
padding Padding
}
@ -24,11 +24,12 @@ func NewMenu() *Menu {
Block: *ui.NewBlock(),
TextFgColor: ui.ThemeAttr("par.text.fg"),
TextBgColor: ui.ThemeAttr("par.text.bg"),
CursorPos: 0,
cursorPos: 0,
padding: Padding{4, 2},
}
}
// Append Item to Menu
func (m *Menu) AddItems(items ...Item) {
for _, i := range items {
m.items = append(m.items, i)
@ -49,6 +50,17 @@ func (m *Menu) DelItem(s string) (success bool) {
return success
}
// Move cursor to an position by Item value or label
func (m *Menu) SetCursor(s string) (success bool) {
for n, i := range m.items {
if i.Val == s || i.Label == s {
m.cursorPos = n
return true
}
}
return false
}
// Sort menu items(if enabled) and re-calculate window size
func (m *Menu) refresh() {
if m.SortItems {
@ -59,7 +71,7 @@ func (m *Menu) refresh() {
}
func (m *Menu) SelectedItem() Item {
return m.items[m.CursorPos]
return m.items[m.cursorPos]
}
func (m *Menu) Buffer() ui.Buffer {
@ -70,7 +82,7 @@ func (m *Menu) Buffer() ui.Buffer {
x := m.padding[0]
for _, ch := range item.Text() {
// invert bg/fg colors on currently selected row
if m.Selectable && n == m.CursorPos {
if m.Selectable && n == m.cursorPos {
cell = ui.Cell{Ch: ch, Fg: m.TextBgColor, Bg: m.TextFgColor}
} else {
cell = ui.Cell{Ch: ch, Fg: m.TextFgColor, Bg: m.TextBgColor}
@ -84,15 +96,15 @@ func (m *Menu) Buffer() ui.Buffer {
}
func (m *Menu) Up(ui.Event) {
if m.CursorPos > 0 {
m.CursorPos--
if m.cursorPos > 0 {
m.cursorPos--
ui.Render(m)
}
}
func (m *Menu) Down(ui.Event) {
if m.CursorPos < (len(m.items) - 1) {
m.CursorPos++
if m.cursorPos < (len(m.items) - 1) {
m.cursorPos++
ui.Render(m)
}
}