Add MaxPageButtons to the Pager widget

master
Noah 2020-11-19 20:58:41 -08:00
parent 8433b1b216
commit c32601391a
1 changed files with 28 additions and 12 deletions

View File

@ -11,12 +11,15 @@ import (
type Pager struct {
BaseWidget
// Config settings.
Page int // default 1
Pages int
PerPage int // default 20
Font render.Text
OnChange func(page, perPage int)
// Config settings. NOTE: these are copied in the constructor,
// be sure to update it there too if you add a new option!
Name string // totally optional name
Page int // default 1
Pages int
PerPage int // default 20
MaxPageButtons int // max no. of individual pages to show, 0 = no limit
Font render.Text
OnChange func(page, perPage int)
supervisor *Supervisor
child Widget
@ -31,12 +34,13 @@ type Pager struct {
// NewPager creates a new Pager.
func NewPager(config Pager) *Pager {
w := &Pager{
Page: config.Page,
Pages: config.Pages,
PerPage: config.PerPage,
Font: config.Font,
OnChange: config.OnChange,
buttons: []Widget{},
Page: config.Page,
Pages: config.Pages,
PerPage: config.PerPage,
MaxPageButtons: config.MaxPageButtons,
Font: config.Font,
OnChange: config.OnChange,
buttons: []Widget{},
}
// default settings
@ -93,6 +97,18 @@ func (w *Pager) setup() *Frame {
for i := 1; i <= w.Pages; i++ {
page := fmt.Sprintf("%d", i)
if w.MaxPageButtons > 0 {
if i > w.MaxPageButtons {
break
}
// The final button shown; make this one always reflect the
// current page IF the current page is greater than this one.
if w.Page >= i && w.Page != i {
continue
}
}
btn := NewRadioButton(
"Page "+page,
&w.page,