Library for creating menu systems in displays.
Menu.cpp@7:5bbf520bc14d, 2013-05-30 (annotated)
- Committer:
- ollie8
- Date:
- Thu May 30 07:20:10 2013 +0000
- Revision:
- 7:5bbf520bc14d
- Parent:
- 3:ece3d3346330
- Child:
- 9:7828182dbc9f
Small refactor and now fully documented.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ollie8 | 0:3f4d33765f10 | 1 | /* |
ollie8 | 0:3f4d33765f10 | 2 | * Menu.cpp |
ollie8 | 0:3f4d33765f10 | 3 | * |
ollie8 | 0:3f4d33765f10 | 4 | * Created on: 30 Oct 2011 |
ollie8 | 0:3f4d33765f10 | 5 | * Author: ollie |
ollie8 | 0:3f4d33765f10 | 6 | */ |
ollie8 | 0:3f4d33765f10 | 7 | #include "Menu.h" |
ollie8 | 0:3f4d33765f10 | 8 | |
ollie8 | 7:5bbf520bc14d | 9 | Menu::Menu(EnterMenu enterAction, SelectionChange selectionChangeAct, char* newName, int size) : MenuNode() { |
ollie8 | 0:3f4d33765f10 | 10 | entered = enterAction; |
ollie8 | 0:3f4d33765f10 | 11 | name = newName; |
ollie8 | 0:3f4d33765f10 | 12 | selection = selectionChangeAct; |
ollie8 | 7:5bbf520bc14d | 13 | selectedNode = 0; |
ollie8 | 7:5bbf520bc14d | 14 | nodeCount = 0; |
ollie8 | 7:5bbf520bc14d | 15 | nodes = new MenuNode*[size]; |
ollie8 | 0:3f4d33765f10 | 16 | } |
ollie8 | 0:3f4d33765f10 | 17 | |
ollie8 | 7:5bbf520bc14d | 18 | void Menu::addMenuNode(MenuNode & node) { |
ollie8 | 7:5bbf520bc14d | 19 | nodes[nodeCount] = &node; |
ollie8 | 7:5bbf520bc14d | 20 | nodeCount++; |
ollie8 | 0:3f4d33765f10 | 21 | } |
ollie8 | 0:3f4d33765f10 | 22 | |
ollie8 | 0:3f4d33765f10 | 23 | void Menu::enter() { |
ollie8 | 0:3f4d33765f10 | 24 | entered(this); |
ollie8 | 7:5bbf520bc14d | 25 | if (nodeCount > 0) { |
ollie8 | 7:5bbf520bc14d | 26 | nodes[0]->select(); |
ollie8 | 3:ece3d3346330 | 27 | } |
ollie8 | 0:3f4d33765f10 | 28 | } |
ollie8 | 0:3f4d33765f10 | 29 | |
ollie8 | 0:3f4d33765f10 | 30 | void Menu::up() { |
ollie8 | 7:5bbf520bc14d | 31 | if (selectedNode > 0) { |
ollie8 | 7:5bbf520bc14d | 32 | (*(nodes[selectedNode])).selected = false; |
ollie8 | 7:5bbf520bc14d | 33 | (*(nodes[--selectedNode])).select(); |
ollie8 | 0:3f4d33765f10 | 34 | } |
ollie8 | 0:3f4d33765f10 | 35 | } |
ollie8 | 0:3f4d33765f10 | 36 | |
ollie8 | 0:3f4d33765f10 | 37 | void Menu::down() { |
ollie8 | 7:5bbf520bc14d | 38 | if (selectedNode < nodeCount-1) { |
ollie8 | 7:5bbf520bc14d | 39 | (*(nodes[selectedNode])).selected = false; |
ollie8 | 7:5bbf520bc14d | 40 | (*(nodes[++selectedNode])).select(); |
ollie8 | 0:3f4d33765f10 | 41 | } |
ollie8 | 0:3f4d33765f10 | 42 | } |
ollie8 | 0:3f4d33765f10 | 43 | |
ollie8 | 0:3f4d33765f10 | 44 | int Menu::size() { |
ollie8 | 7:5bbf520bc14d | 45 | return sizeof(nodes); |
ollie8 | 0:3f4d33765f10 | 46 | } |
ollie8 | 0:3f4d33765f10 | 47 | |
ollie8 | 7:5bbf520bc14d | 48 | MenuNode & Menu::getSelectedNode() { |
ollie8 | 7:5bbf520bc14d | 49 | return *(nodes[selectedNode]); |
ollie8 | 0:3f4d33765f10 | 50 | } |
ollie8 | 0:3f4d33765f10 | 51 | |
ollie8 | 7:5bbf520bc14d | 52 | MenuNode::MenuNode(EnterMenuNode enterAction, SelectionChange selectionChangeAct, char* newname) { |
ollie8 | 0:3f4d33765f10 | 53 | name = new char[12]; |
ollie8 | 0:3f4d33765f10 | 54 | strcpy(name, newname); |
ollie8 | 0:3f4d33765f10 | 55 | entered = enterAction; |
ollie8 | 0:3f4d33765f10 | 56 | selection = selectionChangeAct; |
ollie8 | 0:3f4d33765f10 | 57 | selected = false; |
ollie8 | 0:3f4d33765f10 | 58 | row = 0; |
ollie8 | 0:3f4d33765f10 | 59 | } |
ollie8 | 0:3f4d33765f10 | 60 | |
ollie8 | 7:5bbf520bc14d | 61 | MenuNode::MenuNode() { |
ollie8 | 0:3f4d33765f10 | 62 | selected = false; |
ollie8 | 0:3f4d33765f10 | 63 | row = 0; |
ollie8 | 0:3f4d33765f10 | 64 | } |
ollie8 | 0:3f4d33765f10 | 65 | |
ollie8 | 7:5bbf520bc14d | 66 | void MenuNode::enter() { |
ollie8 | 0:3f4d33765f10 | 67 | entered(this); |
ollie8 | 0:3f4d33765f10 | 68 | } |
ollie8 | 0:3f4d33765f10 | 69 | |
ollie8 | 7:5bbf520bc14d | 70 | char* MenuNode::getName() { |
ollie8 | 0:3f4d33765f10 | 71 | return name; |
ollie8 | 0:3f4d33765f10 | 72 | } |
ollie8 | 0:3f4d33765f10 | 73 | |
ollie8 | 7:5bbf520bc14d | 74 | void MenuNode::select() { |
ollie8 | 0:3f4d33765f10 | 75 | selected = true; |
ollie8 | 0:3f4d33765f10 | 76 | selection(this); |
ollie8 | 0:3f4d33765f10 | 77 | } |
ollie8 | 7:5bbf520bc14d | 78 | /* |
ollie8 | 7:5bbf520bc14d | 79 | void MenuNode::deSelect() { |
ollie8 | 0:3f4d33765f10 | 80 | selected = false; |
ollie8 | 0:3f4d33765f10 | 81 | } |
ollie8 | 7:5bbf520bc14d | 82 | */ |
ollie8 | 7:5bbf520bc14d | 83 | bool MenuNode::isSelected() { |
ollie8 | 0:3f4d33765f10 | 84 | return selected; |
ollie8 | 0:3f4d33765f10 | 85 | } |