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.
Dependencies: mbed mbed-rtos MLX90614
Menu.cpp@0:1e597b0f8b3b, 2015-03-20 (annotated)
- Committer:
- ovidiup13
- Date:
- Fri Mar 20 23:22:41 2015 +0000
- Revision:
- 0:1e597b0f8b3b
- Child:
- 2:fcde41900fa5
initial menu mock-up st7565
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| ovidiup13 | 0:1e597b0f8b3b | 1 | #include "Menu.h" | 
| ovidiup13 | 0:1e597b0f8b3b | 2 | |
| ovidiup13 | 0:1e597b0f8b3b | 3 | void Menu::display(void){ | 
| ovidiup13 | 0:1e597b0f8b3b | 4 | ui->setCurrent(this); | 
| ovidiup13 | 0:1e597b0f8b3b | 5 | //if it is a menu item, go to referenced screen | 
| ovidiup13 | 0:1e597b0f8b3b | 6 | if(isScreen){ | 
| ovidiup13 | 0:1e597b0f8b3b | 7 | items[0]->display(); | 
| ovidiup13 | 0:1e597b0f8b3b | 8 | return; | 
| ovidiup13 | 0:1e597b0f8b3b | 9 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 10 | //otherwise it's a menu, display items | 
| ovidiup13 | 0:1e597b0f8b3b | 11 | current_line = FIRST_ITEM_LINE; //set first item on screen as selected | 
| ovidiup13 | 0:1e597b0f8b3b | 12 | selected = 0; | 
| ovidiup13 | 0:1e597b0f8b3b | 13 | display_items(0); //display items starting from index 0 | 
| ovidiup13 | 0:1e597b0f8b3b | 14 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 15 | |
| ovidiup13 | 0:1e597b0f8b3b | 16 | void Menu::update(char c){ | 
| ovidiup13 | 0:1e597b0f8b3b | 17 | //case down | 
| ovidiup13 | 0:1e597b0f8b3b | 18 | if(c == DOWN){ | 
| ovidiup13 | 0:1e597b0f8b3b | 19 | //if last item already selected, do nothing | 
| ovidiup13 | 0:1e597b0f8b3b | 20 | if(selected + 1 == size) | 
| ovidiup13 | 0:1e597b0f8b3b | 21 | return; //do nothing | 
| ovidiup13 | 0:1e597b0f8b3b | 22 | |
| ovidiup13 | 0:1e597b0f8b3b | 23 | //if we are at the bottom of the screen | 
| ovidiup13 | 0:1e597b0f8b3b | 24 | if(current_line % LAST_ITEM_LINE == 0){ | 
| ovidiup13 | 0:1e597b0f8b3b | 25 | // more items left => clear screen and add items | 
| ovidiup13 | 0:1e597b0f8b3b | 26 | selected++; | 
| ovidiup13 | 0:1e597b0f8b3b | 27 | //display items from the next selected item | 
| ovidiup13 | 0:1e597b0f8b3b | 28 | current_line = FIRST_ITEM_LINE; //current selected line will be top of screen | 
| ovidiup13 | 0:1e597b0f8b3b | 29 | printf("got down, selected is: %d; current line is: %d\n", selected, current_line); | 
| ovidiup13 | 0:1e597b0f8b3b | 30 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 31 | //it is not last on the screen | 
| ovidiup13 | 0:1e597b0f8b3b | 32 | else{ | 
| ovidiup13 | 0:1e597b0f8b3b | 33 | //clear the screen | 
| ovidiup13 | 0:1e597b0f8b3b | 34 | current_line++; | 
| ovidiup13 | 0:1e597b0f8b3b | 35 | selected++; | 
| ovidiup13 | 0:1e597b0f8b3b | 36 | printf("selected is: %d; current line is: %d\n", selected, current_line); | 
| ovidiup13 | 0:1e597b0f8b3b | 37 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 38 | st7565->clear(); | 
| ovidiup13 | 0:1e597b0f8b3b | 39 | display_items(selected/6 * 6); | 
| ovidiup13 | 0:1e597b0f8b3b | 40 | return; | 
| ovidiup13 | 0:1e597b0f8b3b | 41 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 42 | //case up | 
| ovidiup13 | 0:1e597b0f8b3b | 43 | else if(c == UP){ | 
| ovidiup13 | 0:1e597b0f8b3b | 44 | //we are at top of items | 
| ovidiup13 | 0:1e597b0f8b3b | 45 | if(selected == 0) | 
| ovidiup13 | 0:1e597b0f8b3b | 46 | return; //do nothing | 
| ovidiup13 | 0:1e597b0f8b3b | 47 | |
| ovidiup13 | 0:1e597b0f8b3b | 48 | //if we are at the top of the screen => there are more items to show | 
| ovidiup13 | 0:1e597b0f8b3b | 49 | if(current_line == FIRST_ITEM_LINE){ | 
| ovidiup13 | 0:1e597b0f8b3b | 50 | selected--; | 
| ovidiup13 | 0:1e597b0f8b3b | 51 | //display items from the next selected item | 
| ovidiup13 | 0:1e597b0f8b3b | 52 | current_line = LAST_ITEM_LINE; //current selected line will be top of screen | 
| ovidiup13 | 0:1e597b0f8b3b | 53 | printf("got up, selected is: %d; current line is: %d\n", selected, current_line); | 
| ovidiup13 | 0:1e597b0f8b3b | 54 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 55 | //it is not first on the screen | 
| ovidiup13 | 0:1e597b0f8b3b | 56 | else{ | 
| ovidiup13 | 0:1e597b0f8b3b | 57 | current_line--; | 
| ovidiup13 | 0:1e597b0f8b3b | 58 | selected--; | 
| ovidiup13 | 0:1e597b0f8b3b | 59 | printf("selected is: %d; current line is: %d\n", selected, current_line); | 
| ovidiup13 | 0:1e597b0f8b3b | 60 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 61 | st7565->clear(); | 
| ovidiup13 | 0:1e597b0f8b3b | 62 | display_items(selected/6 * 6); | 
| ovidiup13 | 0:1e597b0f8b3b | 63 | return; | 
| ovidiup13 | 0:1e597b0f8b3b | 64 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 65 | else if(c == NL && items[selected]->isSelectable){ | 
| ovidiup13 | 0:1e597b0f8b3b | 66 | //switch to other screen | 
| ovidiup13 | 0:1e597b0f8b3b | 67 | ui->setCurrent(items[selected]); | 
| ovidiup13 | 0:1e597b0f8b3b | 68 | ui->display(); | 
| ovidiup13 | 0:1e597b0f8b3b | 69 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 70 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 71 | |
| ovidiup13 | 0:1e597b0f8b3b | 72 | void Menu::addItem(Item * i){ | 
| ovidiup13 | 0:1e597b0f8b3b | 73 | //if there are many items, ignore | 
| ovidiup13 | 0:1e597b0f8b3b | 74 | if(size == MAX_ITEMS) | 
| ovidiup13 | 0:1e597b0f8b3b | 75 | return; | 
| ovidiup13 | 0:1e597b0f8b3b | 76 | //add pointer to item | 
| ovidiup13 | 0:1e597b0f8b3b | 77 | items[size] = i; | 
| ovidiup13 | 0:1e597b0f8b3b | 78 | size++; | 
| ovidiup13 | 0:1e597b0f8b3b | 79 | isSelectable = true; | 
| ovidiup13 | 0:1e597b0f8b3b | 80 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 81 | |
| ovidiup13 | 0:1e597b0f8b3b | 82 | /* | 
| ovidiup13 | 0:1e597b0f8b3b | 83 | Function that displays items on a new screen starting from an index. | 
| ovidiup13 | 0:1e597b0f8b3b | 84 | */ | 
| ovidiup13 | 0:1e597b0f8b3b | 85 | void Menu::display_items(int index){ | 
| ovidiup13 | 0:1e597b0f8b3b | 86 | //draw title of menu | 
| ovidiup13 | 0:1e597b0f8b3b | 87 | st7565->drawstring(LEFT_MARGIN, TITLE_LINE, title); | 
| ovidiup13 | 0:1e597b0f8b3b | 88 | //display 1 or more items on the screen | 
| ovidiup13 | 0:1e597b0f8b3b | 89 | int i = FIRST_ITEM_LINE, j; | 
| ovidiup13 | 0:1e597b0f8b3b | 90 | //draw the first items | 
| ovidiup13 | 0:1e597b0f8b3b | 91 | for(j = index; j < size && i <= LAST_ITEM_LINE; j++) | 
| ovidiup13 | 0:1e597b0f8b3b | 92 | st7565->drawstring(LEFT_MARGIN * 4, i++, items[j]->getTitle()); | 
| ovidiup13 | 0:1e597b0f8b3b | 93 | |
| ovidiup13 | 0:1e597b0f8b3b | 94 | //up arrow | 
| ovidiup13 | 0:1e597b0f8b3b | 95 | if(index != 0){ | 
| ovidiup13 | 0:1e597b0f8b3b | 96 | st7565->drawline(119, 15, 125, 15,DEFAULT_COLOR); | 
| ovidiup13 | 0:1e597b0f8b3b | 97 | st7565->drawline(119, 15, 122, 12,DEFAULT_COLOR); | 
| ovidiup13 | 0:1e597b0f8b3b | 98 | st7565->drawline(125, 15, 122, 12,DEFAULT_COLOR); | 
| ovidiup13 | 0:1e597b0f8b3b | 99 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 100 | //down arrow | 
| ovidiup13 | 0:1e597b0f8b3b | 101 | if(j < size){ | 
| ovidiup13 | 0:1e597b0f8b3b | 102 | st7565->drawline(119, 60, 125, 60,DEFAULT_COLOR); | 
| ovidiup13 | 0:1e597b0f8b3b | 103 | st7565->drawline(119, 60, 122, 63,DEFAULT_COLOR); | 
| ovidiup13 | 0:1e597b0f8b3b | 104 | st7565->drawline(125, 60, 122, 63,DEFAULT_COLOR); | 
| ovidiup13 | 0:1e597b0f8b3b | 105 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 106 | //set selected as first | 
| ovidiup13 | 0:1e597b0f8b3b | 107 | draw_selected(); | 
| ovidiup13 | 0:1e597b0f8b3b | 108 | st7565->display(); | 
| ovidiup13 | 0:1e597b0f8b3b | 109 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 110 | |
| ovidiup13 | 0:1e597b0f8b3b | 111 | /* | 
| ovidiup13 | 0:1e597b0f8b3b | 112 | Function that draws a circle near the selected item. | 
| ovidiup13 | 0:1e597b0f8b3b | 113 | */ | 
| ovidiup13 | 0:1e597b0f8b3b | 114 | void Menu::draw_selected(void){ | 
| ovidiup13 | 0:1e597b0f8b3b | 115 | st7565->drawcircle(LEFT_MARGIN*2, (current_line * 8) + 3, 2, 20); | 
| ovidiup13 | 0:1e597b0f8b3b | 116 | } | 
| ovidiup13 | 0:1e597b0f8b3b | 117 | |
| ovidiup13 | 0:1e597b0f8b3b | 118 | /* | 
| ovidiup13 | 0:1e597b0f8b3b | 119 | Function that draws the arrows indicating whether there are more items | 
| ovidiup13 | 0:1e597b0f8b3b | 120 | in the menu if the user scrolls up or down. | 
| ovidiup13 | 0:1e597b0f8b3b | 121 | */ | 
| ovidiup13 | 0:1e597b0f8b3b | 122 | void Menu::draw_arrows(int line, char c){ | 
| ovidiup13 | 0:1e597b0f8b3b | 123 | |
| ovidiup13 | 0:1e597b0f8b3b | 124 | //to be implemented | 
| ovidiup13 | 0:1e597b0f8b3b | 125 | } |