53 lines
1 KiB
Go
53 lines
1 KiB
Go
|
package widgets
|
||
|
|
||
|
import (
|
||
|
"github.com/gdamore/tcell"
|
||
|
|
||
|
"git.sr.ht/~sircmpwn/aerc2/config"
|
||
|
"git.sr.ht/~sircmpwn/aerc2/lib/ui"
|
||
|
)
|
||
|
|
||
|
type TermHost struct {
|
||
|
grid *ui.Grid
|
||
|
term *Terminal
|
||
|
}
|
||
|
|
||
|
// Thin wrapper around terminal which puts it in a grid and passes through
|
||
|
// input events. A bit of a hack tbh
|
||
|
func NewTermHost(term *Terminal, conf *config.AercConfig) *TermHost {
|
||
|
grid := ui.NewGrid().Rows([]ui.GridSpec{
|
||
|
{ui.SIZE_WEIGHT, 1},
|
||
|
}).Columns([]ui.GridSpec{
|
||
|
{ui.SIZE_EXACT, conf.Ui.SidebarWidth},
|
||
|
{ui.SIZE_WEIGHT, 1},
|
||
|
})
|
||
|
grid.AddChild(term).At(0, 1)
|
||
|
return &TermHost{grid, term}
|
||
|
}
|
||
|
|
||
|
func (th *TermHost) Draw(ctx *ui.Context) {
|
||
|
th.grid.Draw(ctx)
|
||
|
}
|
||
|
|
||
|
func (th TermHost) Invalidate() {
|
||
|
th.grid.Invalidate()
|
||
|
}
|
||
|
|
||
|
func (th *TermHost) OnInvalidate(fn func(d ui.Drawable)) {
|
||
|
th.grid.OnInvalidate(func(_ ui.Drawable) {
|
||
|
fn(th)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func (th *TermHost) Event(event tcell.Event) bool {
|
||
|
return th.term.Event(event)
|
||
|
}
|
||
|
|
||
|
func (th *TermHost) Focus(focus bool) {
|
||
|
th.term.Focus(focus)
|
||
|
}
|
||
|
|
||
|
func (th *TermHost) Terminal() *Terminal {
|
||
|
return th.term
|
||
|
}
|