Dynamic card creation navigation menu
This lesson demonstrates how to dynamically update a navigation menu as cards are created.
The menuPick message
The menuPick message is sent when the user chooses a menu item from the menu. Remember that in LiveCode, menus are usually implemented as buttons: the button's style and menuMode properties control how it is displayed, and the button's text property is used as the list of menu items. When the user chooses an item from the menu, the menuPick message is sent to the button, triggering this handler.
Setting up the menu
The menu is initially set up to contain menu items for going to the previous or next cards, and for creating a new card, with appropriate separators. Once you have set up the menu, creating a card automatically adds the new card's name to the menu. In this example, the initial text of the menu button, which you can enter in the button's properties pane, looks like this:
As new cards are created, the list of students will be placed at the end of the menu, after the last "(-" separator line.
The menuPick handler
The menuPick handler does different things depending on the menu item. If the user chooses "Previous Student" or "Next Student", the handler simply goes to the previous or next card.
If the user chooses "New Student", the handler requests the student's name, then creates a card with that name, and adds the new card's name to the end of the menu (after the separator line). When a user chooses one of the card names, the handler goes to that card.
The default keyword is useful here because we don't know the wording of all the menu items when writing the handler. Using a switch statement, we can set up a case for each of the menu items we know about, "Previous Student", "Next Student", and "New Student", and write a default case to handle all other possibilities in a generic way.
The menuPick handler code
on menuPick pItem
case "Previous Student"
go previous card
case "Next Student"
go next card
case "New Student"
## create a new card and put its name in the menu:
ask "Please enter the student's name:"
if it is empty then
go last card ## so the new student is placed at the end
create card it ## card's name is student name entered above
put return & it after me ## add name to bottom of menu
## if none of the previous cases apply, it's a card:
if there is a card pItem then
go card pItem