mirror of
https://github.com/br0xen/termbox-util.git
synced 2024-11-26 07:03:14 +00:00
Making menu better
This commit is contained in:
parent
ad7e3807a0
commit
9b7cb328b9
@ -1,10 +1,6 @@
|
|||||||
package termboxUtil
|
package termboxUtil
|
||||||
|
|
||||||
import (
|
import "github.com/nsf/termbox-go"
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"github.com/nsf/termbox-go"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Menu is a menu with a list of options
|
// Menu is a menu with a list of options
|
||||||
type Menu struct {
|
type Menu struct {
|
||||||
@ -195,6 +191,40 @@ func (i *Menu) SelectNextOption() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SelectPageUpOption Goes up 'menu height' options
|
||||||
|
func (i *Menu) SelectPageUpOption() {
|
||||||
|
idx := i.GetSelectedIndex()
|
||||||
|
idx -= i.height
|
||||||
|
if idx < 0 {
|
||||||
|
idx = 0
|
||||||
|
}
|
||||||
|
i.SetSelectedIndex(idx)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPageDownOption Goes down 'menu height' options
|
||||||
|
func (i *Menu) SelectPageDownOption() {
|
||||||
|
idx := i.GetSelectedIndex()
|
||||||
|
idx += i.height
|
||||||
|
if idx >= len(i.options) {
|
||||||
|
idx = len(i.options) - 1
|
||||||
|
}
|
||||||
|
i.SetSelectedIndex(idx)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectFirstOption Goes to the top
|
||||||
|
func (i *Menu) SelectFirstOption() {
|
||||||
|
i.SetSelectedIndex(0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectLastOption Goes to the bottom
|
||||||
|
func (i *Menu) SelectLastOption() {
|
||||||
|
i.SetSelectedIndex(len(i.options) - 1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// SetOptionDisabled Disables the specified option
|
// SetOptionDisabled Disables the specified option
|
||||||
func (i *Menu) SetOptionDisabled(idx int) {
|
func (i *Menu) SetOptionDisabled(idx int) {
|
||||||
if len(i.options) > idx {
|
if len(i.options) > idx {
|
||||||
@ -271,6 +301,10 @@ func (i *Menu) HandleEvent(event termbox.Event) bool {
|
|||||||
i.SelectPrevOption()
|
i.SelectPrevOption()
|
||||||
case termbox.KeyArrowDown:
|
case termbox.KeyArrowDown:
|
||||||
i.SelectNextOption()
|
i.SelectNextOption()
|
||||||
|
case termbox.KeyArrowLeft:
|
||||||
|
i.SelectPageUpOption()
|
||||||
|
case termbox.KeyArrowRight:
|
||||||
|
i.SelectPageDownOption()
|
||||||
}
|
}
|
||||||
if i.vimMode {
|
if i.vimMode {
|
||||||
switch event.Ch {
|
switch event.Ch {
|
||||||
@ -279,6 +313,11 @@ func (i *Menu) HandleEvent(event termbox.Event) bool {
|
|||||||
case 'k':
|
case 'k':
|
||||||
i.SelectPrevOption()
|
i.SelectPrevOption()
|
||||||
}
|
}
|
||||||
|
if event.Key == termbox.KeyCtrlF {
|
||||||
|
i.SelectPageDownOption()
|
||||||
|
} else if event.Key == termbox.KeyCtrlB {
|
||||||
|
i.SelectPageUpOption()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if i.GetSelectedIndex() != currentIdx {
|
if i.GetSelectedIndex() != currentIdx {
|
||||||
return true
|
return true
|
||||||
@ -329,25 +368,26 @@ func (i *Menu) Draw() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Print the options
|
// Print the options
|
||||||
selIdx := i.GetSelectedIndex()
|
bldHeight := (optionHeight / 2)
|
||||||
printOptions := i.options
|
startIdx := i.GetSelectedIndex()
|
||||||
startOpts := selIdx - (optionHeight / 2)
|
endIdx := i.GetSelectedIndex()
|
||||||
endOpts := selIdx + (optionHeight / 2)
|
for bldHeight > 0 && startIdx >= 1 {
|
||||||
for startOpts < 0 {
|
startIdx--
|
||||||
startOpts++
|
bldHeight--
|
||||||
endOpts++
|
}
|
||||||
|
bldHeight += (optionHeight / 2)
|
||||||
|
for bldHeight > 0 && endIdx < len(i.options) {
|
||||||
|
endIdx++
|
||||||
|
bldHeight--
|
||||||
}
|
}
|
||||||
|
|
||||||
printOptions = printOptions[startOpts:]
|
for idx := startIdx; idx < endIdx; idx++ { //i.options {
|
||||||
for idx := range printOptions { //i.options {
|
|
||||||
if i.GetSelectedIndex()-idx >= optionHeight-1 {
|
if i.GetSelectedIndex()-idx >= optionHeight-1 {
|
||||||
// Skip this one
|
// Skip this one
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
currOpt := &printOptions[idx]
|
currOpt := &i.options[idx]
|
||||||
//currOpt := &i.options[idx]
|
|
||||||
outTxt := currOpt.GetText()
|
outTxt := currOpt.GetText()
|
||||||
outTxt = strconv.Itoa(startOpts) + "/" + strconv.Itoa(selIdx) + "/" + strconv.Itoa(endOpts) + " - " + outTxt
|
|
||||||
if len(outTxt) >= i.width {
|
if len(outTxt) >= i.width {
|
||||||
outTxt = outTxt[:i.width]
|
outTxt = outTxt[:i.width]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user