0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 1 % SETPROPERTIES set different properties of an object.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 3 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 4 % DESCRIPTION: set different properties of an object. It is possible to define
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 5 % the property/value pairs in a plist or direct as the input.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 6 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 7 % CALL: obj = setProperties(obj, 'prop1', val1, 'prop2', val2);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 8 % obj = setProperties(obj, pl);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 9 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 10 % VERSION: $Id: setProperties.m,v 1.18 2011/07/07 11:05:31 mauro Exp $
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 11 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 13
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 14 function varargout = setProperties(varargin)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 15
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 16 % Collect all user objects with history
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 17 [objs, ao_invars, rest] = utils.helper.collect_objects(varargin(:), 'ltpda_uoh');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 18 [pl, pl_invars, rest] = utils.helper.collect_objects(rest(:), 'plist');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 19
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 20 if numel(pl) > 0 && numel(rest) > 0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 21 error('### I Don''t know what do do. If a parameter should contain a plist then specify the property and the value in a plist');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 22 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 23
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 24 % Decide on a deep copy or a modify
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 25 objs = copy(objs, nargout);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 26
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 27 % Combine the rest of the inputs to the plist
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 28 while length(rest) >= 2
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 29 prop = upper(rest{1});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 30 val = rest{2};
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 31 rest = rest(3:end);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 32
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 33 if ischar(prop)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 34 pl = combine(plist(prop, val), pl);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 35 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 36 error('### The input property must be a char but it is a [%s] object', class(prop));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 37 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 38 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 39
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 40 for ii = 1:numel(objs)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 41
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 42 obj_class = class(objs(ii));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 43 mthds = methods(obj_class);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 44
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 45 for jj = 1:pl.nparams
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 46
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 47 cmd = ['set' pl.params(jj).key(1) lower(pl.params(jj).key(2:end))];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 48
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 49 % Special case for the timespan class because the set methos for the
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 50 % 'startT' and 'endT' properties ends with a capital letter
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 51 if isa(objs, 'timespan') && ...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 52 (strcmpi(pl.params(jj).key, 'endT') ||...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 53 strcmpi(pl.params(jj).key, 'startT'))
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 54 cmd(end) = 'T';
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 55 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 56
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 57 if utils.helper.ismember(cmd, mthds)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 58 %%%%%%%%%% It exists a set method to set the property %%%%%%%%%%
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 59 try
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 60 if iscell(pl.params(jj).getVal) && length(pl.params(jj).getVal) == length(objs)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 61 %%% Set the value in the cell
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 62 feval(cmd, objs(ii), pl.params(jj).getVal{ii});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 63 %%% Reset the value in the plistUset to this single value
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 64 objs(ii).hist.plistUsed.pset(pl.params(jj).key, pl.params(jj).getVal{ii});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 65 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 66 %%% Set the value
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 67 feval(cmd, objs(ii), pl.params(jj).getVal);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 68 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 69 %%% Deprecation warning
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 70 warning('!!! Setting property ''%s'' which is not in the default plist is now deprecated and will be removed in future versions. Please use dedicated setter methods', ...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 71 pl.params(jj).key);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 72 catch ME
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 73 fprintf(2, '%s\n\n', ME.message);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 74 warning(utils.const.warnings.METHOD_NOT_FOUND, '!!! Can not set the the property [%s] because the setter-method fails.', lower(pl.params(jj).key));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 75 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 76 elseif objs(ii).isprop(lower(pl.params(jj).key))
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 77 warning(utils.const.warnings.METHOD_NOT_FOUND, '!!! The Object has the property [%s] but there doesn''t exist a public set method', lower(pl.params(jj).key));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 78 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 79
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 80 end % End loop over params
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 81
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 82 end % for-loop over all objects
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 83
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 84 % Set output
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 85 varargout = utils.helper.setoutputs(nargout, objs);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 86
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 87 end