From 055257528a8f63d6f0e08aec299e673b67b6a85e Mon Sep 17 00:00:00 2001 From: Bradley Cicenas Date: Mon, 26 Dec 2016 18:39:15 +0000 Subject: [PATCH] add basic cursor --- grid.go | 42 ++++++++++++++++++++++++++++++++++-------- main.go | 2 +- widgets.go | 1 + 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/grid.go b/grid.go index d7fc6fb..ad7c5f0 100644 --- a/grid.go +++ b/grid.go @@ -7,6 +7,7 @@ import ( ) type Grid struct { + cursorPos uint containers map[string]*Container } @@ -14,6 +15,11 @@ func (g *Grid) AddContainer(id string) { g.containers[id] = NewContainer(id) } +// Return number of containers/rows +func (g *Grid) Len() uint { + return uint(len(g.containers)) +} + // Return sorted list of active container IDs func (g *Grid) CIDs() []string { var ids []string @@ -24,6 +30,21 @@ func (g *Grid) CIDs() []string { return ids } +// Redraw the cursor with the currently selected row +func (g *Grid) Cursor() { + for n, id := range g.CIDs() { + c := g.containers[id] + if uint(n) == g.cursorPos { + c.widgets.cid.TextFgColor = ui.ColorDefault + c.widgets.cid.TextBgColor = ui.ColorWhite + } else { + c.widgets.cid.TextFgColor = ui.ColorWhite + c.widgets.cid.TextBgColor = ui.ColorDefault + } + } + ui.Render(ui.Body) +} + func (g *Grid) Rows() (rows []*ui.Row) { for _, cid := range g.CIDs() { c := g.containers[cid] @@ -88,20 +109,25 @@ func Display(g *Grid) { // calculate layout ui.Body.Align() - + g.Cursor() ui.Render(ui.Body) + ui.Handle("/sys/kbd/", func(ui.Event) { + if g.cursorPos > 0 { + g.cursorPos -= 1 + g.Cursor() + } + }) + ui.Handle("/sys/kbd/", func(ui.Event) { + if g.cursorPos < (g.Len() - 1) { + g.cursorPos += 1 + g.Cursor() + } + }) ui.Handle("/sys/kbd/q", func(ui.Event) { ui.StopLoop() }) ui.Handle("/timer/1s", func(e ui.Event) { - // t := e.Data.(ui.EvtTimer) - // i := t.Count - // if i > 103 { - // ui.StopLoop() - // return - // } - ui.Render(ui.Body) }) diff --git a/main.go b/main.go index e1b474f..a151a58 100644 --- a/main.go +++ b/main.go @@ -42,7 +42,7 @@ func main() { containers = os.Args[1:] } - g := &Grid{make(map[string]*Container)} + g := &Grid{0, make(map[string]*Container)} for _, c := range containers { g.AddContainer(c) } diff --git a/widgets.go b/widgets.go index 6a1e6e0..54653ef 100644 --- a/widgets.go +++ b/widgets.go @@ -9,6 +9,7 @@ import ( type Widgets struct { cid *ui.Par + names *ui.Par cpu *ui.Gauge net *ui.Gauge memory *ui.Gauge