Libraries \ MenuItem

Reference for Wiring version 1.0 Build 0100+ If you have a previous version, use the reference included with your software. If see any errors or have any comments, let us know.

Name

MenuItem

Examples
#include <MenuBackend.h>

//this controls the menu backend and the event generation

MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
//beneath is list of menu items needed to build the menu

MenuItem settings   = MenuItem(menu, "Settings", 1);
MenuItem pin      = MenuItem(menu, "Pin", 2);
MenuItem debug    = MenuItem(menu, "Debug", 2);
MenuItem options    = MenuItem(menu, "Options", 1);
MenuItem setDelay = MenuItem(menu, "Delay",'D', 2);
MenuItem d100   = MenuItem(menu, "100 ms", 3);
MenuItem d200   = MenuItem(menu, "200 ms", 3);
MenuItem d300   = MenuItem(menu, "300 ms", 3);
MenuItem d400   = MenuItem(menu, "400 ms", 3);

//this function builds the menu and connects the correct items together

void menuSetup()
{
  Serial.println("Setting up menu...");
  //add the file menu to the menu root

  menu.getRoot().add(settings); 
  //setup the settings menu item

  settings.addAfter(options); 
  options.addAfter(settings); 

  settings.addLeft(settings); //loop back if left on settings

  settings.addRight(pin);     //chain settings to  pin on right

  debug.addLeft(settings);  //also go to settings left for debug

  //we want looping both up and down

  pin.addBefore(debug);
  pin.addAfter(debug);
  debug.addBefore(pin);
  debug.addAfter(pin);

  options.addLeft(options);   //loop back if left on settings

  options.addRight(setDelay); //chain options to delay on right

  setDelay.addRight(d100);
  d100.addBefore(d100);   //loop to d400 

  d100.addAfter(d200);
  d200.addAfter(d300);
  d300.addAfter(d400);
  d400.addAfter(d100);    //loop back to d100

  //we want left to always be bak to delay

  d100.addLeft(setDelay);
  d200.addLeft(setDelay);
  d300.addLeft(setDelay);
  d400.addLeft(setDelay);
}

/*
  This is an important function
 Here all use events are handled
 
 This is where you define a behaviour for a menu item
 */
void menuUseEvent(MenuUseEvent used)
{
  Serial.print("Menu use ");
  Serial.println(used.item.getName());

  if (used.item.isEqual(setDelay)) //comparison agains a known item

  {
    Serial.println("menuUseEvent found Delay (D)");
  }
}

/*
  This is an important function
 Here we get a notification whenever the user changes the menu
 That is, when the menu is navigated
 */
void menuChangeEvent(MenuChangeEvent changed)
{
  Serial.print("Menu change ");
  Serial.print(changed.from.getName());
  Serial.print(" ");
  Serial.println(changed.to.getName());
}

void setup()
{
  Serial.begin(9600);

  menuSetup();
  Serial.println("Starting navigation:rnUp:w Down:s Left:a Right:d Use: e");

  //fire Delay : menu.use('D');

  //bail back to Options by moving up one logical level 

  //after a D : menu.moveRelativeLevels(-1);

}

void loop()
{
  if (Serial.available()) 
  {
    byte read = Serial.read();
    switch (read) 
    {
    case 'w': 
      menu.moveUp(); 
      break;
    case 's': 
      menu.moveDown(); 
      break;
    case 'd': 
      menu.moveRight(); 
      break;
    case 'a': 
      menu.moveLeft(); 
      break;
    case 'e': 
      menu.use(); 
      break;
    }
  }
}
Description There are to ways to work with menuItem. the basic item with a name and an optional mnemonic or a complex item that will use item change events.
Syntax
MenuItem(itemName, shortKey)
MenuItem(mb, itemName, lvl, shortKey)
Methods
registerBackend()
getValue()
setValue()
increment()
decrement()
setLevel()
getLevel()
hasShortkey()
hasChildren()
setBack()
getShortkey()
getName()
getBack()
getBefore()
getRight()
getAfter()
getLeft()
add()
addBefore()
addRight()
addAfter()
addLeft()
isEqual()
Parameters
itemName The name of the item.
shortKey The mnemonic 'shortkey'.
mb The menu backend that controls this item.
lvl The level of this item in the hierachy.
Returns None
Usage Application
Updated on July 07, 2011 11:10:51pm PDT

Creative Commons License