Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: Navigator.cpp
- Revision:
- 1:84d263c8932d
- Child:
- 2:2654dc659298
diff -r 577f0ec71f4c -r 84d263c8932d Navigator.cpp
--- /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