diff options
| -rw-r--r-- | main.c | 4 | ||||
| -rw-r--r-- | ui.c | 18 | ||||
| -rw-r--r-- | ui.h | 1 |
3 files changed, 22 insertions, 1 deletions
@@ -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])) { @@ -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); } @@ -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); |