72 lines
1.1 KiB
Go
72 lines
1.1 KiB
Go
package ui
|
|
|
|
import (
|
|
tb "github.com/nsf/termbox-go"
|
|
|
|
"git.sr.ht/~sircmpwn/aerc2/config"
|
|
"git.sr.ht/~sircmpwn/aerc2/worker/types"
|
|
)
|
|
|
|
const (
|
|
Valid = 0
|
|
InvalidateTabList = 1 << iota
|
|
InvalidateTabView
|
|
InvalidateStatusBar
|
|
)
|
|
|
|
const (
|
|
InvalidateAll = InvalidateTabList |
|
|
InvalidateTabView |
|
|
InvalidateStatusBar
|
|
)
|
|
|
|
type Geometry struct {
|
|
Row int
|
|
Col int
|
|
Width int
|
|
Height int
|
|
}
|
|
|
|
type AercTab interface {
|
|
Name() string
|
|
Render(at Geometry)
|
|
SetParent(parent *UIState)
|
|
}
|
|
|
|
type WorkerListener interface {
|
|
GetChannel() chan types.WorkerMessage
|
|
HandleMessage(msg types.WorkerMessage)
|
|
}
|
|
|
|
type wrappedMessage struct {
|
|
msg types.WorkerMessage
|
|
listener WorkerListener
|
|
}
|
|
|
|
type UIState struct {
|
|
Config *config.AercConfig
|
|
Exit bool
|
|
InvalidPanes uint
|
|
|
|
Panes struct {
|
|
TabList Geometry
|
|
TabView Geometry
|
|
Sidebar Geometry
|
|
StatusBar Geometry
|
|
}
|
|
|
|
Tabs []AercTab
|
|
SelectedTab int
|
|
|
|
Prompt struct {
|
|
Prompt *string
|
|
Text *string
|
|
Index int
|
|
Scroll int
|
|
}
|
|
|
|
tbEvents chan tb.Event
|
|
// Aggregate channel for all worker messages
|
|
workerEvents chan wrappedMessage
|
|
}
|