From 1a4c280aaf00f23aa6a61867494e85f9b888d27f Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Fri, 28 Feb 2025 14:43:29 -0500 Subject: set displacement --- main.c | 2 +- ui.c | 21 +++++++++++++++++++++ ui.h | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 7d593f1..fd31910 100644 --- a/main.c +++ b/main.c @@ -149,7 +149,7 @@ displacement_row(mu_Context *ctx, UI *ui) { mu_layout_row(ctx, nelem(widths), widths, 0); mu_label(ctx, "Displacement:"); if (w_field(ctx, &ui->displacement) & MU_RES_CHANGE) { - /* TODO */ + set_displacement(ui); } w_select(ctx, &ui->displacement_unit); } diff --git a/ui.c b/ui.c index 5dc9021..f3e5c4a 100644 --- a/ui.c +++ b/ui.c @@ -1,3 +1,4 @@ +#include #include #include "microui.h" @@ -11,6 +12,10 @@ static const char *const displacement_units[] = {"cc", "l", "ci"}; +static Volume (*displacement_converters[nelem(displacement_units)])(double) = { + cubic_centimetre, litre, cubic_inch, +}; + static const char *const map_units[] = {"mbar", "kPa", "bar", "psi"}; @@ -31,6 +36,22 @@ init_ui(UI *ui) { init_engine(&ui->points[0]); } +void +set_displacement(UI *ui) { + int idx, i; + Volume (*convert)(double), disp; + + idx = ui->displacement_unit.idx; + assert(idx >= 0 && (long unsigned int) idx < nelem(displacement_units)); + + convert = displacement_converters[idx]; + disp = convert(ui->displacement.value); + + for (i = 0; i < ui->npoints; i++) { + ui->points[i].displacement = disp; + } +} + void insert_point(UI *ui, int idx) { int i; diff --git a/ui.h b/ui.h index ac8b047..4d0a63a 100644 --- a/ui.h +++ b/ui.h @@ -17,5 +17,6 @@ typedef struct { } UI; void init_ui(UI *ui); +void set_displacement(UI *ui); void insert_point(UI *ui, int idx); void remove_point(UI *ui, int idx); -- cgit v1.2.3