From 6c00320bf2d41d2e7392deff03709bae6cb5c2fb Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Thu, 8 Feb 2024 08:44:15 -0500 Subject: extract ui setup functions to seperate file --- main.go | 108 ------------------------------------------------------------ ui.go | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 108 deletions(-) create mode 100644 ui.go diff --git a/main.go b/main.go index 7327ebd..fd3dde7 100644 --- a/main.go +++ b/main.go @@ -2,15 +2,11 @@ package main import ( "fmt" - "image" - "image/color" "os" "sync" "github.com/faiface/mainthread" "volute/gui" - "volute/gui/layout" - "volute/gui/widget" "volute/gui/win" ) @@ -78,87 +74,6 @@ func run() { eventLoop(env, &focus) } -func spawnWidgets( - displacementChan chan uint, - rpmChan, veChan, imapChan, actChan [POINTS]chan uint, - flowChan [POINTS]chan float64, - focus *Focus, mux *gui.Mux, wg *sync.WaitGroup, -) { - bounds := layout.Grid{ - Rows: []int{2, 7, 7, 7, 7, 7}, - Background: color.Gray{255}, - Gap: 1, - Split: split, - SplitRows: splitRows, - Margin: 0, - Border: 0, - BorderColor: color.Gray{16}, - Flip: false, - }.Lay(image.Rect(0, 0, WIDTH, HEIGHT)) - - wg.Add(1) - go widget.Label("displacement (cc)", bounds[0], mux.MakeEnv(), wg) - wg.Add(1) - go widget.Input( - displacementChan, - bounds[1], - focus.widgets[0][0], - mux.MakeEnv(), - wg, - ) - wg.Add(1) - go widget.Label("speed (rpm)", bounds[2], mux.MakeEnv(), wg) - wg.Add(1) - go widget.Label("VE (%)", bounds[3+POINTS], mux.MakeEnv(), wg) - wg.Add(1) - go widget.Label("IMAP (mbar)", bounds[4+2*POINTS], mux.MakeEnv(), wg) - wg.Add(1) - go widget.Label("ACT (°C)", bounds[5+3*POINTS], mux.MakeEnv(), wg) - wg.Add(1) - go widget.Label("mass flow (kg/min)", bounds[6+4*POINTS], mux.MakeEnv(), wg) - for i := 0; i < POINTS; i++ { - wg.Add(1) - go widget.Input( // speed - rpmChan[i], - bounds[3+i], - focus.widgets[1][i], - mux.MakeEnv(), - wg, - ) - wg.Add(1) - go widget.Input( // VE - veChan[i], - bounds[4+POINTS+i], - focus.widgets[2][i], - mux.MakeEnv(), - wg, - ) - wg.Add(1) - go widget.Input( // IMAP - imapChan[i], - bounds[5+2*POINTS+i], - focus.widgets[3][i], - mux.MakeEnv(), - wg, - ) - wg.Add(1) - go widget.Input( // ACT - actChan[i], - bounds[6+3*POINTS+i], - focus.widgets[4][i], - mux.MakeEnv(), - wg, - ) - wg.Add(1) - go widget.Output( // mass flow - flowChan[i], - bounds[7+4*POINTS+i], - mux.MakeEnv(), - wg, - ) - } -} - func eventLoop(env gui.Env, focus *Focus) { for event := range env.Events() { switch event := event.(type) { @@ -189,29 +104,6 @@ func makeChans[T any](chanss ...[]chan T) { } } -func split(elements int, space int) []int { - bounds := make([]int, elements) - widths := []int{ - widget.TextSize(WIDEST_LABEL).X, - widget.TextSize("123456").X, - } - for i := 0; i < elements && space > 0; i++ { - bounds[i] = min(widths[min(i, len(widths)-1)], space) - space -= bounds[i] - } - return bounds -} - -func splitRows(elements int, space int) []int { - bounds := make([]int, elements) - height := widget.TextSize("1").Y - for i := 0; i < elements && space > 0; i++ { - bounds[i] = min(height, space) - space -= bounds[i] - } - return bounds -} - func calculateFlow( flow chan<- float64, displacementChan, rpmChan, veChan, actChan, imapChan <-chan uint, diff --git a/ui.go b/ui.go new file mode 100644 index 0000000..132ae89 --- /dev/null +++ b/ui.go @@ -0,0 +1,115 @@ +package main + +import ( + "image" + "image/color" + "sync" + + "volute/gui" + "volute/gui/layout" + "volute/gui/widget" +) + +func spawnWidgets( + displacementChan chan uint, + rpmChan, veChan, imapChan, actChan [POINTS]chan uint, + flowChan [POINTS]chan float64, + focus *Focus, mux *gui.Mux, wg *sync.WaitGroup, +) { + bounds := layout.Grid{ + Rows: []int{2, 7, 7, 7, 7, 7}, + Background: color.Gray{255}, + Gap: 1, + Split: split, + SplitRows: splitRows, + Margin: 0, + Border: 0, + BorderColor: color.Gray{16}, + Flip: false, + }.Lay(image.Rect(0, 0, WIDTH, HEIGHT)) + + wg.Add(1) + go widget.Label("displacement (cc)", bounds[0], mux.MakeEnv(), wg) + wg.Add(1) + go widget.Input( + displacementChan, + bounds[1], + focus.widgets[0][0], + mux.MakeEnv(), + wg, + ) + wg.Add(1) + go widget.Label("speed (rpm)", bounds[2], mux.MakeEnv(), wg) + wg.Add(1) + go widget.Label("VE (%)", bounds[3+POINTS], mux.MakeEnv(), wg) + wg.Add(1) + go widget.Label("IMAP (mbar)", bounds[4+2*POINTS], mux.MakeEnv(), wg) + wg.Add(1) + go widget.Label("ACT (°C)", bounds[5+3*POINTS], mux.MakeEnv(), wg) + wg.Add(1) + go widget.Label("mass flow (kg/min)", bounds[6+4*POINTS], mux.MakeEnv(), wg) + for i := 0; i < POINTS; i++ { + wg.Add(1) + go widget.Input( // speed + rpmChan[i], + bounds[3+i], + focus.widgets[1][i], + mux.MakeEnv(), + wg, + ) + wg.Add(1) + go widget.Input( // VE + veChan[i], + bounds[4+POINTS+i], + focus.widgets[2][i], + mux.MakeEnv(), + wg, + ) + wg.Add(1) + go widget.Input( // IMAP + imapChan[i], + bounds[5+2*POINTS+i], + focus.widgets[3][i], + mux.MakeEnv(), + wg, + ) + wg.Add(1) + go widget.Input( // ACT + actChan[i], + bounds[6+3*POINTS+i], + focus.widgets[4][i], + mux.MakeEnv(), + wg, + ) + wg.Add(1) + go widget.Output( // mass flow + flowChan[i], + bounds[7+4*POINTS+i], + mux.MakeEnv(), + wg, + ) + } +} + +func split(elements int, space int) []int { + bounds := make([]int, elements) + widths := []int{ + widget.TextSize(WIDEST_LABEL).X, + widget.TextSize("123456").X, + } + for i := 0; i < elements && space > 0; i++ { + bounds[i] = min(widths[min(i, len(widths)-1)], space) + space -= bounds[i] + } + return bounds +} + +func splitRows(elements int, space int) []int { + bounds := make([]int, elements) + height := widget.TextSize("1").Y + for i := 0; i < elements && space > 0; i++ { + bounds[i] = min(height, space) + space -= bounds[i] + } + return bounds +} -- cgit v1.2.3