diff options
| -rw-r--r-- | lib/ui/stack.go | 8 | ||||
| -rw-r--r-- | widgets/aerc.go | 45 | 
2 files changed, 33 insertions, 20 deletions
diff --git a/lib/ui/stack.go b/lib/ui/stack.go index 3c66f5a..2b97e78 100644 --- a/lib/ui/stack.go +++ b/lib/ui/stack.go @@ -8,7 +8,7 @@ import (  type Stack struct {  	children []Drawable -	onInvalidate func(d Drawable) +	onInvalidate []func(d Drawable)  }  func NewStack() *Stack { @@ -16,12 +16,12 @@ func NewStack() *Stack {  }  func (stack *Stack) OnInvalidate(onInvalidate func (d Drawable)) { -	stack.onInvalidate = onInvalidate +	stack.onInvalidate = append(stack.onInvalidate, onInvalidate)  }  func (stack *Stack) Invalidate() { -	if stack.onInvalidate != nil { -		stack.onInvalidate(stack) +	for _, fn := range stack.onInvalidate { +		fn(stack)  	}  } diff --git a/widgets/aerc.go b/widgets/aerc.go index 19ddfdd..798a4dd 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -20,33 +20,46 @@ type Aerc struct {  func NewAerc(logger *log.Logger) *Aerc {  	tabs := libui.NewTabs() -	tabs.Add(libui.NewFill('★'), "白い星") -	tabs.Add(libui.NewFill('☆'), "empty stars") -	grid := libui.NewGrid().Rows([]libui.GridSpec{ +	mainGrid := libui.NewGrid().Rows([]libui.GridSpec{  		libui.GridSpec{libui.SIZE_EXACT, 1},  		libui.GridSpec{libui.SIZE_WEIGHT, 1}, -		libui.GridSpec{libui.SIZE_EXACT, 1},  	}).Columns([]libui.GridSpec{  		libui.GridSpec{libui.SIZE_EXACT, 20},  		libui.GridSpec{libui.SIZE_WEIGHT, 1},  	}) -	// TODO: move sidebar into tab content, probably -	grid.AddChild(libui.NewText("aerc"). +	statusbar := libui.NewStack() +	statusline := NewStatusLine() +	statusbar.Push(statusline) + +	// TODO: Grab sidebar size from config and via :set command +	mainGrid.AddChild(libui.NewText("aerc").  		Strategy(libui.TEXT_CENTER).  		Color(tcell.ColorBlack, tcell.ColorWhite)) -	// sidebar placeholder: -	grid.AddChild(libui.NewBordered( -		libui.NewFill('.'), libui.BORDER_RIGHT)).At(1, 0).Span(2, 1) -	grid.AddChild(tabs.TabStrip).At(0, 1) -	grid.AddChild(tabs.TabContent).At(1, 1) +	mainGrid.AddChild(tabs.TabStrip).At(0, 1) +	mainGrid.AddChild(tabs.TabContent).At(1, 0).Span(1, 2) -	statusbar := libui.NewStack() -	grid.AddChild(statusbar).At(2, 1) +	acctPlaceholder := func(sidebar, body rune, name string) { +		accountGrid := libui.NewGrid().Rows([]libui.GridSpec{ +			libui.GridSpec{libui.SIZE_WEIGHT, 1}, +			libui.GridSpec{libui.SIZE_EXACT, 1}, +		}).Columns([]libui.GridSpec{ +			libui.GridSpec{libui.SIZE_EXACT, 20}, +			libui.GridSpec{libui.SIZE_WEIGHT, 1}, +		}) +		// Sidebar placeholder +		accountGrid.AddChild(libui.NewBordered( +			libui.NewFill(sidebar), libui.BORDER_RIGHT)).Span(2, 1) +		// Message list placeholder +		accountGrid.AddChild(libui.NewFill(body)).At(0, 1) +		// Statusbar +		accountGrid.AddChild(statusbar).At(1, 1) +		tabs.Add(accountGrid, name) +	} -	statusline := NewStatusLine() -	statusbar.Push(statusline) +	acctPlaceholder('.', '★', "白い星") +	acctPlaceholder(',', '☆', "empty stars")  	go (func() {  		for { @@ -56,7 +69,7 @@ func NewAerc(logger *log.Logger) *Aerc {  	})()  	return &Aerc{ -		grid:        grid, +		grid:        mainGrid,  		statusbar:   statusbar,  		statusline:  statusline,  		tabs:        tabs,  | 
