From aa5ad436d2aeb962723506ec4ca137fd095af169 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Wed, 24 Jan 2024 17:29:31 -0500 Subject: add mass flow output widgets --- gui/widget/widget.go | 17 ++++++++--------- main.go | 21 ++++++++++++++++++--- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/gui/widget/widget.go b/gui/widget/widget.go index f9fe658..82f67c6 100644 --- a/gui/widget/widget.go +++ b/gui/widget/widget.go @@ -89,31 +89,30 @@ Loop: } } -func Output(val <-chan uint, r image.Rectangle, env gui.Env, wg *sync.WaitGroup) { +func Output(val <-chan float64, r image.Rectangle, env gui.Env, wg *sync.WaitGroup) { defer wg.Done() defer close(env.Draw()) - redraw := func(n uint) func(draw.Image) image.Rectangle { + redraw := func(v float64) func(draw.Image) image.Rectangle { return func(drw draw.Image) image.Rectangle { - drawText([]byte(fmt.Sprint(n)), drw, r, BLACK, WHITE) + drawText([]byte(fmt.Sprintf("%.3f", v)), drw, r, BLACK, WHITE) return r } } + var v float64 = 0.0 - var n uint = 0 - - env.Draw() <- redraw(n) + env.Draw() <- redraw(v) Loop: for { select { - case n = <-val: - env.Draw() <- redraw(n) + case v = <-val: + env.Draw() <- redraw(v) case event, ok := <-env.Events(): if !ok { // channel closed break Loop } if event, ok := event.(win.WiFocus); ok && event.Focused { - env.Draw() <- redraw(n) + env.Draw() <- redraw(v) } } } diff --git a/main.go b/main.go index 51f2667..6492533 100644 --- a/main.go +++ b/main.go @@ -22,6 +22,8 @@ const ( R = 8314.3 // gas constant M = 28.962 // molar mass of air + + WIDEST_LABEL = "mass flow (kg/min)" ) func run() { @@ -36,6 +38,8 @@ func run() { veChan [POINTS]chan uint imapChan [POINTS]chan uint actChan [POINTS]chan uint + + flowChan [POINTS]chan float64 ) defer wg.Wait() defer focus.Close() @@ -45,11 +49,13 @@ func run() { veChan[i] = make(chan uint) imapChan[i] = make(chan uint) actChan[i] = make(chan uint) - defer close(rpmChan[i]) defer close(veChan[i]) defer close(imapChan[i]) defer close(actChan[i]) + + flowChan[i] = make(chan float64) + defer close(flowChan[i]) } w, err := win.New(win.Title("volute"), win.Size(WIDTH, HEIGHT)) @@ -61,7 +67,7 @@ func run() { defer close(env.Draw()) bounds := layout.Grid{ - Rows: []int{2, 7, 7, 7, 7}, + Rows: []int{2, 7, 7, 7, 7, 7}, Background: color.Gray{255}, Gap: 1, Split: split, @@ -90,6 +96,8 @@ func run() { 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 @@ -123,6 +131,13 @@ func run() { mux.MakeEnv(), wg, ) + wg.Add(1) + go widget.Output( // mass flow + flowChan[i], + bounds[7+4*POINTS+i], + mux.MakeEnv(), + wg, + ) } focus.widgets[focus.p.Y][focus.p.X] <- true @@ -162,7 +177,7 @@ Loop: func split(elements int, space int) []int { bounds := make([]int, elements) widths := []int{ - widget.TextSize("displacement (cc)").X, + widget.TextSize(WIDEST_LABEL).X, widget.TextSize("123456").X, } for i := 0; i < elements && space > 0; i++ { -- cgit v1.2.3