aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-02-28 16:55:51 -0500
committerSam Anthony <sam@samanthony.xyz>2025-02-28 16:55:51 -0500
commitcfe3bdba26ef24830acfe33e5ff424def9cb37b6 (patch)
tree15c55a39dd432ea194919a649130fb1758435955
parentd4976912beceb70a110050f212d5a1f17f974f17 (diff)
downloadvolute-cfe3bdba26ef24830acfe33e5ff424def9cb37b6.zip
set MAP
-rw-r--r--main.c2
-rw-r--r--ui.c30
-rw-r--r--ui.h1
3 files changed, 25 insertions, 8 deletions
diff --git a/main.c b/main.c
index fd31910..4c1257a 100644
--- a/main.c
+++ b/main.c
@@ -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);
}
}
}
diff --git a/ui.c b/ui.c
index f3e5c4a..676c442 100644
--- a/ui.c
+++ b/ui.c
@@ -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;
diff --git a/ui.h b/ui.h
index 4d0a63a..56f1bd3 100644
--- a/ui.h
+++ b/ui.h
@@ -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);