From bbeceb5d19c6dda9e71dd506a685c004a0c91159 Mon Sep 17 00:00:00 2001 From: Edouard Paris Date: Wed, 10 Apr 2019 09:44:52 +0200 Subject: [PATCH] views: wrap method --- ui/controller.go | 4 ++-- ui/views/channels.go | 38 ++++++++++++++++++++++++++------------ ui/views/help.go | 19 +++++++++++++------ ui/views/views.go | 14 +++++++++----- 4 files changed, 50 insertions(+), 25 deletions(-) diff --git a/ui/controller.go b/ui/controller.go index d286030..28f8f1a 100644 --- a/ui/controller.go +++ b/ui/controller.go @@ -151,7 +151,7 @@ func quit(g *gocui.Gui, v *gocui.View) error { func (c *controller) Help(g *gocui.Gui, v *gocui.View) error { maxX, maxY := g.Size() - view := c.views.Get(g.CurrentView().Name()) + view := c.views.Get(g.CurrentView()) if view == nil { return nil } @@ -176,7 +176,7 @@ func (c *controller) Help(g *gocui.Gui, v *gocui.View) error { func (c *controller) OnEnter(g *gocui.Gui, v *gocui.View) error { maxX, maxY := g.Size() - view := c.views.Get(v.Name()) + view := c.views.Get(v) if view == nil { return nil } diff --git a/ui/views/channels.go b/ui/views/channels.go index 9fedd2f..3dfd764 100644 --- a/ui/views/channels.go +++ b/ui/views/channels.go @@ -23,6 +23,7 @@ const ( ) type Channels struct { + view *gocui.View channels *models.Channels } @@ -30,6 +31,11 @@ func (c Channels) Name() string { return CHANNELS } +func (c *Channels) Wrap(v *gocui.View) view { + c.view = v + return c +} + 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 { @@ -42,7 +48,7 @@ func (c *Channels) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { columns.FgColor = gocui.ColorBlack displayChannelsColumns(columns) - v, err := g.SetView(CHANNELS, x0-1, y0+1, x1+2, y1-1) + c.view, err = g.SetView(CHANNELS, x0-1, y0+1, x1+2, y1-1) if err != nil { if err != gocui.ErrUnknownView { return err @@ -52,13 +58,13 @@ func (c *Channels) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { return err } } - v.Frame = false - v.Autoscroll = false - v.SelBgColor = gocui.ColorCyan - v.SelFgColor = gocui.ColorBlack - v.Highlight = true + c.view.Frame = false + c.view.Autoscroll = false + c.view.SelBgColor = gocui.ColorCyan + c.view.SelFgColor = gocui.ColorBlack + c.view.Highlight = true - c.display(v) + c.display() footer, err := g.SetView(CHANNELS_FOOTER, x0-1, y1-2, x1+2, y1) if err != nil { @@ -92,9 +98,9 @@ func displayChannelsColumns(v *gocui.View) { )) } -func (c *Channels) display(v *gocui.View) { +func (c *Channels) display() { p := message.NewPrinter(language.English) - v.Clear() + c.view.Clear() for _, item := range c.channels.List() { line := fmt.Sprintf("%s %-20s %s %s %s %5d %15s %d %500s", status(item), @@ -107,7 +113,7 @@ func (c *Channels) display(v *gocui.View) { item.ID, "", ) - fmt.Fprintln(v, line) + fmt.Fprintln(c.view, line) } } @@ -163,6 +169,7 @@ func NewChannels(channels *models.Channels) *Channels { } type Channel struct { + view *gocui.View channel *models.Channel } @@ -174,6 +181,11 @@ func (c Channel) Empty() bool { return c.channel == nil } +func (c *Channel) Wrap(v *gocui.View) view { + c.view = v + return c +} + 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 { @@ -194,7 +206,8 @@ func (c *Channel) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { } } v.Frame = false - c.display(v) + c.view = v + c.display() footer, err := g.SetView(CHANNEL_FOOTER, x0-1, y1-2, x1, y1) if err != nil { @@ -228,8 +241,9 @@ func (c Channel) Delete(g *gocui.Gui) error { return g.DeleteView(CHANNEL_FOOTER) } -func (c *Channel) display(v *gocui.View) { +func (c *Channel) display() { p := message.NewPrinter(language.English) + v := c.view v.Clear() channel := c.channel.Item fmt.Fprintln(v, color.Green(" [ Channel ]")) diff --git a/ui/views/help.go b/ui/views/help.go index 1ac9f72..0f3f11d 100644 --- a/ui/views/help.go +++ b/ui/views/help.go @@ -13,24 +13,31 @@ const ( ) type Help struct { + view *gocui.View } func (h Help) Name() string { return HELP } +func (h *Help) Wrap(v *gocui.View) view { + h.view = v + return h +} + func (h Help) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { - v, err := g.SetView(HELP, x0-1, y0, x1, y1) + var err error + h.view, err = g.SetView(HELP, x0-1, y0, x1, y1) if err != nil { if err != gocui.ErrUnknownView { return err } } - v.Frame = false - fmt.Fprintln(v, "lntop 0.0.1 - (C) 2019 Edouard Paris") - fmt.Fprintln(v, "Released under the MIT License") - fmt.Fprintln(v, "") - fmt.Fprintln(v, fmt.Sprintf("%5s %s", + h.view.Frame = false + fmt.Fprintln(h.view, "lntop 0.0.1 - (C) 2019 Edouard Paris") + fmt.Fprintln(h.view, "Released under the MIT License") + fmt.Fprintln(h.view, "") + fmt.Fprintln(h.view, fmt.Sprintf("%5s %s", color.Cyan("F1 h:"), "show this help screen")) _, err = g.SetCurrentView(HELP) return err diff --git a/ui/views/views.go b/ui/views/views.go index 3f9dc93..8b8e719 100644 --- a/ui/views/views.go +++ b/ui/views/views.go @@ -7,6 +7,7 @@ import ( type view interface { Set(*gocui.Gui, int, int, int, int) error + Wrap(*gocui.View) view Name() string } @@ -19,14 +20,17 @@ type Views struct { Channel *Channel } -func (v Views) Get(name string) view { - switch name { +func (v Views) Get(vi *gocui.View) view { + if vi == nil { + return nil + } + switch vi.Name() { case CHANNELS: - return v.Channels + return v.Channels.Wrap(vi) case HELP: - return v.Help + return v.Help.Wrap(vi) case CHANNEL: - return v.Channel + return v.Channel.Wrap(vi) default: return nil }