diff --git a/tuivax/ui.go b/tuivax/ui.go index a4d25c4..205a348 100644 --- a/tuivax/ui.go +++ b/tuivax/ui.go @@ -23,7 +23,6 @@ type UIVx struct { vx *vaxis.Vaxis page string - quit bool menu list.List } @@ -38,13 +37,13 @@ func (ui *UIVx) menuPage(win vaxis.Window, ev vaxis.Event) { case vaxis.Key: switch msg.String() { case "Ctrl+c", "q", "Escape": - ui.quit = true + ui.vx.PostEvent(Quit{}) case "Down", "j": ui.menu.Down() case "Up", "k": ui.menu.Up() case "Enter": - ui.page = menuChoices[ui.menu.Index()] + ui.vx.PostEvent(Navigate{To: menuChoices[ui.menu.Index()]}) } } ui.menu.Draw(win) @@ -55,9 +54,9 @@ func (ui *UIVx) keysPage(win vaxis.Window, ev vaxis.Event) { case vaxis.Key: switch msg.String() { case "Ctrl+c": - ui.quit = true + ui.vx.PostEvent(Quit{}) case "q", "Escape": - ui.page = "menu" + ui.vx.PostEvent(Navigate{To: "menu"}) } } win.Print(vaxis.Segment{Text: "Hello, World!"}) @@ -82,6 +81,13 @@ func NewTui(opts vaxis.Options, shared *common.SharedModel) { win := vx.Window() win.Clear() + switch msg := ev.(type) { + case Quit: + return + case Navigate: + ui.page = msg.To + } + // header win.Print(vaxis.Segment{ Text: fmt.Sprintf("pico.sh • %s", ui.page), @@ -98,10 +104,6 @@ func NewTui(opts vaxis.Options, shared *common.SharedModel) { ui.keysPage(pageWin, ev) } - if ui.quit { - return - } - vx.Render() } }