floatpump-firmware/Middlewares/floatpump/Inc/Menu.h

77 lines
1.7 KiB
C
Raw Normal View History

//
// Created by robtor on 09.12.22.
//
#ifndef FLOATPUMP_MENU_H
#define FLOATPUMP_MENU_H
2023-01-04 12:22:45 +00:00
#include <vector>
2023-01-05 15:32:42 +00:00
#include <typeinfo>
2023-01-04 12:22:45 +00:00
#include "Menu_Entry.h"
#include "LCD_I2C_Driver.h"
namespace floatpump {
namespace menu {
class Menu {
2023-01-04 12:22:45 +00:00
public:
Menu(LCD_I2C_Driver &driver) : m_driver(driver) {
}
void addEntry(Menu_Entry entry) {
m_entries.push_back(entry);
}
2023-01-05 16:42:39 +00:00
void addSubmenu(Menu *submenu) {
submenu->m_parent = this;
m_submenus.push_back(submenu);
2023-01-04 12:22:45 +00:00
}
2023-01-06 08:27:53 +00:00
2023-01-05 16:42:39 +00:00
bool isSubmenu(int index) {
if(index > 0 && index < m_submenus.size()) {
return true;
2023-01-04 12:22:45 +00:00
}
2023-01-05 16:42:39 +00:00
return false;
2023-01-04 12:22:45 +00:00
}
2023-01-05 16:42:39 +00:00
bool isEntry(int index) {
if(index >= m_submenus.size() && index < (m_entries.size() + m_submenus.size())) {
return true;
2023-01-04 13:54:51 +00:00
}
2023-01-05 16:42:39 +00:00
return false;
2023-01-04 12:22:45 +00:00
}
2023-01-05 16:42:39 +00:00
Menu_Entry *getEntry(int index) {
if(isEntry(index)) {
return &m_entries[index - m_submenus.size()];
} else {
return nullptr;
2023-01-04 13:54:51 +00:00
}
2023-01-04 12:22:45 +00:00
}
2023-01-05 15:32:42 +00:00
2023-01-05 16:42:39 +00:00
Menu *getSubmenu(int index) {
if(isSubmenu(index)) {
return m_submenus[index];
} else {
return nullptr;
}
2023-01-05 15:32:42 +00:00
}
2023-01-06 08:27:53 +00:00
2023-01-05 15:32:42 +00:00
2023-01-04 12:22:45 +00:00
LCD_I2C_Driver &m_driver;
std::vector<Menu_Entry> m_entries;
2023-01-05 15:32:42 +00:00
std::vector<Menu *> m_submenus;
Menu *m_parent = nullptr;
int m_current_index = 0;
2023-01-05 16:42:39 +00:00
private:
};
} // floatpump
} // menu
#endif //FLOATPUMP_MENU_H