% SETVALINDEX Sets the property 'valIndex'.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DESCRIPTION: Set the property 'valIndex'.
%
% CALL:        obj = obj.setValIndex(idx);
%              obj = setValIndex(obj, idx);
%
% INPUTS:      obj - single paramValue object
%              idx - new index
%
% REMARK:      This method checks if the index is in range of the options
%
% VERSION:     $Id: setValIndex.m,v 1.2 2009/06/17 15:57:57 ingo Exp $
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function varargout = setValIndex(varargin)

  %%% Check number in inputs
  if nargin ~= 2
    error('### This method accepts only two inputs. The first one must be the object and the second one an integer.');
  end
  
  obj = varargin{1};
  valIdx = varargin{2};
  
  %%% Check the correctness of the inputs
  if ~isa(obj, 'paramValue') || numel(obj) ~= 1
    error('### The first input must be a single paramValue object.');
  end
  if ~isnumeric(valIdx)
    error('### Please specify a integer for the value index.');
  end

  %%% Check if the new index is in range of the options.
  if valIdx > numel(obj.options)
    error('### The value index [%d] must be inside the range of the options [%d..%d]', valIdx, (numel(obj.options)>0), max(numel(obj.options)))
  end
  
  obj = copy(obj, nargout);
  
  obj.valIndex = valIdx;

  %%% Prepare output
  varargout{1} = obj;

end
