diff --git a/src/SpecialMenus/Speed/menuSpeed.h b/src/SpecialMenus/Speed/menuSpeed.h index 9acba68..65b3ccd 100644 --- a/src/SpecialMenus/Speed/menuSpeed.h +++ b/src/SpecialMenus/Speed/menuSpeed.h @@ -14,7 +14,7 @@ #include -class MenuSpeed : MenuIntInput { +class MenuSpeed : public MenuIntInput { }; diff --git a/src/SpecialMenus/driveModi/Autopilot/menuAutopilot.cpp b/src/SpecialMenus/driveModi/Autopilot/menuAutopilot.cpp index 9496435..8447325 100644 --- a/src/SpecialMenus/driveModi/Autopilot/menuAutopilot.cpp +++ b/src/SpecialMenus/driveModi/Autopilot/menuAutopilot.cpp @@ -201,7 +201,7 @@ void MenuAutopilot::printPage() const { this->print(lineOne, lineTwo); } -void MenuAutopilot::runCommand() const { +void MenuAutopilot::runCommand() { switch (this->getCurrentPage()) { case 5: this->autopilot->switchLoopMode(); @@ -226,7 +226,7 @@ void MenuAutopilot::runCommand() const { } } -void MenuAutopilot::runCommandNo() const { +void MenuAutopilot::runCommandNo() { switch (this->getCurrentPage()) { case 7: this->minDistance = this->autopilot->getNavigation()->decreaseMinDistanceToReachPoint(); @@ -254,4 +254,6 @@ void MenuAutopilot::init() { //dirty hack to get the val, can be better!!! TODO this->autopilot->getNavigation()->increaseMinDistanceToReachPoint(); this->minDistance = this->autopilot->getNavigation()->decreaseMinDistanceToReachPoint(); + + MenuDriveMode::init(); } diff --git a/src/SpecialMenus/driveModi/Autopilot/menuAutopilot.h b/src/SpecialMenus/driveModi/Autopilot/menuAutopilot.h index c83669d..206ffab 100644 --- a/src/SpecialMenus/driveModi/Autopilot/menuAutopilot.h +++ b/src/SpecialMenus/driveModi/Autopilot/menuAutopilot.h @@ -47,8 +47,8 @@ class MenuAutopilot : public MenuDriveMode { private: void init() override; - void runCommand() const override; - void runCommandNo() const override; + void runCommand() override; + void runCommandNo() override; bool mutable targetFreezed = false; double mutable minDistance; diff --git a/src/SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.cpp b/src/SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.cpp index 3b9ac35..f709559 100644 --- a/src/SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.cpp +++ b/src/SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.cpp @@ -117,7 +117,7 @@ void MenuCalibrateCompass::init() { this->updateDelay = 500; } -void MenuCalibrateCompass::runCommand() const { +void MenuCalibrateCompass::runCommand() { switch (this->getCurrentPage()) { case 2: switch (this->caliCompass->getState()) { diff --git a/src/SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.h b/src/SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.h index 284e200..010bbaf 100644 --- a/src/SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.h +++ b/src/SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.h @@ -42,7 +42,7 @@ class MenuCalibrateCompass : public MenuDriveMode { protected: void init() override; - void runCommand() const override; + void runCommand() override; private: CalibrateCompassM* caliCompassMode; diff --git a/src/SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.cpp b/src/SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.cpp index ff7508d..f90f3a5 100644 --- a/src/SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.cpp +++ b/src/SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.cpp @@ -114,7 +114,7 @@ void MenuCaptureRoute::update() { this->printMenu(); } -void MenuCaptureRoute::runCommand() const { +void MenuCaptureRoute::runCommand() { switch (this->getCurrentPage()) { case 7: @@ -134,5 +134,5 @@ void MenuCaptureRoute::init() { this->updateDelay = 500; this->captureRoute = new CaptureRoute(); this->driveManager->changeModus(this->captureRoute); - + MenuDriveMode::init(); } diff --git a/src/SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.h b/src/SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.h index 04136c7..9c3ba8a 100644 --- a/src/SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.h +++ b/src/SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.h @@ -43,7 +43,7 @@ class MenuCaptureRoute : public MenuDriveMode { */ void update() override; - void runCommand() const override; + void runCommand() override; private: void init() override; diff --git a/src/SpecialMenus/driveModi/ManualDrive/menuManualDrive.cpp b/src/SpecialMenus/driveModi/ManualDrive/menuManualDrive.cpp index b704d9b..72bdeef 100644 --- a/src/SpecialMenus/driveModi/ManualDrive/menuManualDrive.cpp +++ b/src/SpecialMenus/driveModi/ManualDrive/menuManualDrive.cpp @@ -11,7 +11,7 @@ #include "menuManualDrive.h" MenuManualControl::MenuManualControl(DriveManager* driveManager) : MenuDriveMode(driveManager) { - + this->noEqualLeft = true; } MenuManualControl::~MenuManualControl() { @@ -35,15 +35,11 @@ void MenuManualControl::printPage() const { break; case 2: - lineOne = "Speed: "; - lineOne.concat(this->manualControl->getMaxSpeed()); - lineTwo = "- dec 0.1 inc +"; + lineOne = "Speed Menu"; break; case 3: - lineOne = "RotSpeed: "; - lineOne.concat(this->manualControl->getMaxRotation()); - lineTwo = "- dec 0.1 inc +"; + lineOne = "Sensor Menu"; break; default: @@ -60,39 +56,24 @@ void MenuManualControl::init() { this->driveManager->changeModus(this->manualControl); this->setCountPages(4); this->updateDelay = 500; + MenuDriveMode::init(); } -void MenuManualControl::runCommand() const { +void MenuManualControl::runCommand() { switch (this->getCurrentPage()) { case 1: this->manualControl->switchInputMode(); break; case 2: - this->manualControl->increaseMaxSpeed(); + this->enterSpeedMenu(); break; case 3: - this->manualControl->increaseMaxRotation(); + this->enterSensorMenu(); break; default: break; } } - -void MenuManualControl::runCommandNo() const { - switch (this->getCurrentPage()) - { - case 2: - this->manualControl->decreaseMaxSpeed(); - break; - - case 3: - this->manualControl->decreaseMaxRotation(); - break; - - default: - break; - } -} diff --git a/src/SpecialMenus/driveModi/ManualDrive/menuManualDrive.h b/src/SpecialMenus/driveModi/ManualDrive/menuManualDrive.h index 7ad8449..9f2f6d8 100644 --- a/src/SpecialMenus/driveModi/ManualDrive/menuManualDrive.h +++ b/src/SpecialMenus/driveModi/ManualDrive/menuManualDrive.h @@ -41,8 +41,7 @@ class MenuManualControl : public MenuDriveMode { protected: void init() override; - void runCommand() const override; - void runCommandNo() const override; + void runCommand() override; private: ManualControl* manualControl; diff --git a/src/SpecialMenus/driveModi/TestMode/menuTestMode.cpp b/src/SpecialMenus/driveModi/TestMode/menuTestMode.cpp index 6b268cb..4d5d76c 100644 --- a/src/SpecialMenus/driveModi/TestMode/menuTestMode.cpp +++ b/src/SpecialMenus/driveModi/TestMode/menuTestMode.cpp @@ -173,7 +173,7 @@ void MenuTestMode::init() { lightMenu->addEntry(lightRedAction); lightMenu->addEntry(lightGreenAction); lightMenu->addEntry(lightBlueAction); - lightMenu->addEntry(lightOffAction); + lightMenu->addEntry(lightOffAction); } void MenuTestMode::update() { diff --git a/src/SpecialMenus/driveModi/menuDriveMode.cpp b/src/SpecialMenus/driveModi/menuDriveMode.cpp index 0fa91ba..5daacab 100644 --- a/src/SpecialMenus/driveModi/menuDriveMode.cpp +++ b/src/SpecialMenus/driveModi/menuDriveMode.cpp @@ -16,11 +16,90 @@ MenuDriveMode::MenuDriveMode(DriveManager* driveManager) { } void MenuDriveMode::left() { + if (this->activeMenu) { + if (this->activeMenu) + this->activeMenu->left(); + return; + } + this->firstPrint = true; this->configureOnLeave(); this->driveManager->changeModus(); - if (parentMenu) { - this->parentMenu->printMenu(); - this->leaved = true; - } + MenuInformationSites::left(); +} + +void MenuDriveMode::right() { + if (this->activeMenu) { + this->activeMenu->right(); + return; + } + MenuInformationSites::right(); +} + +void MenuDriveMode::up() { + if (this->activeMenu) { + this->activeMenu->up(); + return; + } + MenuInformationSites::up(); +} + +void MenuDriveMode::down() { + if (this->activeMenu) { + this->activeMenu->down(); + return; + } + MenuInformationSites::down(); +} + +void MenuDriveMode::yes() { + if (this->activeMenu) { + this->activeMenu->yes(); + return; + } + MenuInformationSites::yes(); +} + +void MenuDriveMode::no() { + if (this->activeMenu) { + this->activeMenu->no(); + return; + } + MenuInformationSites::no(); +} + +void MenuDriveMode::prepareReenterMenu() { + this->activeMenu = nullptr; +} + +void MenuDriveMode::printMenu() { + if (this->activeMenu) { + this->activeMenu->printMenu(); + return; + } + + MenuInformationSites::printMenu(); +} + +void MenuDriveMode::init() { + this->activeMenu = nullptr; +} + +void MenuDriveMode::enterSpeedMenu() { + this->activeMenu = this->menuSpeed; + this->enterMenu(); +} + +void MenuDriveMode::enterSensorMenu() { + this->activeMenu = this->menuSensor; + this->enterMenu(); +} + +void MenuDriveMode::enterMenu() { + if (!this->activeMenu) + return + + this->activeMenu->printMenu(); + std::cout << "Sensor Menu was theretically printed" << std::endl; + this->activeMenu->setParentMenu(this); } diff --git a/src/SpecialMenus/driveModi/menuDriveMode.h b/src/SpecialMenus/driveModi/menuDriveMode.h index cff4ea3..82a67e1 100644 --- a/src/SpecialMenus/driveModi/menuDriveMode.h +++ b/src/SpecialMenus/driveModi/menuDriveMode.h @@ -29,19 +29,37 @@ class MenuDriveMode : public MenuInformationSites { */ MenuDriveMode(DriveManager* driveManager); + void addSensorMenu(MenuSensorData* menuSensor) { this->menuSensor = menuSensor; } + void addSpeedMenu(MenuSpeed* menuSpeed) { this->menuSpeed = menuSpeed; } + /** * @brief Goes back to the parentMenu. */ void left() override; + void right() override; + void up() override; + void down() override; + void yes() override; + void no() override; + + void prepareReenterMenu() override; + void printMenu() override; protected: - void configureOnLeave() {} + void init() override; + virtual void configureOnLeave() {} + void enterSpeedMenu(); + void enterSensorMenu(); DriveManager* driveManager; - MenuSensorData* menuSensor; - MenuSpeed* menuSpeed; bool firstPrint = true; -}; + private: + void enterMenu(); + + MenuControl* activeMenu = nullptr; + MenuSensorData* menuSensor = nullptr; + MenuSpeed* menuSpeed = nullptr; +}; #endif // MENU_DRIVE_MODI_H diff --git a/src/main.cpp b/src/main.cpp index 25ec03d..997da5c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -223,6 +223,8 @@ void makeMenu() { sys_m->setUpdateDelay(1500); sen_m->setUpdateDelay(500); + man_m->addSensorMenu(sen_m); + // Entry for the main menu main_m->addEntry(new MenuAction("Mode", mode_m)); main_m->addEntry(new MenuAction("Sensor", sen_m));