function error = preferencesForm(hTsgGUI)
%
% Input
% -----
% hTsgGUI ............ Handel to the main user interface
%
% Output
% ------
% error .............. 1: OK ; -1 : an error occured

% $Id$

error = -1;

% Get the data from the application GUI
% -------------------------------------
tsg = getappdata(hTsgGUI, 'tsg_data');

% set default uicontrol size
% --------------------------
height = 0.03;
length = .15;

% Define uicontrol start position
% -------------------------------
left   = .01;
bottom = .95;
inc_x  =  3 * length;
inc_y  =  0.01;

% preferences Uicontrols in a new figure
% ---------------------------------
hPreferencesFig = figure(...
  'BackingStore','off',...
  'Name', 'TSGQC PREFERENCES', ...
  'NumberTitle', 'off', ...
  'Resize', 'on', ...
  'Menubar','none', ...
  'Toolbar', 'none', ...
  'Tag', 'TSG_PREFERENCES', ...
  'Visible','on',...
  'WindowStyle', 'modal', ...
  'Units', 'normalized',...
  'Position',get(hTsgGUI,'Position'), ...
  'Color', get(0, 'DefaultUIControlBackgroundColor'));

% display climatology text
% -------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', ...
  'Fontsize', tsg.fontSize-1, ...
  'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'select climatology origin', ...
  'String', 'Climatology');

% display climatology uicontrol
% -----------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'BackgroundColor', 'w', ...
  'Style', 'popupmenu', ...
  'Fontsize', tsg.fontSize-2, ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.levitus_version, ...
  'Value', tsg.preference.levitus_value, ...
  'Tag', 'PREFERENCES_LEVITUS_VALUE');

bottom = bottom - inc_y - height;
if bottom < .1
  bottom = 0.95;
  left = left + inc_x;
end

% display climatology depth text
% -------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', ...
  'Fontsize', tsg.fontSize-1, ...
  'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'select climatology depth', ...
  'String', 'Climatology depth');

% display climatology depth  uicontrol
% ------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'BackgroundColor', 'w', ...
  'Style', 'popupmenu', ...
  'Fontsize', tsg.fontSize-2, ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.levitus_depth_string, ...
  'Value', tsg.preference.levitus_depth_value, ...
  'Tag', 'PREFERENCES_LEVITUS_DEPTH');

bottom = bottom - inc_y - height;
if bottom < .1
  bottom = 0.95;
  left = left + inc_x;
end

% display connected line text
% -------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', ...
  'Fontsize', tsg.fontSize-1, ...
  'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'select plot with connected line', ...
  'String', 'Plot with connectd line');

% display connected line uicontrol
% --------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'BackgroundColor', 'w', ...
  'Style', 'popupmenu', ...
  'Fontsize', tsg.fontSize-2, ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.plot_connected_string , ...
  'Value', tsg.preference.plot_connected_value , ...
  'Tag', 'PREFERENCES_PLOT_CONNECTED_LINE');


% display conventions field if exist
% ----------------------------------
% uicontrol(...
%   'Parent', hPreferencesFig, ...
%   'Units', 'normalized', ...
%   'Style', 'text', ...
%   'Fontsize', tsg.fontSize-2, ...
%   'HorizontalAlignment', 'left', ...
%   'Position', [left + 2*length, bottom, length, height], ...
%   'String', char(s.conventions));

bottom = bottom - inc_y - height;
if bottom < .1
  bottom = 0.95;
  left = left + inc_x;
end

% display connected line text
% -------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', ...
  'Fontsize', tsg.fontSize-1, ...
  'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'select coefficients type', ...
  'String', 'Coefficients type');

% display connected line uicontrol
% --------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'BackgroundColor', 'w', ...
  'Style', 'popupmenu', ...
  'Fontsize', tsg.fontSize-2, ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.coeff_type_string , ...
  'Value', tsg.preference.coeff_type_value , ...
  'Tag', 'PREFERENCES_COEFF_TYPE');

bottom = bottom - inc_y - height;
if bottom < .1
  bottom = 0.95;
  left = left + inc_x;
end

% CONTINUE PUSH BUTTON
% --------------------
% The Continue (valid)  button
uicontrol( ...
  'Parent', hPreferencesFig, ...
  'Style','pushbutton',...
  'Fontsize', tsg.fontSize,...
  'Units', 'normalized', ...
  'Position',[.01, .01, .1, .04],...
  'String','Continue',...
  'Interruptible','off',...
  'BusyAction','cancel',...
  'Tag','PREF_CONTINUE_BUTTON',...
  'Callback', @continueCallback);

% CANCEL PUSH BUTTON
% ------------------
% The cancel  button
uicontrol( ...
  'Parent', hPreferencesFig, ...
  'Style','pushbutton',...
  'Fontsize', tsg.fontSize,...
  'Units', 'normalized', ...
  'Position',[.2, .01, .1, .04],...
  'String','Cancel',...
  'Interruptible','off',...
  'BusyAction','cancel',...
  'Tag','PREF_CANCEL_BUTTON',...
  'Callback', @cancelCallback);

% Build structure container for graphic handles with tag property defined.
% ------------------------------------------------------------------------
prefs = guihandles(hPreferencesFig);

% record data struct in application data object
% ---------------------------------------------
% guidata(hHeaderFig, data);

% stop execution until push-button Continue was press
% ---------------------------------------------------
uiwait(hPreferencesFig);

%% Nested callback

% -----------------------------------------------------------------------
% Continue action, get uicontrol fields and populate tsg structure
% -----------------------------------------------------------------------
  function continueCallback(obj, event)

    % Save tsg structure
    % ------------------
    setappdata(hTsgGUI, 'tsg_data', tsg);
    
    % get the corresponding string from uicontrol using guihandles
    % and save value in tsg.preferences struct
    % ------------------------------------------------------------
    tsg.preference.levitus_value = ...
                      get(prefs.PREFERENCES_LEVITUS_VALUE, 'value');
    tsg.preference.levitus_depth_value = ...
                      get(prefs.PREFERENCES_LEVITUS_DEPTH, 'value');
    tsg.preference.plot_connected_value = ...
                      get(prefs.PREFERENCES_PLOT_CONNECTED_LINE, 'value');
    tsg.preference.coeff_type_value = ...
                      get(prefs.PREFERENCES_COEFF_TYPE, 'value');
    
    % Save tsg structure
    % ------------------
    setappdata(hTsgGUI, 'tsg_data', tsg);

    % close windows (replace call to uiresume(hHeaderFig))
    % ----------------------------------------------------
    close(hPreferencesFig);

    % flushes the event queue and updates the figure window
    % -----------------------------------------------------
    drawnow;

    % return with no error code (true)
    % --------------------------------
    error = 1;
    
    return

  end
% -----------------------------------------------------------------------
% Cancel button, no action
% -----------------------------------------------------------------------
  function cancelCallback(obj, event)

    % close windows
    % -------------
    close(hPreferencesFig);

    % flushes the event queue and updates the figure window
    % -----------------------------------------------------
    drawnow;

    % return error code (no change)
    % -----------------------------
    error = -1;

  end % end of cancelCallback nested function

end