Mercurial > hg > ltpda
view m-toolbox/m/gui/ao_browser/ltpda_explorer.m @ 52:daf4eab1a51e database-connection-manager tip
Fix. Default password should be [] not an empty string
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 07 Dec 2011 17:29:47 +0100 |
parents | f0afece42f48 |
children |
line wrap: on
line source
% LTPDA_EXPLORER for exploring analysis objects and plotting/displaying their fields %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % DESCRIPTION: LTPDA_EXPLORER for exploring analysis objects and plotting/displaying % their fields. It is possible to browse througth the history tree % to see only a part of this tree. If the user will use the plot % function the plot will be printed in a new figure. % % CALL: ltpda_explorer; % Read the ao's from the'base' workspace % ltpda_explorer(ao); % ltpda_explorer(ao_vector); % ltpda_explorer(ao_matrix); % % % VERSION: $Id: ltpda_explorer.m,v 1.13 2011/05/10 04:50:58 hewitson Exp $ % % HISTORY: 10-06-07 Diepholz % Creation % % NOTE: The idea and the core source code are taken from: % Hassan Lahdili (hassan.lahdili@crc.ca) % Communications Research Centre (CRC) | Advanced Audio Systems (AAS) % www.crc.ca | www.crc.ca/aas % Ottawa. Canada % CRC Advanced Audio Systems - Ottawa 16/02/2005 2004-2005 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ltpda_explorer(varargin) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Define the Positions % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % figure position % FIG_X = .150; % FIG_Y = .150; % FIG_dX = .700; % FIG_dY = .600; FONT_SIZE = 13; FIG_X = 150; FIG_Y = 150; FIG_dX = 700; FIG_dY = 600; % tree position TREE_X = .000; TREE_Y = .000; TREE_dX = .350; TREE_dY = 1.000; % plot field position PLOT_X = .45; PLOT_Y = .15; PLOT_dX = .5; PLOT_dY = .7; % display field position DISP_X = TREE_X; DISP_Y = .750; DISP_dX = TREE_dX; DISP_dY = 1-DISP_Y; % explorer name position EXPL_NAME_dX = .370; EXPL_NAME_dY = .045; EXPL_NAME_X = PLOT_X+(PLOT_dX-EXPL_NAME_dX)/2; EXPL_NAME_Y = .030; % EXPL_NAME_Y = .065; % info fields position N_INFOS = 3; INFO_X = PLOT_X; INFO_Y = .915; INFO_dX = PLOT_dX / N_INFOS; INFO_dY = .06; BG_COLOR = [.925 .914 .847]; MAX_HIST_DEPTH = 4; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Check the input % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tree_name = 'objects'; obj = []; obj_value = {}; obj_name = {}; % Read the objects from the 'base' workspace if nargin == 0 ws_vars = evalin('base','whos'); elseif nargin == 1 tmp = varargin{1}; if iscell(tmp) ws_vars = []; for jj = 1:length(tmp) ws_vars(jj).name = [inputname(1) '{' num2str(jj) '}']; ws_vars(jj).class = class(tmp{jj}); ws_vars(jj).obj = tmp{jj}; end elseif numel(tmp)>1 ws_vars = []; for jj=1:numel(tmp) ws_vars(jj).name = [inputname(1) '(' num2str(jj) ')']; ws_vars(jj).class = class(tmp(jj)); ws_vars(jj).obj = tmp(jj); end else ws_vars = whos('tmp'); ws_vars.name = inputname(1); ws_vars.obj = tmp; end else error ('##########'); end for mm=1:length(ws_vars) if nargin == 0 obj = evalin('base', ws_vars(mm).name); elseif nargin == 1 obj = ws_vars(mm).obj; else error('#####'); end if utils.helper.isobject(obj) % the object in the workspace is a single value if numel(obj) == 1 obj_value{end+1} = obj; obj_name{end+1} = [ws_vars(mm).class ':' ws_vars(mm).name]; else [n,m] = size(obj); % the ao in the workspace is a vector if n == 1 || m == 1 for jj=1:length(obj) obj_value{end+1} = obj(jj); obj_name{end+1} = [ws_vars(mm).class ':' ws_vars(mm).name '(' num2str(jj) ')']; end % the ao in the workspace is a matrix elseif n > 1 && m > 1 for gg = 1:n for hh = 1:m obj_value{end+1} = obj(gg,hh); obj_name{end+1} = [ws_vars(mm).class ':' ws_vars(mm).name '(' num2str(gg) ',' num2str(hh) ')']; end end else error ('### this should not happen.'); end end end end fig_name = 'Exploring objects'; % Define figure fig = figure('NextPlot', 'add', ... 'NumberTitle', 'off', ... 'Toolbar', 'none', ... 'name', fig_name, ... 'Color', BG_COLOR, ... 'ToolBar', 'none', ... 'NextPlot', 'new', ... 'MenuBar', 'none',... 'Position', [FIG_X FIG_Y ... FIG_dX FIG_dY]); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Define the tree % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% root = uitreenode('v0', tree_name, tree_name, [], false); tree = uitree('v0', fig, 'Root',root, 'ExpandFcn', @myExpfcn4); set(tree, 'Units', 'normalized') drawnow; set(tree, 'position', [TREE_X TREE_Y TREE_dX TREE_dY]); %, ... set(tree, 'NodeWillExpandCallback', @nodeWillExpand_cb4, ... 'NodeSelectedCallback', @nodeSelected_cb4); tmp = tree.FigureComponent; cell_Data = cell(3,1); % cell_Data{1} = varargin{:}; cell_Data{1} = obj_value; cell_Data{3} = obj_name; warning('off','MATLAB:hg:JavaSetHGProperty'); set(tmp, 'UserData', cell_Data); warning('on','MATLAB:hg:JavaSetHGProperty'); % Define the plot field haxes = axes('Units', 'normalized', ... 'Position', [PLOT_X PLOT_Y ... PLOT_dX PLOT_dY], ... 'Box', 'on', ... 'XTick', [], ... 'YTick', []); box off; axis off; % Define the info fields 'name' txt1 = uicontrol('String', '', ... 'Units', 'normalized', ... 'Style', 'Edit', ... 'FontSize', FONT_SIZE, ... 'Position', [INFO_X INFO_Y ... INFO_dX INFO_dY], ... 'BackgroundColor', BG_COLOR); % Define the info fields 'size' txt2 = uicontrol('String', '', ... 'Units', 'normalized', ... 'Style', 'Edit', ... 'FontSize', FONT_SIZE, ... 'Position', [(INFO_X+INFO_dX) INFO_Y ... INFO_dX INFO_dY],... 'BackgroundColor', BG_COLOR); % Define the info fields 'class' txt3 = uicontrol('String', '', ... 'Units', 'normalized', ... 'Style', 'Edit', ... 'FontSize', FONT_SIZE, ... 'Position', [(INFO_X+2*INFO_dX) INFO_Y ... INFO_dX INFO_dY],... 'BackgroundColor', BG_COLOR); % Define the info fields 'value' txt4 = uicontrol('String', '', ... 'Units', 'normalized', ... 'Style', 'Edit', ... 'FontSize', FONT_SIZE, ... 'Position', [ INFO_X (INFO_Y-INFO_dY) ... 3*INFO_dX INFO_dY], ... 'BackgroundColor', BG_COLOR); % Define the info fields 'value' txt5 = uicontrol('String', '', ... 'Units', 'normalized', ... 'Style', 'listbox', ... 'Visible', 'off', ... 'Fontsize', 8, ... 'FontSize', FONT_SIZE, ... 'Position', [DISP_X DISP_Y ... DISP_dX DISP_dY], ... 'BackgroundColor', BG_COLOR); % Define the decription of the info fields col1 = uicontrol('String', 'Name', ... 'Units', 'normalized', ... 'Style', 'Text', ... 'FontSize', FONT_SIZE, ... 'Position', [INFO_X (INFO_Y+INFO_dY)... INFO_dX INFO_dY], ... 'BackgroundColor', BG_COLOR); col2 = uicontrol('String', 'Size', ... 'Units', 'normalized', ... 'Style', 'Text', ... 'FontSize', FONT_SIZE, ... 'Position', [(INFO_X+INFO_dX) (INFO_Y+INFO_dY)... INFO_dX INFO_dY], ... 'BackgroundColor', BG_COLOR); col3 = uicontrol('String', 'Class', ... 'Units', 'normalized', ... 'Style', 'Text', ... 'FontSize', FONT_SIZE, ... 'Position', [(INFO_X+2*INFO_dX) (INFO_Y+INFO_dY)... INFO_dX INFO_dY], ... 'BackgroundColor', BG_COLOR); % Define the name of the explorer expl_name = uicontrol('String', 'LTPDA Object explorer', ... 'Units', 'normalized', ... 'Style', 'text', ... 'Position', [EXPL_NAME_X-.05 EXPL_NAME_Y ... EXPL_NAME_dX+.1 EXPL_NAME_dY],... 'ForeGroundColor', [0.2 0.4 1], ... 'BackGroundColor', BG_COLOR, ... 'FontSize', 18, ... 'FontWeight', 'bold', ... 'FontAngle', 'italic'); tree_menu = uicontextmenu(); tree_menu1 = uimenu(tree_menu, 'Label', 'Plot', ... 'Callback', @f_tree_menu1); tree_menu2 = uimenu(tree_menu, 'Label', 'Display', ... 'Callback', @f_tree_menu2); disp_menu = uicontextmenu; disp_menu1 = uimenu(disp_menu, 'Label', 'close', ... 'Callback', @f_disp_menu1); warning('off','MATLAB:hg:JavaSetHGProperty'); set(tree.Tree, 'MousePressedCallback', @mouse_cb); set(tree.Tree, 'UIContextMenu', tree_menu); set(tree.Tree, 'Font', javax.swing.plaf.FontUIResource('Dialog', 0, FONT_SIZE)) warning('on','MATLAB:hg:JavaSetHGProperty'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Mouse Pressed Handler function mouse_cb(h, ev) if ev.getModifiers()== ev.META_MASK % Workaround to set the y position % Workaround to set the x position vis = get(get(ev, 'Component'), 'VisibleRect'); x_width = get(get(ev, 'Component'), 'Width'); y_height = get(get(ev, 'Component'), 'Height'); new_x = ev.getX-vis(1); new_y = -ev.getY+y_height-(y_height-vis(4)); set(tree_menu, 'Position', [new_x new_y], ... 'Visible', 'on'); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f_disp_menu1(h, ev) set(txt5, 'Visible', 'off') set(tree, 'position', [TREE_X TREE_Y ... TREE_dX TREE_dY]) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f_tree_menu1(h,ev) plotselected_cb; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f_tree_menu2(h,ev) displayselected_cb; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function plotselected_cb(h, ev) tmp = tree.FigureComponent; S = get(tmp, 'UserData'); s = S{1}; cNode = S{2}; [val, plotted, cNode] = getcNodevalue(cNode, s); cla(haxes) box off; axis off; %%%%% Plot history object %%%%% if (isa(val,'history')) if length(val) == 1 figure; plot(val); ii = strfind(plotted, 'inhists'); title(haxes, sprintf('History-Level: %d', length(ii)+1)) else na = text(0.5,0.5,'Select the left or right branch.'); set(na, 'HorizontalAlignment', 'center', ... 'Color', 'r', ... 'FontWeight', 'bold', ... 'EdgeColor', 'k', ... 'BackgroundColor', 'w', ... 'Fontsize', 10, ... 'Margin', 5); end %%%%% Plot data object %%%%% elseif isa(val,'fsdata') || isa(val,'tsdata') || ... isa(val,'xydata') || isa(val,'cdata') aoin = getcNodevalue(S{2}.getParent, s); iplot(aoin) %%%%% Plot the AO object %%%%% elseif isa(val, 'ao') iplot(val) %%%%% Plot mfir and miir object %%%%% elseif isa(val, 'mfir') || isa(val, 'miir') resp(val) %%%%% Plot pzmodel object %%%%% elseif isa(val, 'pzmodel') resp(val) %%%%% Is the parent node == 'data' so plot data %%%%% else cNode = S{2}; if cNode.getLevel >= 1 obj = getcNodevalue(S{2}.getParent, s); if isa(obj, 'ltpda_data') aoin = getcNodevalue(S{2}.getParent.getParent, s); iplot(aoin); elseif isa(obj, 'ao') iplot(obj); end end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function displayselected_cb(h, ev) tmp = tree.FigureComponent; S = get(tmp, 'UserData'); s = S{1}; cNode = S{2}; [val, displayed, cNode] = getcNodevalue(cNode, s); text1 = ''; if isobject(val) text1 = display(val); else disp(val) end % some sisplay outputs contains '\n' <-> char(10) % text can not display this character so replace it with ' ' text1 = strrep(text1, char(10), ' '); set(tree, 'position', [TREE_X TREE_Y ... TREE_dX TREE_dY-DISP_dY]); set(txt5, 'string', text1); set(txt5, 'Visible', 'on'); set(txt5, 'UIContextMenu', disp_menu); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function cNode = nodeSelected_cb4(tree,ev) cNode = ev.getCurrentNode; tmp = tree.FigureComponent; warning('off','MATLAB:hg:JavaSetHGProperty'); cell_Data = get(tmp, 'UserData'); warning('on','MATLAB:hg:JavaSetHGProperty'); cell_Data{2} = cNode; s = cell_Data{1}; val = s; plotted = cNode.getValue; selected = plotted; [val, plotted, cNode] = getcNodevalue(cNode, val); set(txt1, 'string', selected) set(txt2, 'string', strcat(num2str(size(val,1)),'x',num2str(size(val,2))) ) set(txt3, 'string', class(val)) str = ' '; c_str = {}; cla(haxes) axesSize = get(haxes,'Position'); axesSize = axesSize + [-.07 -.05 .09 0.05]; plotPanel = findobj(gcf,'Tag','plotPanel'); if isempty(plotPanel), plotPanel = uipanel('Position',axesSize,'Tag','plotPanel','BorderType','none','BackgroundColor',[.925 .914 .847]); end delete(get(plotPanel,'Children')) box off; axis off; if ~isempty(val) if isnumeric(val) % normalize the vector si = size(val); if si(1) > si(2) val = val.'; else val = val; end if size(val,1) == 1 || size(val,2) == 1 if length(val) > 3 str = strcat(num2str(val(1:3)), ' ...'); else str = num2str(val); end else str = 'Matrix'; end elseif ischar(val) str = val; elseif islogical(val) if val str = 'true'; else str = 'false'; end elseif isobject(val) if isa(val, 'ao') str = 'Analysis Object'; if ~isa(val.data, 'cdata') iplot(val,plist('Figure',plotPanel)); else iplot(val,plist('Figure',plotPanel)); end elseif isa(val, 'cdata') str = 'C-Data Object'; aoin = getcNodevalue(ev.getCurrentNode.getParent, s); elseif isa(val, 'fsdata') str = 'Frequency-Series Object'; aoin = getcNodevalue(ev.getCurrentNode.getParent, s); iplot(aoin,plist('Figure',plotPanel)); elseif isa(val, 'tsdata') str = 'Time-Series Object'; aoin = getcNodevalue(ev.getCurrentNode.getParent, s); iplot(aoin,plist('Figure',plotPanel)); elseif isa(val, 'xydata') str = 'X-Y Data Object'; aoin = getcNodevalue(ev.getCurrentNode.getParent, s); iplot(aoin,plist('Figure',plotPanel)); elseif isa(val, 'xyzdata') str = 'X-Y-Z Data Object'; elseif isa(val, 'history') str = 'History Object'; if length(val) == 1 pl = plist(param('stop_option', MAX_HIST_DEPTH)); plot(haxes, val, pl); ii = strfind(plotted, 'inhists'); title(haxes, sprintf('History-Level: %d', length(ii)+1)) else c_str{1} = 'Select the left or right branch.'; end elseif isa(val, 'param') if length(val) == 1 str = char(val); c_str = split_by_comma(str); else for ii = 1:length(val) str = char(val(ii)); c_str1 = split_by_comma(str, '- '); c_str(end+1:end+length(c_str1)) = c_str1; end end str = 'Parameter Object'; elseif isa(val, 'plist') if numel(val) > 1 c_str{1} = 'select a plist'; else for ii=1:length(val.params) str = char(val.params(ii)); c_str1 = split_by_comma(str, '- '); c_str(end+1:end+length(c_str1)) = strrep(c_str1, '_', '\_'); end end str = 'Parameter List Object'; elseif isa(val, 'mfir') str = 'FIR Filter Object'; elseif isa(val, 'miir') str = 'IIR Filter Object'; elseif isa(val, 'provenance') str = 'Provenance Object'; elseif isa(val, 'pzmodel') str = 'Pole Zero Object'; elseif isa(val, 'specwin') str = 'Spectral Window Object'; elseif isa(val, 'pz') str = 'Pole/Zero Object'; elseif isa(val, 'time') str = 'Time Object'; elseif isa(val, 'timespan') str = 'Time span Object'; elseif isa(val, 'ssm') str = 'statespace model Object'; elseif isa(val, 'unit') str = 'Unit Object'; elseif isa(val, 'minfo') str = 'Method info Object'; else cl = class(val); str = sprintf('%s%s Object', upper(cl(1)), lower(cl(2:end))); end elseif iscell(val) for i = 1:min(length(val),3) if ischar(val{i}) str = strcat(str, val{i}); elseif isnumeric(val) str = strcat(str, num2str(val{i})); end if i < min(length(val),3) str = strcat(str, ','); end end if length(val) > 3 str = strcat(str,'...'); end end if ~isempty(c_str) c_str = strtrim(c_str); na = text(0.5,0.5,c_str); txt_extent = get(na, 'Extent'); set(na, 'Position', [0.5-txt_extent(3)/2, 0.5], ... 'HorizontalAlignment', 'left', ... 'Color', 'k', ... 'FontWeight', 'bold', ... 'EdgeColor', 'k', ... 'BackgroundColor', 'w', ... 'Fontsize', 10, ... 'Margin', 5); end else % ~isempty(val) str = 'The field is empty'; end set(txt4, 'string', str) warning('off','MATLAB:hg:JavaSetHGProperty'); set(tmp, 'UserData', cell_Data); warning('on','MATLAB:hg:JavaSetHGProperty'); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function nodes = myExpfcn4(tree,value) tmp = tree.FigureComponent; warning('off','MATLAB:hg:JavaSetHGProperty'); S = get(tmp, 'UserData'); warning('on','MATLAB:hg:JavaSetHGProperty'); s = S{1}; cNode = S{2}; [val, cNode] = getcNodevalue(cNode, s); % Set the path to the *.gif files % This tis the current path of this function + 'exp_struct_icons' pth = ''; eval (sprintf('pth = which(''%s'');',mfilename)) index = find(pth==filesep, 1, 'last'); pth = pth(1:index); pth = [pth 'exp_struct_icons' filesep]; [n,m] = size(val); count = 0; %%% Vector or Matrix if m>1 || n>1 if isa(val, 'ao') iconpath =[pth,'analysis_object.gif']; else iconpath =[pth,'struct_icon.gif']; end %%% Vector if m==1 || n==1 L = length(val); for J = 1:L count = count + 1; cNode = S{2}; level = cNode.getLevel; fname = strcat(cNode.getValue, '(', num2str(J),')'); if level==0 && ~isempty(S{3}) && numel(S{3}) == numel(S{1}) node_str = S{3}(J); else node_str = fname; end nodes(count) = uitreenode('v0',fname, node_str, iconpath, 0); end %%% Matrix else for ii=1:n for jj=1:m count = count + 1; cNode = S{2}; fname = [cNode.getValue '(' num2str(ii) ',' num2str(jj) ')']; nodes(count) = uitreenode('v0',fname, fname, iconpath, 0); end end end %%% Struct, Object or single value else %%% val = val; if ~isempty(val) fnames = fieldnames(val); else fnames = {}; end for i=1:length(fnames) count = count + 1; x = getfield(val,fnames{i}); if isa(x, 'ao') iconpath =[pth,'analysis_object.gif']; elseif isa(x, 'tsdata') iconpath =[pth,'ts_data.gif']; elseif isa(x, 'fsdata') iconpath =[pth,'fs_data.gif']; elseif isa(x, 'xydata') iconpath =[pth,'xy_data.gif']; elseif isa(x, 'cdata') iconpath =[pth,'c_data.gif']; elseif isa(x, 'history') iconpath =[pth,'history.gif']; elseif isa(x, 'plist') iconpath =[pth,'plist.gif']; elseif isstruct(x) if length(x) > 1 iconpath =[pth,'structarray_icon.gif']; else iconpath =[pth,'struct_icon.gif']; end elseif isnumeric(x) iconpath =[pth,'double_icon.gif']; elseif iscell(x) iconpath =[pth,'cell_icon.gif']; elseif ischar(x) iconpath =[pth,'char_icon.gif']; elseif islogical(x) iconpath =[pth,'logic_icon.gif']; elseif isobject(x) iconpath =[pth,'obj_icon.gif']; else iconpath =[pth,'unknown_icon.gif']; end if isstruct(x) || isobject(x) isLeaf = 0; else isLeaf = 1; end nodes(count) = uitreenode('v0',fnames{i}, fnames{i}, iconpath, isLeaf); end end if (count == 0) nodes = []; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function cNode = nodeWillExpand_cb4(tree,ev) cNode = ev.getCurrentNode; tmp = tree.FigureComponent; warning('off','MATLAB:hg:JavaSetHGProperty'); cell_Data = get(tmp, 'UserData'); cell_Data{2} = cNode; set(tmp, 'UserData', cell_Data); warning('on','MATLAB:hg:JavaSetHGProperty'); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [val, displayed, cNode] = getcNodevalue(cNode, s) fields = {}; while cNode.getLevel ~=0 fields = [fields; cNode.getValue]; c = findstr(cNode.getValue, '('); if ~isempty(c) && cNode.getLevel ~=0 cNode = cNode.getParent; end if cNode.getLevel ==0, break; end cNode = cNode.getParent; end val = s; if ~isempty(fields) L=length(fields); displayed = fields{L}; % create the variable: displayed for j = L-1:-1:1 displayed = strcat(displayed, '.', fields{j}); end for i = L:-1:1 field = fields{i}; von = findstr(field,'('); bis = findstr(field,')'); if ~isempty(von) idx = field(von+1:bis-1); field = field(1:von-1); if (strcmp(field, cNode.getValue)) cmd = sprintf('val = val(%s);',idx); eval(cmd); if iscell(val) && numel(val) == 1 val = val{1}; else error('################ MAch mich neu'); end else cmd = sprintf('val = getfield(val, field, {%s});',idx); eval(cmd); if iscell(val) && numel(val) == 1 val = val{1}; end end else if iscell(val) && numel(val) == 1 val = val{1}; elseif numel(val) ~= 1 error('################ MAch mich neu'); end val = getfield(val, field); end end else displayed = cNode.getValue; if iscell(val) && numel(val) == 1 val = val{1}; else end return; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function c_str = split_by_comma(str, pref) if nargin < 2 pref = ''; end c_str = {}; c_str{1} = str; index = find(str==','); von = 1; for ii = 1:length(index) bis = index(ii)-1; c_str{ii} = [pref str(von:bis)]; von = bis + 2; end if ~isempty(index) c_str{ii+1} = [pref str(von:end)]; end c_str = strtrim(c_str); end