aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.c4
-rw-r--r--ui.c18
-rw-r--r--ui.h1
3 files changed, 22 insertions, 1 deletions
diff --git a/main.c b/main.c
index 2b712d1..7d5bdd3 100644
--- a/main.c
+++ b/main.c
@@ -187,7 +187,9 @@ map_row(mu_Context *ctx, UI *ui) {
mu_layout_width(ctx, LABEL_WIDTH);
mu_label(ctx, "map:");
mu_layout_width(ctx, UNIT_WIDTH);
- w_select(ctx, &ui->map_unit);
+ if (w_select(ctx, &ui->map_unit) & MU_RES_CHANGE) {
+ set_map_unit(ui);
+ }
mu_layout_width(ctx, FIELD_WIDTH);
for (i = 0; i <ui->npoints; i++) {
if (w_field(ctx, &ui->map[i])) {
diff --git a/ui.c b/ui.c
index cd9dddb..fea7e20 100644
--- a/ui.c
+++ b/ui.c
@@ -24,6 +24,9 @@ static const char *const pressure_units[] = {"mbar", "kPa", "bar", "psi"};
static const PressureMaker pressure_makers[nelem(pressure_units)] = {
millibar, kilopascal, bar, psi,
};
+static const PressureReader pressure_readers[nelem(pressure_units)] = {
+ as_millibar, as_kilopascal, as_bar, as_psi,
+};
static const char *const volume_flow_rate_units[] = {"m³/s", "CFM"};
static VolumeFlowRateReader volume_flow_rate_readers[nelem(volume_flow_rate_units)] = {
@@ -95,6 +98,21 @@ set_map(UI *ui, int idx) {
}
void
+set_map_unit(UI *ui) {
+ PressureMaker maker;
+ PressureReader reader;
+ int i;
+ Pressure map;
+
+ maker = pressure_makers[ui->map_unit.oldidx];
+ reader = pressure_readers[ui->map_unit.idx];
+ for (i = 0; i < ui->npoints; i++) {
+ map = maker(ui->map[i].value);
+ w_set_field(&ui->map[i], reader(map));
+ }
+}
+
+void
set_ve(UI *ui, int idx) {
ui->points[idx].ve = percent(ui->ve[idx].value);
}
diff --git a/ui.h b/ui.h
index 1238325..02baee6 100644
--- a/ui.h
+++ b/ui.h
@@ -23,6 +23,7 @@ void init_ui(UI *ui);
void set_displacement(UI *ui);
void set_displacement_unit(UI* ui);
void set_map(UI *ui, int idx);
+void set_map_unit(UI *ui);
void set_ve(UI *ui, int idx);
void set_volume_flow_rate(UI *ui, int idx);
void set_all_volume_flow_rate(UI *ui);