From 97179e78605812e4b7f8c17e4ff34c0899293510 Mon Sep 17 00:00:00 2001 From: xad1 Date: Sat, 11 Mar 2023 21:09:40 +0000 Subject: [PATCH] massive refactor --- src/menu.cpp | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 src/menu.cpp diff --git a/src/menu.cpp b/src/menu.cpp new file mode 100644 index 0000000..de68396 --- /dev/null +++ b/src/menu.cpp @@ -0,0 +1,129 @@ +#include +#include +#include +#include +#include +#include + +int selectedItem = 0; +String selectedNode = ""; + + + +// Array of the main menu items +MenuItem mainMenuItems[] = { + {"Node Information", &nodeInfo}, + {"Container Information", &containerInfo}, + {"VM Information", &vmInfo} +}; + + +int buttonListener(int numItems) { + delay(200); + while (true) { + GO.update(); + if (GO.JOY_Y.isAxisPressed() == 1 && selectedItem < (numItems - 1)) { + selectedItem++; + break; + } + if (GO.JOY_Y.isAxisPressed() == 2 && selectedItem > 0) { + selectedItem--; + break; + } + if (GO.BtnA.isPressed() == 1) { + delay(300); + return 1; + } + if (GO.BtnB.isPressed() == 1) { + delay(300); + return 2; + } + + } + return 0; +} + +void drawMenu(MenuItem menuItems[], int numItems) { + GO.lcd.clearDisplay(); + GO.lcd.setCursor(0, 0); + + + for (int i = 0; i < numItems; i++) { + if (selectedItem == i) { + GO.lcd.print("> "); + } + GO.lcd.println(menuItems[i].name); + } + + switch (buttonListener(numItems)) { + case 1: + Serial.println("selected " + selectedItem); + menuItems[selectedItem].function(); + break; + case 2: + Serial.println("back"); + break; + default: + drawMenu(menuItems, numItems); + } + +} + +void mainMenu(){ + int numItems = sizeof(mainMenuItems) / sizeof(MenuItem); + drawMenu(mainMenuItems, numItems); +} + +void listNodes(JsonArray nodes) { + GO.lcd.clearDisplay(); + GO.lcd.setCursor(0, 0); + int numItems = nodes.size(); + for (int i = 0; i < numItems; i++) { + if (selectedItem == i) { + GO.lcd.print("> "); + } + GO.lcd.println(nodes[i]["node"].as()); + } + + switch (buttonListener(numItems)) { + case 1: + Serial.println("selected " + selectedItem); + selectedNode = nodes[selectedItem]["node"].as(); + break; + case 2: + Serial.println("back"); + break; + default: + listNodes(nodes); + } +} + +int listContainers(JsonArray containers) { + GO.lcd.clearDisplay(); + GO.lcd.setCursor(0, 0); + int numItems = containers.size(); + int selectedLXC = 0; + for (int i = 0; i < numItems; i++) { + if (selectedItem == i) { + GO.lcd.print("> "); + } + GO.lcd.println(containers[i]["vmid"].as() + ": " + containers[i]["name"].as()); + } + + switch (buttonListener(numItems)) { + case 1: + selectedLXC = containers[selectedItem]["vmid"].as(); + Serial.println(selectedLXC); + break; + case 2: + Serial.println("back"); + break; + default: + listContainers(containers); + } + + Serial.println(selectedLXC); + Serial.println("end"); + return selectedLXC; + +}