380 likes | 585 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 • Less spelling errors!
>>doc listdlg() <enter> This function returns 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-value be after this executes? • {'Primary Booster','Secondary Boosters'} • [1 3] • {1, 3} • None of the above
[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? • 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 string: { } 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 software that estimates the time an aircraft takes to travel a certain distance. Aircrafts possible, with their average speeds are: • Cessna 150, 198 kmph • Boeing 787, 950 kmph • Concorde, 2147 kmph • Cessna 421, 444 kmph
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: once a software starts with dialog boxes, it should end 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 software 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 a software has improved since your first knowledge of week2, and yet not too many lines of code were required. • Hopefully, you're pausing and coding this in parallel. • Use them 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? Files!
Wrapping Up • Dialog boxes are user friendly but time taking • Dialog boxes should not be used when the software is not meant to be sold. Lots of clicking vs. entering data in the command window. Choose carefully. • We saw: • inputdlg() • listdlg() • msgbox() • questdlg() • menu() • NEVER learn the syntax by heart. Practice it enough, then use the doc to remind yourself quickly!