410 likes | 575 Views
Dialog Boxes Applications of Cell-Arrays. Reminder of Symbols Dialog Boxes listdlg () msgbox () questdlg () menu(). 1. Reminders on Symbols. Creating/hard-coding: Braces { } Referencing to content: Braces { } Augmenting: Brackets [ ] Referencing to container: Parentheses ().
E N D
Dialog BoxesApplications of Cell-Arrays Reminder of Symbols Dialog Boxes listdlg() msgbox() questdlg() menu()
1. Reminders on Symbols • Creating/hard-coding: Braces { } • Referencing to content: Braces { } • Augmenting: Brackets [ ] • Referencing to container: Parentheses () Most likely to be used!
2. Dialog Boxes • Dialog boxes are “popup windows” that allows us another means to communicate with the user. • Some dialog boxes to collect input: inputdlg(), listdlg(), menu(), questdlg() • And some to produce output: msgbox(), warndlg() 99% of the time, the command deals with cell arrays, either as arguments, as return values, or both! 4
3. listdlg() • listdlg() – Create and open list-selection dialog box • Major Advantage: User does not have to type anything • Fewer spelling errors!
>>doc listdlg() <enter> This function gives 2 return values
[Selection,ok] = listdlg('ListString',S) Selection is a vector of indices of the selected strings (in single selection mode, its length is 1).Selection is [] when ok is 0. ok is 1 if you click the OK button, or 0 if you click the Cancel button or close the dialog box. Double-clicking on an item or pressing Return when multiple items are selected has the same effect as clicking the OK button. The dialog box has a Select all button (when in multiple selection mode) that enables you to select all list items.
listdlg()return values • What will the first return valuebe after this executes? • {'Primary Booster','Secondary Boosters'} • [1 3] • {1, 3} • None of these
listdlg() return-values • What will the first return valuebe after this executes? • ['Primary Booster','Secondary Boosters'] • [1 3] • {1, 3} • None of the above Remember: you choose the name of variables used to collect the return values.
[Selection,ok] = listdlg('ListString',S) Selection is a vector of indices of the selected strings (in single selection mode, its length is 1).Selection is [] when ok is 0. ok is 1 if you click the OK button, or 0 if you click the Cancel button or close the dialog box. Double-clicking on an item or pressing Return when multiple items are selected has the same effect as clicking the OK button. The dialog box has a Select all button (when in multiple selection mode) that enables you to select all list items.
[Selection,ok] = listdlg('ListString',S) Selection is a vector of indices of the selected strings (in single selection mode, its length is 1).Selection is [] when ok is 0. ok is 1 if you click the OK button, or 0 if you click the Cancel button or close the dialog box. Double-clicking on an item or pressing Return when multiple items are selected has the same effect as clicking the OK button. The dialog box has a Select all button (when in multiple selection mode) that enables you to select all list items. • If user hits cancel or closes the dialog box, an empty vector is returned, AND ok is set equal to 0. • This means the second return value can be used to see what the user did!
What did user do? • Did user hit ok? • Did user hit cancel? • Either way: • Had s/he selected anything anyway?
What did user do? • Did user hit ok? • Did user hit cancel? • Either way: • Had s/he selected anything anyway? • If user did click ok, then ok will be true, which equals 1. • If user didnot click ok, then ok will be false, which equals 0.
[Selection,ok] = listdlg('ListString',S) Inputs are in parameter/value pairs (i.e. they go 2 by 2): Parameter goes 1st, value of the parameter goes 2nd. The actual string:
Experiment in the command window! myList is a CELL ARRAY of strings: { } Why cell arrays? The length of each selection varies widely, and an regular array would not be rectangular.
Experiment in the command window! • What button did the user hit? • The 'ok' button • The 'cancel' button • The [x] that closes the window • Either b or c • None of the above
A second parameter Though additional arguments are not necessary, you may choose to add them AS A PAIR. For example:
2nd PAIR of inputs. The Select All button is gone.
2nd PAIR of inputs. • What did the user select? • It cannot be determined • __________________________
3.a. Full Example • Create a program that estimates the time an aircraft takes to travel a certain distance. Aircrafts possible, with their average speeds are: • Cessna 150, 198 kph • Boeing 787, 950 kph • Concorde, 2147 kph • Cessna 421, 444 kph
Algorithm %prompt user for type of airplane (error?) %prompt user for distance to travel (error?) %calculate/display • Presented is the evolution from: • Option1: use input() and if. (week 2,3.4) • Option2: use input() and vectors. (week 10) • Option3: using listdlg(), vectors and cell-arrays.
#1. input(), if and while %prompt user for type of airplane type = input('Enter the type of airplane: \n1 – cessna 150\n 2-Boeing 787\n3-Concorde\n4-Cessna 421\n Enter now: '); %prompt user for distance to travel distance = input('Enter the distance (km): '); %calculate/display if type == 1 %cessna 150 travelTime = distance/198; fprintf('With this plane, it will take %.2fhrs.\n', travelTime); elseif…. Add while loops to trap errors.
#2. input(), vectors, while %prompt user for type of airplane type = input('Enter the type of airplane: \n1 – cessna 150\n 2-Boeing 787\n3-Concorde\n4-Cessna 421\n Enter now: '); %prompt user for distance to travel distance = input('Enter the distance (km): '); %data base of speeds speeds = [198, 950, 2147, 444]; %calculate/display travelTime = distance/speeds(type); fprintf('With this plane, it will take %.2fhrs.\n', travelTime); Add while loops to trap errors. Reference the correct value in the vector, using the index.
#3. listdlg(), arrays, while %prompt user for type of airplane myPlanes = {'Cessna 150', 'Boeing 787', 'Concorde', 'Cessna 421'}; type = listdlg('ListString', myPlanes,'selectionmode', 'single'); %prompt user for distance to travel distance = inputdlg('Enter the distance (km): '); %data base of speeds speeds = [198, 950, 2147, 444]; %calculate/display travelTime = distance/speeds(type); fprintf('With this plane, it will take %.2fhrs.\n', travelTime); Add while loop to trap errors, and convert to number Reference the correct value in the vector, using the index.
#3. Output • Note: For usability, once a programstarts with dialog boxes, it should continue with dialog boxes… >> not in the command window..
4. msgbox() • A little improvement: %calculate/display travelTime = distance/speeds(type); resultString = sprintf('With this plane, it will take %.2fhrs.\n', travelTime); msgbox(resultString)
4. msgbox() • A little improvement: %calculate/display travelTime = distance/speeds(type); resultString = sprintf('With a %s, it will take %.2fhrs.\n', ??????, travelTime); msgbox(resultString) Task: Replace "this plane" by the actual name!
4. msgbox() %prompt user for type of airplane myPlanes = {'Cessna 150', 'Boeing 787', 'Concorde', 'Cessna 421'}; type = listdlg('ListString', myPlanes,'selectionmode', 'single'); • Remember: this is the index (i.e. location) of the string selected. • This is the cell array of all the names. • To reference the name selected using the index selected: planeSelected = myPlanes{type}; REFERENCE the CONTENT, using curly braces.
4. msgbox() • A little improvement: %calculate/display travelTime = distance/speeds(type); resultString = sprintf('With a %s, it will take %.2fhrs.\n', myPlanes{type}, travelTime); msgbox(resultString)
Make the program error proof! %prompt user for type of airplane myPlanes = {'Cessna 150', 'Boeing 787', 'Concorde', 'Cessna 421'}; [type ok] = listdlg('ListString', myPlanes,'selectionmode', 'single'); %if user hits ok, continue if ok==1 %prompt user for distance to travel distance = inputdlg('Enter the distance (km): '); %code as before else %user hit cancel of closed box.. %do other stuff end
Done with that example. • Note how much our programs have improved since week 2, and yet not too many lines of code were required. • Hopefully, you're pausing and coding this at home. • Use the tools in the final project if you want. Make sure to error-proof accordingly.
5. questdlg() • Typical call: button = questdlg('qstring','title','str1','str2', 'str3','default') • qstring = Question to ask the user • title = Title for dialog box • str1 = String to show on Button #1 • str2 = String to show on Button #2 • str3 = String to show on Button #3 • default = String that is the default button • button = string on the button that was clicked Caution: Maximum of 3 buttons.
5. Quick experiment • button = string on the button that was clicked
6. menu() – vertical menu • Typical call: button = menu('qstring','bt1','bt2',……,'btn') • qstring= question to ask user • bt1 = String to show on Button #1 • bt2 = String to show on Button #2 • Can have as many options as desired. • There is no default answer. • Return value: Button number clicked (not the string)
What's next??? • Yes, we are done with cell arrays and dialog boxes.. So what's next?
Wrapping Up • Dialog boxes are user friendly but require a little more coding • If you’re writing a “quick and dirty” program, dialogs may be overkill – consider the command window instead. • We saw: • inputdlg() • listdlg() • msgbox() • questdlg() • menu() • It’s difficult to memorize syntax. Practice it and use MATLAB Helpto remind yourself quickly!