Merge pull request #27 from rkfg/pagination

Add better list navigation
pull/29/head
Edouard 3 years ago committed by GitHub
commit f50f077d94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -56,6 +56,38 @@ func (c *controller) cursorLeft(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (c *controller) cursorHome(g *gocui.Gui, v *gocui.View) error {
view := c.views.Get(v)
if view != nil {
return cursor.Home(view)
}
return nil
}
func (c *controller) cursorEnd(g *gocui.Gui, v *gocui.View) error {
view := c.views.Get(v)
if view != nil {
return cursor.End(view)
}
return nil
}
func (c *controller) cursorPageDown(g *gocui.Gui, v *gocui.View) error {
view := c.views.Get(v)
if view != nil {
return cursor.PageDown(view)
}
return nil
}
func (c *controller) cursorPageUp(g *gocui.Gui, v *gocui.View) error {
view := c.views.Get(v)
if view != nil {
return cursor.PageUp(view)
}
return nil
}
func (c *controller) SetModels(ctx context.Context) error {
err := c.models.RefreshInfo(ctx)
if err != nil {

@ -3,7 +3,8 @@ package cursor
type View interface {
Cursor() (int, int)
Origin() (int, int)
Speed() (int, int, int, int)
Speed() (right int, left int, down int, up int)
Limits() (pageSize int, fullSize int)
SetCursor(int, int) error
SetOrigin(int, int) error
}
@ -82,3 +83,80 @@ func Left(v View) error {
}
return nil
}
func Home(v View) error {
if v == nil {
return nil
}
ox, _ := v.Origin()
cx, _ := v.Cursor()
v.SetCursor(cx, 0)
v.SetOrigin(ox, 0)
return nil
}
func End(v View) error {
if v == nil {
return nil
}
ps, fs := v.Limits()
if ps == 0 { // no pagination
return nil
}
if ps > fs {
ps = fs
}
ox, _ := v.Origin()
cx, _ := v.Cursor()
v.SetCursor(cx, ps-1)
v.SetOrigin(ox, fs-ps)
return nil
}
func PageDown(v View) error {
if v == nil {
return nil
}
ps, fs := v.Limits()
if ps == 0 { // no pagination
return nil
}
if ps > fs {
ps = fs
}
ox, oy := v.Origin()
cx, cy := v.Cursor()
ny := oy + cy + ps
if ny >= fs {
ny = fs - 1
}
if ny >= fs-ps {
v.SetOrigin(ox, fs-ps)
v.SetCursor(cx, ny-fs+ps)
} else {
v.SetOrigin(ox, ny-ps)
v.SetCursor(cx, ps-1)
}
return nil
}
func PageUp(v View) error {
if v == nil {
return nil
}
ox, oy := v.Origin()
cx, cy := v.Cursor()
ps, _ := v.Limits()
ny := oy + cy - ps
if ny <= 0 {
ny = 0
}
if ny <= ps {
v.SetOrigin(ox, 0)
v.SetCursor(cx, ny)
} else {
v.SetOrigin(ox, ny)
v.SetCursor(cx, 0)
}
return nil
}

@ -45,6 +45,26 @@ func setKeyBinding(c *controller, g *gocui.Gui) error {
return err
}
err = g.SetKeybinding("", gocui.KeyHome, gocui.ModNone, c.cursorHome)
if err != nil {
return err
}
err = g.SetKeybinding("", gocui.KeyEnd, gocui.ModNone, c.cursorEnd)
if err != nil {
return err
}
err = g.SetKeybinding("", gocui.KeyPgdn, gocui.ModNone, c.cursorPageDown)
if err != nil {
return err
}
err = g.SetKeybinding("", gocui.KeyPgup, gocui.ModNone, c.cursorPageUp)
if err != nil {
return err
}
err = g.SetKeybinding("", gocui.KeyEnter, gocui.ModNone, c.OnEnter)
if err != nil {
return err

@ -47,6 +47,10 @@ func (c Channel) Speed() (int, int, int, int) {
return 1, 1, 1, 1
}
func (c Channel) Limits() (pageSize int, fullSize int) {
return 0, 0
}
func (c *Channel) SetCursor(x, y int) error {
return c.view.SetCursor(x, y)
}
@ -149,7 +153,7 @@ func (c *Channel) display() {
if channel.Policy1 != nil {
fmt.Fprintln(v, "")
fmt.Fprintln(v, green(" [ Forward Policy Node1 ]"))
fmt.Fprintln(v, green(" [ Forward Policy Node 1 ]"))
if channel.Policy1.Disabled {
fmt.Fprintln(v, red("disabled"))
}

@ -156,6 +156,12 @@ func (c *Channels) Speed() (int, int, int, int) {
down, up
}
func (c *Channels) Limits() (pageSize int, fullSize int) {
_, pageSize = c.view.Size()
fullSize = c.channels.Len()
return
}
func (c Channels) Index() int {
_, oy := c.Origin()
_, cy := c.Cursor()

@ -42,6 +42,10 @@ func (h Help) Speed() (int, int, int, int) {
return 1, 1, 1, 1
}
func (h Help) Limits() (pageSize int, fullSize int) {
return 0, 0
}
func (h *Help) SetCursor(x, y int) error {
return h.view.SetCursor(x, y)
}

@ -50,6 +50,12 @@ func (h Menu) Speed() (int, int, int, int) {
return 0, 0, down, 1
}
func (h Menu) Limits() (pageSize int, fullSize int) {
pageSize = len(menu)
fullSize = len(menu)
return
}
func (h *Menu) SetCursor(x, y int) error {
err := h.view.SetCursor(x, y)
if err != nil {

@ -134,6 +134,12 @@ func (c *Routing) Speed() (int, int, int, int) {
down, up
}
func (c *Routing) Limits() (pageSize int, fullSize int) {
_, pageSize = c.view.Size()
fullSize = len(c.routingEvents.Log)
return
}
func (c Routing) Index() int {
_, oy := c.Origin()
_, cy := c.Cursor()

@ -47,6 +47,10 @@ func (c Transaction) Speed() (int, int, int, int) {
return 1, 1, 1, 1
}
func (c Transaction) Limits() (pageSize int, fullSize int) {
return 0, 0
}
func (c *Transaction) SetCursor(x, y int) error {
return c.view.SetCursor(x, y)
}

@ -136,6 +136,12 @@ func (c *Transactions) Speed() (int, int, int, int) {
down, up
}
func (c *Transactions) Limits() (pageSize int, fullSize int) {
_, pageSize = c.view.Size()
fullSize = c.transactions.Len()
return
}
func (c *Transactions) Sort(column string, order models.Order) {
if column == "" {
index := c.currentColumnIndex()

Loading…
Cancel
Save