/** * @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 #include #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 * * The data will be only updated if a updateDelay is set * and delay is reached. */ virtual void update(); /** * @brief Prepare reenter the this menu * * This function must be called separately */ virtual void prepareReenterMenu() {} /** * @brief Function to print the Menu * * Have to be overwritten to implement the representation * of the menu. * This function have to call the print() function to access * the display. */ 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. * If the parentMenu has set a LCD it will be copied to the * actual instance. * * @param menu */ void setParentMenu(MenuControl *menu); /** * @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; } /** * @brief Set the time between each new print to the display * * If the delay is zero, no updates will be made. * The delay is by default zero. * * @param delay time in milliseconds */ void setUpdateDelay(uint16_t delay = 0) { this->updateDelay = delay; } protected: /** * @brief * * @param lineOne * @param lineTwo */ void print(String lineOne, String lineTwo) const; DisplayWrapper *getLcd() const { return this->lcd; } MenuControl *parentMenu = nullptr; DisplayWrapper *lcd = nullptr; uint16_t updateDelay = 0; uint32_t lastUpdateMillis = 0; }; #endif // MENU_CONTROLL_H