Library for creating menu systems in displays.

Dependents:   VS1053Player

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?

UserRevisionLine numberNew 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 }