diff --git a/bamboohr/widget.go b/bamboohr/widget.go index 19de8f34..2e2d95ab 100644 --- a/bamboohr/widget.go +++ b/bamboohr/widget.go @@ -17,7 +17,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" ðŸ‘― BambooHR ", "bamboohr"), + TextWidget: wtf.NewTextWidget(" ðŸ‘― BambooHR ", "bamboohr", false), } return &widget diff --git a/clocks/widget.go b/clocks/widget.go index f4936376..8263c0de 100644 --- a/clocks/widget.go +++ b/clocks/widget.go @@ -16,7 +16,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" 🕗 World Clocks ", "clocks"), + TextWidget: wtf.NewTextWidget(" 🕗 World Clocks ", "clocks", false), } return &widget diff --git a/gcal/widget.go b/gcal/widget.go index 0d38e96e..8d32efd9 100644 --- a/gcal/widget.go +++ b/gcal/widget.go @@ -19,7 +19,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" ðŸŋ Calendar ", "gcal"), + TextWidget: wtf.NewTextWidget(" ðŸŋ Calendar ", "gcal", false), } return &widget diff --git a/git/widget.go b/git/widget.go index 04c2f225..03b33354 100644 --- a/git/widget.go +++ b/git/widget.go @@ -20,7 +20,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" Git ", "git"), + TextWidget: wtf.NewTextWidget(" Git ", "git", true), Idx: 0, } diff --git a/github/widget.go b/github/widget.go index 3f89b8f3..8d40c871 100644 --- a/github/widget.go +++ b/github/widget.go @@ -20,7 +20,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" Github ", "github"), + TextWidget: wtf.NewTextWidget(" Github ", "github", true), Idx: 0, } diff --git a/jira/widget.go b/jira/widget.go index 36a9853a..24d4842e 100644 --- a/jira/widget.go +++ b/jira/widget.go @@ -17,7 +17,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget("JIRA", "jira"), + TextWidget: wtf.NewTextWidget("JIRA", "jira", false), } return &widget diff --git a/newrelic/widget.go b/newrelic/widget.go index 06929982..bf5836c8 100644 --- a/newrelic/widget.go +++ b/newrelic/widget.go @@ -18,7 +18,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" New Relic ", "newrelic"), + TextWidget: wtf.NewTextWidget(" New Relic ", "newrelic", false), } return &widget diff --git a/opsgenie/widget.go b/opsgenie/widget.go index 253c0cdf..ad5dd122 100644 --- a/opsgenie/widget.go +++ b/opsgenie/widget.go @@ -18,7 +18,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" ⏰ OpsGenie ", "opsgenie"), + TextWidget: wtf.NewTextWidget(" ⏰ OpsGenie ", "opsgenie", false), } return &widget diff --git a/security/widget.go b/security/widget.go index 0ea8c9ef..e4a919cf 100644 --- a/security/widget.go +++ b/security/widget.go @@ -17,7 +17,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" ðŸĪš Security ", "security"), + TextWidget: wtf.NewTextWidget(" ðŸĪš Security ", "security", false), } return &widget diff --git a/status/widget.go b/status/widget.go index 39369005..cc602e4a 100644 --- a/status/widget.go +++ b/status/widget.go @@ -19,7 +19,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" 🎉 Status ", "status"), + TextWidget: wtf.NewTextWidget(" 🎉 Status ", "status", false), Current: 0, } diff --git a/system/widget.go b/system/widget.go index ec522cf6..b4521c38 100644 --- a/system/widget.go +++ b/system/widget.go @@ -20,7 +20,7 @@ type Widget struct { func NewWidget(builtAt, version string) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" System ", "system"), + TextWidget: wtf.NewTextWidget(" System ", "system", false), BuiltAt: builtAt, Version: version, } diff --git a/textfile/widget.go b/textfile/widget.go index 430a59e9..b4df86e5 100644 --- a/textfile/widget.go +++ b/textfile/widget.go @@ -20,7 +20,7 @@ type Widget struct { func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" 📄 Text File ", "textfile"), + TextWidget: wtf.NewTextWidget(" 📄 Text File ", "textfile", true), FilePath: Config.UString("wtf.mods.textfile.filename"), } diff --git a/todo/widget.go b/todo/widget.go index 7dc2ded8..f4775a38 100644 --- a/todo/widget.go +++ b/todo/widget.go @@ -26,7 +26,7 @@ type Widget struct { func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" 📝 Todo ", "todo"), + TextWidget: wtf.NewTextWidget(" 📝 Todo ", "todo", true), app: app, pages: pages, diff --git a/weather/widget.go b/weather/widget.go index 788ffa19..c0608308 100644 --- a/weather/widget.go +++ b/weather/widget.go @@ -25,7 +25,7 @@ type Widget struct { // NewWidget creates and returns a new instance of the weather Widget. func NewWidget() *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(" Weather ", "weather"), + TextWidget: wtf.NewTextWidget(" Weather ", "weather", true), APIKey: os.Getenv("WTF_OWM_API_KEY"), Idx: 0, } @@ -186,6 +186,8 @@ func (widget *Widget) icon(data *owm.CurrentWeatherData) string { icon = "❄ïļ" case "sunny": icon = "☀ïļ" + case "thunderstorm": + icon = "⛈" default: icon = "ðŸ’Ĩ" } diff --git a/wtf/focus_tracker.go b/wtf/focus_tracker.go index 23d75ffd..322c8320 100644 --- a/wtf/focus_tracker.go +++ b/wtf/focus_tracker.go @@ -46,7 +46,7 @@ func (tracker *FocusTracker) Prev() { /* -------------------- Unexported Functions -------------------- */ func (tracker *FocusTracker) blur(idx int) { - view := tracker.Widgets[idx].TextView() + view := tracker.focusable()[idx].TextView() view.Blur() view.SetBorderColor(ColorFor(Config.UString("wtf.colors.border.normal", "gray"))) } @@ -55,20 +55,32 @@ func (tracker *FocusTracker) decrement() { tracker.Idx = tracker.Idx - 1 if tracker.Idx < 0 { - tracker.Idx = len(tracker.Widgets) - 1 + tracker.Idx = len(tracker.focusable()) - 1 } } func (tracker *FocusTracker) focus(idx int) { - view := tracker.Widgets[idx].TextView() + view := tracker.focusable()[idx].TextView() tracker.App.SetFocus(view) view.SetBorderColor(ColorFor(Config.UString("wtf.colors.border.focus", "gray"))) } +func (tracker *FocusTracker) focusable() []TextViewer { + focusable := []TextViewer{} + + for _, widget := range tracker.Widgets { + if widget.Focusable() { + focusable = append(focusable, widget) + } + } + + return focusable +} + func (tracker *FocusTracker) increment() { tracker.Idx = tracker.Idx + 1 - if tracker.Idx == len(tracker.Widgets) { + if tracker.Idx == len(tracker.focusable()) { tracker.Idx = 0 } } diff --git a/wtf/text_viewer.go b/wtf/text_viewer.go index 70839e9d..6a85af50 100644 --- a/wtf/text_viewer.go +++ b/wtf/text_viewer.go @@ -9,7 +9,7 @@ type TextViewer interface { Enabler Scheduler - //Refresh() + Focusable() bool TextView() *tview.TextView Top() int diff --git a/wtf/text_widget.go b/wtf/text_widget.go index f0703294..c1967ea0 100644 --- a/wtf/text_widget.go +++ b/wtf/text_widget.go @@ -13,6 +13,7 @@ var Config *config.Config type TextWidget struct { enabled bool + focusable bool Name string RefreshedAt time.Time RefreshInt int @@ -21,9 +22,10 @@ type TextWidget struct { Position } -func NewTextWidget(name string, configKey string) TextWidget { +func NewTextWidget(name string, configKey string, focusable bool) TextWidget { widget := TextWidget{ enabled: Config.UBool(fmt.Sprintf("wtf.mods.%s.enabled", configKey), false), + focusable: focusable, Name: name, RefreshInt: Config.UInt(fmt.Sprintf("wtf.mods.%s.refreshInterval", configKey)), Position: Position{ @@ -49,6 +51,10 @@ func (widget *TextWidget) Enabled() bool { return widget.enabled } +func (widget *TextWidget) Focusable() bool { + return widget.focusable +} + func (widget *TextWidget) RefreshInterval() int { return widget.RefreshInt }