aboutsummaryrefslogtreecommitdiff
path: root/widgets/termhost.go
blob: 7898b44c518bae1c2d1f6e460bc6afdabe2efadd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
}