Mercurial > hg > ltpda
diff m-toolbox/classes/@workspaceBrowser/cb_buildModel.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@workspaceBrowser/cb_buildModel.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,126 @@ +% CB_BUILDMODEL build the tree model +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% $Id: cb_buildModel.m,v 1.5 2010/01/29 09:31:47 hewitson Exp $ +% +function cb_buildModel(varargin) + + wb = getappdata(0, 'WorkspaceBrowser'); + + buildModel(wb.hdl); + + + +end + + +function buildModel(wb) + + %% Build workspace + ws = mpipeline.workspace.Workspace(); + + wvars = evalin('base', 'whos'); + + for ll=1:numel(wvars) + + wvar = wvars(ll); + + % get the variable + cmd = sprintf('obj = evalin(''base'', ''%s'');', wvar.name); + eval(cmd); + + % user object classes + if isa(obj, 'ltpda_uoh') + ws = addVar(ws, obj, wvar.name); + end + + if isstruct(obj) + Nobj = numel(obj); + for kk=1:Nobj + if Nobj > 1 + ws = addStruct(ws, obj(kk), [wvar.name '(' num2str(kk) ')']); + else + ws = addStruct(ws, obj, wvar.name); + end + end + end + + end + + %% make and setmodel + + mdl = mpipeline.workspace.WorkspaceTreeModel(ws); + + wb.getWorkspaceTree.setModel(mdl); + +end + +function ws = addStruct(ws, ss, name) + + if ~shouldAddStruct(ss) + return + end + + % make a new struct + wsstruct = mpipeline.workspace.WorkspaceStruct(name); + + % add each field + fields = fieldnames(ss); + + for kk=1:numel(fields) + field = fields{kk}; + objs = ss.(field); + if ~isnumeric(objs) + for ll=1:numel(objs) + if isa(objs(ll), 'ltpda_uoh') + wsstruct = addVar(wsstruct, ss.(field), field); + end + + if isstruct(objs(ll)) + wsstruct = addStruct(wsstruct, ss.(field), field); + end + end + end + end + + % add struct + ws.addStruct(wsstruct); + +end + +function res = shouldAddStruct(s) + sfields = fieldnames(s); + res = false; + for pp=1:numel(sfields) + sfield = sfields{pp}; + sobj = s.(sfield); + if isstruct(sobj) || isa(sobj, 'ltpda_uoh') + res = true; + break; + end + if ~ischar(sobj) && ~isnumeric(sobj) && ~islogical(sobj) && numel(sobj)>1 + res = true; + break; + end + end + +end + +function ws = addVar(ws, obj, name) + + % make a new var + wsvar = mpipeline.workspace.WorkspaceVar(name, class(obj)); + + dtxt = display(obj); + info = ''; + for kk=1:numel(dtxt) + info = [info [dtxt{kk} '<br>']]; + end + + wsvar.setInfo(info); + % add to the workspace/workspacestruct + ws.addVar(wsvar); + +end +