172 lines
3.2 KiB
C++
172 lines
3.2 KiB
C++
/**
|
|
* @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<bool>(this->activeMenu))
|
|
{
|
|
if (static_cast<bool>(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<bool>(this->activeMenu))
|
|
{
|
|
this->activeMenu->right();
|
|
return;
|
|
}
|
|
MenuInformationSites::right();
|
|
}
|
|
|
|
void MenuDriveMode::up()
|
|
{
|
|
if (static_cast<bool>(this->activeMenu))
|
|
{
|
|
this->activeMenu->up();
|
|
return;
|
|
}
|
|
MenuInformationSites::up();
|
|
}
|
|
|
|
void MenuDriveMode::down()
|
|
{
|
|
if (static_cast<bool>(this->activeMenu))
|
|
{
|
|
this->activeMenu->down();
|
|
return;
|
|
}
|
|
MenuInformationSites::down();
|
|
}
|
|
|
|
void MenuDriveMode::yes()
|
|
{
|
|
if (static_cast<bool>(this->activeMenu))
|
|
{
|
|
this->activeMenu->yes();
|
|
return;
|
|
}
|
|
MenuInformationSites::yes();
|
|
}
|
|
|
|
void MenuDriveMode::no()
|
|
{
|
|
if (static_cast<bool>(this->activeMenu))
|
|
{
|
|
this->activeMenu->no();
|
|
return;
|
|
}
|
|
MenuInformationSites::no();
|
|
}
|
|
|
|
void MenuDriveMode::prepareReenterMenu()
|
|
{
|
|
this->activeMenu = nullptr;
|
|
}
|
|
|
|
void MenuDriveMode::printMenu()
|
|
{
|
|
if (static_cast<bool>(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<bool>(this->activeMenu))
|
|
{
|
|
return;
|
|
}
|
|
|
|
this->activeMenu->printMenu();
|
|
this->activeMenu->setParentMenu(this);
|
|
}
|