Home > functions > gui > batch > vb_parm_editor > vb_parm_editor_gui_data_make.m

vb_parm_editor_gui_data_make

PURPOSE ^

SYNOPSIS ^

function [data] = vb_parm_editor_gui_data_make(data)

DESCRIPTION ^

 Copyright (C) 2011, ATR All Rights Reserved.
 License : New BSD License(see VBMEG_LICENSE.txt)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function [data] = vb_parm_editor_gui_data_make(data)
0002 %
0003 % Copyright (C) 2011, ATR All Rights Reserved.
0004 % License : New BSD License(see VBMEG_LICENSE.txt)
0005 
0006 %
0007 % --- Previous check
0008 %
0009 if ~exist('data', 'var')
0010     error('data is a required parameter.');
0011 end
0012 
0013 %
0014 % --- Main Procedure
0015 %
0016 
0017 % Processing start
0018 accessor = cell(0);
0019 strings  = cell(0);
0020 
0021 
0022 % create listbox string and accessor strings
0023 % e.g.
0024 %   strings{1} = 'brain_parm'           :  accessor{1} = 'brain_parm'
0025 %   strings{2} = '    .FS_left_file'    :  accessor{2} = 'brain_parm.FS_left_file';
0026 
0027 level = 0; % depth level
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 % indent length setting
0045 indent = repmat('    ', 1, level);
0046 
0047 if level == 0
0048     sep = '';
0049 else
0050     sep = '.';
0051 end
0052 
0053 % enumlate settings
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     % check parameter name includes 'file' or 'dir'
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         % search mode
0074         if data.case_sensitive
0075             search_func = @regexp;
0076         else
0077             search_func = @regexpi;
0078         end
0079 
0080         % OR search
0081         hit = false;
0082         % search keyword from fieldname
0083         if ~isempty(feval(search_func, leaf_name, data.search_name, 'once'))
0084             hit = true; 
0085         end
0086 
0087         % search keyword from leaf value
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             % search char string and cell string
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         % Keyword is specified but no hit.
0104         if hit == false, return; end
0105     end
0106 
0107     % add item to the listbox
0108     accessor{length(accessor)+1} = [current_node, sep, leaf_name];
0109     strings{length(strings)+1}   = [indent, sep, leaf_name];
0110 end

Generated on Tue 27-Aug-2013 11:46:04 by m2html © 2005