diff --git a/app/app_manager.go b/app/app_manager.go index 29d3528f..097d3a01 100644 --- a/app/app_manager.go +++ b/app/app_manager.go @@ -12,17 +12,18 @@ type WtfAppManager struct { // NewAppManager creates and returns an instance of AppManager func NewAppManager() WtfAppManager { appMan := WtfAppManager{ + WtfApps: []*WtfApp{}, + selected: 0, } return appMan } -// AddApp adds a WtfApp to the collection of apps that the AppManager manages. +// Add adds a WtfApp to the collection of apps that the AppManager manages. // This app is then available for display onscreen. -func (appMan *WtfAppManager) AddApp(wtfApp *WtfApp) error { +func (appMan *WtfAppManager) Add(wtfApp *WtfApp) { appMan.WtfApps = append(appMan.WtfApps, wtfApp) - return nil } // Current returns the currently-displaying instance of WtfApp diff --git a/main.go b/main.go index 3287b45c..e1978414 100644 --- a/main.go +++ b/main.go @@ -77,7 +77,7 @@ func main() { wtfApp := makeWtfApp(config, flags.Config) appMan := app.NewAppManager() - appMan.AddApp(&wtfApp) + appMan.Add(&wtfApp) currentApp, err := appMan.Current() if err != nil { diff --git a/modules/buildkite/keyboard.go b/modules/buildkite/keyboard.go index 6f7282e1..7448eeb8 100644 --- a/modules/buildkite/keyboard.go +++ b/modules/buildkite/keyboard.go @@ -1,5 +1,6 @@ package buildkite func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) } diff --git a/modules/cds/favorites/keyboard.go b/modules/cds/favorites/keyboard.go index 1ce418c2..d00a4182 100644 --- a/modules/cds/favorites/keyboard.go +++ b/modules/cds/favorites/keyboard.go @@ -5,6 +5,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next workflow") diff --git a/modules/cds/queue/keyboard.go b/modules/cds/queue/keyboard.go index 3aeab60b..073eac34 100644 --- a/modules/cds/queue/keyboard.go +++ b/modules/cds/queue/keyboard.go @@ -5,6 +5,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next workflow") diff --git a/modules/cds/status/keyboard.go b/modules/cds/status/keyboard.go index bf6cb900..ef73235a 100644 --- a/modules/cds/status/keyboard.go +++ b/modules/cds/status/keyboard.go @@ -5,6 +5,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next line") diff --git a/modules/clocks/widget.go b/modules/clocks/widget.go index 33ca1095..49fd4302 100644 --- a/modules/clocks/widget.go +++ b/modules/clocks/widget.go @@ -8,7 +8,6 @@ import ( type Widget struct { view.TextWidget - // app *tview.Application clockColl ClockCollection dateFormat string timeFormat string @@ -19,7 +18,6 @@ func NewWidget(tviewApp *tview.Application, settings *Settings) *Widget { widget := Widget{ TextWidget: view.NewTextWidget(tviewApp, nil, settings.Common), - // app: app, settings: settings, dateFormat: settings.dateFormat, timeFormat: settings.timeFormat, diff --git a/modules/datadog/keyboard.go b/modules/datadog/keyboard.go index bf0d3f3c..4be97996 100644 --- a/modules/datadog/keyboard.go +++ b/modules/datadog/keyboard.go @@ -5,6 +5,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/devto/keyboard.go b/modules/devto/keyboard.go index b476d574..e31c0b20 100644 --- a/modules/devto/keyboard.go +++ b/modules/devto/keyboard.go @@ -3,6 +3,7 @@ package devto import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("d", widget.Next, "Select next item") diff --git a/modules/digitalocean/keyboard.go b/modules/digitalocean/keyboard.go index a33b6c3c..afc6be6d 100644 --- a/modules/digitalocean/keyboard.go +++ b/modules/digitalocean/keyboard.go @@ -3,6 +3,7 @@ package digitalocean import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("?", widget.showInfo, "Show info about the selected droplet") diff --git a/modules/feedreader/keyboard.go b/modules/feedreader/keyboard.go index 928033f7..b7628efc 100644 --- a/modules/feedreader/keyboard.go +++ b/modules/feedreader/keyboard.go @@ -3,6 +3,7 @@ package feedreader import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/gerrit/keyboard.go b/modules/gerrit/keyboard.go index 50c13ffe..ffc22b51 100644 --- a/modules/gerrit/keyboard.go +++ b/modules/gerrit/keyboard.go @@ -5,6 +5,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("h", widget.prevProject, "Select previous project") diff --git a/modules/git/keyboard.go b/modules/git/keyboard.go index 65092e34..74d7158e 100644 --- a/modules/git/keyboard.go +++ b/modules/git/keyboard.go @@ -3,6 +3,7 @@ package git import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("l", widget.NextSource, "Select next source") diff --git a/modules/github/keyboard.go b/modules/github/keyboard.go index 13aec5f6..4df85459 100644 --- a/modules/github/keyboard.go +++ b/modules/github/keyboard.go @@ -5,6 +5,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/gitlab/keyboard.go b/modules/gitlab/keyboard.go index 0bbee06c..08d88d3a 100644 --- a/modules/gitlab/keyboard.go +++ b/modules/gitlab/keyboard.go @@ -5,6 +5,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/gitlabtodo/keyboard.go b/modules/gitlabtodo/keyboard.go index 91c336b8..fe14deff 100644 --- a/modules/gitlabtodo/keyboard.go +++ b/modules/gitlabtodo/keyboard.go @@ -3,6 +3,7 @@ package gitlabtodo import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/gitter/keyboard.go b/modules/gitter/keyboard.go index 39607c4e..93e9544a 100644 --- a/modules/gitter/keyboard.go +++ b/modules/gitter/keyboard.go @@ -3,6 +3,7 @@ package gitter import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/hackernews/keyboard.go b/modules/hackernews/keyboard.go index bb572599..7dfc554e 100644 --- a/modules/hackernews/keyboard.go +++ b/modules/hackernews/keyboard.go @@ -3,6 +3,7 @@ package hackernews import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/jenkins/keyboard.go b/modules/jenkins/keyboard.go index 9aa3155d..61a44ed0 100644 --- a/modules/jenkins/keyboard.go +++ b/modules/jenkins/keyboard.go @@ -3,6 +3,7 @@ package jenkins import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/jira/keyboard.go b/modules/jira/keyboard.go index dcbf9b67..016617f1 100644 --- a/modules/jira/keyboard.go +++ b/modules/jira/keyboard.go @@ -5,6 +5,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/mercurial/keyboard.go b/modules/mercurial/keyboard.go index daa9b5a9..19d7d836 100644 --- a/modules/mercurial/keyboard.go +++ b/modules/mercurial/keyboard.go @@ -3,6 +3,7 @@ package mercurial import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("l", widget.NextSource, "Select next source") diff --git a/modules/nbascore/keyboard.go b/modules/nbascore/keyboard.go index 47f8d32f..9e8c7b03 100644 --- a/modules/nbascore/keyboard.go +++ b/modules/nbascore/keyboard.go @@ -3,6 +3,7 @@ package nbascore import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("l", widget.next, "Select next item") diff --git a/modules/pihole/keyboard.go b/modules/pihole/keyboard.go index 0d61e141..87147849 100644 --- a/modules/pihole/keyboard.go +++ b/modules/pihole/keyboard.go @@ -1,6 +1,7 @@ package pihole func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("d", widget.disable, "disable Pi-hole") diff --git a/modules/pocket/keyboard.go b/modules/pocket/keyboard.go index b51a0226..4c8af590 100644 --- a/modules/pocket/keyboard.go +++ b/modules/pocket/keyboard.go @@ -3,6 +3,7 @@ package pocket import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("a", widget.toggleLink, "Toggle Link") diff --git a/modules/rollbar/keyboard.go b/modules/rollbar/keyboard.go index 2d4c5a5a..409c12c1 100644 --- a/modules/rollbar/keyboard.go +++ b/modules/rollbar/keyboard.go @@ -3,6 +3,7 @@ package rollbar import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/spotify/keyboard.go b/modules/spotify/keyboard.go index 70f105cb..d7db4d0c 100644 --- a/modules/spotify/keyboard.go +++ b/modules/spotify/keyboard.go @@ -7,6 +7,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("l", widget.next, "Select next item") diff --git a/modules/spotifyweb/keyboard.go b/modules/spotifyweb/keyboard.go index 7cf7610e..dd31066d 100644 --- a/modules/spotifyweb/keyboard.go +++ b/modules/spotifyweb/keyboard.go @@ -7,6 +7,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("h", widget.selectPrevious, "Select previous item") diff --git a/modules/subreddit/keyboard.go b/modules/subreddit/keyboard.go index ee5ab9f3..e31601aa 100644 --- a/modules/subreddit/keyboard.go +++ b/modules/subreddit/keyboard.go @@ -3,6 +3,7 @@ package subreddit import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/textfile/keyboard.go b/modules/textfile/keyboard.go index 08654947..70d537ff 100644 --- a/modules/textfile/keyboard.go +++ b/modules/textfile/keyboard.go @@ -6,6 +6,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(nil) widget.SetKeyboardChar("l", widget.NextSource, "Select next file") diff --git a/modules/todo/keyboard.go b/modules/todo/keyboard.go index ec132d25..87727696 100644 --- a/modules/todo/keyboard.go +++ b/modules/todo/keyboard.go @@ -9,6 +9,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/todo_plus/keyboard.go b/modules/todo_plus/keyboard.go index f1922c26..66ab0059 100644 --- a/modules/todo_plus/keyboard.go +++ b/modules/todo_plus/keyboard.go @@ -3,6 +3,7 @@ package todo_plus import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("d", widget.Delete, "Delete item") diff --git a/modules/transmission/keyboard.go b/modules/transmission/keyboard.go index 0bd69b4f..1690b526 100644 --- a/modules/transmission/keyboard.go +++ b/modules/transmission/keyboard.go @@ -3,6 +3,7 @@ package transmission import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(nil) widget.SetKeyboardChar("j", widget.Prev, "Select previous item") diff --git a/modules/travisci/keyboard.go b/modules/travisci/keyboard.go index 0ada9d68..0a9e735e 100644 --- a/modules/travisci/keyboard.go +++ b/modules/travisci/keyboard.go @@ -3,6 +3,7 @@ package travisci import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/twitch/keyboard.go b/modules/twitch/keyboard.go index 7f3e11a1..36a2d88a 100644 --- a/modules/twitch/keyboard.go +++ b/modules/twitch/keyboard.go @@ -3,6 +3,7 @@ package twitch import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/modules/twitter/keyboard.go b/modules/twitter/keyboard.go index a6142b1e..908be09e 100644 --- a/modules/twitter/keyboard.go +++ b/modules/twitter/keyboard.go @@ -6,6 +6,7 @@ import ( ) func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("l", widget.NextSource, "Select next source") diff --git a/modules/uptimerobot/keyboard.go b/modules/uptimerobot/keyboard.go index b06df96c..57293de3 100644 --- a/modules/uptimerobot/keyboard.go +++ b/modules/uptimerobot/keyboard.go @@ -1,5 +1,6 @@ package uptimerobot func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) } diff --git a/modules/weatherservices/weather/keyboard.go b/modules/weatherservices/weather/keyboard.go index bfa8fe75..0dcfb463 100644 --- a/modules/weatherservices/weather/keyboard.go +++ b/modules/weatherservices/weather/keyboard.go @@ -3,6 +3,7 @@ package weather import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("h", widget.PrevSource, "Select previous city") diff --git a/modules/zendesk/keyboard.go b/modules/zendesk/keyboard.go index 2c561181..5ab69962 100644 --- a/modules/zendesk/keyboard.go +++ b/modules/zendesk/keyboard.go @@ -3,6 +3,7 @@ package zendesk import "github.com/gdamore/tcell" func (widget *Widget) initializeKeyboardControls() { + widget.InitializeHelpTextKeyboardControl(widget.ShowHelp) widget.InitializeRefreshKeyboardControl(widget.Refresh) widget.SetKeyboardChar("j", widget.Next, "Select next item") diff --git a/view/bargraph.go b/view/bargraph.go index 42ce1b02..58b10c43 100644 --- a/view/bargraph.go +++ b/view/bargraph.go @@ -32,8 +32,8 @@ type Bar struct { // NewBarGraph creates and returns an instance of BarGraph func NewBarGraph(tviewApp *tview.Application, name string, commonSettings *cfg.Common) BarGraph { widget := BarGraph{ - Base: NewBase(commonSettings), - KeyboardWidget: NewKeyboardWidget(tviewApp, nil, commonSettings), + Base: NewBase(tviewApp, nil, commonSettings), + KeyboardWidget: NewKeyboardWidget(commonSettings), maxStars: commonSettings.Config.UInt("graphStars", 20), starChar: commonSettings.Config.UString("graphIcon", "|"), diff --git a/view/base.go b/view/base.go index 3ba9efe4..6550be82 100644 --- a/view/base.go +++ b/view/base.go @@ -4,6 +4,7 @@ import ( "fmt" "sync" + "github.com/rivo/tview" "github.com/wtfutil/wtf/cfg" "github.com/wtfutil/wtf/utils" ) @@ -15,15 +16,19 @@ type Base struct { enabledMutex *sync.Mutex focusChar string focusable bool + helpTextFunc func() string name string + pages *tview.Pages quitChan chan bool refreshInterval int refreshing bool + tviewApp *tview.Application + view *tview.TextView } // NewBase creates and returns an instance of the Base module, the lowest-level // primitive module from which all others are derived -func NewBase(commonSettings *cfg.Common) *Base { +func NewBase(tviewApp *tview.Application, pages *tview.Pages, commonSettings *cfg.Common) *Base { base := &Base{ commonSettings: commonSettings, @@ -33,9 +38,11 @@ func NewBase(commonSettings *cfg.Common) *Base { focusChar: commonSettings.FocusChar(), focusable: commonSettings.Focusable, name: commonSettings.Name, + pages: pages, quitChan: make(chan bool), refreshInterval: commonSettings.RefreshInterval, refreshing: false, + tviewApp: tviewApp, } return base @@ -131,6 +138,32 @@ func (base *Base) SetFocusChar(char string) { base.focusChar = char } +// SetView assigns the passed-in tview.TextView view to this widget +func (base *Base) SetView(view *tview.TextView) { + base.view = view +} + +// ShowHelp displays the modal help dialog for a module +func (base *Base) ShowHelp() { + if base.pages == nil { + return + } + + closeFunc := func() { + base.pages.RemovePage("help") + base.tviewApp.SetFocus(base.view) + } + + modal := NewBillboardModal(base.helpTextFunc(), closeFunc) + + base.pages.AddPage("help", modal, false, true) + base.tviewApp.SetFocus(modal) + + base.tviewApp.QueueUpdate(func() { + base.tviewApp.Draw() + }) +} + func (base *Base) Stop() { base.enabledMutex.Lock() base.enabled = false diff --git a/view/keyboard_widget.go b/view/keyboard_widget.go index e27eb8fe..1ba1bbfe 100644 --- a/view/keyboard_widget.go +++ b/view/keyboard_widget.go @@ -5,11 +5,11 @@ import ( "strings" "github.com/gdamore/tcell" - "github.com/rivo/tview" "github.com/wtfutil/wtf/cfg" "github.com/wtfutil/wtf/utils" ) +const helpKeyChar = "/" const refreshKeyChar = "r" type helpItem struct { @@ -19,10 +19,7 @@ type helpItem struct { // KeyboardWidget manages keyboard control for a widget type KeyboardWidget struct { - pages *tview.Pages settings *cfg.Common - tviewApp *tview.Application - view *tview.TextView charMap map[string]func() keyMap map[tcell.Key]func() @@ -32,10 +29,9 @@ type KeyboardWidget struct { } // NewKeyboardWidget creates and returns a new instance of KeyboardWidget -func NewKeyboardWidget(tviewApp *tview.Application, pages *tview.Pages, settings *cfg.Common) *KeyboardWidget { +// func NewKeyboardWidget(tviewApp *tview.Application, pages *tview.Pages, settings *cfg.Common) *KeyboardWidget { +func NewKeyboardWidget(settings *cfg.Common) *KeyboardWidget { keyWidget := &KeyboardWidget{ - tviewApp: tviewApp, - pages: pages, settings: settings, charMap: make(map[string]func()), keyMap: make(map[tcell.Key]func()), @@ -78,6 +74,14 @@ func (widget *KeyboardWidget) HelpText() string { return str } +// InitializeHelpTextKeyboardControl assigns the function that displays help text to the +// common help text key value +func (widget *KeyboardWidget) InitializeHelpTextKeyboardControl(helpFunc func()) { + if helpFunc != nil { + widget.SetKeyboardChar(helpKeyChar, helpFunc, "Show/hide this help prompt") + } +} + // InitializeRefreshKeyboardControl assigns the module's explicit refresh function to // the commom refresh key value func (widget *KeyboardWidget) InitializeRefreshKeyboardControl(refreshFunc func()) { @@ -155,37 +159,10 @@ func (widget *KeyboardWidget) SetKeyboardKey(key tcell.Key, fn func(), helpText } } -// SetView assigns the passed-in tview.TextView view to this widget -func (widget *KeyboardWidget) SetView(view *tview.TextView) { - widget.view = view -} - -// ShowHelp displays the modal help dialog for a module -func (widget *KeyboardWidget) ShowHelp() { - if widget.pages == nil { - return - } - - closeFunc := func() { - widget.pages.RemovePage("help") - widget.tviewApp.SetFocus(widget.view) - } - - modal := NewBillboardModal(widget.HelpText(), closeFunc) - - widget.pages.AddPage("help", modal, false, true) - widget.tviewApp.SetFocus(modal) - - widget.tviewApp.QueueUpdate(func() { - widget.tviewApp.Draw() - }) -} - /* -------------------- Unexported Functions -------------------- */ // initializeCommonKeyboardControls sets up the keyboard controls that are common to // all widgets that accept keyboard input func (widget *KeyboardWidget) initializeCommonKeyboardControls() { - widget.SetKeyboardChar("/", widget.ShowHelp, "Show/hide this help prompt") widget.SetKeyboardChar("\\", widget.LaunchDocumentation, "Open the documentation for this module in a browser") } diff --git a/view/keyboard_widget_test.go b/view/keyboard_widget_test.go index 3ecdb1c9..6660a2ec 100644 --- a/view/keyboard_widget_test.go +++ b/view/keyboard_widget_test.go @@ -4,7 +4,6 @@ import ( "testing" "github.com/gdamore/tcell" - "github.com/rivo/tview" "github.com/stretchr/testify/assert" "github.com/wtfutil/wtf/cfg" ) @@ -13,8 +12,6 @@ func test() {} func testKeyboardWidget() *KeyboardWidget { keyWid := NewKeyboardWidget( - tview.NewApplication(), - tview.NewPages(), &cfg.Common{ Module: cfg.Module{ Name: "testWidget", @@ -178,7 +175,6 @@ func Test_initializeCommonKeyboardControls(t *testing.T) { t.Run("nil refreshFunc", func(t *testing.T) { keyWid := testKeyboardWidget() - assert.NotNil(t, keyWid.charMap["/"]) assert.NotNil(t, keyWid.charMap["\\"]) }) } @@ -206,18 +202,3 @@ func Test_HelpText(t *testing.T) { assert.NotNil(t, keyWid.HelpText()) } - -func Test_SetView(t *testing.T) { - keyWid := testKeyboardWidget() - assert.Nil(t, keyWid.view) - - view := &tview.TextView{} - keyWid.SetView(view) - assert.Equal(t, view, keyWid.view) -} - -func Test_ShowHelp(t *testing.T) { - keyWid := testKeyboardWidget() - - assert.NotPanics(t, func() { keyWid.ShowHelp() }) -} diff --git a/view/text_widget.go b/view/text_widget.go index 8e345496..1cfa32eb 100644 --- a/view/text_widget.go +++ b/view/text_widget.go @@ -21,8 +21,8 @@ type TextWidget struct { // NewTextWidget creates and returns an instance of TextWidget func NewTextWidget(tviewApp *tview.Application, pages *tview.Pages, commonSettings *cfg.Common) TextWidget { widget := TextWidget{ - Base: NewBase(commonSettings), - KeyboardWidget: NewKeyboardWidget(tviewApp, pages, commonSettings), + Base: NewBase(tviewApp, pages, commonSettings), + KeyboardWidget: NewKeyboardWidget(commonSettings), tviewApp: tviewApp, } @@ -30,7 +30,8 @@ func NewTextWidget(tviewApp *tview.Application, pages *tview.Pages, commonSettin widget.View = widget.createView(widget.bordered) widget.View.SetInputCapture(widget.KeyboardWidget.InputCapture) - widget.KeyboardWidget.SetView(widget.View) + widget.Base.SetView(widget.View) + widget.Base.helpTextFunc = widget.KeyboardWidget.HelpText return widget } @@ -42,8 +43,8 @@ func (widget *TextWidget) TextView() *tview.TextView { return widget.View } +// Redraw forces a refresh of the onscreen text content of this widget func (widget *TextWidget) Redraw(data func() (string, string, bool)) { - // FIXME: This is coming from KeyboardWidget, which seems wrong widget.tviewApp.QueueUpdateDraw(func() { title, content, wrap := data()