From c6dfed56cc6854803a4e321bd1fca1d4438ba8c7 Mon Sep 17 00:00:00 2001 From: rkfg Date: Sat, 19 Jun 2021 18:32:48 +0300 Subject: [PATCH 1/2] Fix formatting --- ui/views/channel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/views/channel.go b/ui/views/channel.go index 2afb696..c44a3a1 100644 --- a/ui/views/channel.go +++ b/ui/views/channel.go @@ -149,7 +149,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")) } From 62f9eca83ca3f47f03513a950c317f8d58641ca7 Mon Sep 17 00:00:00 2001 From: rkfg Date: Sat, 19 Jun 2021 19:55:15 +0300 Subject: [PATCH 2/2] Add Home/End/PgUp/PgDn navigation --- ui/controller.go | 32 ++++++++++++++++ ui/cursor/cursor.go | 80 +++++++++++++++++++++++++++++++++++++++- ui/keybindings.go | 20 ++++++++++ ui/views/channel.go | 4 ++ ui/views/channels.go | 6 +++ ui/views/help.go | 4 ++ ui/views/menu.go | 6 +++ ui/views/routing.go | 6 +++ ui/views/transaction.go | 4 ++ ui/views/transactions.go | 6 +++ 10 files changed, 167 insertions(+), 1 deletion(-) diff --git a/ui/controller.go b/ui/controller.go index 9106136..e7fa9b2 100644 --- a/ui/controller.go +++ b/ui/controller.go @@ -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 { diff --git a/ui/cursor/cursor.go b/ui/cursor/cursor.go index 8d9991d..0d5887c 100644 --- a/ui/cursor/cursor.go +++ b/ui/cursor/cursor.go @@ -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 +} diff --git a/ui/keybindings.go b/ui/keybindings.go index 1a2e26e..b17c489 100644 --- a/ui/keybindings.go +++ b/ui/keybindings.go @@ -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 diff --git a/ui/views/channel.go b/ui/views/channel.go index c44a3a1..292c973 100644 --- a/ui/views/channel.go +++ b/ui/views/channel.go @@ -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) } diff --git a/ui/views/channels.go b/ui/views/channels.go index 5207d17..e05fa95 100644 --- a/ui/views/channels.go +++ b/ui/views/channels.go @@ -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() diff --git a/ui/views/help.go b/ui/views/help.go index f74fa32..3387ede 100644 --- a/ui/views/help.go +++ b/ui/views/help.go @@ -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) } diff --git a/ui/views/menu.go b/ui/views/menu.go index 49d2116..309e645 100644 --- a/ui/views/menu.go +++ b/ui/views/menu.go @@ -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 { diff --git a/ui/views/routing.go b/ui/views/routing.go index 0dc8a8d..2c0fa43 100644 --- a/ui/views/routing.go +++ b/ui/views/routing.go @@ -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() diff --git a/ui/views/transaction.go b/ui/views/transaction.go index be6e09f..257e016 100644 --- a/ui/views/transaction.go +++ b/ui/views/transaction.go @@ -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) } diff --git a/ui/views/transactions.go b/ui/views/transactions.go index 4b5caf1..c545f9d 100644 --- a/ui/views/transactions.go +++ b/ui/views/transactions.go @@ -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()