diff options
Diffstat (limited to 'ui.c')
| -rw-r--r-- | ui.c | 30 |
1 files changed, 23 insertions, 7 deletions
@@ -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; |