Library to display menus on TextLCDs. Interaction with functions Up,Down and Select (Buttons or RPG) Based on menu-library from pyeh9

Fork of Menu by Peihsun Yeh

Library to display menus on TextLCDs. Interaction with functions Up,Down and Select (Buttons or RPG) Based on menu-library from pyeh9

Revision:
1:84d263c8932d
Child:
2:2654dc659298
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Navigator.cpp	Tue Mar 05 20:33:27 2013 +0000
@@ -0,0 +1,98 @@
+#include "Navigator.h"
+
+Navigator::Navigator(Menu *root, RPG &rpg, TextLCD *lcd) : activeMenu(root), rpg(rpg), lcd(lcd) 
+{
+    bottom = root->selections.size();
+    cursorPos = 0;
+    cursorLine = 1;
+    button = 0;
+    lastButton = 0;
+}
+
+void Navigator::printMenu()
+{ 
+    lcd->cls();
+    if(bottom == 1){ // the current Menu only has one selection
+        lcd->printf("%s\n", activeMenu->selections[0].selText);
+    } else {
+        if(cursorLine == 2){ // if we're at the bottom
+            lcd->printf("%s\n", activeMenu->selections[cursorPos-1].selText);
+            lcd->printf("%s\n", activeMenu->selections[cursorPos].selText);
+        } else {
+            lcd->printf("%s\n", activeMenu->selections[cursorPos].selText);
+            lcd->printf("%s\n", activeMenu->selections[cursorPos+1].selText);
+        }
+    }
+}
+
+void Navigator::printCursor()
+{   
+    if(activeMenu->selections[cursorPos].childMenu == NULL) printf("No child menu\n");
+    else printf("child menu: %s\n", activeMenu->selections[cursorPos].childMenu->menuID);
+     
+    lcd->locate(0,0);
+    if(cursorLine == 1){
+        lcd->putc('>');
+        lcd->locate(0,1);
+        lcd->putc(' ');
+    } else if(cursorLine == 2){
+        lcd->putc(' ');
+        lcd->locate(0,1);
+        lcd->putc('>');
+    }
+}
+
+void Navigator::poll()
+{
+    if((direction = rpg.dir())!=0){ //Get Dir
+        wait(0.2); 
+        if(direction == 1) moveDown();
+        else if(direction == -1) moveUp();
+    }
+       
+    if ((button = rpg.pb()) && !lastButton){ //prevents multiple selections when button is held down
+        wait(0.2);
+        if(activeMenu->selections[cursorPos].fun != NULL){
+            (activeMenu->selections[cursorPos].fun)();
+        }
+        if(activeMenu->selections[cursorPos].childMenu != NULL){
+            activeMenu = activeMenu->selections[cursorPos].childMenu;
+            bottom = activeMenu->selections.size();
+            cursorPos = 0;
+            cursorLine = 1;
+            printMenu();
+            printCursor();
+        }
+    }
+    lastButton = button;
+}
+
+void Navigator::moveUp()
+{
+    if(cursorLine == 1){
+        printMenu();
+    } else if(cursorLine == 2){
+        cursorLine = 1;
+    }
+    
+    if(cursorPos != 0){
+        cursorPos--;
+        printMenu();
+    }
+    printCursor();
+}
+
+void Navigator::moveDown()
+{
+    if(cursorLine == 1){
+        cursorLine = 2;
+    } else if(cursorLine == 2){
+        printMenu();
+    }
+    
+    if(cursorPos != (bottom-1)){
+        cursorPos++;
+        printMenu();
+    }
+    printCursor();
+}
\ No newline at end of file