diff options
| author | Drew DeVault <sir@cmpwn.com> | 2019-05-13 16:24:05 -0400 | 
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2019-05-13 16:53:02 -0400 | 
| commit | bb46b2b7e15ba839475973ae44d5a833c6f2b265 (patch) | |
| tree | f4f5036a314e965e4dc1261119e1478b4935d677 /widgets | |
| parent | 17bd2dc4dbb3b43b1917c942100834c1341f2194 (diff) | |
Spec out review message screen
Diffstat (limited to 'widgets')
| -rw-r--r-- | widgets/compose.go | 64 | 
1 files changed, 58 insertions, 6 deletions
diff --git a/widgets/compose.go b/widgets/compose.go index 3d74301..5b7a1ba 100644 --- a/widgets/compose.go +++ b/widgets/compose.go @@ -12,11 +12,6 @@ import (  	"git.sr.ht/~sircmpwn/aerc2/lib/ui"  ) -type headerEditor struct { -	name  string -	input *ui.TextInput -} -  type Composer struct {  	headers struct {  		from    *headerEditor @@ -29,6 +24,7 @@ type Composer struct {  	editor *Terminal  	email  *os.File  	grid   *ui.Grid +	review *reviewMessage  	focusable []ui.DrawableInteractive  	focused   int @@ -74,7 +70,7 @@ func NewComposer(conf *config.AccountConfig) *Composer {  	grid.AddChild(headers).At(0, 0)  	grid.AddChild(term).At(1, 0) -	return &Composer{ +	c := &Composer{  		config: conf,  		editor: term,  		email:  email, @@ -83,6 +79,10 @@ func NewComposer(conf *config.AccountConfig) *Composer {  		focused:   1,  		focusable: []ui.DrawableInteractive{from, to, subject, term},  	} + +	term.OnClose = c.termClosed + +	return c  }  func (c *Composer) Draw(ctx *ui.Context) { @@ -107,6 +107,13 @@ func (c *Composer) Focus(focus bool) {  	c.focusable[c.focused].Focus(focus)  } +func (c *Composer) termClosed(err error) { +	// TODO: do we care about that error (note: yes, we do) +	c.grid.RemoveChild(c.editor) +	c.grid.AddChild(newReviewMessage(c)).At(1, 0) +	c.editor.Destroy() +} +  func (c *Composer) PrevField() {  	c.focusable[c.focused].Focus(false)  	c.focused-- @@ -122,6 +129,11 @@ func (c *Composer) NextField() {  	c.focusable[c.focused].Focus(true)  } +type headerEditor struct { +	name  string +	input *ui.TextInput +} +  func newHeaderEditor(name string, value string) *headerEditor {  	return &headerEditor{  		input: ui.NewTextInput(value), @@ -154,3 +166,43 @@ func (he *headerEditor) Focus(focused bool) {  func (he *headerEditor) Event(event tcell.Event) bool {  	return he.input.Event(event)  } + +type reviewMessage struct { +	composer *Composer +	grid     *ui.Grid +} + +func newReviewMessage(composer *Composer) *reviewMessage { +	grid := ui.NewGrid().Rows([]ui.GridSpec{ +		{ui.SIZE_EXACT, 2}, +		{ui.SIZE_EXACT, 1}, +		{ui.SIZE_WEIGHT, 1}, +	}).Columns([]ui.GridSpec{ +		{ui.SIZE_WEIGHT, 1}, +	}) +	grid.AddChild(ui.NewText( +		"Send this email? [y]es/[n]o/[e]dit/[a]ttach file")).At(0, 0) +	grid.AddChild(ui.NewText("Attachments:"). +		Reverse(true)).At(1, 0) +	// TODO: Attachments +	grid.AddChild(ui.NewText("(none)")).At(2, 0) + +	return &reviewMessage{ +		composer: composer, +		grid:     grid, +	} +} + +func (rm *reviewMessage) Invalidate() { +	rm.grid.Invalidate() +} + +func (rm *reviewMessage) OnInvalidate(fn func(ui.Drawable)) { +	rm.grid.OnInvalidate(func(_ ui.Drawable) { +		fn(rm) +	}) +} + +func (rm *reviewMessage) Draw(ctx *ui.Context) { +	rm.grid.Draw(ctx) +}  | 
