0001 function [data] = vb_parm_editor_gui_data_make(data)
0002
0003
0004
0005
0006
0007
0008
0009 if ~exist('data', 'var')
0010 error('data is a required parameter.');
0011 end
0012
0013
0014
0015
0016
0017
0018 accessor = cell(0);
0019 strings = cell(0);
0020
0021
0022
0023
0024
0025
0026
0027 level = 0;
0028 top_node = '';
0029 leaf = data.(data.parm_name);
0030 leaf_name = data.parm_name;
0031
0032 [accessor, strings] = add_node(level,...
0033 top_node,...
0034 leaf,...
0035 leaf_name,...
0036 accessor, strings, ...
0037 data);
0038
0039 data.accessor = accessor';
0040 data.listbox_strings = strings';
0041
0042 function [accessor, strings] = add_node(level, current_node, leaf, leaf_name, accessor, strings, data)
0043
0044
0045 indent = repmat(' ', 1, level);
0046
0047 if level == 0
0048 sep = '';
0049 else
0050 sep = '.';
0051 end
0052
0053
0054 if isstruct(leaf)
0055 current_node = [current_node, sep, leaf_name];
0056 accessor{length(accessor)+1} = current_node;
0057 strings{length(strings)+1} = [indent, sep, leaf_name];
0058
0059 names = fieldnames(leaf);
0060 for k=1:length(names)
0061 [accessor, strings] = add_node(level+1, current_node, leaf.(names{k}), names{k}, accessor, strings, data);
0062 end
0063 else
0064
0065
0066 if data.show_file_parameters && ...
0067 (isempty(strfind(lower(leaf_name), 'file')) && ...
0068 isempty(strfind(lower(leaf_name), 'dir')))
0069 return;
0070 end
0071
0072 if ~isempty(data.search_name)
0073
0074 if data.case_sensitive
0075 search_func = @regexp;
0076 else
0077 search_func = @regexpi;
0078 end
0079
0080
0081 hit = false;
0082
0083 if ~isempty(feval(search_func, leaf_name, data.search_name, 'once'))
0084 hit = true;
0085 end
0086
0087
0088 val = eval(['data.' current_node, sep, leaf_name]);
0089 if ischar(val)
0090 val = {val};
0091 end
0092 if (iscellstr(val) && length(size(val))<3)
0093
0094 ret = feval(search_func, val, data.search_name, 'once');
0095 for k=1:length(ret)
0096 if ~isempty(ret{k})
0097 hit = true;
0098 break;
0099 end
0100 end
0101 end
0102
0103
0104 if hit == false, return; end
0105 end
0106
0107
0108 accessor{length(accessor)+1} = [current_node, sep, leaf_name];
0109 strings{length(strings)+1} = [indent, sep, leaf_name];
0110 end