Using Option Menus
This tutorial describes how to use the option menu for selecting an item from a list of items.
You can download the stack from this lesson here: https://tinyurl.com/ybfomado
The option menu is a configurable list of a fixed number of items from which you can select an item. For example, you may want to use this kind of menu when selecting the title someone has, or the color of paint when you are buying a new car. In this tutorial we cover how to set up an option menu and return the value someone selected.
Creating the Option Menu Control
Open LiveCode and select New Stack from the File menu. This creates a new stack window on which to create the option menu. Drag and drop an option menu control onto the LiveCode card (1). By default, this control has three values from which you can select an item. Open the Property Inspector by right clicking the option menu and selecting Property Inspector (2). In the Basic Properties view, you can change the name of the Label to a default value that is displayed when the option menu is first displayed. You can also change the Menu Items (3) to the values that should be selectable from the list of items.
In this example we are setting the Label to "cat", and the Menu Items to "cat", "dog", "mouse", "elephant", "whale" and "crocodile".
Adding the Option Menu Code
Once you have specified the options that are to be displayed in the option menu, you can add the code that processes the selection. Right click on the option menu you created and select Edit Script (1). This opens the script editor. Select the "menuPick" handler from the drop down list or the list on the left. The code provides you with a handler that is called when someone makes a selection, and a framework that allows you to process the selected item. The switch statement provides you with the means to identify what item was selected from the options menu.
Processing the Selection
In order to process the selections from the list, it is necessary to expand the case statement in the default code. In this example the case statement creates short dialog boxes with information about each animal that is selected. Individual case statements are ended with break statements.
on menuPick pItemName switch pItemName case "cat" answer "A cat is larger than a mouse." with "Okay" break case "dog" answer "A dog is man's best friend." with "Okay" break case "mouse" answer "A mouse does not only eat cheese." with "Okay" break case "elephant" answer "An elephant has a good memory." with "Okay" break case "whale" answer "A whale is not a fish." with "Okay" break case "crocodile" answer "A crocodile is reptile." with "Okay" break end switch end menuPick
Also notice the way the items are displayed (1). Only five of the possible selections are displayed on the screen. This is because Display in the Property Inspector is set to 5. Try changing this value and see if you can make the scroll bar disappear.
Cannot get " whale" to answer!
Have enough options available.
Checked spelling , grammar and layout -stumped any ideas?
Is it only "whale" that will not answer? Have you checked that you have the break statements in each case?
You could also try stepping through the script using the debugger to see what values you have and which case is being matched.
I hope that helps.
How would I set up an option menu to go to a certain card that
is related to a certain option in the menu? For example, if the user chooses the option "Chest" ( for muscle group in fitness app) and I want the user to be taken to a "Chest" card that lists Chest exercises when they hit the Next button OR a "Triceps" card that lists Triceps exercises when they choose that option out of the list and hit the Next button.
here are the steps to set up this kind of process.
1. Create a card that contains an "Option Menu" and a "Button"
2. Open the "Property Inspector" for the "Option Menu" and call it "ComboBox"
3. Create the "Menu Items" in the "Option Menu" and name them something like: "chest", "arms", "hips", "legs" …
4. Edit the script of the button and add the following code:
go to card the selection of button "ComboBox"
4. Create a number of cards.
5. Use the "Application Browser" to set the name of each card to the names you created for the "Menu Items" of the "ComboBox": "chest", "arms", "hips", "legs" …
6. Test the application
A sample stack "chest.livecode" is attached to this lesson.
Brilliant! going through all these lessons and loving LiveCode more and more!
Thanks for the tutorial!
Couple of things not mentioned here.
1. The "choice" is recorded in the button label so you could just read that to get the result: "If the label of btn "Option Menu" is "Go" then... or "put the label of btn "Option Menu" into fld (or custom property) "xxx". In other words, depending on what you want to do you don't necessarily need to use a case statement.
2. You can dynamically set the default value of the option menu by setting the value of the label.
i cannot seem to get more than the three choices up on the option menu ,can only do cat, dog ,mouse, how do i expand the choices please ..newbie, thanks.
I am not quite sure at what stage you are having the problem. Either inserting the option values in the Property Inspector or actually only seeing three of the options appear when you are trying to select them from the Option Menu.
If you are having trouble inserting more than three items into the Menu Items field of the Property Inspector, then note that each entry is separated by return and not by comma. You can add a new entry by pressing return after the last entry in the Menu Item field of the Property Inspector.
If you are having trouble displaying more than three items when you try to select an item from the Option Menu, then you can try to increase the number of items to display in the Property Inspector. Under the Menu Items field you can find a Display Items entry that has a number associated with it. Increase that value and you should see more entries.
Do option menus work in Android? My code is running fine, but the option menu does not work in Android
mobile and desktop operate slightly differently and some features that you would expect on the desktop are not not available in a mobile form and vice versa. This is the case for the "Option Menu".
You can use the mobile equivalents, such as "mobilePick" and the "Pulldown Menu".
I want to use a script to load a "Title" option menu from a CSV file. If the CSV file changes the number of items in the option menu will change. I have been able to do this in Visual Basic, but am switching to LiveCode.
Any help? Thank you.
you can do that in LiveCode too.
Load the file into memory. Have a look at this lesson for some info on loading text files: http://lessons.runrev.com/s/lessons/m/4071/l/9600
Then you may want to use a loop that goes through the data in memory and extracts the information you want to appear in the options of the option menu.
Some relevant items to look up in the dictionary may be: repeat, itemDelimiter, item, word.
You would then populate the content of the option menu as follows:
set the text of button "Button Name" to "item 1" & return & "item 2" ....
Hope this helps.
I have a slightly different issue. I'm using an SQLite database to populate the option list. I have a text string I'd like to show the user and an associated ID number that refers to the db record. What I'd like to do is easily map the option choice to the ID number. I don't want to show the ID number - i.e. I could have the menu text include the number - but that's not the goal. I've solved this in the past with a hidden field that contains the ID numbers in the order in which they're presented, then have to do an itemoffset search for the line number, but what a pain. Is there a more direct mechanism?
-- Thanks, David
well there is no direct way to store hidden information with an item in the option menu. So what you describe certainly is a valid approach. A look up of kind is necessary.
You could create a lookup array or list of items that is stored in the custom properties of an option menu.
This allows you to wrap the lookup information into the option menu control, without needing other controls outside of the option menu.
I would then also suggest to add some code to the option menu script, hiding the lookup functionality through simple commands/functions that you can call from your main code.
New to LC but looks like a better way to build apps rather than struggling with xcode.
I have a mysql database and am connected to it. I am able to insert data into it.
I have two buttons that the user will selection year and sex results. When I add the record to it, all of the possible selections are added to the database. For example the choices include: male, female and coed. I select male however all of the items are inputted.
Below is the code I am using. Any help is appreciated.
-- check the global connection ID to make sure we have a database connection
if gConnectionID is not a number then
answer error "Please connect to the database first."
exit to top
-- edit these variables to match your database & table -- this assumes a table called Table1 with 3 fields
put "Teams" into tTableName
put "TeamName, City, Year, Sex" into tFields
put field "TeamName" into tTeamName
put field "City" into tCity
put button "Year" into tYear
put button "Sex" into tSex
-- this is nonsensical but gives some variation to the data
-- construct the SQL - the :1, :2 & :3 placeholders in the SQL will be filled by variables in the revExecuteSQL line
put "INSERT INTO " & tTableName & " (" & tFields & ") VALUES (:1, :2, :3, :4)" into tSQL
-- send the SQL to the database, filling in the placeholders with data from variables
revExecuteSQL gConnectionID, tSQL, "tTeamName", "tCity", "tYear", "tSex"
-- check the result and display the data or an error message
if the result is a number then
answer info "New record added."
answer error "There was a problem adding the record to the database:" & cr & the result
try the following:
put the selection of button "Year" into tYear
I really wanna to use the label which is selected from option menu. And put the label into the SQL.
The name of my option menu is "TYPE".
put "Table1" into tTableName
put "typeName, styleName, levelName"
--Here I open a new card with a field named "f1"--
put the label of button "TYPE" into field "f1"
put field "f1" into ttypeName
Those two commands don't work.
Is there any idea that can help to store in a easy way?
- Thanks, Tracy
I'm using an option menu for the user to select between three operational speeds. Based on their selection, a tolerance needs to be calculated. This is the option button structure:
case "900 rpm"
put "5" into var900offset
case "1800 rpm"
put "4" into var1800offset
I have a button on the same page, when pressed/released performs a movement calculation and also needs to determine if the calculated numbers are in tolerance. So, I'm looking for the syntax for the calculate button to put the variable into my formula when the user selects from the option menu.
It's giving me fits, but this is also the first app I'm working on and have never coded anything before.
Thanks for any assistance!
If you are referring to a control that is not on the current card you just need to tell LiveCode where to find that control. So, I think, the option menu is on one card (Card 1) and the field is on another, in that case you need to say
put the label of button "TYPE" of card 1 into field "f1"
put field "f1" into tTypeName
this is assuming you are on the card that has field "f1" on it.
I hope that helps.
When you create a variable in LiveCode it is a local variable, that means it can only be accessed within the script it is created in. In your example you are setting up the variables in the option menu and then trying to use them in the button script, where they are not available.
You can get around this using global variables, script local variable or custom properties, whichever option seems simplest to you.
Have a look at chapters 5.5: Variables and 7.8: Custom Properties in the User Guide, which can be found in the Help menu.
You might also find these lessons useful
I hope that helps.
I may have completely missed this, but what is the 'menu panel stack' option? Can't see to find a reference to this anywhere...
Do you mean using the popup or pulldown command to display a stack as a menu? You can find out more about these command in the Dictionary entries.
If that is not what you meant please let us know.
I want that when I press a name in the menu. that I then go to another page
In the menuPick handler you can use the go command to do
go to card
I hope that helps.
What is the code that i can use for it.
You probably need something like
on menuPick pItemName
go to card pItemName