% LTPDA_USERCLASSES lists all the LTPDA user object types.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DESCRIPTION: LTPDA_USERCLASSES lists all the LTPDA user object types.
%
% CALL:        classes = ltpda_userclasses()
%
% INPUTS:
%
% OUTPUTS:     classes - a cell array with a list of recognised LTPDA user object types
%
% Returns a list of all ltpda classes which are derived from the ltpda_uo
% class.
%
% VERSION:     $Id: ltpda_userclasses.m,v 1.6 2010/08/16 14:06:15 hewitson Exp $
%
% HISTORY: 14-02-08 M Hueller
%             Creation
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function classes = ltpda_userclasses(varargin)

%   prefs = getappdata(0, 'LTPDApreferences');
%   vl = double(prefs.getDisplayPrefs.getDisplayVerboseLevel);
%   LTPDAprefs('display', 'verboseLevel', -1);
  classes = utils.helper.ltpda_classes;

  for ii = 1:numel(classes)
    try
      if ~isa(eval(classes{ii}), 'ltpda_uo')
        classes{ii} = {};
      end
    catch
      classes{ii} = {};
    end
  end

  classes = classes(~cellfun('isempty', classes));
  classes = sort(classes);

end

function result = isabstract(cl)

  mi = eval(['?' cl]);

  hasAbstractMethod = false;
  for kk=1:numel(mi.Methods)
    if mi.Methods{kk}.Abstract
      hasAbstractMethod = true;
      break;
    end
  end

  hasAbstractProperty = false;
  if ~hasAbstractMethod
    for kk=1:numel(mi.Properties)
      if mi.Properties{kk}.Abstract
        hasAbstractProperty = true;
        break;
      end
    end
  end

  if hasAbstractProperty || hasAbstractMethod
    result = true;
  else
    result = false;
  end

end

