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 // set cursor position to current sort field
//current := config.GetVal("sortField") m.SetCursor(config.GetVal("sortField"))
//for n, item := range m.Items { //for n, item := range m.Items {
//if item.Val == current { //if item.Val == current {
//m.CursorPos = n //m.CursorPos = n

View File

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