Initial commit
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* @file displayWrapper.h
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2023-01-08
|
||||
*
|
||||
* @copyright Copyright (c) 2023
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef DISPLAY_WRAPPER_H
|
||||
#define DISPLAY_WRAPPER_H
|
||||
|
||||
class DisplayWrapper {
|
||||
public:
|
||||
virtual void clear() = 0;
|
||||
virtual void setCursor(uint8_t row, uint8_t line) = 0;
|
||||
virtual void print(const char *str) = 0;
|
||||
};
|
||||
|
||||
#endif // DISPLAY_WRAPPER_H
|
||||
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* @file menu.h
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief Contains the Menu class
|
||||
* @version 0.1
|
||||
* @date 2022-01-12
|
||||
*
|
||||
* @copyright Copyright (c) 2022
|
||||
*
|
||||
*/
|
||||
#ifndef MENU_H
|
||||
#define MENU_H
|
||||
|
||||
#include <list>
|
||||
|
||||
#include "menuAction.h"
|
||||
#include "menuControl.h"
|
||||
|
||||
class MenuAction;
|
||||
|
||||
/**
|
||||
* @brief A class to build menu structers
|
||||
*/
|
||||
class Menu : public MenuControl {
|
||||
public:
|
||||
Menu();
|
||||
~Menu() override;
|
||||
|
||||
/**
|
||||
* @brief Add a menu action to the menu
|
||||
*
|
||||
* @param entry
|
||||
*/
|
||||
void addEntry(MenuAction* entry);
|
||||
bool isInSubmenu();
|
||||
|
||||
void printMenu() override;
|
||||
void update() override;
|
||||
|
||||
void down() override;
|
||||
void up() override;
|
||||
void right() override;
|
||||
void left() override;
|
||||
void yes() override;
|
||||
void no() override;
|
||||
|
||||
private:
|
||||
bool inSubmenu = false;
|
||||
|
||||
std::list<MenuAction*> entrys;
|
||||
std::list<MenuAction*>::iterator selectedEntry;
|
||||
|
||||
};
|
||||
|
||||
#endif // MENU_H
|
||||
@@ -0,0 +1,103 @@
|
||||
/**
|
||||
* @file menuAction.h
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief Contains the MenuAction class
|
||||
* @version 0.1
|
||||
* @date 2022-01-12
|
||||
*
|
||||
* @copyright Copyright (c) 2022
|
||||
*
|
||||
*/
|
||||
#ifndef MENU_ENTRY_H
|
||||
#define MENU_ENTRY_H
|
||||
|
||||
#include "menu.h"
|
||||
|
||||
class MenuControl;
|
||||
|
||||
class MenuActionWrapper {
|
||||
public:
|
||||
virtual ~MenuActionWrapper() {}
|
||||
virtual void action() = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief This class forms the transition between menus.
|
||||
*
|
||||
* In the Menu these are the entries.
|
||||
* This class can be call an submenu or a function.
|
||||
*/
|
||||
class MenuAction {
|
||||
public:
|
||||
|
||||
/**
|
||||
* @brief Construct a new Menu Action object
|
||||
*
|
||||
* @param name shown in the Menu
|
||||
* @param function to call when activate the entry
|
||||
* @param callback to call when leave the entry
|
||||
*/
|
||||
MenuAction(const char* name, void (*function) (), void (*callback) () = nullptr);
|
||||
|
||||
/**
|
||||
* @brief Construct a new Menu Action object
|
||||
*
|
||||
* @param name shown in the Menu
|
||||
* @param action to call when activate the entry
|
||||
*/
|
||||
MenuAction(const char* name, MenuActionWrapper* action);
|
||||
|
||||
/**
|
||||
* @brief Construct a new Menu Action object
|
||||
*
|
||||
* This constructer is used for submenus.
|
||||
*
|
||||
* @param name shown in the Menu
|
||||
* @param menu to call when activate the entry
|
||||
*/
|
||||
MenuAction(const char* name, MenuControl* menu);
|
||||
|
||||
~MenuAction();
|
||||
|
||||
/**
|
||||
* @brief activates the entry
|
||||
*/
|
||||
void runAction();
|
||||
|
||||
/**
|
||||
* @brief Get the Name string
|
||||
*
|
||||
* @return const char*
|
||||
*/
|
||||
const char* getName();
|
||||
|
||||
/**
|
||||
* @brief Get the Is Menu object
|
||||
*
|
||||
* @return true runAction calls a submenu
|
||||
* @return false runAction call a function
|
||||
*/
|
||||
bool getIsMenu();
|
||||
|
||||
/**
|
||||
* @brief Get the Menu object
|
||||
*
|
||||
* Before call this function it may be useful
|
||||
* to check if is it a submenu with getIsMenu.
|
||||
*
|
||||
* @return MenuControl*
|
||||
*/
|
||||
MenuControl* getMenu();
|
||||
|
||||
private:
|
||||
const char* name;
|
||||
|
||||
void (*function) () = nullptr;
|
||||
void (*callback) () = nullptr;
|
||||
|
||||
bool isMenu = false;
|
||||
MenuControl* menu = nullptr;
|
||||
MenuActionWrapper* action = nullptr;
|
||||
};
|
||||
|
||||
#endif // MENU_ENTRY_H
|
||||
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* @file menuControl.h
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief Contains a abstract class for Menu
|
||||
* @version 0.1
|
||||
* @date 2022-01-19
|
||||
*
|
||||
* @copyright Copyright (c) 2022
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MENU_CONTROLL_H
|
||||
#define MENU_CONTROLL_H
|
||||
|
||||
#include <iostream>
|
||||
#include "displayWrapper.h"
|
||||
|
||||
/**
|
||||
* @brief Baseclass to build Menus
|
||||
*
|
||||
* This class have to be inherited by other classes which want to be
|
||||
* act as a menu, because the menu structure uses polymorphism.
|
||||
*
|
||||
*/
|
||||
class MenuControl {
|
||||
public:
|
||||
virtual ~MenuControl() {};
|
||||
|
||||
/** @name UserInputs
|
||||
* @brief This functions should be called be user actions.
|
||||
*
|
||||
* This functions have to be implement in every other menu
|
||||
* class.
|
||||
*/
|
||||
///@{
|
||||
virtual void down() {};
|
||||
virtual void up() {};
|
||||
virtual void right() {};
|
||||
virtual void left() {};
|
||||
virtual void yes() {};
|
||||
virtual void no() {};
|
||||
///@}
|
||||
|
||||
/**
|
||||
* @brief can be called to update shown data
|
||||
*/
|
||||
virtual void update() {}
|
||||
|
||||
virtual void printMenu() = 0;
|
||||
|
||||
/**
|
||||
* @brief Set the Parent Menu
|
||||
*
|
||||
* If the parentMenu is set it will be called automaticaly
|
||||
* when the user left the child menu.
|
||||
*
|
||||
* @param menu
|
||||
*/
|
||||
void setParentMenu(MenuControl* menu) { this->parentMenu = menu; }
|
||||
// MenuControl* getParentMenu() { return this->parentMenu; }
|
||||
|
||||
/**
|
||||
* @brief Set the Lcd object
|
||||
*
|
||||
* If this is set the menu will be print on the display too.
|
||||
*
|
||||
* @param lcd
|
||||
*/
|
||||
void setLcd(DisplayWrapper* lcd) { this->lcd = lcd; }
|
||||
|
||||
protected:
|
||||
void print(String lineOne, String lineTwo) const;
|
||||
|
||||
MenuControl* parentMenu = nullptr;
|
||||
DisplayWrapper* lcd = nullptr;
|
||||
};
|
||||
#endif // MENU_CONTROLL_H
|
||||
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
* @file menuInformationSites.h
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief Contains a class to print informations over more pages
|
||||
* @version 0.1
|
||||
* @date 2022-12-27
|
||||
*
|
||||
* @copyright Copyright (c) 2022
|
||||
*
|
||||
*/
|
||||
#ifndef MENU_INFORMATION_SITES_H
|
||||
#define MENU_INFORMATION_SITES_H
|
||||
|
||||
#include "menuControl.h"
|
||||
|
||||
class MenuInformationSites : public MenuControl {
|
||||
public:
|
||||
/**
|
||||
* @brief Construct a new Menu Information Sites object
|
||||
*
|
||||
* @param amount of pages
|
||||
*/
|
||||
MenuInformationSites(uint8_t pages = 1);
|
||||
|
||||
/**
|
||||
* @brief Next page
|
||||
*/
|
||||
void down() override;
|
||||
|
||||
/**
|
||||
* @brief Previous page
|
||||
*/
|
||||
void up() override;
|
||||
|
||||
/**
|
||||
* @brief Update information
|
||||
*/
|
||||
void right() override;
|
||||
|
||||
/**
|
||||
* @brief Go to the parent menu
|
||||
*/
|
||||
void left() override;
|
||||
|
||||
/**
|
||||
* @brief Go to the parent menu
|
||||
*/
|
||||
void no() override;
|
||||
|
||||
/**
|
||||
* @brief Update information
|
||||
*/
|
||||
void yes() override;
|
||||
|
||||
/**
|
||||
* @brief Prints the Information to display and console
|
||||
*
|
||||
* Prints the selected page.
|
||||
* The informations are only printed to the display if it
|
||||
* set.
|
||||
*/
|
||||
void printMenu() override;
|
||||
|
||||
/**
|
||||
* @brief can be called to update shown data
|
||||
*/
|
||||
void update() override;
|
||||
|
||||
protected:
|
||||
bool setCountPages(uint8_t pages);
|
||||
uint8_t getCountPages() const;
|
||||
uint8_t getCurrentPage() const;
|
||||
|
||||
virtual void printPage() const = 0;
|
||||
virtual void runCommand() const {}
|
||||
virtual void init() {}
|
||||
|
||||
void printDefault() const;
|
||||
|
||||
uint8_t lastPageNumber = 0;
|
||||
bool leaved = true;
|
||||
|
||||
private:
|
||||
uint8_t countPages;
|
||||
uint8_t currentPage;
|
||||
|
||||
|
||||
const uint16_t delay = 5000;
|
||||
uint32_t lastMillis = 0;
|
||||
};
|
||||
|
||||
#endif // MENU_INFORMATION_SITES_H
|
||||
@@ -0,0 +1,103 @@
|
||||
/**
|
||||
* @file menuIntInput.h
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2022-09-12
|
||||
*
|
||||
* @copyright Copyright (c) 2022
|
||||
*
|
||||
*/
|
||||
#ifndef MENU_INT_INPUT_H
|
||||
#define MENU_INT_INPUT_H
|
||||
|
||||
#include "menuControl.h"
|
||||
#include <stdint.h>
|
||||
|
||||
#define MAX_NAME_LENGTH 12
|
||||
|
||||
class MenuIntInputWrapper {
|
||||
public:
|
||||
virtual ~MenuIntInputWrapper() {}
|
||||
virtual void action(int16_t* values, uint8_t length) = 0;
|
||||
};
|
||||
|
||||
class MenuIntInput : public MenuControl {
|
||||
public:
|
||||
MenuIntInput(int16_t values[], char *names, uint8_t length, MenuIntInputWrapper* wrapper);
|
||||
MenuIntInput(uint8_t length, MenuIntInputWrapper *wrapper);
|
||||
~MenuIntInput();
|
||||
|
||||
void setEntry(uint8_t valueNumber, const char* name, int16_t startValue = 0);
|
||||
|
||||
void setMin(uint8_t valueNumber, int16_t min);
|
||||
void setMin(int16_t min);
|
||||
void setMax(uint8_t valueNumber, int16_t max);
|
||||
void setMax(int16_t max);
|
||||
void setMinMax(uint8_t valueNumber, int16_t min, int16_t max);
|
||||
void setMinMax(int16_t min, int16_t max);
|
||||
void setMinMaxSteps(uint8_t valueNumber, int16_t min, int16_t max, uint8_t steps);
|
||||
void setMinMaxSteps(int16_t min, int16_t max, uint8_t steps);
|
||||
void setPrintParentMenu(bool b) { this->printParentMenu = b; }
|
||||
|
||||
void setStepsPerInput(uint8_t valueNumber, uint8_t steps);
|
||||
void setStepsPerInput(uint8_t steps);
|
||||
|
||||
/**
|
||||
* @brief Decrement selected value
|
||||
*/
|
||||
void down() override;
|
||||
|
||||
/**
|
||||
* @brief Increment selected value
|
||||
*/
|
||||
void up() override;
|
||||
|
||||
/**
|
||||
* @brief Select next value
|
||||
*/
|
||||
void right() override;
|
||||
|
||||
/**
|
||||
* @brief Select previous value
|
||||
*/
|
||||
void left() override;
|
||||
|
||||
/**
|
||||
* @brief Leave menu without saving
|
||||
*/
|
||||
void no() override;
|
||||
|
||||
/**
|
||||
* @brief Leave menu with saving
|
||||
*/
|
||||
void yes() override;
|
||||
|
||||
/**
|
||||
* @brief Prints the Information to display and console
|
||||
*
|
||||
* The informations are only printed to the display if it
|
||||
* set.
|
||||
*/
|
||||
void printMenu() override;
|
||||
|
||||
void update() override {};
|
||||
|
||||
private:
|
||||
MenuIntInputWrapper* wrapper;
|
||||
|
||||
bool printParentMenu = true;
|
||||
|
||||
uint8_t currentPosition = 0;
|
||||
uint8_t length;
|
||||
uint8_t *stepsPerInput;
|
||||
uint8_t countSameActions = 0;
|
||||
int16_t *values;
|
||||
int16_t *originalValues;
|
||||
int16_t *min;
|
||||
int16_t *max;
|
||||
char *names;
|
||||
|
||||
};
|
||||
|
||||
#endif // MENU_INT_INPUT_H
|
||||
Reference in New Issue
Block a user