diff options
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | ui.c | 21 | ||||
| -rw-r--r-- | ui.h | 1 |
3 files changed, 23 insertions, 1 deletions
@@ -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); } @@ -1,3 +1,4 @@ +#include <assert.h> #include <string.h> #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"}; @@ -32,6 +37,22 @@ init_ui(UI *ui) { } 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; @@ -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); |