From 1bc8bffcfc76104e25c4c2711b181dbacc2e54aa Mon Sep 17 00:00:00 2001 From: Edouard Paris Date: Wed, 10 Apr 2019 13:16:51 +0200 Subject: [PATCH] refac view: add cursor method --- ui/controller.go | 68 ++++++++---------------- ui/views/channels.go | 120 +++++++++++++++++++++++++++++++++++++++++++ ui/views/help.go | 60 ++++++++++++++++++++++ ui/views/views.go | 4 ++ 4 files changed, 204 insertions(+), 48 deletions(-) diff --git a/ui/controller.go b/ui/controller.go index 28f8f1a..9a205da 100644 --- a/ui/controller.go +++ b/ui/controller.go @@ -23,62 +23,34 @@ func (c *controller) layout(g *gocui.Gui) error { return c.views.Layout(g, maxX, maxY) } -func cursorDown(g *gocui.Gui, v *gocui.View) error { - if v != nil { - cx, cy := v.Cursor() - err := v.SetCursor(cx, cy+1) - if err != nil { - ox, oy := v.Origin() - err := v.SetOrigin(ox, oy+1) - if err != nil { - return err - } - } +func (c *controller) cursorDown(g *gocui.Gui, v *gocui.View) error { + view := c.views.Get(v) + if view != nil { + return view.CursorDown() } return nil } -func cursorUp(g *gocui.Gui, v *gocui.View) error { - if v != nil { - ox, oy := v.Origin() - cx, cy := v.Cursor() - err := v.SetCursor(cx, cy-1) - if err != nil && oy > 0 { - err := v.SetOrigin(ox, oy-1) - if err != nil { - return err - } - } +func (c *controller) cursorUp(g *gocui.Gui, v *gocui.View) error { + view := c.views.Get(v) + if view != nil { + return view.CursorUp() } return nil } -func cursorRight(g *gocui.Gui, v *gocui.View) error { - if v != nil { - cx, cy := v.Cursor() - err := v.SetCursor(cx+2, cy) - if err != nil { - ox, oy := v.Origin() - err := v.SetOrigin(ox+2, oy) - if err != nil { - return err - } - } +func (c *controller) cursorRight(g *gocui.Gui, v *gocui.View) error { + view := c.views.Get(v) + if view != nil { + return view.CursorRight() } return nil } -func cursorLeft(g *gocui.Gui, v *gocui.View) error { - if v != nil { - ox, oy := v.Origin() - cx, cy := v.Cursor() - err := v.SetCursor(cx-2, cy) - if err != nil && ox > 1 { - err := v.SetOrigin(ox-2, oy) - if err != nil { - return err - } - } +func (c *controller) cursorLeft(g *gocui.Gui, v *gocui.View) error { + view := c.views.Get(v) + if view != nil { + return view.CursorLeft() } return nil } @@ -227,22 +199,22 @@ func (c *controller) setKeyBinding(g *gocui.Gui) error { return err } - err = g.SetKeybinding("", gocui.KeyArrowUp, gocui.ModNone, cursorUp) + err = g.SetKeybinding("", gocui.KeyArrowUp, gocui.ModNone, c.cursorUp) if err != nil { return err } - err = g.SetKeybinding("", gocui.KeyArrowDown, gocui.ModNone, cursorDown) + err = g.SetKeybinding("", gocui.KeyArrowDown, gocui.ModNone, c.cursorDown) if err != nil { return err } - err = g.SetKeybinding("", gocui.KeyArrowLeft, gocui.ModNone, cursorLeft) + err = g.SetKeybinding("", gocui.KeyArrowLeft, gocui.ModNone, c.cursorLeft) if err != nil { return err } - err = g.SetKeybinding("", gocui.KeyArrowRight, gocui.ModNone, cursorRight) + err = g.SetKeybinding("", gocui.KeyArrowRight, gocui.ModNone, c.cursorRight) if err != nil { return err } diff --git a/ui/views/channels.go b/ui/views/channels.go index 3dfd764..a6feacc 100644 --- a/ui/views/channels.go +++ b/ui/views/channels.go @@ -36,6 +36,66 @@ func (c *Channels) Wrap(v *gocui.View) view { return c } +func (c *Channels) CursorDown() error { + if c.view != nil { + cx, cy := c.view.Cursor() + err := c.view.SetCursor(cx, cy+1) + if err != nil { + ox, oy := c.view.Origin() + err := c.view.SetOrigin(ox, oy+1) + if err != nil { + return err + } + } + } + return nil +} + +func (c *Channels) CursorUp() error { + if c.view != nil { + ox, oy := c.view.Origin() + cx, cy := c.view.Cursor() + err := c.view.SetCursor(cx, cy-1) + if err != nil && oy > 0 { + err := c.view.SetOrigin(ox, oy-1) + if err != nil { + return err + } + } + } + return nil +} + +func (c *Channels) CursorRight() error { + if c.view != nil { + cx, cy := c.view.Cursor() + err := c.view.SetCursor(cx+2, cy) + if err != nil { + ox, oy := c.view.Origin() + err := c.view.SetOrigin(ox+2, oy) + if err != nil { + return err + } + } + } + return nil +} + +func (c *Channels) CursorLeft() error { + if c.view != nil { + ox, oy := c.view.Origin() + cx, cy := c.view.Cursor() + err := c.view.SetCursor(cx-2, cy) + if err != nil && ox > 1 { + err := c.view.SetOrigin(ox-2, oy) + if err != nil { + return err + } + } + } + return nil +} + func (c *Channels) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { columns, err := g.SetView(CHANNELS_COLUMNS, x0-1, y0, x1+2, y0+2) if err != nil { @@ -186,6 +246,66 @@ func (c *Channel) Wrap(v *gocui.View) view { return c } +func (c *Channel) CursorDown() error { + if c.view != nil { + cx, cy := c.view.Cursor() + err := c.view.SetCursor(cx, cy+1) + if err != nil { + ox, oy := c.view.Origin() + err := c.view.SetOrigin(ox, oy+1) + if err != nil { + return err + } + } + } + return nil +} + +func (c *Channel) CursorUp() error { + if c.view != nil { + ox, oy := c.view.Origin() + cx, cy := c.view.Cursor() + err := c.view.SetCursor(cx, cy-1) + if err != nil && oy > 0 { + err := c.view.SetOrigin(ox, oy-1) + if err != nil { + return err + } + } + } + return nil +} + +func (c *Channel) CursorRight() error { + if c.view != nil { + cx, cy := c.view.Cursor() + err := c.view.SetCursor(cx+2, cy) + if err != nil { + ox, oy := c.view.Origin() + err := c.view.SetOrigin(ox+2, oy) + if err != nil { + return err + } + } + } + return nil +} + +func (c *Channel) CursorLeft() error { + if c.view != nil { + ox, oy := c.view.Origin() + cx, cy := c.view.Cursor() + err := c.view.SetCursor(cx-2, cy) + if err != nil && ox > 1 { + err := c.view.SetOrigin(ox-2, oy) + if err != nil { + return err + } + } + } + return nil +} + func (c *Channel) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { header, err := g.SetView(CHANNEL_HEADER, x0-1, y0, x1+2, y0+2) if err != nil { diff --git a/ui/views/help.go b/ui/views/help.go index 0f3f11d..082b2ad 100644 --- a/ui/views/help.go +++ b/ui/views/help.go @@ -25,6 +25,66 @@ func (h *Help) Wrap(v *gocui.View) view { return h } +func (h *Help) CursorDown() error { + if h.view != nil { + cx, cy := h.view.Cursor() + err := h.view.SetCursor(cx, cy+1) + if err != nil { + ox, oy := h.view.Origin() + err := h.view.SetOrigin(ox, oy+1) + if err != nil { + return err + } + } + } + return nil +} + +func (h *Help) CursorUp() error { + if h.view != nil { + ox, oy := h.view.Origin() + cx, cy := h.view.Cursor() + err := h.view.SetCursor(cx, cy-1) + if err != nil && oy > 0 { + err := h.view.SetOrigin(ox, oy-1) + if err != nil { + return err + } + } + } + return nil +} + +func (h *Help) CursorRight() error { + if h.view != nil { + cx, cy := h.view.Cursor() + err := h.view.SetCursor(cx+2, cy) + if err != nil { + ox, oy := h.view.Origin() + err := h.view.SetOrigin(ox+2, oy) + if err != nil { + return err + } + } + } + return nil +} + +func (h *Help) CursorLeft() error { + if h.view != nil { + ox, oy := h.view.Origin() + cx, cy := h.view.Cursor() + err := h.view.SetCursor(cx-2, cy) + if err != nil && ox > 1 { + err := h.view.SetOrigin(ox-2, oy) + if err != nil { + return err + } + } + } + return nil +} + func (h Help) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { var err error h.view, err = g.SetView(HELP, x0-1, y0, x1, y1) diff --git a/ui/views/views.go b/ui/views/views.go index 8b8e719..aa7ea6b 100644 --- a/ui/views/views.go +++ b/ui/views/views.go @@ -8,6 +8,10 @@ import ( type view interface { Set(*gocui.Gui, int, int, int, int) error Wrap(*gocui.View) view + CursorLeft() error + CursorRight() error + CursorUp() error + CursorDown() error Name() string }