/** * @file menuDriveMode.cpp * @author Alexander Klein (alex@kleiax.de) * @brief Contains an implementation of the class MenuDriveMode * @version 0.1 * @date 2022-01-31 * * @copyright Copyright (c) 2022 * */ #include "menuDriveMode.h" MenuDriveMode::MenuDriveMode(DriveManager *driveManager) : driveManager{driveManager} { } MenuDriveMode::~MenuDriveMode() { if (this->selfCreatedMenuSpeed) { delete this->menuSpeed; } } void MenuDriveMode::addSpeedMenu(MenuIntInput *menuSpeed) { if (this->selfCreatedMenuSpeed) { delete this->menuSpeed; this->selfCreatedMenuSpeed = false; } this->menuSpeed = menuSpeed; } void MenuDriveMode::left() { if (static_cast(this->activeMenu)) { if (static_cast(this->activeMenu)) { this->activeMenu->left(); } return; } this->firstPrint = true; this->configureOnLeave(); delete this->menuSpeed; this->driveManager->changeModus(); MenuInformationSites::left(); } void MenuDriveMode::right() { if (static_cast(this->activeMenu)) { this->activeMenu->right(); return; } MenuInformationSites::right(); } void MenuDriveMode::up() { if (static_cast(this->activeMenu)) { this->activeMenu->up(); return; } MenuInformationSites::up(); } void MenuDriveMode::down() { if (static_cast(this->activeMenu)) { this->activeMenu->down(); return; } MenuInformationSites::down(); } void MenuDriveMode::yes() { if (static_cast(this->activeMenu)) { this->activeMenu->yes(); return; } MenuInformationSites::yes(); } void MenuDriveMode::no() { if (static_cast(this->activeMenu)) { this->activeMenu->no(); return; } MenuInformationSites::no(); } void MenuDriveMode::prepareReenterMenu() { this->activeMenu = nullptr; } void MenuDriveMode::printMenu() { if (static_cast(this->activeMenu)) { this->activeMenu->printMenu(); return; } MenuInformationSites::printMenu(); } void MenuDriveMode::init() { this->activeMenu = nullptr; } void MenuDriveMode::activateSpeedMenu() { if (!this->driveManager->isActive()) { return; } if (this->selfCreatedMenuSpeed) { delete this->menuSpeed; } DrivingSpeeds &speeds = this->driveManager->getDriveModiPtr()->getSpeedsRef(); auto *menu = new MenuIntInput(2, new MenuSpeed(speeds)); menu->setMinMax(5, UINT8_MAX); menu->setEntry(0, "x m/s e-1", driveManager->getDrivingSpeedsRef().x * 10); menu->setEntry(1, "z rad/s e-1", driveManager->getDrivingSpeedsRef().rot * 10); this->selfCreatedMenuSpeed = true; this->addSpeedMenu(menu); } void MenuDriveMode::enterSpeedMenu() { this->activeMenu = this->menuSpeed; this->enterMenu(); } void MenuDriveMode::enterSensorMenu() { this->activeMenu = this->menuSensor; this->enterMenu(); } void MenuDriveMode::enterMenu() { if (!static_cast(this->activeMenu)) { return; } this->activeMenu->printMenu(); this->activeMenu->setParentMenu(this); }