1
0
mirror of https://github.com/br0xen/termbox-util.git synced 2024-11-26 07:03:14 +00:00

Making the menu widget better

This commit is contained in:
Brian Buller 2020-02-06 10:26:52 -06:00
parent c168c0df31
commit f403b69188

View File

@ -14,12 +14,15 @@ type Menu struct {
bg, fg termbox.Attribute bg, fg termbox.Attribute
selectedBg, selectedFg termbox.Attribute selectedBg, selectedFg termbox.Attribute
disabledBg, disabledFg termbox.Attribute disabledBg, disabledFg termbox.Attribute
selectedDisabledBg termbox.Attribute
selectedDisabledFg termbox.Attribute
activeFg, activeBg termbox.Attribute activeFg, activeBg termbox.Attribute
isDone bool isDone bool
bordered bool bordered bool
vimMode bool vimMode bool
tabSkip bool tabSkip bool
active bool active bool
canSelectDisabled bool
} }
// CreateMenu Creates a menu with the specified attributes // CreateMenu Creates a menu with the specified attributes
@ -189,12 +192,14 @@ func (c *Menu) SelectPrevOption() {
for idx >= 0 { for idx >= 0 {
idx-- idx--
testOption := c.GetOptionFromIndex(idx) testOption := c.GetOptionFromIndex(idx)
if testOption != nil && !testOption.IsDisabled() { if testOption != nil {
if c.canSelectDisabled || !testOption.IsDisabled() {
c.SetSelectedOption(testOption) c.SetSelectedOption(testOption)
return return
} }
} }
} }
}
// SelectNextOption Increments the selected option (if it can) // SelectNextOption Increments the selected option (if it can)
func (c *Menu) SelectNextOption() { func (c *Menu) SelectNextOption() {
@ -202,12 +207,14 @@ func (c *Menu) SelectNextOption() {
for idx < len(c.options) { for idx < len(c.options) {
idx++ idx++
testOption := c.GetOptionFromIndex(idx) testOption := c.GetOptionFromIndex(idx)
if testOption != nil && !testOption.IsDisabled() { if testOption != nil {
if c.canSelectDisabled || !testOption.IsDisabled() {
c.SetSelectedOption(testOption) c.SetSelectedOption(testOption)
return return
} }
} }
} }
}
// SelectPageUpOption Goes up 'menu height' options // SelectPageUpOption Goes up 'menu height' options
func (c *Menu) SelectPageUpOption() { func (c *Menu) SelectPageUpOption() {
@ -265,21 +272,25 @@ func (c *Menu) ShowHelp(b bool) {
c.showHelp = b c.showHelp = b
} }
// GetFgColor returns the foreground color
func (c *Menu) GetFgColor() termbox.Attribute { return c.fg } func (c *Menu) GetFgColor() termbox.Attribute { return c.fg }
func (c *Menu) SetFgColor(fg termbox.Attribute) { c.fg = fg }
// SetFgColor sets the foreground color
func (c *Menu) SetFgColor(fg termbox.Attribute) {
c.fg = fg
}
// GetBgColor returns the background color
func (c *Menu) GetBgColor() termbox.Attribute { return c.bg } func (c *Menu) GetBgColor() termbox.Attribute { return c.bg }
func (c *Menu) SetBgColor(bg termbox.Attribute) { c.bg = bg }
// SetBgColor sets the current background color func (c *Menu) GetSelectedFgColor() termbox.Attribute { return c.selectedFg }
func (c *Menu) SetBgColor(bg termbox.Attribute) { func (c *Menu) SetSelectedFgColor(fg termbox.Attribute) { c.selectedFg = fg }
c.bg = bg func (c *Menu) GetSelectedBgColor() termbox.Attribute { return c.selectedBg }
} func (c *Menu) SetSelectedBgColor(bg termbox.Attribute) { c.selectedBg = bg }
func (c *Menu) GetSelectedDisabledFgColor() termbox.Attribute { return c.selectedDisabledFg }
func (c *Menu) SetSelectedDisabledFgColor(fg termbox.Attribute) { c.selectedDisabledFg = fg }
func (c *Menu) GetSelectedDisabledBgColor() termbox.Attribute { return c.selectedDisabledBg }
func (c *Menu) SetSelectedDisabledBgColor(bg termbox.Attribute) { c.selectedDisabledBg = bg }
func (c *Menu) GetDisabledFgColor() termbox.Attribute { return c.disabledFg }
func (c *Menu) SetDisabledFgColor(fg termbox.Attribute) { c.disabledFg = fg }
func (c *Menu) GetDisabledBgColor() termbox.Attribute { return c.disabledBg }
func (c *Menu) SetDisabledBgColor(bg termbox.Attribute) { c.disabledBg = bg }
// IsDone returns whether the user has answered the modal // IsDone returns whether the user has answered the modal
func (c *Menu) IsDone() bool { return c.isDone } func (c *Menu) IsDone() bool { return c.isDone }
@ -307,6 +318,10 @@ func (c *Menu) DisableVimMode() {
c.vimMode = false c.vimMode = false
} }
func (c *Menu) SetCanSelectDisabled(b bool) {
c.canSelectDisabled = b
}
// HandleEvent handles the termbox event and returns whether it was consumed // HandleEvent handles the termbox event and returns whether it was consumed
func (c *Menu) HandleEvent(event termbox.Event) bool { func (c *Menu) HandleEvent(event termbox.Event) bool {
if event.Key == termbox.KeyEnter || event.Key == termbox.KeySpace { if event.Key == termbox.KeyEnter || event.Key == termbox.KeySpace {
@ -391,11 +406,15 @@ func (c *Menu) Draw() {
firstDispIdx = c.GetSelectedIndex() - (c.height - 2) firstDispIdx = c.GetSelectedIndex() - (c.height - 2)
lastDispIdx = c.GetSelectedIndex() lastDispIdx = c.GetSelectedIndex()
} }
for idx := firstDispIdx; idx < lastDispIdx; idx++ { for idx := firstDispIdx; idx < lastDispIdx+1; idx++ {
currOpt := &c.options[idx] currOpt := &c.options[idx]
outTxt := currOpt.GetText() outTxt := currOpt.GetText()
if currOpt.IsDisabled() { if currOpt.IsDisabled() {
if c.GetSelectedOption() == currOpt {
DrawStringAtPoint(outTxt, optionStartX, optionStartY, c.selectedDisabledFg, c.selectedDisabledBg)
} else {
DrawStringAtPoint(outTxt, optionStartX, optionStartY, c.disabledFg, c.disabledBg) DrawStringAtPoint(outTxt, optionStartX, optionStartY, c.disabledFg, c.disabledBg)
}
} else if c.GetSelectedOption() == currOpt { } else if c.GetSelectedOption() == currOpt {
DrawStringAtPoint(outTxt, optionStartX, optionStartY, c.selectedFg, c.selectedBg) DrawStringAtPoint(outTxt, optionStartX, optionStartY, c.selectedFg, c.selectedBg)
} else { } else {