Creating Graphical User Interfaces | ![]() ![]() |
The list box callback handles only one case: a double click on an item. Double clicking is the standard way to open a file from a list box. If the selected item is a file, it is passed to the open
command; if it is a directory, the GUI changes to that directory and lists the contents.
The callback makes use of the fact that the open
command can handle a number of different file types. However, the callback treats FIG-files differently. Instead of opening the FIG-file, it passes it to the guide
command for editing. An error dialog captures any errors that occur when opening a file, instead of displaying them on the command line.
Determining Which Item the User Selected
Since a single click on an item also invokes the list box callback, it is necessary to query the figure SelectionType
property to determine when the user has performed a double click. A double click on an item sets the SelectionType
property to open
.
All the items in the list box are referenced by an index from 1
to n
, where 1
refers to the first item and n
is the index of the n
th item. MATLAB saves this index in the list box Value
property.
The callback uses this index to get the name of the selected item from the list of items contained in the String
property.
Determining if the Selected Item is a File or Directory
The load_listbox
function uses the dir
command to obtain a list of values that indicate whether an item is a file or directory. These values (1 for directory, 0 for file) are saved in the handles
structure. The list box callback queries these values to determine if current selection is a file or directory.
cd
) and call load_listbox
again to populate the list box with the contents of the new directory. fileparts
) to determine if it is a FIG-file, which is opened with guide
. All other file types are passed to open
. The open
statement is called within a try
/catch
block to enable errors to be returned in an error dialog (errordlg
), instead of at the command line.
function varargout = listbox1_Callback(h,eventdata,handles,varargin) if strcmp(get(handles.figure1,'SelectionType'),'open') index_selected = get(handles.listbox1,'Value'); file_list = get(handles.listbox1,'String'); filename = file_list{index_selected}; if handles.is_dir(handles.sorted_index(index_selected)) cd (filename) load_listbox(pwd,handles) else [path,name,ext,ver] = fileparts(filename); switch ext case '.fig' guide (filename) otherwise try open(filename) catch errordlg(lasterr,'File Type Error','modal') end end end end
Opening Unknown File Types
You can extend the file types that the open
command recognizes to include any file having a three-character extension. You do this by creating an M-file with the name openxyz
, where xyz
is the extension. Note that the list box callback does not take this approach for .fig files since openfig.m
is required by the application M-file. See open
for more information.
![]() | Loading the List Box | Accessing Workspace Variables from a List Box | ![]() |