From 9154441c3288fce52572e8531a32b9771a896d0c Mon Sep 17 00:00:00 2001 From: Chris Cummer Date: Wed, 1 Aug 2018 15:54:29 -0700 Subject: [PATCH] Common help code into HelpfulWidget --- gerrit/widget.go | 27 +++++---------------- git/widget.go | 20 ++++------------ github/widget.go | 27 +++++---------------- gitlab/widget.go | 26 ++++----------------- jira/widget.go | 26 +++++---------------- textfile/widget.go | 26 +++++---------------- todo/widget.go | 21 +++++------------ todoist/widget.go | 26 +++++---------------- weatherservices/weather/widget.go | 25 ++++---------------- wtf/helpful_widget.go | 39 +++++++++++++++++++++++++++++++ 10 files changed, 90 insertions(+), 173 deletions(-) create mode 100644 wtf/helpful_widget.go diff --git a/gerrit/widget.go b/gerrit/widget.go index 00797a92e..c7c2c133b 100644 --- a/gerrit/widget.go +++ b/gerrit/widget.go @@ -26,11 +26,9 @@ const HelpText = ` ` type Widget struct { + wtf.HelpfulWidget wtf.TextWidget - app *tview.Application - pages *tview.Pages - gerrit *glb.Client GerritProjects []*GerritProject @@ -74,16 +72,16 @@ func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { } widget := Widget{ - TextWidget: wtf.NewTextWidget("Gerrit", "gerrit", true), - - app: app, - pages: pages, + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("Gerrit", "gerrit", true), gerrit: gerrit, Idx: 0, } + widget.HelpfulWidget.SetView(widget.View) + widget.GerritProjects = widget.buildProjectCollection(wtf.Config.UList("wtf.mods.gerrit.projects")) widget.View.SetInputCapture(widget.keyboardIntercept) @@ -148,7 +146,7 @@ func (widget *Widget) currentGerritProject() *GerritProject { func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "/": - widget.showHelp() + widget.ShowHelp() return nil case "h": widget.Prev() @@ -172,16 +170,3 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { return event } } - -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - widget.app.Draw() -} diff --git a/git/widget.go b/git/widget.go index 00ed621f5..a79b58b92 100644 --- a/git/widget.go +++ b/git/widget.go @@ -24,6 +24,7 @@ const modalWidth = 80 const modalHeight = 7 type Widget struct { + wtf.HelpfulWidget wtf.TextWidget app *tview.Application @@ -34,13 +35,15 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget("Git", "git", true), + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("Git", "git", true), app: app, Idx: 0, pages: pages, } + widget.HelpfulWidget.SetView(widget.View) widget.View.SetInputCapture(widget.keyboardIntercept) return &widget @@ -173,7 +176,7 @@ func (widget *Widget) gitRepos(repoPaths []string) []*GitRepo { func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "/": - widget.showHelp() + widget.ShowHelp() return nil case "h": widget.Prev() @@ -200,16 +203,3 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { return event } } - -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - widget.app.Draw() -} diff --git a/github/widget.go b/github/widget.go index 2740c85ed..cf528b05c 100644 --- a/github/widget.go +++ b/github/widget.go @@ -19,26 +19,24 @@ const HelpText = ` ` type Widget struct { + wtf.HelpfulWidget wtf.TextWidget - app *tview.Application - pages *tview.Pages - GithubRepos []*GithubRepo Idx int } func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget("GitHub", "github", true), + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("GitHub", "github", true), - app: app, - Idx: 0, - pages: pages, + Idx: 0, } widget.GithubRepos = widget.buildRepoCollection(wtf.Config.UMap("wtf.mods.github.repositories")) + widget.HelpfulWidget.SetView(widget.View) widget.View.SetInputCapture(widget.keyboardIntercept) return &widget @@ -101,7 +99,7 @@ func (widget *Widget) currentGithubRepo() *GithubRepo { func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "/": - widget.showHelp() + widget.ShowHelp() return nil case "h": widget.Prev() @@ -125,16 +123,3 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { return event } } - -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - widget.app.Draw() -} diff --git a/gitlab/widget.go b/gitlab/widget.go index c0b34fe8d..861e8ec38 100644 --- a/gitlab/widget.go +++ b/gitlab/widget.go @@ -22,11 +22,9 @@ const HelpText = ` ` type Widget struct { + wtf.HelpfulWidget wtf.TextWidget - app *tview.Application - pages *tview.Pages - gitlab *glb.Client GitlabProjects []*GitlabProject @@ -47,10 +45,8 @@ func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { } widget := Widget{ - TextWidget: wtf.NewTextWidget("Gitlab", "gitlab", true), - - app: app, - pages: pages, + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("Gitlab", "gitlab", true), gitlab: gitlab, @@ -59,6 +55,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget.GitlabProjects = widget.buildProjectCollection(wtf.Config.UMap("wtf.mods.gitlab.projects")) + widget.HelpfulWidget.SetView(widget.View) widget.View.SetInputCapture(widget.keyboardIntercept) return &widget @@ -121,7 +118,7 @@ func (widget *Widget) currentGitlabProject() *GitlabProject { func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "/": - widget.showHelp() + widget.ShowHelp() return nil case "h": widget.Prev() @@ -145,16 +142,3 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { return event } } - -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - widget.app.Draw() -} diff --git a/jira/widget.go b/jira/widget.go index ff75c22d2..29d536d17 100644 --- a/jira/widget.go +++ b/jira/widget.go @@ -22,21 +22,20 @@ const HelpText = ` ` type Widget struct { + wtf.HelpfulWidget wtf.TextWidget - app *tview.Application - pages *tview.Pages result *SearchResult selected int } func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget("Jira", "jira", true), - - app: app, - pages: pages, + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("Jira", "jira", true), } + + widget.HelpfulWidget.SetView(widget.View) widget.unselect() widget.View.SetInputCapture(widget.keyboardIntercept) @@ -173,7 +172,7 @@ func getProjects() []string { func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "/": - widget.showHelp() + widget.ShowHelp() case "j": // Select the next item down widget.next() @@ -210,16 +209,3 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { return event } } - -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - widget.app.Draw() -} diff --git a/textfile/widget.go b/textfile/widget.go index 56efc1837..6963deac9 100644 --- a/textfile/widget.go +++ b/textfile/widget.go @@ -22,25 +22,24 @@ const HelpText = ` ` type Widget struct { + wtf.HelpfulWidget wtf.TextWidget - app *tview.Application filePath string - pages *tview.Pages } func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget("TextFile", "textfile", true), + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("TextFile", "textfile", true), - app: app, filePath: wtf.Config.UString("wtf.mods.textfile.filePath"), - pages: pages, } + widget.HelpfulWidget.SetView(widget.View) + widget.View.SetWrap(true) widget.View.SetWordWrap(true) - widget.View.SetInputCapture(widget.keyboardIntercept) return &widget @@ -155,7 +154,7 @@ func (widget *Widget) fileName() string { func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "/": - widget.showHelp() + widget.ShowHelp() return nil case "o": wtf.OpenFile(widget.filePath) @@ -164,16 +163,3 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { return event } - -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - widget.app.Draw() -} diff --git a/todo/widget.go b/todo/widget.go index 510d61e46..4460996c9 100644 --- a/todo/widget.go +++ b/todo/widget.go @@ -36,6 +36,7 @@ const modalWidth = 80 const modalHeight = 7 type Widget struct { + wtf.HelpfulWidget wtf.TextWidget app *tview.Application @@ -46,7 +47,8 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget("Todo", "todo", true), + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("Todo", "todo", true), app: app, filePath: wtf.Config.UString("wtf.mods.todo.filename"), @@ -55,6 +57,8 @@ func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { } widget.init() + widget.HelpfulWidget.SetView(widget.View) + widget.View.SetScrollable(true) widget.View.SetRegions(true) widget.View.SetInputCapture(widget.keyboardIntercept) @@ -116,7 +120,7 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { widget.display() return nil case "/": - widget.showHelp() + widget.ShowHelp() return nil case "j": // Select the next item down @@ -222,19 +226,6 @@ func (widget *Widget) persist() { } } -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - widget.app.Draw() -} - /* -------------------- Modal Form -------------------- */ func (widget *Widget) addButtons(form *tview.Form, saveFctn func()) { diff --git a/todoist/widget.go b/todoist/widget.go index 9a35c4dbd..ece1bab3c 100644 --- a/todoist/widget.go +++ b/todoist/widget.go @@ -28,24 +28,23 @@ const HelpText = ` ` type Widget struct { + wtf.HelpfulWidget wtf.TextWidget - app *tview.Application - pages *tview.Pages projects []*Project idx int } func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget("Todoist", "todoist", true), - - app: app, - pages: pages, + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("Todoist", "todoist", true), } widget.loadAPICredentials() widget.projects = loadProjects() + + widget.HelpfulWidget.SetView(widget.View) widget.View.SetInputCapture(widget.keyboardIntercept) return &widget @@ -139,7 +138,7 @@ func (w *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "/": - w.showHelp() + w.ShowHelp() return nil case "r": w.Refresh() @@ -188,19 +187,6 @@ func loadProjects() []*Project { return projects } -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) - widget.app.Draw() -} - func (w *Widget) vimBindings(event *tcell.EventKey) tcell.Key { switch string(event.Rune()) { case "h": diff --git a/weatherservices/weather/widget.go b/weatherservices/weather/widget.go index 2d7448e36..0c9d2df30 100644 --- a/weatherservices/weather/widget.go +++ b/weatherservices/weather/widget.go @@ -22,11 +22,9 @@ const HelpText = ` // Widget is the container for weather data. type Widget struct { + wtf.HelpfulWidget wtf.TextWidget - app *tview.Application - pages *tview.Pages - APIKey string Data []*owm.CurrentWeatherData Idx int @@ -36,16 +34,15 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { configKey := "weather" widget := Widget{ - TextWidget: wtf.NewTextWidget("Weather", configKey, true), - - app: app, - pages: pages, + HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), + TextWidget: wtf.NewTextWidget("Weather", configKey, true), Idx: 0, } widget.loadAPICredentials() + widget.HelpfulWidget.SetView(widget.View) widget.View.SetInputCapture(widget.keyboardIntercept) return &widget @@ -160,7 +157,7 @@ func (widget *Widget) defaultCityCodes() []interface{} { func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "/": - widget.showHelp() + widget.ShowHelp() return nil case "h": widget.Prev() @@ -190,15 +187,3 @@ func (widget *Widget) loadAPICredentials() { os.Getenv("WTF_OWM_API_KEY"), ) } - -func (widget *Widget) showHelp() { - closeFunc := func() { - widget.pages.RemovePage("help") - widget.app.SetFocus(widget.View) - } - - modal := wtf.NewBillboardModal(HelpText, closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.app.SetFocus(modal) -} diff --git a/wtf/helpful_widget.go b/wtf/helpful_widget.go new file mode 100644 index 000000000..462e0f389 --- /dev/null +++ b/wtf/helpful_widget.go @@ -0,0 +1,39 @@ +package wtf + +import ( + "github.com/rivo/tview" +) + +type HelpfulWidget struct { + app *tview.Application + helpText string + pages *tview.Pages + view *tview.TextView +} + +func NewHelpfulWidget(app *tview.Application, pages *tview.Pages, helpText string) HelpfulWidget { + widget := HelpfulWidget{ + app: app, + helpText: helpText, + pages: pages, + } + + return widget +} + +func (widget *HelpfulWidget) SetView(view *tview.TextView) { + widget.view = view +} + +func (widget *HelpfulWidget) ShowHelp() { + closeFunc := func() { + widget.pages.RemovePage("help") + widget.app.SetFocus(widget.view) + } + + modal := NewBillboardModal(widget.helpText, closeFunc) + + widget.pages.AddPage("help", modal, false, true) + widget.app.SetFocus(modal) + widget.app.Draw() +}