mirror of
				https://github.com/taigrr/wtf
				synced 2025-01-18 04:03:14 -08:00 
			
		
		
		
	Remove common functionality from KeyboardWidget and into Base
Signed-off-by: Chris Cummer <chriscummer@me.com>
This commit is contained in:
		
							parent
							
								
									aae98e40e3
								
							
						
					
					
						commit
						d6c8e08c2f
					
				@ -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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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 {
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
package buildkite
 | 
			
		||||
 | 
			
		||||
func (widget *Widget) initializeKeyboardControls() {
 | 
			
		||||
	widget.InitializeHelpTextKeyboardControl(widget.ShowHelp)
 | 
			
		||||
	widget.InitializeRefreshKeyboardControl(widget.Refresh)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (widget *Widget) initializeKeyboardControls() {
 | 
			
		||||
	widget.InitializeHelpTextKeyboardControl(widget.ShowHelp)
 | 
			
		||||
	widget.InitializeRefreshKeyboardControl(nil)
 | 
			
		||||
 | 
			
		||||
	widget.SetKeyboardChar("l", widget.NextSource, "Select next file")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
package uptimerobot
 | 
			
		||||
 | 
			
		||||
func (widget *Widget) initializeKeyboardControls() {
 | 
			
		||||
	widget.InitializeHelpTextKeyboardControl(widget.ShowHelp)
 | 
			
		||||
	widget.InitializeRefreshKeyboardControl(widget.Refresh)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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", "|"),
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										35
									
								
								view/base.go
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								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
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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() })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user