From 0fd67731b549d65c02512d4f7a11c6137d91cc74 Mon Sep 17 00:00:00 2001 From: Bradley Cicenas Date: Wed, 4 Jan 2017 21:31:27 +0000 Subject: [PATCH] default menu width dynamically --- menu.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/menu.go b/menu.go index db0759b..11774ac 100644 --- a/menu.go +++ b/menu.go @@ -4,6 +4,11 @@ import ( ui "github.com/gizak/termui" ) +var ( + padding = 2 + minWidth = 30 +) + type Menu struct { ui.Block Items []string @@ -14,7 +19,7 @@ type Menu struct { } func NewMenu(items []string) *Menu { - return &Menu{ + m := &Menu{ Block: *ui.NewBlock(), Items: items, TextFgColor: ui.ThemeAttr("par.text.fg"), @@ -22,6 +27,22 @@ func NewMenu(items []string) *Menu { Selectable: false, cursorPos: 0, } + m.Width = calcWidth(items) + return m +} + +// return dynamic width based on string len in items +func calcWidth(items []string) int { + maxWidth := 0 + for _, s := range items { + if len(s) > maxWidth { + maxWidth = len(s) + } + } + if maxWidth < minWidth { + maxWidth = minWidth + } + return maxWidth + (padding * 2) } func (m *Menu) Buffer() ui.Buffer { @@ -66,7 +87,6 @@ func HelpMenu(g *Grid) { "[q] - exit ctop", }) m.Height = 10 - m.Width = 50 m.TextFgColor = ui.ColorWhite m.BorderLabel = "Help" m.BorderFg = ui.ColorCyan @@ -80,7 +100,6 @@ func HelpMenu(g *Grid) { func SortMenu(g *Grid) { m := NewMenu(SortFields) m.Height = 10 - m.Width = 50 m.Selectable = true m.TextFgColor = ui.ColorWhite m.BorderLabel = "Sort Field"