From a44f433bba8102724347628f22ca6ea05261f974 Mon Sep 17 00:00:00 2001 From: wisplite Date: Thu, 29 Jan 2026 07:11:39 -0600 Subject: [PATCH] fixed some ui state issues --- main.go | 19 +++++++++++-------- tui.go | 29 ++++++++++++++++++++--------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/main.go b/main.go index 26ed892..c9c7a8c 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func MonitorDevice(ctx context.Context, app *tview.Application, frame **tview.Frame, device *Device) { +func MonitorDevice(ctx context.Context, app *tview.Application, frame **tview.Frame, state *UIState, device *Device) { ticker := time.NewTicker(100 * time.Millisecond) // Check every 100ms defer ticker.Stop() for { @@ -24,19 +24,19 @@ func MonitorDevice(ctx context.Context, app *tview.Application, frame **tview.Fr if err != nil { if device.Connected { device.Close() - UpdateDeviceStatus(app, *frame, "Cardputer disconnected", tcell.ColorRed) + UpdateDeviceStatus(app, *frame, state, "Cardputer disconnected", tcell.ColorRed) } } else { if !device.Connected { - UpdateDeviceStatus(app, *frame, "Cardputer found: "+port, tcell.ColorWhite) + UpdateDeviceStatus(app, *frame, state, "Cardputer found: "+port, tcell.ColorWhite) err = device.Connect() if err != nil { - UpdateDeviceStatus(app, *frame, "Error connecting to cardputer: "+err.Error(), tcell.ColorRed) + UpdateDeviceStatus(app, *frame, state, "Error connecting to cardputer: "+err.Error(), tcell.ColorRed) } else { - UpdateDeviceStatus(app, *frame, "Connected to cardputer: "+port, tcell.ColorGreen) + UpdateDeviceStatus(app, *frame, state, "Connected to cardputer: "+port, tcell.ColorGreen) } } else { - UpdateDeviceStatus(app, *frame, "Connected to cardputer: "+port, tcell.ColorGreen) + UpdateDeviceStatus(app, *frame, state, "Connected to cardputer: "+port, tcell.ColorGreen) } } } @@ -49,7 +49,10 @@ func main() { app := tview.NewApplication() var currentFrame *tview.Frame - frame := AppUI(app, ¤tFrame) + state := &UIState{ + Page: "home", + } + frame := AppUI(app, ¤tFrame, state) currentFrame = frame app.SetRoot(frame, true) @@ -76,7 +79,7 @@ func main() { app.Stop() }() - go MonitorDevice(ctx, app, ¤tFrame, device) + go MonitorDevice(ctx, app, ¤tFrame, state, device) if err := app.Run(); err != nil { log.Fatal("Error running program:", err) diff --git a/tui.go b/tui.go index 22ba9a2..9061079 100644 --- a/tui.go +++ b/tui.go @@ -5,42 +5,53 @@ import ( "github.com/rivo/tview" ) -func AppUI(app *tview.Application, currentFrame **tview.Frame) *tview.Frame { +type UIState struct { + Page string +} + +func AppUI(app *tview.Application, currentFrame **tview.Frame, state *UIState) *tview.Frame { list := tview.NewList() list.AddItem("CPkg Tools", "Create and unpack cpkg files for distribution", 'c', func() { - newFrame := PackageUI(app, currentFrame) + newFrame := PackageUI(app, currentFrame, state) *currentFrame = newFrame + state.Page = "package" app.SetRoot(newFrame, true) }) list.AddItem("Upload to Cardputer", "Creates a package and uploads it to the connected Cardputer", 'u', nil) frame := tview.NewFrame(list) frame.SetBorders(0, 0, 0, 0, 0, 0) frame.AddText("Parchment - v0.0.1", true, tview.AlignLeft, tcell.ColorWhite) - frame.AddText("Searching for device...", false, tview.AlignLeft, tcell.ColorWhite) + frame.AddText("Waiting for cardputer...", false, tview.AlignLeft, tcell.ColorWhite) return frame } -func PackageUI(app *tview.Application, currentFrame **tview.Frame) *tview.Frame { +func PackageUI(app *tview.Application, currentFrame **tview.Frame, state *UIState) *tview.Frame { list := tview.NewList() list.AddItem("Create Package", "Creates a .cpkg file in the running directory", 'c', nil) list.AddItem("Unpack Package", "Unpacks a chosen .cpkg file into a subdirectory", 'u', nil) list.AddItem("Back", "Go back to the home page", 'b', func() { - newFrame := AppUI(app, currentFrame) + newFrame := AppUI(app, currentFrame, state) *currentFrame = newFrame + state.Page = "home" app.SetRoot(newFrame, true) }) frame := tview.NewFrame(list) frame.SetBorders(0, 0, 0, 0, 0, 0) - frame.AddText("Package Mode", true, tview.AlignLeft, tcell.ColorWhite) - + frame.AddText("Package Tools", true, tview.AlignLeft, tcell.ColorWhite) + frame.AddText("Waiting for cardputer...", false, tview.AlignLeft, tcell.ColorWhite) return frame } -func UpdateDeviceStatus(app *tview.Application, frame *tview.Frame, status string, color tcell.Color) { +func UpdateDeviceStatus(app *tview.Application, frame *tview.Frame, state *UIState, status string, color tcell.Color) { app.QueueUpdateDraw(func() { frame.Clear() - frame.AddText("Parchment - v0.0.1", true, tview.AlignLeft, tcell.ColorWhite) + switch state.Page { + case "home": + frame.AddText("Parchment - v0.0.1", true, tview.AlignLeft, tcell.ColorWhite) + case "package": + frame.AddText("Package Tools", true, tview.AlignLeft, tcell.ColorWhite) + } frame.AddText(status, false, tview.AlignLeft, color) }) }