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 TITLE
% -------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize, 'FontWeight', 'bold',...
  'HorizontalAlignment', 'Left', ...
  'Position',[left, bottom, 2*length, height],'String', 'Climatology');

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

% 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',...
  'callback', @update_climato_depth);

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 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));

% display Calibration TITLE
% --------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize, 'FontWeight', 'bold',...
  'HorizontalAlignment', 'Left', ...
  'Position',[left, bottom, 2*length, height], 'String', 'Calibration coefficient');

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

% display coefficient type 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 coefficient type 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

% display Figure TITLE
% --------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize, 'FontWeight', 'bold',...
  'HorizontalAlignment', 'Left', ...
  'Position',[left, bottom, 2*length, height], 'String', 'Figure');

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

% display connected line uicontrol
% --------------------------------

% 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');

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');

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

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

% display map resolution 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.map_resolution_string, ...
  'Value', tsg.preference.map_resolution, ...
  'Tag', 'PREFERENCES_MAP_RESOLUTION');

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

% display QC Automatic Test TITLE
% --------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize, 'FontWeight', 'bold',...
  'HorizontalAlignment', 'Left', ...
  'Position',[left, bottom, 2*length, height], ...
  'String', 'Min/Max values for automatic QC');

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

% display ship speed min text
% -----------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text','Fontsize', tsg.fontSize-1,'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Select ship speed min (knots)', ...
  'String', 'Ship Speed Min (knots)');

% display ship speed min uicontrol
% --------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', 'BackgroundColor', 'w', ...
  'Fontsize', tsg.fontSize-2, 'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.ship_speed_min_string, ... 
  'Tag', 'PREFERENCES_SHIP_SPEED_MIN');

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

% display FLOW min text
% ----------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Select min Flow (liter/min)', 'String', 'Flow Min (l/minute)');

% display FLOW min uicontrol
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.flow_min_string, 'Tag', 'PREFERENCES_FLOW_MIN');

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

% display PRESS min text
% ----------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Select min pressure pump', 'String', 'Pressure Min (l/minute)');

% display PRESS min uicontrol
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.press_min_string, 'Tag', 'PREFERENCES_PRESS_MIN');

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

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

% display SSPS min uicontrol
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.ssps_min_string, 'Tag', 'PREFERENCES_SSPS_MIN');

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

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

% display SSPS max uicontrol
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.ssps_max_string, 'Tag', 'PREFERENCES_SSPS_MAX');

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

% display SSTP min text
% ----------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Select min SSTP', 'String', 'SSTP min (°C)');

% display SSTP min uicontrol
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.sstp_min_string, 'Tag', 'PREFERENCES_SSTP_MIN');

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

% display SSTP max text
% ----------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Select max SSTP', 'String', 'SSTP max (°C)');

% display SSTP max uicontrol
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.sstp_max_string, 'Tag', 'PREFERENCES_SSTP_MAX');

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

% display SSJT min text
% ----------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Select min SSJT', 'String', 'SSJT min (°C)');

% display SSJT min uicontrol
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.ssjt_min_string, 'Tag', 'PREFERENCES_SSJT_MIN');

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

% display SSJT max text
% ----------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Select max SSTP', 'String', 'SSJT max (°C)');

% display SSJT max uicontrol
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'String', tsg.preference.ssjt_max_string, 'Tag', 'PREFERENCES_SSJT_MAX');

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

% display format for dates  TITLE
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize, 'FontWeight', 'bold',...
  'HorizontalAlignment', 'Left', ...
  'Position',[left, bottom, 2*length, height], ...
  'String', 'Formats used for date');

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

% display date format for variable text
% -------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text','Fontsize', tsg.fontSize-1,'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Format is not available for change', ...
  'String', 'Date format for variable:');

% display date format for variable uicontrol
% ------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', 'BackgroundColor', 'w', ...
  'Fontsize', tsg.fontSize-2, 'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'Enable', 'inactive',...
  'TooltipString', 'Format is not available for change', ...
  'String', tsg.preference.date_format_variable, ... 
  'Tag', 'PREFERENCE_DATE_FORMAT_VARIABLE');

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

% display date format for attribute min text
% ------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'Format is not available for change', ...
  'String', 'Date format for attibute');

% display date format for attribute uicontrol
% -------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'Enable', 'inactive',...
  'TooltipString', 'Format is not available for change', ...
  'String', tsg.preference.date_format_attribute, ...
  'Tag', 'PREFERENCES_DATE_FORMAT_ATTRIBUTE');

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

% goto next column
% ----------------
bottom = 0.95;
left = left + inc_x;
  
% display DT_SMOOTH  TITLE
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize, 'FontWeight', 'bold',...
  'HorizontalAlignment', 'Left', ...
  'Position',[left, bottom, 2*length, height], ...
  'String', 'Smoothing of TSG time-series');

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

% display DT_SMOOTH in text
% ------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'value in minutes, beteewn 0 and 1339)', ...
  'String', 'TSG DT SMOOTH (in min)');

% display date format for attribute uicontrol
% -------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'TooltipString', 'value in minutes, beteewn 0 and 1339)', ...
  'String', tsg.preference.dt_smooth , ...
  'Tag', 'PREFERENCES_DT_SMOOTH');

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

% display MAXDIFF  TITLE
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize, 'FontWeight', 'bold',...
  'HorizontalAlignment', 'Left', ...
  'Position',[left, bottom, 2*length, 1.5 * height], ...
  'String', 'Maximum time difference between tsg data and water sample used to compute the difference');

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

% display DT_SMOOTH in text
% ------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'value in minutes, beteewn 0 and 1339, default 5)', ...
  'String', 'WS Dime diff (in min)');

% display date format for attribute uicontrol
% -------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'TooltipString', 'value in minutes, beteewn 0 and 1339, default 5)', ...
  'String', tsg.preference.ws_timediff , ...
  'Tag', 'PREFERENCES_WS_TIMEDIFF');

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

% display STDMAX  TITLE
% -------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize, 'FontWeight', 'bold',...
  'HorizontalAlignment', 'Left', ...
  'Position',[left, bottom, 2*length, 1.5*height], ...
  'String', 'Salinity, in 1 hour interval, should not depart the average for more than SAL_STD_MAX standard deviation');

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

% display DT_SM in text
% ------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', ...
  'Style', 'Text', 'Fontsize', tsg.fontSize-1, 'HorizontalAlignment', 'left', ...
  'Position',[left, bottom, length, height], ...
  'TooltipString', 'SSPS STD Max, default 0.1', ...
  'String', 'SSPS STD Max');

% display date format for attribute uicontrol
% -------------------------------------------
uicontrol(...
  'Parent', hPreferencesFig, ...
  'Units', 'normalized', 'Style', 'Edit', ...
  'Fontsize', tsg.fontSize-2, 'BackgroundColor', 'w', ...
  'HorizontalAlignment', 'right', ...
  'Position', [left + length, bottom, length, height], ...
  'TooltipString', 'SSPS STD Max, default 0.1', ...
  'String', tsg.preference.ssps_stdmax , ...
  'Tag', 'PREFERENCES_SSPS_STDMAX');

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.coeff_type_value = ...
      get(prefs.PREFERENCES_COEFF_TYPE, 'value');
    % Figure
    tsg.preference.plot_connected_value = ...
      get(prefs.PREFERENCES_PLOT_CONNECTED_LINE, 'value');
    tsg.preference.map_resolution = ...
      get(prefs.PREFERENCES_MAP_RESOLUTION, 'value');
    % QC Tests
    tsg.preference.flow_min_string = ...
      get(prefs.PREFERENCES_FLOW_MIN, 'string');
    tsg.preference.press_min_string = ...
      get(prefs.PREFERENCES_PRESS_MIN, 'string');
    tsg.preference.ship_speed_min_string = ...
      get(prefs.PREFERENCES_SHIP_SPEED_MIN, 'string');
    tsg.preference.ssps_min_string = ...
      get(prefs.PREFERENCES_SSPS_MIN, 'string');
    tsg.preference.ssps_max_string = ...
      get(prefs.PREFERENCES_SSPS_MAX, 'string');
    tsg.preference.ssjt_min_string = ...
      get(prefs.PREFERENCES_SSJT_MIN, 'string');
    tsg.preference.ssjt_max_string = ...
      get(prefs.PREFERENCES_SSJT_MAX, 'string');
    tsg.preference.sstp_min_string = ...
      get(prefs.PREFERENCES_SSTP_MIN, 'string');
    tsg.preference.sstp_max_string = ...
      get(prefs.PREFERENCES_SSTP_MAX, 'string');
    tsg.preference.dt_smooth = ...
      get(prefs.PREFERENCES_DT_SMOOTH, 'string');
    tsg.preference.ws_timediff = ...
      get(prefs.PREFERENCES_WS_TIMEDIFF, 'string');
    tsg.preference.ssps_stdmax = ...
      get(prefs.PREFERENCES_SSPS_STDMAX, 'string');
    

    % Save tsg structure
    % ------------------
    setappdata(hTsgGUI, 'tsg_data', tsg);
    
    % update structure tsg with derived value
    % ---------------------------------------
    updateTsgStructWithSmoothVars(hTsgGUI)
    
    % fill tsg calibration variables
    % ------------------------------
    updateTsgStructWithCalCoeff(hTsgGUI);

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

    % flushes the event queue and updates the figure window
    % -----------------------------------------------------
     drawnow;
    
    % refresh QC statistic panel
    % --------------------------
    display_QC( hTsgGUI );

    % 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

  % The climatology level are not the same between WOA and ISAS
  % -----------------------------------------------------------
  function update_climato_depth(obj, event)
    disp(get(prefs.PREFERENCES_LEVITUS_VALUE, 'value'))
    if get(prefs.PREFERENCES_LEVITUS_VALUE, 'value') == 3
      set(prefs.PREFERENCES_LEVITUS_DEPTH, 'string', {'5', '10'});
    else
      set(prefs.PREFERENCES_LEVITUS_DEPTH, 'string', {'0', '10'});
    end
  end


end