aboutsummaryrefslogtreecommitdiffstats
path: root/ui.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-02-08 08:44:15 -0500
committerSam Anthony <sam@samanthony.xyz>2024-02-08 08:44:15 -0500
commit6c00320bf2d41d2e7392deff03709bae6cb5c2fb (patch)
treeabdca2f6f76d734795d59aecf28d3fc1b9016b9f /ui.go
parenta4ca32963cba9922ec92efe1efa165d880513752 (diff)
downloadvolute-6c00320bf2d41d2e7392deff03709bae6cb5c2fb.zip
extract ui setup functions to seperate file
Diffstat (limited to 'ui.go')
-rw-r--r--ui.go115
1 files changed, 115 insertions, 0 deletions
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
+}