Library for creating menu systems in displays.

Dependents:   VS1053Player

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Menu.cpp Source File

Menu.cpp

00001 /*
00002  * Menu.cpp
00003  *
00004  *  Created on: 30 Oct 2011
00005  *      Author: ollie
00006  */
00007 #include "Menu.h"
00008 
00009 Menu::Menu(EnterMenu enterAction, SelectionChange selectionChangeAct, char* newName, int size) : MenuNode() {
00010     entered = enterAction;
00011     name = newName;
00012     selection = selectionChangeAct;
00013     selectedNode = 0;
00014     nodeCount = 0;
00015     nodes = new MenuNode*[size];
00016 }
00017 
00018 Menu::~Menu() {
00019     for (int i=0; i < sizeof(nodes); i++) {
00020         delete nodes[i];
00021     }
00022     delete nodes;
00023 }
00024 
00025 void Menu::addMenuNode(MenuNode & node) {
00026     nodes[nodeCount] = &node;
00027     nodeCount++;
00028 }
00029 
00030 void Menu::enter() {
00031     entered(this);
00032     if (nodeCount > 0) {
00033         nodes[0]->select();
00034     }
00035 }
00036 
00037 void Menu::up() {
00038     if (selectedNode > 0) {
00039         (*(nodes[selectedNode])).selected = false;
00040         (*(nodes[--selectedNode])).select();
00041     }
00042 }
00043 
00044 void Menu::down() {
00045     if (selectedNode < nodeCount-1) {
00046         (*(nodes[selectedNode])).selected = false;
00047         (*(nodes[++selectedNode])).select();
00048     }
00049 }
00050 
00051 int Menu::size() {
00052     return sizeof(nodes);
00053 }
00054 
00055 MenuNode & Menu::getSelectedNode() {
00056     return *(nodes[selectedNode]);
00057 }
00058 
00059 MenuNode::MenuNode(EnterMenuNode enterAction, SelectionChange selectionChangeAct, char* newname) {
00060     name = new char[12];
00061     strcpy(name, newname);
00062     entered = enterAction;
00063     selection = selectionChangeAct;
00064     selected = false;
00065     row = 0;
00066 }
00067 
00068 MenuNode::MenuNode() {
00069     selected = false;
00070     row = 0;
00071 }
00072 
00073 void MenuNode::enter() {
00074     entered(this);
00075 }
00076 
00077 char* MenuNode::getName() {
00078     return name;
00079 }
00080 
00081 void MenuNode::select() {
00082     selected = true;
00083     selection(this);
00084 }
00085 
00086 bool MenuNode::isSelected() {
00087     return selected;
00088 }