From 1c41b63f08d9b46ed558b0b3470cd2a2a9dfaf97 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Mon, 11 Jun 2018 19:23:09 -0400 Subject: [PATCH] Move sidebar into account tabs This is accomplished through a bit of a hack, the statusbar is able to be a child of multiple dudes --- lib/ui/stack.go | 8 ++++---- widgets/aerc.go | 47 ++++++++++++++++++++++++++++++----------------- 2 files changed, 34 insertions(+), 21 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,34 +20,47 @@ 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"). - 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) - statusbar := libui.NewStack() - grid.AddChild(statusbar).At(2, 1) - 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)) + mainGrid.AddChild(tabs.TabStrip).At(0, 1) + mainGrid.AddChild(tabs.TabContent).At(1, 0).Span(1, 2) + + 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) + } + + acctPlaceholder('.', '★', "白い星") + acctPlaceholder(',', '☆', "empty stars") + go (func() { for { time.Sleep(1 * time.Second) @@ -56,7 +69,7 @@ func NewAerc(logger *log.Logger) *Aerc { })() return &Aerc{ - grid: grid, + grid: mainGrid, statusbar: statusbar, statusline: statusline, tabs: tabs,