diff options
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | ui.c | 30 | ||||
| -rw-r--r-- | ui.h | 1 |
3 files changed, 25 insertions, 8 deletions
@@ -182,7 +182,7 @@ map_row(mu_Context *ctx, UI *ui) { mu_layout_width(ctx, FIELD_WIDTH); for (i = 0; i <ui->npoints; i++) { if (w_field(ctx, &ui->map[i])) { - /* TODO */ + set_map(ui, i); } } } @@ -11,25 +11,28 @@ #define nelem(arr) (sizeof(arr)/sizeof(arr[0])) -static const char *const displacement_units[] = {"cc", "l", "ci"}; -static Volume (*displacement_converters[nelem(displacement_units)])(double) = { +static const char *const volume_units[] = {"cc", "l", "ci"}; +static Volume (*volume_converters[nelem(volume_units)])(double) = { cubic_centimetre, litre, cubic_inch, }; -static const char *const map_units[] = {"mbar", "kPa", "bar", "psi"}; +static const char *const pressure_units[] = {"mbar", "kPa", "bar", "psi"}; +static Pressure (*pressure_converters[nelem(pressure_units)])(double) = { + millibar, kilopascal, bar, psi, +}; void init_ui(UI *ui) { w_init_field(&ui->displacement); - w_init_select(&ui->displacement_unit, nelem(displacement_units), displacement_units); + w_init_select(&ui->displacement_unit, nelem(volume_units), volume_units); ui->npoints = 1; w_init_field(&ui->rpm[0]); w_init_field(&ui->map[0]); - w_init_select(&ui->map_unit, nelem(map_units), map_units); + w_init_select(&ui->map_unit, nelem(pressure_units), pressure_units); w_init_field(&ui->ve[0]); @@ -42,9 +45,9 @@ set_displacement(UI *ui) { Volume (*convert)(double), disp; idx = ui->displacement_unit.idx; - assert(idx >= 0 && (long unsigned int) idx < nelem(displacement_units)); + assert(idx >= 0 && (long unsigned int) idx < nelem(volume_units)); - convert = displacement_converters[idx]; + convert = volume_converters[idx]; disp = convert(ui->displacement.value); for (i = 0; i < ui->npoints; i++) { @@ -53,6 +56,19 @@ set_displacement(UI *ui) { } void +set_map(UI *ui, int idx) { + int unit_idx; + Pressure (*convert)(double), p; + + unit_idx = ui->map_unit.idx; + assert(unit_idx >= 0 && (long unsigned int) unit_idx < nelem(pressure_units)); + + convert = pressure_converters[unit_idx]; + p = convert(ui->map[idx].value); + ui->points[idx].map = p; +} + +void insert_point(UI *ui, int idx) { int i; @@ -18,5 +18,6 @@ typedef struct { void init_ui(UI *ui); void set_displacement(UI *ui); +void set_map(UI *ui, int idx); void insert_point(UI *ui, int idx); void remove_point(UI *ui, int idx); |