From 84849a0c9f680df84a247062bd8419191c4ee7ab Mon Sep 17 00:00:00 2001 From: Bradley Cicenas Date: Sun, 19 Feb 2017 03:54:24 +0000 Subject: [PATCH] add SetCursor method to menu --- menus.go | 2 +- widgets/menu/main.go | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/menus.go b/menus.go index 20ab59c..d24c4a0 100644 --- a/menus.go +++ b/menus.go @@ -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 diff --git a/widgets/menu/main.go b/widgets/menu/main.go index 4275293..0415c52 100644 --- a/widgets/menu/main.go +++ b/widgets/menu/main.go @@ -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) } }