esp32-nmea2000-obp60/lib/obp60task/ConfigMenu.h

52 lines
1.3 KiB
C++

#pragma once
#include <Arduino.h>
#include <vector>
#include <map>
#include "Graphics.h" // for Point and Rect
class ConfigMenuItem {
private:
String label;
uint16_t value;
String unit;
String valtype; // "int" | "bool"
uint16_t min;
uint16_t max;
std::vector<uint16_t> steps;
uint16_t step;
int8_t position; // counted fom 0
public:
ConfigMenuItem(String itemtype, String itemlabel);
void setRange(uint16_t valmin, uint16_t valmax, std::vector<uint16_t> steps);
bool setValue(uint16_t newval);
void setPos(int8_t newpos);
int8_t getPos();
};
class ConfigMenu {
private:
String title;
std::map <String,ConfigMenuItem> items;
std::map <uint8_t,String> index;
int8_t activeitem = -1; // refers to position of item
uint16_t x;
uint16_t y;
uint16_t w;
uint16_t h;
public:
ConfigMenu(String title, uint16_t menu_x, uint16_t menu_y);
ConfigMenuItem* addItem(String key, String label, String valtype);
void setItemDimension(uint16_t itemwidth, uint16_t itemheight);
void setItemActive(String key);
ConfigMenuItem* getActiveItem();
ConfigMenuItem* getItemByIndex(uint8_t index);
ConfigMenuItem* getItemByKey(String key);
uint8_t getItemCount();
Point getXY();
/* void getRect();
void getItemRect(); */
};