Library for creating menu systems in displays.

Dependents:   VS1053Player

Committer:
ollie8
Date:
Sun Jul 20 12:41:33 2014 +0000
Revision:
10:af54763d3d21
Parent:
9:7828182dbc9f
Updated docs

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 9:7828182dbc9f 18 Menu::~Menu() {
ollie8 9:7828182dbc9f 19 for (int i=0; i < sizeof(nodes); i++) {
ollie8 9:7828182dbc9f 20 delete nodes[i];
ollie8 9:7828182dbc9f 21 }
ollie8 9:7828182dbc9f 22 delete nodes;
ollie8 9:7828182dbc9f 23 }
ollie8 9:7828182dbc9f 24
ollie8 7:5bbf520bc14d 25 void Menu::addMenuNode(MenuNode & node) {
ollie8 7:5bbf520bc14d 26 nodes[nodeCount] = &node;
ollie8 7:5bbf520bc14d 27 nodeCount++;
ollie8 0:3f4d33765f10 28 }
ollie8 0:3f4d33765f10 29
ollie8 0:3f4d33765f10 30 void Menu::enter() {
ollie8 0:3f4d33765f10 31 entered(this);
ollie8 7:5bbf520bc14d 32 if (nodeCount > 0) {
ollie8 7:5bbf520bc14d 33 nodes[0]->select();
ollie8 3:ece3d3346330 34 }
ollie8 0:3f4d33765f10 35 }
ollie8 0:3f4d33765f10 36
ollie8 0:3f4d33765f10 37 void Menu::up() {
ollie8 7:5bbf520bc14d 38 if (selectedNode > 0) {
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 void Menu::down() {
ollie8 7:5bbf520bc14d 45 if (selectedNode < nodeCount-1) {
ollie8 7:5bbf520bc14d 46 (*(nodes[selectedNode])).selected = false;
ollie8 7:5bbf520bc14d 47 (*(nodes[++selectedNode])).select();
ollie8 0:3f4d33765f10 48 }
ollie8 0:3f4d33765f10 49 }
ollie8 0:3f4d33765f10 50
ollie8 0:3f4d33765f10 51 int Menu::size() {
ollie8 7:5bbf520bc14d 52 return sizeof(nodes);
ollie8 0:3f4d33765f10 53 }
ollie8 0:3f4d33765f10 54
ollie8 7:5bbf520bc14d 55 MenuNode & Menu::getSelectedNode() {
ollie8 7:5bbf520bc14d 56 return *(nodes[selectedNode]);
ollie8 0:3f4d33765f10 57 }
ollie8 0:3f4d33765f10 58
ollie8 7:5bbf520bc14d 59 MenuNode::MenuNode(EnterMenuNode enterAction, SelectionChange selectionChangeAct, char* newname) {
ollie8 0:3f4d33765f10 60 name = new char[12];
ollie8 0:3f4d33765f10 61 strcpy(name, newname);
ollie8 0:3f4d33765f10 62 entered = enterAction;
ollie8 0:3f4d33765f10 63 selection = selectionChangeAct;
ollie8 0:3f4d33765f10 64 selected = false;
ollie8 0:3f4d33765f10 65 row = 0;
ollie8 0:3f4d33765f10 66 }
ollie8 0:3f4d33765f10 67
ollie8 7:5bbf520bc14d 68 MenuNode::MenuNode() {
ollie8 0:3f4d33765f10 69 selected = false;
ollie8 0:3f4d33765f10 70 row = 0;
ollie8 0:3f4d33765f10 71 }
ollie8 0:3f4d33765f10 72
ollie8 7:5bbf520bc14d 73 void MenuNode::enter() {
ollie8 0:3f4d33765f10 74 entered(this);
ollie8 0:3f4d33765f10 75 }
ollie8 0:3f4d33765f10 76
ollie8 7:5bbf520bc14d 77 char* MenuNode::getName() {
ollie8 0:3f4d33765f10 78 return name;
ollie8 0:3f4d33765f10 79 }
ollie8 0:3f4d33765f10 80
ollie8 7:5bbf520bc14d 81 void MenuNode::select() {
ollie8 0:3f4d33765f10 82 selected = true;
ollie8 0:3f4d33765f10 83 selection(this);
ollie8 0:3f4d33765f10 84 }
ollie8 9:7828182dbc9f 85
ollie8 7:5bbf520bc14d 86 bool MenuNode::isSelected() {
ollie8 0:3f4d33765f10 87 return selected;
ollie8 0:3f4d33765f10 88 }