diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2020-09-03 20:34:57 +0200 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2020-09-03 20:34:57 +0200 |
commit | ec101fbc0f7b5d771638e54d083f2457fa6511c2 (patch) | |
tree | 1522236add65515d50a00b3eecc19a32e1cefced /examples/go-dashboard/ui/ui.go | |
parent | 001f84af3b9bfd8427c99af1a380d40b6577489a (diff) |
go-dashboard: Print unmarshalled JSON string in a textbox.
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'examples/go-dashboard/ui/ui.go')
-rw-r--r-- | examples/go-dashboard/ui/ui.go | 59 |
1 files changed, 43 insertions, 16 deletions
diff --git a/examples/go-dashboard/ui/ui.go b/examples/go-dashboard/ui/ui.go index e8c89f81d..8a42803dd 100644 --- a/examples/go-dashboard/ui/ui.go +++ b/examples/go-dashboard/ui/ui.go @@ -16,48 +16,66 @@ import ( const rootID = "root" const redrawInterval = 250 * time.Millisecond -type widgets struct { - menu *text.Text +type Tui struct { + Term terminalapi.Terminal + Context context.Context + Cancel context.CancelFunc + Container *container.Container + MainTicker *time.Ticker } -func newWidgets(ctx context.Context) (*widgets, error) { - menu, err := text.New(text.RollContent(), text.WrapAtWords()) +type Widgets struct { + Menu *text.Text + RawJson *text.Text +} + +func newWidgets(ctx context.Context) (*Widgets, error) { + menu, err := text.New() if err != nil { panic(err) } - return &widgets{ - menu: menu, + rawJson, err := text.New(text.RollContent(), text.WrapAtWords()) + if err != nil { + panic(err) + } + + return &Widgets{ + Menu: menu, + RawJson: rawJson, }, nil } -func Init() { - term, err := termbox.New(termbox.ColorMode(terminalapi.ColorMode256)) +func Init() (*Tui, *Widgets) { + var err error + + ui := Tui{} + ui.Term, err = termbox.New(termbox.ColorMode(terminalapi.ColorMode256)) if err != nil { panic(err) } - defer term.Close() - ctx, cancel := context.WithCancel(context.Background()) - wdgts, err := newWidgets(ctx) + ui.Context, ui.Cancel = context.WithCancel(context.Background()) + + wdgts, err := newWidgets(ui.Context) if err != nil { panic(err) } - cnt, err := container.New(term, + ui.Container, err = container.New(ui.Term, container.Border(linestyle.None), container.BorderTitle("[ESC to Quit]"), container.SplitHorizontal( container.Top( container.Border(linestyle.Light), container.BorderTitle("Go nDPId Dashboard"), - container.PlaceWidget(wdgts.menu), + container.PlaceWidget(wdgts.Menu), ), container.Bottom( container.Border(linestyle.Light), container.BorderTitle("Raw JSON"), - container.PlaceWidget(wdgts.menu), + container.PlaceWidget(wdgts.RawJson), ), container.SplitFixed(3), ), @@ -66,12 +84,21 @@ func Init() { panic(err) } + ui.MainTicker = time.NewTicker(1 * time.Second) + + return &ui, wdgts +} + +func Run(ui *Tui) { + defer ui.Term.Close() + quitter := func(k *terminalapi.Keyboard) { if k.Key == keyboard.KeyEsc || k.Key == keyboard.KeyCtrlC { - cancel() + ui.Cancel() } } - if err := termdash.Run(ctx, term, cnt, termdash.KeyboardSubscriber(quitter), termdash.RedrawInterval(redrawInterval)); err != nil { + + if err := termdash.Run(ui.Context, ui.Term, ui.Container, termdash.KeyboardSubscriber(quitter), termdash.RedrawInterval(redrawInterval)); err != nil { panic(err) } } |