summary refs log tree commit diff stats
path: root/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'widgets')
-rw-r--r--widgets/account.go19
-rw-r--r--widgets/dirlist.go10
-rw-r--r--widgets/exline.go9
-rw-r--r--widgets/msglist.go24
-rw-r--r--widgets/msgviewer.go21
-rw-r--r--widgets/spinner.go10
-rw-r--r--widgets/status.go11
-rw-r--r--widgets/terminal.go36
8 files changed, 45 insertions, 95 deletions
diff --git a/widgets/account.go b/widgets/account.go
index f8abdc9..a8cd9ad 100644
--- a/widgets/account.go
+++ b/widgets/account.go
@@ -14,16 +14,15 @@ import (
 )
 
 type AccountView struct {
-	acct         *config.AccountConfig
-	conf         *config.AercConfig
-	dirlist      *DirectoryList
-	grid         *ui.Grid
-	host         TabHost
-	logger       *log.Logger
-	onInvalidate func(d ui.Drawable)
-	msglist      *MessageList
-	msgStores    map[string]*lib.MessageStore
-	worker       *types.Worker
+	acct      *config.AccountConfig
+	conf      *config.AercConfig
+	dirlist   *DirectoryList
+	grid      *ui.Grid
+	host      TabHost
+	logger    *log.Logger
+	msglist   *MessageList
+	msgStores map[string]*lib.MessageStore
+	worker    *types.Worker
 }
 
 func NewAccountView(conf *config.AercConfig, acct *config.AccountConfig,
diff --git a/widgets/dirlist.go b/widgets/dirlist.go
index eb79bc4..374d142 100644
--- a/widgets/dirlist.go
+++ b/widgets/dirlist.go
@@ -12,10 +12,10 @@ import (
 )
 
 type DirectoryList struct {
+	ui.Invalidatable
 	conf         *config.AccountConfig
 	dirs         []string
 	logger       *log.Logger
-	onInvalidate func(d ui.Drawable)
 	selecting    string
 	selected     string
 	spinner      *Spinner
@@ -77,14 +77,8 @@ func (dirlist *DirectoryList) Selected() string {
 	return dirlist.selected
 }
 
-func (dirlist *DirectoryList) OnInvalidate(onInvalidate func(d ui.Drawable)) {
-	dirlist.onInvalidate = onInvalidate
-}
-
 func (dirlist *DirectoryList) Invalidate() {
-	if dirlist.onInvalidate != nil {
-		dirlist.onInvalidate(dirlist)
-	}
+	dirlist.DoInvalidate(dirlist)
 }
 
 func (dirlist *DirectoryList) Draw(ctx *ui.Context) {
diff --git a/widgets/exline.go b/widgets/exline.go
index 5c9f065..8b18736 100644
--- a/widgets/exline.go
+++ b/widgets/exline.go
@@ -12,6 +12,7 @@ import (
 // TODO: scrolling
 
 type ExLine struct {
+	ui.Invalidatable
 	command []rune
 	commit  func(cmd string)
 	ctx     *ui.Context
@@ -33,14 +34,8 @@ func NewExLine(commit func(cmd string), cancel func()) *ExLine {
 	}
 }
 
-func (ex *ExLine) OnInvalidate(onInvalidate func(d ui.Drawable)) {
-	ex.onInvalidate = onInvalidate
-}
-
 func (ex *ExLine) Invalidate() {
-	if ex.onInvalidate != nil {
-		ex.onInvalidate(ex)
-	}
+	ex.DoInvalidate(ex)
 }
 
 func (ex *ExLine) Draw(ctx *ui.Context) {
diff --git a/widgets/msglist.go b/widgets/msglist.go
index ea9b245..c4b5d82 100644
--- a/widgets/msglist.go
+++ b/widgets/msglist.go
@@ -12,14 +12,14 @@ import (
 )
 
 type MessageList struct {
-	conf         *config.AercConfig
-	logger       *log.Logger
-	height       int
-	onInvalidate func(d ui.Drawable)
-	scroll       int
-	selected     int
-	spinner      *Spinner
-	store        *lib.MessageStore
+	ui.Invalidatable
+	conf     *config.AercConfig
+	logger   *log.Logger
+	height   int
+	scroll   int
+	selected int
+	spinner  *Spinner
+	store    *lib.MessageStore
 }
 
 // TODO: fish in config
@@ -37,14 +37,8 @@ func NewMessageList(logger *log.Logger) *MessageList {
 	return ml
 }
 
-func (ml *MessageList) OnInvalidate(onInvalidate func(d ui.Drawable)) {
-	ml.onInvalidate = onInvalidate
-}
-
 func (ml *MessageList) Invalidate() {
-	if ml.onInvalidate != nil {
-		ml.onInvalidate(ml)
-	}
+	ml.DoInvalidate(ml)
 }
 
 func (ml *MessageList) Draw(ctx *ui.Context) {
diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go
index 711879b..ba99911 100644
--- a/widgets/msgviewer.go
+++ b/widgets/msgviewer.go
@@ -252,8 +252,7 @@ func (mv *MessageViewer) Focus(focus bool) {
 }
 
 type HeaderView struct {
-	onInvalidate func(d ui.Drawable)
-
+	ui.Invalidatable
 	Name  string
 	Value string
 }
@@ -281,17 +280,11 @@ func (hv *HeaderView) Draw(ctx *ui.Context) {
 }
 
 func (hv *HeaderView) Invalidate() {
-	if hv.onInvalidate != nil {
-		hv.onInvalidate(hv)
-	}
-}
-
-func (hv *HeaderView) OnInvalidate(fn func(d ui.Drawable)) {
-	hv.onInvalidate = fn
+	hv.DoInvalidate(hv)
 }
 
 type MultipartView struct {
-	onInvalidate func(d ui.Drawable)
+	ui.Invalidatable
 }
 
 func (mpv *MultipartView) Draw(ctx *ui.Context) {
@@ -303,11 +296,5 @@ func (mpv *MultipartView) Draw(ctx *ui.Context) {
 }
 
 func (mpv *MultipartView) Invalidate() {
-	if mpv.onInvalidate != nil {
-		mpv.onInvalidate(mpv)
-	}
-}
-
-func (mpv *MultipartView) OnInvalidate(fn func(d ui.Drawable)) {
-	mpv.onInvalidate = fn
+	mpv.DoInvalidate(mpv)
 }
diff --git a/widgets/spinner.go b/widgets/spinner.go
index 0ab3e13..bb7dbe8 100644
--- a/widgets/spinner.go
+++ b/widgets/spinner.go
@@ -23,8 +23,8 @@ var (
 )
 
 type Spinner struct {
+	ui.Invalidatable
 	frame        int64 // access via atomic
-	onInvalidate func(d ui.Drawable)
 	stop         chan struct{}
 }
 
@@ -84,12 +84,6 @@ func (s *Spinner) Draw(ctx *ui.Context) {
 	ctx.Printf(col, 0, tcell.StyleDefault, "%s", frames[cur])
 }
 
-func (s *Spinner) OnInvalidate(onInvalidate func(d ui.Drawable)) {
-	s.onInvalidate = onInvalidate
-}
-
 func (s *Spinner) Invalidate() {
-	if s.onInvalidate != nil {
-		s.onInvalidate(s)
-	}
+	s.DoInvalidate(s)
 }
diff --git a/widgets/status.go b/widgets/status.go
index 3536760..344454a 100644
--- a/widgets/status.go
+++ b/widgets/status.go
@@ -9,10 +9,9 @@ import (
 )
 
 type StatusLine struct {
+	ui.Invalidatable
 	stack    []*StatusMessage
 	fallback StatusMessage
-
-	onInvalidate func(d ui.Drawable)
 }
 
 type StatusMessage struct {
@@ -31,14 +30,8 @@ func NewStatusLine() *StatusLine {
 	}
 }
 
-func (status *StatusLine) OnInvalidate(onInvalidate func(d ui.Drawable)) {
-	status.onInvalidate = onInvalidate
-}
-
 func (status *StatusLine) Invalidate() {
-	if status.onInvalidate != nil {
-		status.onInvalidate(status)
-	}
+	status.DoInvalidate(status)
 }
 
 func (status *StatusLine) Draw(ctx *ui.Context) {
diff --git a/widgets/terminal.go b/widgets/terminal.go
index 84f80e3..63c105f 100644
--- a/widgets/terminal.go
+++ b/widgets/terminal.go
@@ -88,20 +88,20 @@ func init() {
 }
 
 type Terminal struct {
-	closed       bool
-	cmd          *exec.Cmd
-	colors       map[tcell.Color]tcell.Color
-	ctx          *ui.Context
-	cursorPos    vterm.Pos
-	cursorShown  bool
-	damage       []vterm.Rect
-	destroyed    bool
-	err          error
-	focus        bool
-	onInvalidate func(d ui.Drawable)
-	pty          *os.File
-	start        chan interface{}
-	vterm        *vterm.VTerm
+	ui.Invalidatable
+	closed      bool
+	cmd         *exec.Cmd
+	colors      map[tcell.Color]tcell.Color
+	ctx         *ui.Context
+	cursorPos   vterm.Pos
+	cursorShown bool
+	damage      []vterm.Rect
+	destroyed   bool
+	err         error
+	focus       bool
+	pty         *os.File
+	start       chan interface{}
+	vterm       *vterm.VTerm
 
 	OnClose func(err error)
 	OnStart func()
@@ -225,10 +225,6 @@ func (term *Terminal) Destroy() {
 	term.destroyed = true
 }
 
-func (term *Terminal) OnInvalidate(cb func(d ui.Drawable)) {
-	term.onInvalidate = cb
-}
-
 func (term *Terminal) Invalidate() {
 	if term.vterm != nil {
 		width, height := term.vterm.Size()
@@ -239,9 +235,7 @@ func (term *Terminal) Invalidate() {
 }
 
 func (term *Terminal) invalidate() {
-	if term.onInvalidate != nil {
-		term.onInvalidate(term)
-	}
+	term.DoInvalidate(term)
 }
 
 func (term *Terminal) Draw(ctx *ui.Context) {