From e0b42abda8d5d4e6e350ccd15618f7a2f1b14f6c Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Fri, 28 Feb 2025 14:01:48 -0500 Subject: dup/del buttons --- ui.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'ui.c') diff --git a/ui.c b/ui.c index 3585230..52cca4c 100644 --- a/ui.c +++ b/ui.c @@ -1,5 +1,9 @@ +#include + #include "microui.h" #include "widget.h" +#include "unit.h" +#include "engine.h" #include "ui.h" @@ -14,6 +18,8 @@ void init_ui(UI *ui) { w_init_field(&ui->displacement); w_init_select(&ui->displacement_unit, nelem(displacement_units), displacement_units); + +ui->npoints = 1; w_init_field(&ui->rpm[0]); @@ -22,5 +28,37 @@ init_ui(UI *ui) { w_init_field(&ui->ve[0]); - ui->npoints = 1; + init_engine(&ui->points[0]); +} + +void +insert_point(UI *ui, int idx) { + int i; + + if (idx < 0 || idx >= ui->npoints || ui->npoints >= MAX_POINTS) { + return; + } + + for (i = ui->npoints; i > idx; i--) { + memmove(&ui->rpm[i], &ui->rpm[i-1], sizeof(ui->rpm[i-1])); + memmove(&ui->map[i], &ui->map[i-1], sizeof(ui->map[i-1])); + memmove(&ui->ve[i], &ui->ve[i-1], sizeof(ui->ve[i-1])); + memmove(&ui->points[i], &ui->points[i-1], sizeof(ui->points[i-1])); + } + ui->npoints++; +} + +void +remove_point(UI *ui, int idx) { + if (idx < 0 || idx >= ui->npoints || ui->npoints <= 1) { + return; + } + + for (; idx < ui->npoints-1; idx++) { + memmove(&ui->rpm[idx], &ui->rpm[idx+1], sizeof(ui->rpm[idx])); + memmove(&ui->map[idx], &ui->map[idx+1], sizeof(ui->map[idx])); + memmove(&ui->ve[idx], &ui->ve[idx+1], sizeof(ui->ve[idx])); + memmove(&ui->points[idx], &ui->points[idx+1], sizeof(ui->points[idx])); + } + ui->npoints--; } -- cgit v1.2.3