diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-03-01 14:17:48 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-03-01 14:17:48 -0500 |
| commit | 3f05b42ab04ca4990edf0f374f02dfea7b3be10a (patch) | |
| tree | 1a68a4ada816fea29328ccc544c1dab2d467158b | |
| parent | 8beee1dcf1baed84e4c783e2e6e81cfa70440481 (diff) | |
| download | volute-3f05b42ab04ca4990edf0f374f02dfea7b3be10a.zip | |
add ambient temperature input
| -rw-r--r-- | main.c | 21 | ||||
| -rw-r--r-- | ui.c | 40 | ||||
| -rw-r--r-- | ui.h | 5 |
3 files changed, 60 insertions, 6 deletions
@@ -57,6 +57,7 @@ static void main_loop(mu_Context *ctx, UI *ui); static void process_frame(mu_Context *ctx, UI *ui); static void main_window(mu_Context *ctx, UI *ui); static void displacement_row(mu_Context *ctx, UI *ui); +static void ambient_temperature_row(mu_Context *ctx, UI *ui); static void rpm_row(mu_Context *ctx, UI *ui); static void map_row(mu_Context *ctx, UI *ui); static void ve_row(mu_Context *ctx, UI *ui); @@ -146,12 +147,7 @@ main_window(mu_Context *ctx, UI *ui) { static void displacement_row(mu_Context *ctx, UI *ui) { - int widths[] = { - LABEL_WIDTH+UNIT_WIDTH+ctx->style->spacing, - FIELD_WIDTH, - UNIT_WIDTH - }; - mu_layout_row(ctx, nelem(widths), widths, 0); + mu_layout_row(ctx, 3, (int[]) {LABEL_WIDTH, FIELD_WIDTH, UNIT_WIDTH}, 0); mu_label(ctx, "Displacement:"); if (w_field(ctx, &ui->displacement) & MU_RES_CHANGE) { set_displacement(ui); @@ -163,6 +159,19 @@ displacement_row(mu_Context *ctx, UI *ui) { } static void +ambient_temperature_row(mu_Context *ctx, UI *ui) { + mu_layout_row(ctx, 3, (int[]) {LABEL_WIDTH, FIELD_WIDTH, UNIT_WIDTH}, 0); + mu_label(ctx, "Ambient temperature:"); + if (w_field(ctx, &ui->ambient_temperature) & MU_RES_CHANGE) { + set_ambient_temperature(ui); + set_all_volume_flow_rate(ui); + } + if (w_select(ctx, &ui->ambient_temperature_unit) & MU_RES_CHANGE) { + set_ambient_temperature_unit(ui); + } +} + +static void rpm_row(mu_Context *ctx, UI *ui) { int i; @@ -19,6 +19,14 @@ static const VolumeReader volume_readers[nelem(volume_units)] = { as_cubic_centimetre, as_litre, as_cubic_inch, }; +static const char *const temperature_units[] = {"°C", "K", "°F", "°R"}; +static const TemperatureMaker temperature_makers[nelem(temperature_units)] = { + celsius, kelvin, fahrenheit, rankine, +}; +static const TemperatureReader temperature_readers[nelem(temperature_units)] = { + as_celsius, as_kelvin, as_fahrenheit, as_rankine, +}; + static const char *const pressure_units[] = {"mbar", "kPa", "bar", "psi"}; static const PressureMaker pressure_makers[nelem(pressure_units)] = { millibar, kilopascal, bar, psi, @@ -37,6 +45,9 @@ void init_ui(UI *ui) { w_init_field(&ui->displacement); w_init_select(&ui->displacement_unit, nelem(volume_units), volume_units); + + w_init_field(&ui->ambient_temperature); + w_init_select(&ui->ambient_temperature_unit, nelem(temperature_units), temperature_units); ui->npoints = 1; @@ -83,6 +94,35 @@ set_displacement_unit(UI *ui) { } void +set_ambient_temperature(UI *ui) { + int idx, i; + TemperatureMaker convert; + Temperature t; + + idx = ui->ambient_temperature_unit.idx; + assert(idx >= 0 && (long unsigned int) idx < nelem(temperature_units)); + + convert = temperature_makers[idx]; + t = convert(ui->ambient_temperature.value); + + for (i = 0; i < ui->npoints; i++) { + ui->points[i].ambient_temperature = t; + } +} + +void +set_ambient_temperature_unit(UI *ui) { + TemperatureMaker maker; + Temperature t; + TemperatureReader reader; + + maker = temperature_makers[ui->ambient_temperature_unit.oldidx]; + t = maker(ui->ambient_temperature.value); + reader = temperature_readers[ui->ambient_temperature_unit.idx]; + w_set_field(&ui->ambient_temperature, reader(t)); +} + +void set_map(UI *ui, int idx) { int unit_idx; PressureMaker convert; @@ -4,6 +4,9 @@ typedef struct { w_Field displacement; w_Select displacement_unit; + w_Field ambient_temperature; + w_Select ambient_temperature_unit; + int npoints; w_Field rpm[MAX_POINTS]; @@ -22,6 +25,8 @@ typedef struct { void init_ui(UI *ui); void set_displacement(UI *ui); void set_displacement_unit(UI* ui); +void set_ambient_temperature(UI *ui); +void set_ambient_temperature_unit(UI *ui); void set_map(UI *ui, int idx); void set_map_unit(UI *ui); void set_ve(UI *ui, int idx); |