www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/@cgnode/nodelist.m

    function [nds,cheaders,vals,colsize,p_sub]= nodelist(T,tpfilter)
%NODELIST  return a list of nodes with info to add to listview
%
%  [NDS,CHEADERS,VALS,NUMCOL,COLSIZE]=NODELIST(T,TPFILTER)
%

%  Copyright 2000-2011 The MathWorks, Inc. and Ford Global Technologies, Inc.


% default action is to add self then add children.;
[nds,cheaders,vals,colsize,recurse,p_sub]=listinfo(T,tpfilter);

if recurse
   % recurse into children
   ch=children(T);  
   ch = tpfilter.filterlist(ch);
   if ~isempty(ch)
       ch_obj = infoarray(ch);
       p_sub=[];
       for n=1:length(ch);
           [ch_nds,ch_cheaders,ch_vals,ch_colsize,ch_sub]= nodelist(ch_obj{n},tpfilter);
           if ~isempty(ch_cheaders)
               [nds,cheaders,vals,colsize]= i_squishtogether(nds,cheaders,vals,colsize,ch_nds,ch_cheaders,ch_vals,ch_colsize);
           end
           p_sub= [p_sub;ch_sub(:)];
       end
   end
end





function  [nds,cheaders,vals,colsize]= i_squishtogether(nds,cheaders,vals,colsize,ch_nds,ch_cheaders,ch_vals,ch_colsize)


if ~isequal(cheaders,ch_cheaders)
    % add any new columns.  Generate an index list that tells us where to place values
    [OK,loc]=ismember(ch_cheaders,cheaders);
    nok = sum(~OK);
    if nok>0
        cheaders = [cheaders ch_cheaders(~OK)];
        colsize = [colsize ch_colsize(~OK)];
        % add new columns to vals
        if ~isempty(vals)
            vals(:,end+1:end+nok) = {'-'};
        end
    end
    if ~isempty(ch_nds)
        % disperse values correctly
        nds=[nds ch_nds];
        nch = size(ch_vals,1);
        % add new rows
        vals(end+1:end+nch,1:length(cheaders))={'-'};
        % add values to existing columns
        vals(end-nch+1:end,loc(OK))= ch_vals(:,OK) ;
        % new columns at end
        vals(end-nch+1:end,end-nok+1:end) = ch_vals(:,~OK);
    end
else
    if ~isempty(ch_nds)
        nds=[nds ch_nds];
        % simple augmention
        vals = [vals; ch_vals];
    end
end