46 lines
885 B
Go
46 lines
885 B
Go
|
package ui
|
||
|
|
||
|
import (
|
||
|
tb "github.com/nsf/termbox-go"
|
||
|
|
||
|
"git.sr.ht/~sircmpwn/aerc2/config"
|
||
|
)
|
||
|
|
||
|
func Initialize(conf *config.AercConfig) (*UIState, error) {
|
||
|
state := UIState{
|
||
|
InvalidPanes: InvalidateAll,
|
||
|
Tabs: make([]AercTab, len(conf.Accounts)),
|
||
|
}
|
||
|
// TODO: Initialize each tab to a mailbox tab
|
||
|
if err := tb.Init(); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
tb.SetInputMode(tb.InputEsc | tb.InputMouse)
|
||
|
tb.SetOutputMode(tb.Output256)
|
||
|
return &state, nil
|
||
|
}
|
||
|
|
||
|
func (state *UIState) Close() {
|
||
|
tb.Close()
|
||
|
}
|
||
|
|
||
|
func (state *UIState) Invalidate(what uint) {
|
||
|
state.InvalidPanes |= what
|
||
|
}
|
||
|
|
||
|
func (state *UIState) Tick() bool {
|
||
|
switch e := tb.PollEvent(); e.Type {
|
||
|
case tb.EventKey:
|
||
|
if e.Key == tb.KeyEsc {
|
||
|
state.Exit = true
|
||
|
}
|
||
|
case tb.EventResize:
|
||
|
state.Invalidate(InvalidateAll)
|
||
|
}
|
||
|
if state.InvalidPanes != 0 {
|
||
|
// TODO: re-render
|
||
|
state.InvalidPanes = 0
|
||
|
}
|
||
|
return true
|
||
|
}
|