aboutsummaryrefslogtreecommitdiffstats
path: root/ui.c
diff options
context:
space:
mode:
Diffstat (limited to 'ui.c')
-rw-r--r--ui.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/ui.c b/ui.c
index 3585230..52cca4c 100644
--- a/ui.c
+++ b/ui.c
@@ -1,5 +1,9 @@
+#include <string.h>
+
#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--;
}