function tsg_preferences(hTsgGUI, app_name, DEFAULT_PATH_FILE)
% tsg_preferences(S1,S2) returns structure tsg saved in S1.mat file
% and with S2 internal version number.
% If S1.mat dosn't exist, call tsg_initialisation to create it in
% prefdir directory
%
% Input
% -----
% hTsgGUI    ............ Handle to the main user interface
% app_name   ............ application name
%
% Output
% ------
% none
%
% $Id$
%

global VERSION

% init empty tsg structure
% ------------------------
tsg = [];

% Construct config file path
% --------------------------
config_file = [prefdir, filesep, app_name, '.mat'];

% Open config file
% ----------------
config = fopen( config_file, 'r' );
%config = -1;

% test fopen return value
% -----------------------
if config == -1

  % config file dosn't exist, call default tsg_initialisation
  % ---------------------------------------------------------
  tsg = tsg_initialisation;

  % ccall new config private function
  % ---------------------------------
  new_config;

else
  
  try    
    
    % if file exist, load in workspace
    % -----------------------------
    load( config_file, 'root', 'tsg' );
  
  catch
    warning('tsgqc_GUI:tsg_preferences', ...
      'Can''t load preference file ''%s''', config_file);  
    quitProgram(hTsgGUI, DEFAULT_PATH_FILE);
  end  
    
  try  
    % set current preference autoload in submenu option/preference
    % ------------------------------------------------------------
    set(findobj('tag', 'TAG_UIMENU_OPTION_PREFERENCES', ...
                'checked', root.preference.autoload));
    
  catch
    warning('tsgqc_GUI:tsg_preferences', ...
      ['Preference file ''%s''\nis malformed\n' ...
       'delete it.'], config_file);
     quitProgram(hTsgGUI, DEFAULT_PATH_FILE);
  end

  % If there no field version or wrong version, initialize
  % -------------------------------------------------------
  if ~isfield( root, 'version') || ~strcmp(root.version, VERSION)

    % call new config private function
    % --------------------------------
    new_config;

  end

end

% Save structure tsg
% ------------------
setappdata( hTsgGUI, 'tsg_data', tsg);

% save root in userdata property
% ------------------------------
set(0,'userdata', root);

% cas d'erreur si l'utilisation change de disque (cle USB -> disque dur
% par ex, self.path ne sera pas a jour et la lecture fichier genere une
% erreur
% if ~exist( root.path, 'dir' )
%   root.path = [pwd filesep];
% end

% ----------------------------------------------------------------------
% private function new_config
% ----------------------------------------------------------------------
  function new_config

    % init root structure to default values
    % -------------------------------------
    root.preference.autoload = 'off';
    root.version             = VERSION;

    % save root and tsg to prefdir mat file
    % -------------------------------------
    save(config_file, 'root', 'tsg');

    % save root in root object for next use
    % -------------------------------------
    set(0, 'userdata', root);

  end

end
