diff --git a/src/LcdMenu.h b/src/LcdMenu.h index b02a6bf8..7da6df63 100644 --- a/src/LcdMenu.h +++ b/src/LcdMenu.h @@ -225,7 +225,7 @@ class LcdMenu { // // determine if cursor is at the top // - if (top == 1) { + if (top == 1 && !isAtTheEnd(bottom)) { // // Print the down arrow only // @@ -242,7 +242,7 @@ class LcdMenu { // lcd->setCursor(maxCols - 1, 0); lcd->write(byte(0)); - } else if (isAtTheEnd()) { + } else if (isAtTheEnd() && top != 1) { // // Print the up arrow only // @@ -263,8 +263,13 @@ class LcdMenu { * Check if the cursor is at the end of the menu items * @return true : `boolean` if it is at the end */ - boolean isAtTheEnd() { - return currentMenuTable[cursorPosition + 1]->getType() == + boolean isAtTheEnd() { return isAtTheEnd(cursorPosition); } + /** + * Check if the item at [position] is at the end of the menu items + * @return true : `boolean` if it is at the end + */ + boolean isAtTheEnd(uint8_t position) { + return currentMenuTable[position + 1]->getType() == MENU_ITEM_END_OF_MENU; } /** diff --git a/src/MenuItem.h b/src/MenuItem.h index 4ec07906..7f2ed259 100644 --- a/src/MenuItem.h +++ b/src/MenuItem.h @@ -193,7 +193,9 @@ class ItemHeader : public MenuItem { MenuItem** getSubMenu() override { return this->parent; }; - MenuItem* operator[](const uint8_t index) override { return parent[index]; } + MenuItem* operator[](const uint8_t index) override { + return getSubMenu()[index]; + } }; /** diff --git a/src/utils/commandProccesors.h b/src/utils/commandProccesors.h index 3a33f9bf..0d771e71 100644 --- a/src/utils/commandProccesors.h +++ b/src/utils/commandProccesors.h @@ -2,6 +2,22 @@ #include #ifdef MenuItem_H +/** + * Processes the given command on the LcdMenu object. + * + * @param menu The LcdMenu object on which the command is to be processed. + * @param cmd The command to be processed. + * @param upCmd The command for moving up in the menu. + * @param downCmd The command for moving down in the menu. + * @param enterCmd The command for entering/editing a value. + * @param backCmd The command for going back in the menu. + * @param leftCmd The command for moving left in the menu. + * @param rightCmd The command for moving right in the menu. + * + * @return true if the command is consumed, false otherwise. + * + * @throws None + */ bool processCommand(LcdMenu& menu, byte cmd, byte upCmd, byte downCmd, byte enterCmd, byte backCmd, byte leftCmd, byte rightCmd) { if (cmd == upCmd) {