From af662e8de6003d1b966ff8a049494488cd60f136 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Thu, 27 Feb 2025 22:04:48 -0500 Subject: rpm, map, and ve inputs --- main.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- ui.c | 15 +++++++++-- ui.h | 11 ++++++++ 3 files changed, 106 insertions(+), 12 deletions(-) diff --git a/main.c b/main.c index 31e2146..7bf62c4 100644 --- a/main.c +++ b/main.c @@ -9,6 +9,11 @@ #include "ui.h" +/* Macros. */ + +#define nelem(arr) (sizeof(arr)/sizeof(arr[0])) + + /* Constants. */ static const char TITLE[] = "volute"; @@ -16,6 +21,12 @@ enum window { WIN_OPTS = MU_OPT_NOINTERACT | MU_OPT_NOTITLE | MU_OPT_AUTOSIZE | MU_OPT_NOFRAME, }; +enum layout { + LABEL_WIDTH = 50, + UNIT_WIDTH = 45, + FIELD_WIDTH = 65, +}; + static const mu_Color BLACK = {0, 0, 0, 255}; static const mu_Color WHITE = {255, 255, 255, 255}; static const mu_Color LIGHT_GRAY = {222, 222, 222, 255}; @@ -43,6 +54,10 @@ static void set_style(mu_Context *ctx); 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 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); /* Function Definitions. */ @@ -101,29 +116,86 @@ process_frame(mu_Context *ctx, UI *ui) { static void main_window(mu_Context *ctx, UI *ui) { int w, h; + r_get_window_size(&w, &h); if (!mu_begin_window_ex(ctx, TITLE, mu_rect(0, 0, w, h), WIN_OPTS)) { exit(EXIT_FAILURE); } - /* TODO */ + displacement_row(ctx, ui); + mu_layout_row(ctx, 0, NULL, 0); + mu_label(ctx, ""); - mu_layout_row(ctx, 3, (int[]) {128, 30, 20}, 0); + rpm_row(ctx, ui); + map_row(ctx, ui); + ve_row(ctx, ui); - static double value = 0.0; + mu_end_window(ctx); +} + +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_label(ctx, "Displacement:"); if (w_field(ctx, &ui->displacement) & MU_RES_CHANGE) { /* TODO */ - value = ui->displacement.value; } + w_select(ctx, &ui->displacement_unit); +} - if (w_select(ctx, &ui->displacement_unit) & MU_RES_CHANGE) { - /* TODO */ +static void +rpm_row(mu_Context *ctx, UI *ui) { + int i; + + mu_layout_row(ctx, 0, NULL, 0); + mu_layout_width(ctx, LABEL_WIDTH); + mu_label(ctx, "rpm:"); + mu_layout_width(ctx, UNIT_WIDTH); + mu_label(ctx, ""); + mu_layout_width(ctx, FIELD_WIDTH); + for (i = 0; i < ui->npoints; i++) { + if (w_field(ctx, &ui->rpm[i])) { + /* TODO */ + } } +} - mu_layout_begin_column(ctx); - mu_button(ctx, "foo bar"); - mu_layout_end_column(ctx); +static void +map_row(mu_Context *ctx, UI *ui) { + int i; + + mu_layout_row(ctx, 0, NULL, 0); + mu_layout_width(ctx, LABEL_WIDTH); + mu_label(ctx, "map:"); + mu_layout_width(ctx, UNIT_WIDTH); + w_select(ctx, &ui->map_unit); + mu_layout_width(ctx, FIELD_WIDTH); + for (i = 0; i npoints; i++) { + if (w_field(ctx, &ui->map[i])) { + /* TODO */ + } + } +} - mu_end_window(ctx); +static void +ve_row(mu_Context *ctx, UI *ui) { + int i; + + mu_layout_row(ctx, 0, NULL, 0); + mu_layout_width(ctx, LABEL_WIDTH); + mu_label(ctx, "ve:"); + mu_layout_width(ctx, UNIT_WIDTH); + mu_label(ctx, "(%)"); + mu_layout_width(ctx, FIELD_WIDTH); + for (i = 0; i < ui->npoints; i++) { + if (w_field(ctx, &ui->ve[i])) { + /* TODO */ + } + } } diff --git a/ui.c b/ui.c index 65ce084..3585230 100644 --- a/ui.c +++ b/ui.c @@ -6,10 +6,21 @@ #define nelem(arr) (sizeof(arr)/sizeof(arr[0])) +static const char *const displacement_units[] = {"cc", "l", "ci"}; +static const char *const map_units[] = {"mbar", "kPa", "bar", "psi"}; + + void init_ui(UI *ui) { w_init_field(&ui->displacement); - - static const char *const displacement_units[] = {"cc", "l", "ci"}; w_init_select(&ui->displacement_unit, nelem(displacement_units), displacement_units); + + 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_field(&ui->ve[0]); + + ui->npoints = 1; } diff --git a/ui.h b/ui.h index c8388c4..232ef54 100644 --- a/ui.h +++ b/ui.h @@ -1,6 +1,17 @@ +enum { MAX_POINTS = 16 }; + typedef struct { w_Field displacement; w_Select displacement_unit; + + w_Field rpm[MAX_POINTS]; + + w_Field map[MAX_POINTS]; + w_Select map_unit; + + w_Field ve[MAX_POINTS]; + + int npoints; } UI; void init_ui(UI *ui); -- cgit v1.2.3