diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-02-27 21:17:26 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2018-02-27 21:17:26 -0500 |
commit | cab3771e17286788913255a6abe858b476166837 (patch) | |
tree | 85c626c779e380bb6a9d7ddd6cba69ef33cf919d /widgets | |
parent | a073d7613fac7c79b7909d93a0dd7bfea05d5c9d (diff) |
Pull main aerc UI into widget
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/aerc.go | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/widgets/aerc.go b/widgets/aerc.go new file mode 100644 index 0000000..2168e61 --- /dev/null +++ b/widgets/aerc.go @@ -0,0 +1,91 @@ +package widgets + +import ( + "log" + "time" + + tb "github.com/nsf/termbox-go" + + libui "git.sr.ht/~sircmpwn/aerc2/lib/ui" +) + +type Aerc struct { + grid *libui.Grid + tabs *libui.Tabs + statusbar *libui.Stack + statusline *StatusLine + interactive libui.Interactive +} + +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{ + 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(tb.ColorBlack, tb.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() + statusline.Push("test status!", 6 * time.Second) + statusline.Push("test error!", 3 * time.Second). + Color(tb.ColorRed, tb.ColorBlack) + statusbar.Push(statusline) + + exline := NewExLine(func(command string) { + statusbar.Pop() + logger.Printf("TODO: execute command: %s\n", command) + }, func() { + statusbar.Pop() + }) + statusbar.Push(exline) + + go (func() { + for { + time.Sleep(1 * time.Second) + tabs.Select((tabs.Selected + 1) % 2) + } + })() + + return &Aerc{ + grid: grid, + interactive: exline, + statusbar: statusbar, + statusline: statusline, + tabs: tabs, + } +} + +func (aerc *Aerc) OnInvalidate(onInvalidate func(d libui.Drawable)) { + aerc.grid.OnInvalidate(onInvalidate) +} + +func (aerc *Aerc) Invalidate() { + aerc.grid.Invalidate() +} + +func (aerc *Aerc) Draw(ctx *libui.Context) { + aerc.grid.Draw(ctx) +} + +func (aerc *Aerc) Event(event tb.Event) bool { + return aerc.interactive.Event(event) +} |