From 52a6ccbd7de5840fd49eacc45e5648817f8133e4 Mon Sep 17 00:00:00 2001
From: Jacques Grelet <jacques.grelet@ird.fr>
Date: Tue, 8 Jan 2008 22:08:31 +0000
Subject: [PATCH] =?UTF-8?q?affichage=20de=20la=20date,=20position=20et=20t?=
 =?UTF-8?q?emperature=20salinit=C3=A9=20dans=20des=20uicontrol=20s=C3=A9pa?=
 =?UTF-8?q?r=C3=A9s=20affiche=20le=20nom=20de=20fichier=20=C3=A9galement?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 tsgqc_GUI.m | 1941 +++++++++++++++++++++++++++------------------------
 1 file changed, 1042 insertions(+), 899 deletions(-)

diff --git a/tsgqc_GUI.m b/tsgqc_GUI.m
index eab3437..604b6dc 100644
--- a/tsgqc_GUI.m
+++ b/tsgqc_GUI.m
@@ -1,5 +1,5 @@
 function tsgqc_GUI
-% tsgqc_GUI 
+% tsgqc_GUI
 %
 % TSG (Thermosalinograph) Quality Control software
 %
@@ -28,981 +28,1124 @@ function tsgqc_GUI
 
 %%  Initialization tasks
 %   ********************
-    clc
-    
-    % Find program directory.
-    % functions (icons) should be store at a lower level
-    % add directories to Matlab search path, works on UNIX
-    % and Windows host
-    % ---------------------------------------------------
-    tsgqcname = mfilename;
-    fulltsgqcname = mfilename('fullpath');
-    DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ;
-    p = [pathsep,...
-         DEFAULT_PATH_FILE,[filesep 'tsg_util' pathsep],...
-         DEFAULT_PATH_FILE,[filesep 'tsg_data' pathsep],...
-         DEFAULT_PATH_FILE,[filesep 'tsg_io' pathsep]
-        ];
-    addpath( p, '-END' );
-    rehash;
+clc
+
+% Find program directory.
+% functions (icons) should be store at a lower level
+% add directories to Matlab search path, works on UNIX
+% and Windows host
+% ---------------------------------------------------
+tsgqcname = mfilename;
+fulltsgqcname = mfilename('fullpath');
+DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ;
+p = [pathsep,...
+  DEFAULT_PATH_FILE,[filesep 'tsg_util' pathsep],...
+  DEFAULT_PATH_FILE,[filesep 'tsg_data' pathsep],...
+  DEFAULT_PATH_FILE,[filesep 'tsg_io' pathsep]
+  ];
+addpath( p, '-END' );
+rehash;
+
+% Screen limits for the GUI
+% -------------------------
+set(0,'Units','normalized');
+guiLimits = get(0,'ScreenSize');
+guiLimits(1) = guiLimits(1) + 0.05;
+guiLimits(2) = guiLimits(2) + 0.1;
+guiLimits(3) = guiLimits(3) - 0.1;
+guiLimits(4) = guiLimits(4) - 0.2;
+
+%% Create and then hide the GUI as it is being constructed.
+% --------------------------------------------------------
+hMainFig = figure(...
+  'Name', 'TSG Validation', ...
+  'NumberTitle', 'off', ...
+  'Resize', 'on', ...
+  'Menubar','none', ...
+  'Toolbar', 'none', ...
+  'UserData', 'ButtonMotionOff', ...
+  'WindowButtonMotionFcn', @MouseMotion, ...
+  'CloseRequestFcn', @QuitProgram,...
+  'HandleVisibility','callback',...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'Position',guiLimits, ...
+  'Color', get( 0, 'DefaultUIControlBackgroundColor' ));
+
+%%  Construct the Menu
+%   -----------------
+hFileMenu = uimenu(...
+  'Parent', hMainFig,...
+  'HandleVisibility','callback',...
+  'Label', 'File');
+hOpenMenu = uimenu(...
+  'Parent', hFileMenu,...
+  'UserData', 'off', ...
+  'Label','Open',...
+  'Accelerator','O',...
+  'HandleVisibility','callback',...
+  'Callback', @OpenMenuCallback);
+hSaveMenu = uimenu(...
+  'Parent', hFileMenu,...
+  'Label','Save',...
+  'Accelerator','S',...
+  'UserData', 'off', ...
+  'HandleVisibility','callback',...
+  'Callback',@SaveMenuCallback);
+hQuitMenu = uimenu(...
+  'Parent',hFileMenu,...
+  'Label','Quit',...
+  'Separator','on',...
+  'Accelerator','Q',...
+  'HandleVisibility','callback',...
+  'Callback',@QuitMenuCallback);
+
+%%  Construct the Toolbar
+%   -----------------
+hToolbar       =   uitoolbar(...   % Toolbar for Open and Print buttons
+  'Parent',hMainFig, ...
+  'HandleVisibility','callback');
+hOpenPushtool  =   uipushtool(...   % Opendoc toolbar button
+  'Parent',hToolbar,...
+  'TooltipString','Open file',...
+  'CData', iconRead(fullfile(matlabroot, ...
+  '/toolbox/matlab/icons/opendoc.mat')),...
+  'HandleVisibility','callback', ...
+  'Tag','PUSHTOOL_OPEN',...
+  'UserData', 'off',...
+  'Enable', 'on',...
+  'ClickedCallback', @OpenMenuCallback);
+hSavePushtool  =   uipushtool(...   % Open Save toolbar button
+  'Parent',hToolbar,...
+  'TooltipString','Save NetCDF file',...
+  'CData',iconRead( ...
+  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'savedoc.mat']),...
+  'HandleVisibility','callback', ...
+  'Tag','PUSHTOOL_SAVE',...
+  'Enable', 'off',...
+  'ClickedCallback', @SaveMenuCallback);
+hZoomPushtool  =   uipushtool(...   % Open Zoom toolbar button
+  'Parent',hToolbar,...
+  'Separator', 'on', ...
+  'TooltipString','Zoom',...
+  'CData', iconRead(fullfile(matlabroot, ...
+  '/toolbox/matlab/icons/zoom.mat')),...
+  'HandleVisibility','callback', ...
+  'Tag','PUSHTOOL_ZOOM',...
+  'Enable', 'off',...
+  'ClickedCallback', @ZoomMenuCallback);
+hPanPushtool  =   uipushtool(...   % Open Pan toolbar button
+  'Parent',hToolbar,...
+  'TooltipString','Pan',...
+  'CData',iconRead(fullfile(matlabroot, ...
+  '/toolbox/matlab/icons/pan.mat')),...
+  'HandleVisibility','callback', ...
+  'Tag','PUSHTOOL_PAN',...
+  'Enable', 'off',...
+  'ClickedCallback', @PanMenuCallback);
+hQCPushtool  =   uipushtool(...   % Open QC toolbar button
+  'Parent',hToolbar,...
+  'TooltipString','Validation codes',...
+  'Separator', 'on', ...
+  'CData',iconRead(...
+  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'qcicon.mat']),...
+  'HandleVisibility','callback', ...
+  'Tag','QC',...
+  'UserData', 'off',...
+  'Enable', 'off',...
+  'ClickedCallback', @QCMenuCallback);
+hMapPushtool  =   uipushtool(...   % Open Map toolbar button
+  'Parent',hToolbar,...
+  'TooltipString','Map and ship track',...
+  'Separator', 'on', ...
+  'CData',iconRead(...
+  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'mapicon.mat']),...
+  'HandleVisibility','callback', ...
+  'Tag','PUSHTOOL_MAP',...
+  'UserData', 'off', ...
+  'Enable', 'off',...
+  'ClickedCallback', @MapMenuCallback);
+hClimPushtool  =   uipushtool(...   % Open Climatology toolbar button
+  'Parent',hToolbar,...
+  'TooltipString','Climatology',...
+  'Separator', 'on', ...
+  'CData',iconRead(...
+  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'climicon.mat']),...
+  'HandleVisibility','callback', ...
+  'Tag','PUSHTOOL_CLIM',...
+  'UserData', 'off',...
+  'Enable', 'off',...
+  'ClickedCallback', @ClimMenuCallback);
+hBottlePushtool  = uipushtool(...   % Open toolbar button
+  'Parent',hToolbar,...
+  'TooltipString','Plot the Samples',...
+  'Separator', 'on', ...
+  'CData',iconRead(...
+  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'bottleicon.mat']),...
+  'HandleVisibility','callback', ...
+  'Tag','BOTTLE',...
+  'Enable', 'off',...
+  'ClickedCallback', @BottleMenuCallback);
+hHeaderPushtool  = uipushtool(...   % Open headerForm button
+  'Parent',hToolbar,...
+  'TooltipString','Fill the header form',...
+  'Separator', 'on', ...
+  'CData',iconRead(...
+  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'hdricon.mat']),...
+  'HandleVisibility','callback', ...
+  'Tag','PUSHTOOL_HEADER',...
+  'Enable', 'off',...
+  'ClickedCallback', @HeaderMenuCallback);
+
+%% Dynamic text area that displays the loaded filename, date, position and
+%  salinity, temperature
+% ---------------------------------------------------
+
+% Dynamic text area that displays the date
+% ----------------------------------------
+uicontrol(...
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Style', 'Text', ...
+  'Fontsize', 12, ...
+  'Fontweight', 'bold', ...
+  'HorizontalAlignment', 'left', ...
+  'Position',[.02, .95, .03, .03], ...
+  'String', 'File:');
+
+hInfoFileText = uicontrol(...
+  'Parent', hMainFig, ...
+  'Style', 'text', ...
+  'Fontsize', 12, ...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'HorizontalAlignment', 'left', ...
+  'String', 'No file loaded', ...
+  'Position', [.05, .95, .10, .03]);
+
+% Text area that displays the date
+% --------------------------------
+uicontrol(...
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Style', 'Text', ...
+  'Fontsize', 12, ...
+  'Fontweight', 'bold', ...
+  'HorizontalAlignment', 'left', ...
+  'Position',[.17, .95, .05, .03], ...
+  'String', 'Date:');
+
+hInfoDateText = uicontrol(...
+  'Parent', hMainFig, ...
+  'Style', 'text', ...
+  'Fontsize', 12, ...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'HorizontalAlignment', 'left', ...
+  'String', 'N/A', ...
+  'Position', [.20, .95, .09, .03]);
+
+% Text area that displays the latitude
+% ------------------------------------
+uicontrol(...
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Style', 'Text', ...
+  'Fontsize', 12, ...
+  'Fontweight', 'bold', ...
+  'HorizontalAlignment', 'left', ...
+  'Position',[.30, .95, .04, .03], ...
+  'String', 'Latitude:');
+
+hInfoLatText = uicontrol(...
+  'Parent', hMainFig, ...
+  'Style', 'text', ...
+  'Fontsize', 12, ...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'HorizontalAlignment', 'left', ...
+  'String', 'N/A', ...
+  'Position', [.35, .95, .09, .03]);
+
+% Text area that displays the longitude
+% -------------------------------------
+uicontrol(...
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Style', 'Text', ...
+  'Fontsize', 12, ...
+  'Fontweight', 'bold', ...
+  'HorizontalAlignment', 'left', ...
+  'Position',[.45, .95, .05, .03], ...
+  'String', 'Longitude:');
+
+hInfoLongText = uicontrol(...
+  'Parent', hMainFig, ...
+  'Style', 'text', ...
+  'Fontsize', 12, ...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'HorizontalAlignment', 'left', ...
+  'String', 'N/A', ...
+  'Position', [.51, .95, .09, .03]);
+
+% Text area that display salinity and temperature
+% -----------------------------------------------
+uicontrol(...
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Style', 'Text', ...
+  'Fontsize', 12, ...
+  'Fontweight', 'bold', ...
+  'HorizontalAlignment', 'left', ...
+  'Position',[.6, .95, .03, .03], ...
+  'String', 'SSPS:');
+
+hInfoSSPSText = uicontrol(...
+  'Parent', hMainFig, ...
+  'Style', 'text', ...
+  'Fontsize', 12, ...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'HorizontalAlignment', 'left', ...
+  'String', 'N/A', ...
+  'Position', [.64, .95, .05, .03]);
+
+uicontrol(...
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Style', 'Text', ...
+  'Fontsize', 12, ...
+  'Fontweight', 'bold', ...
+  'HorizontalAlignment', 'left', ...
+  'Position',[.7, .95, .03, .03], ...
+  'String', 'SSJT:');
+
+hInfoSSJTText = uicontrol(...
+  'Parent', hMainFig, ...
+  'Style', 'text', ...
+  'Fontsize', 12, ...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'HorizontalAlignment', 'left', ...
+  'String', 'N/A', ...
+  'Position', [.74, .95, .05, .03]);
+
+uicontrol(...
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Style', 'Text', ...
+  'Fontsize', 12, ...
+  'Fontweight', 'bold', ...
+  'HorizontalAlignment', 'left', ...
+  'Position',[.8, .95, .03, .03], ...
+  'String', 'SSTP:');
+
+hInfoSSTPText = uicontrol(...
+  'Parent', hMainFig, ...
+  'Style', 'text', ...
+  'Fontsize', 12, ...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'HorizontalAlignment', 'left', ...
+  'String', 'N/A', ...
+  'Position', [.84, .95, .05, .03]);
+
+%% Construct the plot axes
+% -----------------------
+hPlotAxes(1) = axes(...     % the axes for plotting Salinity
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Visible', 'off', ...
+  'HandleVisibility','callback', ...
+  'Position',[.05, .6, .9, .32]);
+hPlotAxes(2) = axes(...     % the axes for plotting temperature
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Visible', 'off', ...
+  'HandleVisibility','callback', ...
+  'Position',[.05, .3, .9, .25]);
+hPlotAxes(3) = axes(...     % the axes for plotting ship velocity
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Visible', 'off', ...
+  'HandleVisibility','callback', ...
+  'Position',[.05, .05, .9, .2]);
+
+% The map will be plot in a uipanel
+hMapPanel = uipanel( ...
+  'Parent', hMainFig, ...
+  'Units', 'normalized', ...
+  'Visible', 'off', ...
+  'Position',[0, 0, 1, .57]);
+
+hPlotAxes(4) = axes(...     % the axes for plotting ship track map
+  'Parent', hMapPanel, ...
+  'Units', 'normalized', ...
+  'Visible', 'off', ...
+  'Color', 'none', ...
+  'UserData', 'off', ...
+  'UserData', [], ...
+  'HandleVisibility','callback', ...
+  'Position',[.05, .05, .9, .9]);
+
+
+%% Construct the context menu for the Quality control codes
+% -------------------------------------------------------
+hQcCmenu = uicontextmenu(...
+  'Parent', hMainFig, ...
+  'HandleVisibility','callback' );
+hQcCmenuNocontrol = uimenu(...
+  'Parent', hQcCmenu,...
+  'HandleVisibility','off', ...
+  'Label', 'No control',...
+  'ForegroundColor', 'k',...
+  'Callback', @QcNoControl);
+hQcCmenuGood      = uimenu(...
+  'Parent', hQcCmenu,...
+  'HandleVisibility','off', ...
+  'Label', 'Good',...
+  'ForegroundColor', 'b',...
+  'Callback', @QcGood);
+hQcCmenuProbGood  = uimenu(...
+  'Parent', hQcCmenu,...
+  'HandleVisibility','off', ...
+  'Label', 'Probably Good',...
+  'Callback', @QcProbGood,...
+  'ForegroundColor', 'g');
+hQcCmenuProbBad   = uimenu(...
+  'Parent', hQcCmenu,...
+  'HandleVisibility','off', ...
+  'Label', 'Probably bad',...
+  'ForegroundColor', 'm',...
+  'Callback', @QcProbBad);
+hQcCmenuBad       = uimenu(...
+  'Parent', hQcCmenu,...
+  'HandleVisibility','off', ...
+  'Label', 'Bad',...
+  'ForegroundColor', 'r',...
+  'Callback', @QcBad);
+
+
+% Initialisation
+% --------------
+tsg_initialisation(hMainFig, hQcCmenu)
+
 
-    % Screen limits for the GUI
-    % -------------------------
-    set(0,'Units','normalized');
-    guiLimits = get(0,'ScreenSize');
-    guiLimits(1) = guiLimits(1) + 0.05;
-    guiLimits(2) = guiLimits(2) + 0.1;
-    guiLimits(3) = guiLimits(3) - 0.1;
-    guiLimits(4) = guiLimits(4) - 0.2;
-    
-    % Create and then hide the GUI as it is being constructed.
-    % --------------------------------------------------------
-    hMainFig = figure(...
-                'Name', 'TSG Validation', ...
-                'NumberTitle', 'off', ...
-                'Resize', 'on', ...
-                'Menubar','none', ...
-                'Toolbar', 'none', ...
-                'UserData', 'ButtonMotionOff', ...
-                'WindowButtonMotionFcn', @MouseMotion, ...
-                'CloseRequestFcn', @QuitProgram,...
-                'HandleVisibility','callback',...
-                'Visible','on',...
-                'Units', 'normalized',...
-                'Position',guiLimits, ...
-                'Color', get( 0, 'DefaultUIControlBackgroundColor' ));
-    
-    %  Construct the Menu
-    %   -----------------
-    hFileMenu = uimenu(...
-                    'Parent', hMainFig,...
-                    'HandleVisibility','callback',...
-                    'Label', 'File');
-    hOpenMenu = uimenu(...
-                    'Parent', hFileMenu,...
-                    'UserData', 'off', ...
-                    'Label','Open',...
-                    'Accelerator','O',...
-                    'HandleVisibility','callback',...
-                    'Callback', @OpenMenuCallback);
-    hSaveMenu = uimenu(...
-                    'Parent', hFileMenu,...
-                    'Label','Save',...
-                    'Accelerator','S',...
-                    'UserData', 'off', ...
-                    'HandleVisibility','callback',...
-                    'Callback',@SaveMenuCallback);
-    hQuitMenu = uimenu(...
-                    'Parent',hFileMenu,...
-                    'Label','Quit',...
-                    'Separator','on',...
-                    'Accelerator','Q',...
-                    'HandleVisibility','callback',...
-                    'Callback',@QuitMenuCallback);
-
-    %  Construct the Toolbar
-    %   -----------------
-    hToolbar       =   uitoolbar(...   % Toolbar for Open and Print buttons
-                        'Parent',hMainFig, ...
-                        'HandleVisibility','callback');
-    hOpenPushtool  =   uipushtool(...   % Opendoc toolbar button
-                        'Parent',hToolbar,...
-                        'TooltipString','Open file',...
-                        'CData', iconRead(fullfile(matlabroot, ...
-                                     '/toolbox/matlab/icons/opendoc.mat')),...
-                        'HandleVisibility','callback', ...
-                        'Tag','PUSHTOOL_OPEN',...
-                        'UserData', 'off',...
-                        'Enable', 'on',...
-                        'ClickedCallback', @OpenMenuCallback);
-    hSavePushtool  =   uipushtool(...   % Open Save toolbar button
-                        'Parent',hToolbar,...
-                        'TooltipString','Save NetCDF file',...
-                        'CData',iconRead( ...
-                           [DEFAULT_PATH_FILE 'tsg_icon' filesep 'savedoc.mat']),...
-                        'HandleVisibility','callback', ...
-                        'Tag','PUSHTOOL_SAVE',...
-                        'Enable', 'off',...
-                        'ClickedCallback', @SaveMenuCallback);
-    hZoomPushtool  =   uipushtool(...   % Open Zoom toolbar button
-                        'Parent',hToolbar,...
-                        'Separator', 'on', ...
-                        'TooltipString','Zoom',...
-                        'CData', iconRead(fullfile(matlabroot, ...
-                                     '/toolbox/matlab/icons/zoom.mat')),...
-                        'HandleVisibility','callback', ...
-                        'Tag','PUSHTOOL_ZOOM',...
-                        'Enable', 'off',...
-                        'ClickedCallback', @ZoomMenuCallback);
-    hPanPushtool  =   uipushtool(...   % Open Pan toolbar button
-                        'Parent',hToolbar,...
-                        'TooltipString','Pan',...
-                        'CData',iconRead(fullfile(matlabroot, ...
-                                      '/toolbox/matlab/icons/pan.mat')),...
-                        'HandleVisibility','callback', ...
-                        'Tag','PUSHTOOL_PAN',...
-                        'Enable', 'off',...
-                        'ClickedCallback', @PanMenuCallback);
-    hQCPushtool  =   uipushtool(...   % Open QC toolbar button
-                        'Parent',hToolbar,...
-                        'TooltipString','Validation codes',...
-                        'Separator', 'on', ...
-                        'CData',iconRead(...
-                            [DEFAULT_PATH_FILE 'tsg_icon' filesep 'qcicon.mat']),...
-                        'HandleVisibility','callback', ...
-                        'Tag','QC',...
-                        'UserData', 'off',...
-                        'Enable', 'off',...
-                        'ClickedCallback', @QCMenuCallback);
-    hMapPushtool  =   uipushtool(...   % Open Map toolbar button
-                        'Parent',hToolbar,...
-                        'TooltipString','Map and ship track',...
-                        'Separator', 'on', ...
-                        'CData',iconRead(...
-                            [DEFAULT_PATH_FILE 'tsg_icon' filesep 'mapicon.mat']),...
-                        'HandleVisibility','callback', ...
-                        'Tag','PUSHTOOL_MAP',...
-                        'UserData', 'off', ...
-                        'Enable', 'off',...
-                        'ClickedCallback', @MapMenuCallback);
-    hClimPushtool  =   uipushtool(...   % Open Climatology toolbar button
-                        'Parent',hToolbar,...
-                        'TooltipString','Climatology',...
-                        'Separator', 'on', ...
-                        'CData',iconRead(...
-                           [DEFAULT_PATH_FILE 'tsg_icon' filesep 'climicon.mat']),...
-                        'HandleVisibility','callback', ...
-                        'Tag','PUSHTOOL_CLIM',...
-                        'UserData', 'off',...
-                        'Enable', 'off',...
-                        'ClickedCallback', @ClimMenuCallback);
-    hBottlePushtool  = uipushtool(...   % Open toolbar button
-                        'Parent',hToolbar,...
-                        'TooltipString','Plot the Samples',...
-                        'Separator', 'on', ...
-                        'CData',iconRead(...
-                         [DEFAULT_PATH_FILE 'tsg_icon' filesep 'bottleicon.mat']),...
-                        'HandleVisibility','callback', ...
-                        'Tag','BOTTLE',...
-                        'Enable', 'off',...
-                        'ClickedCallback', @BottleMenuCallback);
-    hHeaderPushtool  = uipushtool(...   % Open headerForm button
-                        'Parent',hToolbar,...
-                        'TooltipString','Fill the header form',...
-                        'Separator', 'on', ...
-                        'CData',iconRead(...
-                         [DEFAULT_PATH_FILE 'tsg_icon' filesep 'hdricon.mat']),...
-                        'HandleVisibility','callback', ...
-                        'Tag','PUSHTOOL_HEADER',...
-                        'Enable', 'off',...
-                        'ClickedCallback', @HeaderMenuCallback);                      
-
-    % Static text that displays the position, salinity and temperature
-    % ----------------------------------------------------------------
-    hInfoText = uicontrol(...
-                'Parent', hMainFig, ...
-                'Style', 'text', ...
-                'Fontsize', 12, ...
-                'Fontweight', 'bold', ...
-                'Visible','on',...
-                'Units', 'normalized',...
-                'String', 'Information sur la position du curseur', ...
-                'Position', [.05, .95, .9, .03]);
-
-    
-    % Construct the plot axes
-    % -----------------------
-    hPlotAxes(1) = axes(...     % the axes for plotting Salinity
-                'Parent', hMainFig, ...
-                'Units', 'normalized', ...
-                'Visible', 'off', ...
-                'HandleVisibility','callback', ...
-                'Position',[.05, .6, .9, .32]); 
-    hPlotAxes(2) = axes(...     % the axes for plotting temperature
-                'Parent', hMainFig, ...
-                'Units', 'normalized', ...
-                'Visible', 'off', ...
-                'HandleVisibility','callback', ...
-                'Position',[.05, .3, .9, .25]); 
-    hPlotAxes(3) = axes(...     % the axes for plotting ship velocity
-                'Parent', hMainFig, ...
-                'Units', 'normalized', ...
-                'Visible', 'off', ...
-                'HandleVisibility','callback', ...
-                'Position',[.05, .05, .9, .2]); 
-            
-    % The map will be plot in a uipanel
-    hMapPanel = uipanel( ...
-                'Parent', hMainFig, ...
-                'Units', 'normalized', ...
-                'Visible', 'off', ...
-                'Position',[0, 0, 1, .57]); 
-                
-    hPlotAxes(4) = axes(...     % the axes for plotting ship track map
-                'Parent', hMapPanel, ...
-                'Units', 'normalized', ...
-                'Visible', 'off', ...
-                'Color', 'none', ...
-                'UserData', 'off', ...
-                'UserData', [], ...
-                'HandleVisibility','callback', ...
-                'Position',[.05, .05, .9, .9]); 
-                     
-    
-    % Construct the context menu for the Quality control codes
-    % -------------------------------------------------------
-    hQcCmenu = uicontextmenu(...
-                           'Parent', hMainFig, ...
-                           'HandleVisibility','callback' );
-    hQcCmenuNocontrol = uimenu(...
-                            'Parent', hQcCmenu,... 
-                            'HandleVisibility','off', ...
-                            'Label', 'No control',...
-                            'ForegroundColor', 'k',...
-                            'Callback', @QcNoControl);
-    hQcCmenuGood      = uimenu(...
-                            'Parent', hQcCmenu,... 
-                            'HandleVisibility','off', ...
-                            'Label', 'Good',...
-                            'ForegroundColor', 'b',...
-                            'Callback', @QcGood);
-    hQcCmenuProbGood  = uimenu(...
-                            'Parent', hQcCmenu,... 
-                            'HandleVisibility','off', ...
-                            'Label', 'Probably Good',...
-                            'Callback', @QcProbGood,...
-                            'ForegroundColor', 'g');
-    hQcCmenuProbBad   = uimenu(...
-                            'Parent', hQcCmenu,... 
-                            'HandleVisibility','off', ...
-                            'Label', 'Probably bad',...
-                            'ForegroundColor', 'm',...
-                             'Callback', @QcProbBad);
-    hQcCmenuBad       = uimenu(...
-                            'Parent', hQcCmenu,... 
-                            'HandleVisibility','off', ...
-                            'Label', 'Bad',...
-                            'ForegroundColor', 'r',...
-                            'Callback', @QcBad);
-
-                        
-    % Initialisation
-    % --------------
-    tsg_initialisation(hMainFig, hQcCmenu)    
-
-    
 %  Callbacks for tsgcqc_GUI
 %  ************************
 
-    %----------------------------------------------------------------------
-    function OpenMenuCallback(hObject, eventdata)
-    % Callback function run when the Open menu item is selected    
-    
-        % Pointer set to watch during reading and plotting
-        % ------------------------------------------------
-        set( hMainFig, 'Pointer', 'watch' );
-    
-        % Make the filename
-        % ATTENTION : function OpenMenuCallback(hObject, eventdata)
-        % This has to be made general for UNIX and WINDOWS system
-        % ---------------------------------------------------------
-        [filename, pathname, filterIndex] = uigetfile( ...
-                    {'*.txt';'*.xml';'*.nc';'*.btl'}, 'Pick a file');
-
-        error1 = -1;
-        error2 = -1;
-        
-        if ~isequal(filename, 0)
-            
-            % Read the data
-            % -------------
-            switch filterIndex
-              
-              case 1
-                error1 = readTsgDataTxt( hMainFig, filename );
-              case 2
-                error1 = readTsgDataXML( hMainFig, filename );
-              case 3
-                error1 = readTsgDataNetCDF( hMainFig, filename );
-                %# a modifier
-                if error1 == 1
-                  error2 = error1;
-                end  
-              case 4
-                error2 = readBucketData(hMainFig, filename );
-              otherwise
-                return;
-            
-            end
+%----------------------------------------------------------------------
+  function OpenMenuCallback(hObject, eventdata)
+    % Callback function run when the Open menu item is selected
 
-            % A TSG file has been read. Plot the data.
-            % ----------------------------------------
-            if error1 ~= -1
-                
-                % A TSG file has been open and read
-                % ---------------------------------
-                set( hOpenMenu, 'UserData', 'on' );
-                hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_');
-                set(hdl_pushtool, 'Enable', 'on');
-              
-            
-                % The callback to detect the mouse motion can be set to on
-                % --------------------------------------------------------
-                set( hMainFig, 'UserData', 'ButtonMotionOn');
-                
-                % Make the Salinity, temperature and velocity plot
-                % ------------------------------------------------
-                plot_SalTempVel( hMainFig, hPlotAxes );
-            
-                % Plot the Map with the ship trackline
-                % ------------------------------------
-                plotmap( hMainFig, hPlotAxes)
-        
-            end
-        end
+    % Pointer set to watch during reading and plotting
+    % ------------------------------------------------
+    set( hMainFig, 'Pointer', 'watch' );
 
-        % Merge the different water sample (NetCdf or ASCII files) in
-        % a unique structure : 'sample'
-        % -----------------------------------------------------------
-        %@ desactive le merge pour l'instant en attente d'une structure de
-        %données validee
-        %@[sample] = tsg_mergesample( hMainFig );
-               
-        %@ Save the 'sample' struct. as an application data
-        % ------------------------------------------------
-        %if ~isempty( sample )
-        %    setappdata( hMainFig, 'sample', sample );
-        %end
+    % Make the filename
+    % ATTENTION : function OpenMenuCallback(hObject, eventdata)
+    % This has to be made general for UNIX and WINDOWS system
+    % ---------------------------------------------------------
+    [filename, pathname, filterIndex] = uigetfile( ...
+      {'*.txt';'*.xml';'*.nc';'*.btl'}, 'Pick a file');
+
+    error1 = -1;
+    error2 = -1;
+
+    if ~isequal(filename, 0)
+
+      % Read the data
+      % -------------
+      switch filterIndex
+
+        case 1
+          error1 = readTsgDataTxt( hMainFig, filename );
+        case 2
+          error1 = readTsgDataXML( hMainFig, filename );
+        case 3
+          error1 = readTsgDataNetCDF( hMainFig, filename );
+          %# a modifier
+          if error1 == 1
+            error2 = error1;
+          end
+        case 4
+          error2 = readBucketData(hMainFig, filename );
+        otherwise
+          return;
 
-        % Plot Salinity bucket
+      end
+
+      % A TSG file has been read. Plot the data.
+      % ----------------------------------------
+      if error1 ~= -1
+
+        % A TSG file has been open and read
+        % ---------------------------------
+        set( hOpenMenu, 'UserData', 'on' );
+        hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_');
+        set(hdl_pushtool, 'Enable', 'on');
+
+        % update the display
+        % ------------------
+        set( hInfoFileText, 'String', filename);
+
+        % The callback to detect the mouse motion can be set to on
+        % --------------------------------------------------------
+        set( hMainFig, 'UserData', 'ButtonMotionOn');
+
+        % Make the Salinity, temperature and velocity plot
         % ------------------------------------------------
-        if error2 ~= -1             
-            plot_SalTsgSample( hMainFig, hPlotAxes );
-        end
-        
-        % Pointer reset to arrow
-        % ----------------------
-        set( hMainFig, 'Pointer', 'arrow' );
+        plot_SalTempVel( hMainFig, hPlotAxes );
+
+        % Plot the Map with the ship trackline
+        % ------------------------------------
+        plotmap( hMainFig, hPlotAxes)
 
+      end
     end
 
-    %----------------------------------------------------------------------
-    function ZoomMenuCallback(hObject, eventdata)
-    % Callback function run when the Open menu item is selected    
-        
-        % Returns a zoom mode object for the figure handle
-        hZoom = zoom(hMainFig);
-        % Specifies whether this mode is currently enabled on the figure
-        zoomOnOff = get(hZoom, 'Enable' );
-        switch zoomOnOff
-            case 'on'
-                zoom off
-                zoomAdaptiveDateTicks('off');
-            case 'off'
-                pan off
-                set(hQCPushtool, 'UserData', 'off' );
-
-                zoom on
-                zoomAdaptiveDateTicks('on');
-        end
-      %  zoomColor = get(hZoomPushtool,'CData');
-      % set(hZoomplusPushtool,'CData', zoomColor);
+    % Merge the different water sample (NetCdf or ASCII files) in
+    % a unique structure : 'sample'
+    % -----------------------------------------------------------
+    %@ desactive le merge pour l'instant en attente d'une structure de
+    %données validee
+    %@[sample] = tsg_mergesample( hMainFig );
+
+    %@ Save the 'sample' struct. as an application data
+    % ------------------------------------------------
+    %if ~isempty( sample )
+    %    setappdata( hMainFig, 'sample', sample );
+    %end
+
+    % Plot Salinity bucket
+    % ------------------------------------------------
+    if error2 ~= -1
+      plot_SalTsgSample( hMainFig, hPlotAxes );
     end
 
-    %----------------------------------------------------------------------
-    function PanMenuCallback(hObject, eventdata)
-    % Callback function run when the Open menu item is selected    
-        
-        % Returns a pan mode object for the figure handle
-        hPan = pan(hMainFig);
-        % Specifies whether this mode is currently enabled on the figure
-        panOnOff = get(hPan, 'Enable' );
-        switch panOnOff
-            case 'on'
-                pan off
-                panAdaptiveDateTicks('off');
-            case 'off'
-                zoom off
-                set(hQCPushtool, 'UserData', 'off' );
-
-                pan on
-                panAdaptiveDateTicks('on');
-                
-        end
+    % Pointer reset to arrow
+    % ----------------------
+    set( hMainFig, 'Pointer', 'arrow' );
+
+  end
+
+%----------------------------------------------------------------------
+  function ZoomMenuCallback(hObject, eventdata)
+    % Callback function run when the Open menu item is selected
+
+    % Returns a zoom mode object for the figure handle
+    hZoom = zoom(hMainFig);
+    % Specifies whether this mode is currently enabled on the figure
+    zoomOnOff = get(hZoom, 'Enable' );
+    switch zoomOnOff
+      case 'on'
+        zoom off
+        zoomAdaptiveDateTicks('off');
+      case 'off'
+        pan off
+        set(hQCPushtool, 'UserData', 'off' );
+
+        zoom on
+        zoomAdaptiveDateTicks('on');
     end
+    %  zoomColor = get(hZoomPushtool,'CData');
+    % set(hZoomplusPushtool,'CData', zoomColor);
+  end
+
+%----------------------------------------------------------------------
+  function PanMenuCallback(hObject, eventdata)
+    % Callback function run when the Open menu item is selected
+
+    % Returns a pan mode object for the figure handle
+    hPan = pan(hMainFig);
+    % Specifies whether this mode is currently enabled on the figure
+    panOnOff = get(hPan, 'Enable' );
+    switch panOnOff
+      case 'on'
+        pan off
+        panAdaptiveDateTicks('off');
+      case 'off'
+        zoom off
+        set(hQCPushtool, 'UserData', 'off' );
+
+        pan on
+        panAdaptiveDateTicks('on');
+
+    end
+  end
 
-    %----------------------------------------------------------------------
-    function QCMenuCallback(gcbo, eventdata,handles)
+%----------------------------------------------------------------------
+  function QCMenuCallback(gcbo, eventdata,handles)
     % Callback function run when the QC pushbutton is selected
-        
-        % Desactivate the Zoom and Pan functions.
+
+    % Desactivate the Zoom and Pan functions.
+    % ---------------------------------------
+    zoom off; pan off
+    panAdaptiveDateTicks('off');zoomAdaptiveDateTicks('off');
+
+    % Retrieve named application data
+    % -------------------------------
+    tsg = getappdata( hMainFig, 'tsg_data');
+
+    % Toggle the tag of the Qc pushbutton to 'on' or 'off'
+    % ----------------------------------------------------
+    switch get(hQCPushtool, 'UserData');
+      case 'off'
+        set(hQCPushtool, 'UserData', 'on' );
+        set(hPlotAxes(1),'UIContextMenu', hQcCmenu);
+        set( hMainFig, 'Pointer', 'crosshair');
+      case 'on'
+        set(hQCPushtool, 'UserData', 'off' );
+        set(hPlotAxes(1),'UIContextMenu', []);
+        set(hMainFig,'Pointer','arrow');
+    end
+
+    qualityCode = -1;
+    ind = [];
+    while strcmp( get(hQCPushtool, 'UserData'),'on')
+
+      k = waitforbuttonpress;
+
+      % If the QC pushbutton is pressed we quit the callback
+      % ----------------------------------------------------
+      if strcmp( get(hQCPushtool, 'UserData'),'off')
+
+        % Desactivate the context menu use to choose the
+        % Quality Codes
+        % ----------------------------------------------
+        set(hQcCmenu, 'Visible', 'off');
+        break
+      end
+
+      % Test if the right mouse button is clicked
+      % -----------------------------------------
+      if strcmp(get(hMainFig, 'SelectionType'), 'alt') && ~isempty(ind)
+        % Wait for a QC Context Menu choice : The user choose the
+        % quality code
+        % -------------------------------------------------------
+        uiwait
+        qualityCode = 1;
+
+      else
+
+        % Mouse motion callback desactivated when a selection is
+        % made. Otherwise there is a conflict with the map if it
+        % is activated
+        % -------------------------------------------------------
+        set( hMainFig, 'UserData', 'ButtonMotionOff');
+
+        % Selection of the data within the figure
         % ---------------------------------------
-        zoom off; pan off
-        panAdaptiveDateTicks('off');zoomAdaptiveDateTicks('off');
+        point1 = get(gca,'CurrentPoint');    % button down detected
+        finalRect = rbbox;                   % return figure units
+        point2 = get(gca,'CurrentPoint');    % button up detected
 
-        % Retrieve named application data
-        % -------------------------------
-        tsg = getappdata( hMainFig, 'tsg_data');
-        
-        % Toggle the tag of the Qc pushbutton to 'on' or 'off'
-        % ----------------------------------------------------
-        switch get(hQCPushtool, 'UserData'); 
-            case 'off'
-                set(hQCPushtool, 'UserData', 'on' );
-                set(hPlotAxes(1),'UIContextMenu', hQcCmenu);
-                set( hMainFig, 'Pointer', 'crosshair');
-            case 'on'
-                set(hQCPushtool, 'UserData', 'off' );
-                set(hPlotAxes(1),'UIContextMenu', []);
-                set(hMainFig,'Pointer','arrow');
-        end
-        
-        qualityCode = -1;
-        ind = [];
-        while strcmp( get(hQCPushtool, 'UserData'),'on')
-        
-            k = waitforbuttonpress;
-        
-            % If the QC pushbutton is pressed we quit the callback
-            % ----------------------------------------------------
-            if strcmp( get(hQCPushtool, 'UserData'),'off')
-                        
-                % Desactivate the context menu use to choose the
-                % Quality Codes
-                % ----------------------------------------------
-                set(hQcCmenu, 'Visible', 'off');
-                break
-            end
+        point1 = point1(1,1:2);              % extract x and y
+        point2 = point2(1,1:2);
 
-            % Test if the right mouse button is clicked
-            % -----------------------------------------
-            if strcmp(get(hMainFig, 'SelectionType'), 'alt') && ~isempty(ind)
-                % Wait for a QC Context Menu choice : The user choose the
-                % quality code
-                % -------------------------------------------------------
-                uiwait
-                qualityCode = 1;
+        p1 = min(point1,point2);
+        p2 = max(point1,point2);             % calculate locations
 
-            else
+        ind = find(tsg.DAYD > p1(1,1) & tsg.DAYD < p2(1,1) & ...
+          tsg.SSPS > p1(1,2) & tsg.SSPS < p2(1,2));
 
-                % Mouse motion callback desactivated when a selection is
-                % made. Otherwise there is a conflict with the map if it
-                % is activated
-                % -------------------------------------------------------
-                set( hMainFig, 'UserData', 'ButtonMotionOff');
-                
-                % Selection of the data within the figure
-                % ---------------------------------------
-                point1 = get(gca,'CurrentPoint');    % button down detected
-                finalRect = rbbox;                   % return figure units
-                point2 = get(gca,'CurrentPoint');    % button up detected
-
-                point1 = point1(1,1:2);              % extract x and y
-                point2 = point2(1,1:2);
-        
-                p1 = min(point1,point2); 
-                p2 = max(point1,point2);             % calculate locations
-
-                ind = find(tsg.DAYD > p1(1,1) & tsg.DAYD < p2(1,1) & ...
-                            tsg.SSPS > p1(1,2) & tsg.SSPS < p2(1,2));
-                
-                % As soon as a modification took place the data should be
-                % saved
-                % -------------------------------------------------------
-                set( hSaveMenu, 'UserData', 'on' );
-                        
-                % Selection made : Mouse motion callback re-activated
-                % --------------------------------------------------
-                set( hMainFig, 'UserData', 'ButtonMotionOn');
+        % As soon as a modification took place the data should be
+        % saved
+        % -------------------------------------------------------
+        set( hSaveMenu, 'UserData', 'on' );
 
-            end
+        % Selection made : Mouse motion callback re-activated
+        % --------------------------------------------------
+        set( hMainFig, 'UserData', 'ButtonMotionOn');
 
-            % Plot the data with the color of the chosen quality Code.
-            % Is it the right place for this source code ????
-            % --------------------------------------------------------
-            if qualityCode ~= -1
-                
-                quality = get( hQcCmenu, 'UserData');
-
-                tsg.SSPS_QC(ind) = quality.Code;   
-                
-                % Save the modifications
-                % ----------------------
-                setappdata( hMainFig, 'tsg_data', tsg);
-               
-                axes(hPlotAxes(1));
-                hold on
-                color = ['.' quality.Color];
-                plot(tsg.DAYD(ind), tsg.SSPS(ind), color );
-                hold off
-                
-            end
-        end
+      end
+
+      % Plot the data with the color of the chosen quality Code.
+      % Is it the right place for this source code ????
+      % --------------------------------------------------------
+      if qualityCode ~= -1
+
+        quality = get( hQcCmenu, 'UserData');
+
+        tsg.SSPS_QC(ind) = quality.Code;
+
+        % Save the modifications
+        % ----------------------
+        setappdata( hMainFig, 'tsg_data', tsg);
+
+        axes(hPlotAxes(1));
+        hold on
+        color = ['.' quality.Color];
+        plot(tsg.DAYD(ind), tsg.SSPS(ind), color );
+        hold off
+
+      end
     end
+  end
 
-    %---------------------------------------------------------------------
-    function QcNoControl(hObject, eventdata)
+%---------------------------------------------------------------------
+  function QcNoControl(hObject, eventdata)
     % Callback function run when the QC context menu is selected
-    
-         % Retrieve Default Quality Code and Color
-         % ---------------------------------------
-         qc = getappdata( hMainFig, 'qcColor');
-         
-         quality.Code  = qc.Code.NO_CONTROL;
-         quality.Color = qc.Color.NO_CONTROL;
-         set( hQcCmenu, 'UserData', quality );
-         
-         % uiwait in the QCMenuCallback function
-         % -------------------------------------
-         uiresume
-     end
-
-    %---------------------------------------------------------------------
-     function QcGood(hObject, eventdata)
+
+    % Retrieve Default Quality Code and Color
+    % ---------------------------------------
+    qc = getappdata( hMainFig, 'qcColor');
+
+    quality.Code  = qc.Code.NO_CONTROL;
+    quality.Color = qc.Color.NO_CONTROL;
+    set( hQcCmenu, 'UserData', quality );
+
+    % uiwait in the QCMenuCallback function
+    % -------------------------------------
+    uiresume
+  end
+
+%---------------------------------------------------------------------
+  function QcGood(hObject, eventdata)
     % Callback function run when the QC context menu is selected
-         
-         % Retrieve named application data
-         % -------------------------------
-         qc = getappdata( hMainFig, 'qcColor');
-         
-         quality.Code  = qc.Code.GOOD;
-         quality.Color = qc.Color.GOOD;
-         set( hQcCmenu, 'UserData', quality );
-         
-         % uiwait in the QCMenuCallback function
-         % -------------------------------------
-         uiresume
-     end
-
-    %---------------------------------------------------------------------
-     function QcProbGood(hObject, eventdata)
+
+    % Retrieve named application data
+    % -------------------------------
+    qc = getappdata( hMainFig, 'qcColor');
+
+    quality.Code  = qc.Code.GOOD;
+    quality.Color = qc.Color.GOOD;
+    set( hQcCmenu, 'UserData', quality );
+
+    % uiwait in the QCMenuCallback function
+    % -------------------------------------
+    uiresume
+  end
+
+%---------------------------------------------------------------------
+  function QcProbGood(hObject, eventdata)
     % Callback function run when the QC context menu is selected
-        
-         % Retrieve named application data
-         % -------------------------------
-         qc = getappdata( hMainFig, 'qcColor');
-         
-         quality.Code  = qc.Code.PROBABLY_GOOD;
-         quality.Color = qc.Color.PROBABLY_GOOD;
-         set( hQcCmenu, 'UserData', quality );
-         
-         % uiwait in the QCMenuCallback function
-         % -------------------------------------
-         uiresume
-     end
-
-    %---------------------------------------------------------------------
-     function QcProbBad(hObject, eventdata)
+
+    % Retrieve named application data
+    % -------------------------------
+    qc = getappdata( hMainFig, 'qcColor');
+
+    quality.Code  = qc.Code.PROBABLY_GOOD;
+    quality.Color = qc.Color.PROBABLY_GOOD;
+    set( hQcCmenu, 'UserData', quality );
+
+    % uiwait in the QCMenuCallback function
+    % -------------------------------------
+    uiresume
+  end
+
+%---------------------------------------------------------------------
+  function QcProbBad(hObject, eventdata)
     % Callback function run when the QC context menu is selected
-         
-         % Retrieve named application data
-         % -------------------------------
-         qc = getappdata( hMainFig, 'qcColor');
-         
-         quality.Code  = qc.Code.PROBABLY_BAD;
-         quality.Color = qc.Color.PROBABLY_BAD;
-         set( hQcCmenu, 'UserData', quality );
-         
-         % uiwait in the QCMenuCallback function
-         % -------------------------------------
-         uiresume
-     end
-
-    %---------------------------------------------------------------------
-     function QcBad(hObject, eventdata)
+
+    % Retrieve named application data
+    % -------------------------------
+    qc = getappdata( hMainFig, 'qcColor');
+
+    quality.Code  = qc.Code.PROBABLY_BAD;
+    quality.Color = qc.Color.PROBABLY_BAD;
+    set( hQcCmenu, 'UserData', quality );
+
+    % uiwait in the QCMenuCallback function
+    % -------------------------------------
+    uiresume
+  end
+
+%---------------------------------------------------------------------
+  function QcBad(hObject, eventdata)
     % Callback function run when the QC context menu is selected
 
-         % Retrieve named application data
-         % -------------------------------
-         qc = getappdata( hMainFig, 'qcColor');
-         
-         quality.Code  = qc.Code.BAD;
-         quality.Color = qc.Color.BAD;
-         set( hQcCmenu, 'UserData', quality );
-        
-         % uiwait in the QCMenuCallback function
-         % -------------------------------------
-         uiresume
-     end
-
-    %---------------------------------------------------------------------
-    function MouseMotion(hObject, eventdata)
-     
-      % Test if the callback can be activated
-      % -------------------------------------
-      if strcmp( get( hMainFig, 'UserData'), 'ButtonMotionOn')
+    % Retrieve named application data
+    % -------------------------------
+    qc = getappdata( hMainFig, 'qcColor');
+
+    quality.Code  = qc.Code.BAD;
+    quality.Color = qc.Color.BAD;
+    set( hQcCmenu, 'UserData', quality );
+
+    % uiwait in the QCMenuCallback function
+    % -------------------------------------
+    uiresume
+  end
+
+%---------------------------------------------------------------------
+  function MouseMotion(hObject, eventdata)
+
+    % Test if the callback can be activated
+    % -------------------------------------
+    if strcmp( get( hMainFig, 'UserData'), 'ButtonMotionOn')
+
+      % Retrieve named application data
+      % -------------------------------
+      tsg = getappdata( hMainFig, 'tsg_data');
+
+      % Get the mouse position
+      % ----------------------
+      point = get(gcf,'CurrentPoint');
+
+      if point(1) > .05 && point(2) > .6 && point(1) < .95 && point(2) < .92
+
+        % Get current position of cusor and return its coordinates in
+        % axes with handle h_axes
+        % -----------------------------------------------------------
+        [x, y] = gpos(hPlotAxes(1));
+
+        % Dynamically diplay data in uicontrol
+        % ------------------------------------
+        if x > tsg.DAYD(1) && x < tsg.DAYD(end)
+          indCursor = find( tsg.DAYD > x);
+          set( hInfoDateText, 'String',...
+            datestr(tsg.DAYD(indCursor(1)),'dd/mm/yyyy HH:MM'));
+          set( hInfoLatText,  'String', dd2dm(tsg.LATX(indCursor(1)),0));
+          set( hInfoLongText, 'String', dd2dm(tsg.LONX(indCursor(1)),1));
+          set( hInfoSSPSText, 'String', tsg.SSPS(indCursor(1)));
+          set( hInfoSSJTText, 'String', tsg.SSJT(indCursor(1)));
+          if ~isempty(tsg.SSTP)
+            set( hInfoSSTPText, 'String', tsg.SSTP(indCursor(1)));
+          end
           
-        % Retrieve named application data
-        % -------------------------------
-        tsg = getappdata( hMainFig, 'tsg_data');
-        
-        % Get the mouse position
-        % ----------------------
-        point = get(gcf,'CurrentPoint');
-        
-        if point(1) > .05 && point(2) > .6 && point(1) < .95 && point(2) < .92
-    
-            % Get current position of cusor and return its coordinates in
-            % axes with handle h_axes
-            % -----------------------------------------------------------
-            [x, y] = gpos(hPlotAxes(1));
-                    
-            if x > tsg.DAYD(1) && x < tsg.DAYD(end)
-            
-                indCursor = find( tsg.DAYD > x);
-                % use sprintf with format instead strcat & num2str but flag
-                % - don't work with 0, eg %+07.4f
-                set( hInfoText, 'String',...
-                  sprintf(['%s   -   Latitude = %s   -   Longitude = %s '...
-                           '  -   Salinity = %07.4f   -   Temperature = %07.4f'],...
-                    datestr(tsg.DAYD(indCursor(1)),'dd/mm/yyyy HH:MM'),...
-                    dd2dm(tsg.LATX(indCursor(1)),0), ...
-                    dd2dm(tsg.LONX(indCursor(1)),1), ...
-                    tsg.SSPS(indCursor(1)), ...
-                    tsg.SSJT(indCursor(1))...
-                ));
-            
-               % Plot the position on the map if this one is active
-               % --------------------------------------------------
-                if strcmp( get(hMapPanel, 'Visible'), 'on')
-                    
-                    % Select the map axes
-                    % -------------------
-                    axes( hPlotAxes(4));
-                    
-                    if isempty( get(hMapPanel, 'UserData'))
-                       hMarker = m_line( ...
-                             tsg.LONX(indCursor(1)), tsg.LATX(indCursor(1)),...
-                             'Marker','o','MarkerSize',5, ...
-                             'Color','r', 'MarkerFaceColor','r');
-                       set(hMapPanel, 'UserData', hMarker)
-                    else
-                       delete(get(hMapPanel, 'UserData'));
-                       hMarker = m_line( ...
-                             tsg.LONX(indCursor(1)), tsg.LATX(indCursor(1)),...
-                             'Marker','o','MarkerSize',5, ...
-                             'Color','r', 'MarkerFaceColor','r');
-                       set(hMapPanel, 'UserData', hMarker);
-                    end
-                end
+          % Plot the position on the map if this one is active
+          % --------------------------------------------------
+          if strcmp( get(hMapPanel, 'Visible'), 'on')
+
+            % Select the map axes
+            % -------------------
+            axes( hPlotAxes(4));
+
+            if isempty( get(hMapPanel, 'UserData'))
+              hMarker = m_line( ...
+                tsg.LONX(indCursor(1)), tsg.LATX(indCursor(1)),...
+                'Marker','o','MarkerSize',5, ...
+                'Color','r', 'MarkerFaceColor','r');
+              set(hMapPanel, 'UserData', hMarker)
+            else
+              delete(get(hMapPanel, 'UserData'));
+              hMarker = m_line( ...
+                tsg.LONX(indCursor(1)), tsg.LATX(indCursor(1)),...
+                'Marker','o','MarkerSize',5, ...
+                'Color','r', 'MarkerFaceColor','r');
+              set(hMapPanel, 'UserData', hMarker);
             end
+          end
         end
       end
     end
+  end
 
-    %---------------------------------------------------------------------
-    function MapMenuCallback(hObject, eventdata)
+%---------------------------------------------------------------------
+  function MapMenuCallback(hObject, eventdata)
     % Callback function run when the Map tool bar item is selected
     % Make the earth map visible or not
-        
-        if strcmp( get(hMapPanel, 'Visible'), 'off' )
-            set(hMapPanel, 'Visible', 'on' );
-        else
-            set(hMapPanel, 'Visible', 'off' );
-        end
+
+    if strcmp( get(hMapPanel, 'Visible'), 'off' )
+      set(hMapPanel, 'Visible', 'on' );
+    else
+      set(hMapPanel, 'Visible', 'off' );
     end
+  end
 
-    %---------------------------------------------------------------------
-    function BottleMenuCallback(hObject, eventdata)
+%---------------------------------------------------------------------
+  function BottleMenuCallback(hObject, eventdata)
     % Callback function run when the Bottle tool bar item is selected
     %
     % Plot or Delete the buckets measurements on the Salinity graph
     %
     % Need to read them right now - but they will be soon in the NetCdf
     % file
- 
+
     % Test if the sample Push button has been pressed
     % -----------------------------------------------
-        if strcmp( get(hBottlePushtool, 'UserData'), 'off')
-        
-            % Sample Push button - UserData set to 'on'
-            % ------------------------------------
-            set( hBottlePushtool, 'UserData', 'on' );
-
-            % Test if tsg and sample data have been loaded
-            % --------------------------------------------
-            if ~isempty( getappdata( hMainFig, 'tsg_data') ) && ...
-               ~isempty( getappdata( hMainFig, 'sample') )
-           
-                % Call the GUI for tsg correction
-                % -------------------------------
-                %msgbox('The correction module has not been implemented', 'modal');
-                tsgcor_GUI( hMainFig );
-                
-            else
-                
-                msgbox('TSG or Sample data not loaded in the program', 'modal');
-                
-            end
-                    
- %           hLine  = get( hPlotAxes(1), 'UserData');
-
-
-            % Plot the samples if the TSG file has been read
-            % ----------------------------------------------
-%            if strcmp( get(hOpenMenu, 'UserData'), 'on' ) && ~isempty( sample )
-%                axes( hPlotAxes(1) );
-%                hLine.Sample = line( ...
-%                    sample.TIME, sample.PSAL,...
-%                    'Linestyle', 'none', 'Marker','o','MarkerSize',5, ...
-%                    'Color','r', 'MarkerFaceColor','r');
- 
-                % Store the handle of the bucketline
-                % ----------------------------------
-%                set( hPlotAxes(1), 'UserData', hLine );
-%            end
-        
-%        else
-
-            set( hBottlePushtool, 'UserData', 'off' );
-
-            % The bucket pushbutton has been pressed again : 
-            % Delete the bucket on figure
-            % ----------------------------------------------
-%            hLine = get( hPlotAxes(1), 'UserData');
-%            if ~isempty( hLine ) && ishandle( hLine.Sample )
-%                delete(hLine.Sample);
- %           end
-        end
+    if strcmp( get(hBottlePushtool, 'UserData'), 'off')
+
+      % Sample Push button - UserData set to 'on'
+      % ------------------------------------
+      set( hBottlePushtool, 'UserData', 'on' );
+
+      % Test if tsg and sample data have been loaded
+      % --------------------------------------------
+      if ~isempty( getappdata( hMainFig, 'tsg_data') ) && ...
+          ~isempty( getappdata( hMainFig, 'sample') )
+
+        % Call the GUI for tsg correction
+        % -------------------------------
+        %msgbox('The correction module has not been implemented', 'modal');
+        tsgcor_GUI( hMainFig );
+
+      else
+
+        msgbox('TSG or Sample data not loaded in the program', 'modal');
+
+      end
+
+      %           hLine  = get( hPlotAxes(1), 'UserData');
+
+
+      % Plot the samples if the TSG file has been read
+      % ----------------------------------------------
+      %            if strcmp( get(hOpenMenu, 'UserData'), 'on' ) && ~isempty( sample )
+      %                axes( hPlotAxes(1) );
+      %                hLine.Sample = line( ...
+      %                    sample.TIME, sample.PSAL,...
+      %                    'Linestyle', 'none', 'Marker','o','MarkerSize',5, ...
+      %                    'Color','r', 'MarkerFaceColor','r');
+
+      % Store the handle of the bucketline
+      % ----------------------------------
+      %                set( hPlotAxes(1), 'UserData', hLine );
+      %            end
+
+      %        else
+
+      set( hBottlePushtool, 'UserData', 'off' );
+
+      % The bucket pushbutton has been pressed again :
+      % Delete the bucket on figure
+      % ----------------------------------------------
+      %            hLine = get( hPlotAxes(1), 'UserData');
+      %            if ~isempty( hLine ) && ishandle( hLine.Sample )
+      %                delete(hLine.Sample);
+      %           end
     end
+  end
 
-    %---------------------------------------------------------------------
-    function ClimMenuCallback(hObject, eventdata)
+%---------------------------------------------------------------------
+  function ClimMenuCallback(hObject, eventdata)
     % Callback function run when the ClimMenu menu item is selected
     %
     % Plot or delete salinity climatology over Salinity plot
     %
     % Function to be written
- 
+
     % Test if the climatology Push button has been pressed
     % ----------------------------------------------------
-        if strcmp( get(hClimPushtool, 'UserData'), 'off')
-        
-            % Climatology push button - UserData set to 'on'
-            % -----------------------------------------
-            set( hClimPushtool, 'UserData', 'on' );
-            
-       
-            % Test if the TSG and bucket files have been read
-            % -----------------------------------------------
-            if strcmp( get(hOpenMenu, 'UserData'), 'on' )
-            
-                % Get data
-                % -----------------------
-                tsg = getappdata( hMainFig, 'tsg_data' );
-                hLine1 = get( hPlotAxes(1), 'UserData');
-                hLine2 = get( hPlotAxes(2), 'UserData');
-                
-                % Read Climatology 
-                % ----------------
-                if isempty( tsg.levitus.data)
-                  levitus = read_file_woa01( 'woa01an.nc' );
-                  if ~isstruct(levitus)
-                    errordlg({'NetCDF climatology file not present in you path',...
-                              'Check your matlab path or download it from',...
-                              'ftp://ftp.ifremer.fr/ifremer/ird/us191/oceano/lib/matlab/woa01an.nc'},...
-                              'NetCDF climatology file access error');
-                    return;   
-                  else
-                    tsg.levitus.data = levitus;
-                    tsg.levitus.type = 'woa01an';
-                  end  
-                  setappdata( hMainFig, 'tsg_data', tsg );
-                end
-
-                % round positive latitude and Longitude toward zero
-                % -------------------------------------------------
-                ind = find(tsg.LATX > 0);
-                lat(ind) = fix(tsg.LATX(ind)) + 0.5;
-                
-                ind = find(tsg.LONX > 0);
-                lon(ind) = fix(tsg.LONX(ind)) + 0.5;
-                
-                % rounds negative latitude and Longitudeto the nearest lowest integers
-                % ---------------------------------------------------------------------
-                ind = find(tsg.LATX <= 0);
-                lat(ind) = floor(tsg.LATX(ind)) + 0.5;
-                
-                ind = find(tsg.LONX <= 0);
-                lon(ind) = floor(tsg.LONX(ind)) + 0.5;
-                
-                % Calculates differences between adjacent elements of X.
-                % 0 if adajacent latitude or longitude are equal
-                % - 1 or -1 otherwise
-                % ------------------------------------------------------------
-                lat_diff = [diff( lat )'; 0];
-                lon_diff = [diff( lon )'; 0];
-                
-                % Select latitude and longitude
-                % -----------------------------
-                ind  = find(abs(lat_diff) == 1 | abs(lon_diff == 1));
-                lat2 = lat( ind );
-                lon2 = lon( ind );
-                time = tsg.DAYD( ind );
-                temp = tsg.SSJT( ind );
-                psal = tsg.SSPS( ind );
-
-                % Get Climatology
-                %           LATX(80)  = -0.5 et LATX(81)  = 0.5
-                %           LONX(180) = -0.5 et LONX(181) = 0.5
-                % ----------------
-                axes( hPlotAxes(1) );
-                mean_temp = zeros(size(ind));
-                mean_psal = zeros(size(ind));
-                std_temp  = zeros(size(ind));
-                std_psal  = zeros(size(ind));                
-                for i=1:length(ind)
-                  ilat         = find(tsg.levitus.data.WOA01_LATX == lat2(i));
-                  ilon         = find(tsg.levitus.data.WOA01_LONX == lon2(i));
-                  mean_temp(i) = tsg.levitus.data.WOA01_MEAN_TEMP(ilat,ilon,1);
-                  mean_psal(i) = tsg.levitus.data.WOA01_MEAN_PSAL(ilat,ilon,1);
-                  std_temp(i)  = tsg.levitus.data.WOA01_STD_TEMP(ilat,ilon,1);
-                  std_psal(i)  = tsg.levitus.data.WOA01_STD_PSAL(ilat,ilon,1);              
-                end  
-                
-                % Plot mean salinity climatology
-                hLine1.meanClim = line( ...
-                    time, mean_psal,'Linestyle', '-', 'Color','k');
-                % Plot 2 standard deviation  
-                hLine1.stdClimPlus = line( ...
-                    time,  mean_psal + 3 * std_psal ,'Linestyle', '-', 'Color','r');
-                hLine1.stdClimMinus = line( ...
-                    time,  mean_psal - 3 * std_psal ,'Linestyle', '-', 'Color','r');
-                % Plot mean temperature climatology
-								axes( hPlotAxes(2));
-                hLine2.meanClim = line( ...
-                    time, mean_temp,'Linestyle', '-', 'Color','k');  
-                hLine2.stdClimPlus = line( ...
-                    time,  mean_temp + 3 * std_temp ,'Linestyle', '-', 'Color','r');
-                hLine2.stdClimMinus = line( ...
-                    time,  mean_temp - 3 * std_temp ,'Linestyle', '-', 'Color','r');
-
-                % Store the handle of the bucketline
-                % ----------------------------------
-                set( hPlotAxes(1), 'UserData', hLine1 );
-                set( hPlotAxes(2), 'UserData', hLine2 );
-            end
-        
-        else
-
-            set( hClimPushtool, 'UserData', 'off' );
-
-            % The bucket pushbutton has been pressed again : 
-            % Delete the bucket on figure
-            % ----------------------------------------------
-            hLine1 = get( hPlotAxes(1), 'UserData');
-            hLine2 = get( hPlotAxes(2), 'UserData');
-            % bug......
-            try
-              delete(hLine1.stdClimMinus);
-              delete(hLine1.stdClimPlus);
-              delete(hLine1.meanClim);
-              delete(hLine2.stdClimMinus);
-              delete(hLine2.stdClimPlus);
-              delete(hLine2.meanClim);
-            catch
-            end
+    if strcmp( get(hClimPushtool, 'UserData'), 'off')
+
+      % Climatology push button - UserData set to 'on'
+      % -----------------------------------------
+      set( hClimPushtool, 'UserData', 'on' );
+
+
+      % Test if the TSG and bucket files have been read
+      % -----------------------------------------------
+      if strcmp( get(hOpenMenu, 'UserData'), 'on' )
+
+        % Get data
+        % -----------------------
+        tsg = getappdata( hMainFig, 'tsg_data' );
+        hLine1 = get( hPlotAxes(1), 'UserData');
+        hLine2 = get( hPlotAxes(2), 'UserData');
+
+        % Read Climatology
+        % ----------------
+        if isempty( tsg.levitus.data)
+          levitus = read_file_woa01( 'woa01an.nc' );
+          if ~isstruct(levitus)
+            errordlg({'NetCDF climatology file not present in you path',...
+              'Check your matlab path or download it from',...
+              'ftp://ftp.ifremer.fr/ifremer/ird/us191/oceano/lib/matlab/woa01an.nc'},...
+              'NetCDF climatology file access error');
+            return;
+          else
+            tsg.levitus.data = levitus;
+            tsg.levitus.type = 'woa01an';
+          end
+          setappdata( hMainFig, 'tsg_data', tsg );
+        end
+
+        % round positive latitude and Longitude toward zero
+        % -------------------------------------------------
+        ind = find(tsg.LATX > 0);
+        lat(ind) = fix(tsg.LATX(ind)) + 0.5;
+
+        ind = find(tsg.LONX > 0);
+        lon(ind) = fix(tsg.LONX(ind)) + 0.5;
+
+        % rounds negative latitude and Longitudeto the nearest lowest integers
+        % ---------------------------------------------------------------------
+        ind = find(tsg.LATX <= 0);
+        lat(ind) = floor(tsg.LATX(ind)) + 0.5;
+
+        ind = find(tsg.LONX <= 0);
+        lon(ind) = floor(tsg.LONX(ind)) + 0.5;
+
+        % Calculates differences between adjacent elements of X.
+        % 0 if adajacent latitude or longitude are equal
+        % - 1 or -1 otherwise
+        % ------------------------------------------------------------
+        lat_diff = [diff( lat )'; 0];
+        lon_diff = [diff( lon )'; 0];
+
+        % Select latitude and longitude
+        % -----------------------------
+        ind  = find(abs(lat_diff) == 1 | abs(lon_diff == 1));
+        lat2 = lat( ind );
+        lon2 = lon( ind );
+        time = tsg.DAYD( ind );
+        temp = tsg.SSJT( ind );
+        psal = tsg.SSPS( ind );
+
+        % Get Climatology
+        %           LATX(80)  = -0.5 et LATX(81)  = 0.5
+        %           LONX(180) = -0.5 et LONX(181) = 0.5
+        % ----------------
+        axes( hPlotAxes(1) );
+        mean_temp = zeros(size(ind));
+        mean_psal = zeros(size(ind));
+        std_temp  = zeros(size(ind));
+        std_psal  = zeros(size(ind));
+        for i=1:length(ind)
+          ilat         = find(tsg.levitus.data.WOA01_LATX == lat2(i));
+          ilon         = find(tsg.levitus.data.WOA01_LONX == lon2(i));
+          mean_temp(i) = tsg.levitus.data.WOA01_MEAN_TEMP(ilat,ilon,1);
+          mean_psal(i) = tsg.levitus.data.WOA01_MEAN_PSAL(ilat,ilon,1);
+          std_temp(i)  = tsg.levitus.data.WOA01_STD_TEMP(ilat,ilon,1);
+          std_psal(i)  = tsg.levitus.data.WOA01_STD_PSAL(ilat,ilon,1);
         end
+
+        % Plot mean salinity climatology
+        hLine1.meanClim = line( ...
+          time, mean_psal,'Linestyle', '-', 'Color','k');
+        % Plot 2 standard deviation
+        hLine1.stdClimPlus = line( ...
+          time,  mean_psal + 3 * std_psal ,'Linestyle', '-', 'Color','r');
+        hLine1.stdClimMinus = line( ...
+          time,  mean_psal - 3 * std_psal ,'Linestyle', '-', 'Color','r');
+        % Plot mean temperature climatology
+        axes( hPlotAxes(2));
+        hLine2.meanClim = line( ...
+          time, mean_temp,'Linestyle', '-', 'Color','k');
+        hLine2.stdClimPlus = line( ...
+          time,  mean_temp + 3 * std_temp ,'Linestyle', '-', 'Color','r');
+        hLine2.stdClimMinus = line( ...
+          time,  mean_temp - 3 * std_temp ,'Linestyle', '-', 'Color','r');
+
+        % Store the handle of the bucketline
+        % ----------------------------------
+        set( hPlotAxes(1), 'UserData', hLine1 );
+        set( hPlotAxes(2), 'UserData', hLine2 );
+      end
+
+    else
+
+      set( hClimPushtool, 'UserData', 'off' );
+
+      % The bucket pushbutton has been pressed again :
+      % Delete the bucket on figure
+      % ----------------------------------------------
+      hLine1 = get( hPlotAxes(1), 'UserData');
+      hLine2 = get( hPlotAxes(2), 'UserData');
+      % bug......
+      try
+        delete(hLine1.stdClimMinus);
+        delete(hLine1.stdClimPlus);
+        delete(hLine1.meanClim);
+        delete(hLine2.stdClimMinus);
+        delete(hLine2.stdClimPlus);
+        delete(hLine2.meanClim);
+      catch
+      end
     end
+  end
 
-    % -------------------------------------------------------------------
-    function HeaderMenuCallback(hObject, eventdata)
+% -------------------------------------------------------------------
+  function HeaderMenuCallback(hObject, eventdata)
     % Callback function run when the headerForm tool bar item is selected
-     
-      % call header form function
-      % -------------------------
-      headerForm(hMainFig);
-    end
-  
-    % -------------------------------------------------------------------
-    function SaveMenuCallback(hObject, eventdata)
+
+    % call header form function
+    % -------------------------
+    headerForm(hMainFig);
+  end
+
+% -------------------------------------------------------------------
+  function SaveMenuCallback(hObject, eventdata)
     % Callback function run when the Save menu item is selected
-        
-      % fill or append header form
-      % -------------------------
-      error = headerForm(hMainFig);
-      
-      % if user press continue button, ask for netcdf file
-      % ------------------------------------------------  
-      if error ~= -1  
-        [fileName, pathName, filterIndex] = uiputfile('*.nc', ...
-                                            'Save file name');
-                                          
-        % if user press cancel button, all var set to zero
-        % ------------------------------------------------                            
-        if fileName == 0
-          return;
-        end  
-         
-        % Pointer set to watch during reading and plotting
-        % ------------------------------------------------
-        set( hMainFig, 'Pointer', 'watch' );
-        
-        % flushes the event queue and updates the closed uiputfile window
-        % ---------------------------------------------------------------
-        drawnow;
-        
-        % write netcdf file
-        % -----------------
-        fileName = [pathName fileName];
-        error = writeTSGDataNetCDF( hMainFig, fileName );
-        
-        % Pointer reset to arrow
-        % ----------------------
-        set( hMainFig, 'Pointer', 'arrow' );
-        
-        % Check for a writing pb to NetCDF
-        % must to be rewriting
-        % --------------------------------
-        if error == -1
-            warning(['NetCDF writing error:'  fileName]);
-        end
+
+    % fill or append header form
+    % -------------------------
+    error = headerForm(hMainFig);
+
+    % if user press continue button, ask for netcdf file
+    % ------------------------------------------------
+    if error ~= -1
+      [fileName, pathName, filterIndex] = uiputfile('*.nc', ...
+        'Save file name');
+
+      % if user press cancel button, all var set to zero
+      % ------------------------------------------------
+      if fileName == 0
+        return;
+      end
+
+      % Pointer set to watch during reading and plotting
+      % ------------------------------------------------
+      set( hMainFig, 'Pointer', 'watch' );
+
+      % flushes the event queue and updates the closed uiputfile window
+      % ---------------------------------------------------------------
+      drawnow;
+
+      % write netcdf file
+      % -----------------
+      fileName = [pathName fileName];
+      error = writeTSGDataNetCDF( hMainFig, fileName );
+
+      % Pointer reset to arrow
+      % ----------------------
+      set( hMainFig, 'Pointer', 'arrow' );
+
+      % Check for a writing pb to NetCDF
+      % must to be rewriting
+      % --------------------------------
+      if error == -1
+        warning(['NetCDF writing error:'  fileName]);
       end
     end
+  end
+
 
-        
-    % -----------------------------------------------------------------
-    function QuitMenuCallback(hObject, eventdata)
+% -----------------------------------------------------------------
+  function QuitMenuCallback(hObject, eventdata)
     % Callback function run when the Quit menu item is selected
-            
-        % If the data have been modified and not save, the program
-        % propose to save the data
-        % --------------------------------------------------------
-        if  strcmp( get( hSaveMenu, 'UserData' ), 'on')
-            selection = ...
-            questdlg('The file has been modified.  Do you want to save it ?',...
-                      'Save before Quit?',...
-                      'Yes', 'No', 'Yes');
-            if strcmp(selection, 'Yes')
-                return;
-            else
-                QuitProgram;
-            end
-        else
-            selection = ...
-                    questdlg(['Quit ' get(hMainFig, 'Name') '?'],...
-                             ['Quit ' get(hMainFig, 'Name') '?'],...
-                              'Yes', 'No', 'Yes');
-            if strcmp(selection, 'No')
-                return;
-            else    
-                QuitProgram;
-            end
-        end
 
+    % If the data have been modified and not save, the program
+    % propose to save the data
+    % --------------------------------------------------------
+    if  strcmp( get( hSaveMenu, 'UserData' ), 'on')
+      selection = ...
+        questdlg('The file has been modified.  Do you want to save it ?',...
+        'Save before Quit?',...
+        'Yes', 'No', 'Yes');
+      if strcmp(selection, 'Yes')
+        return;
+      else
+        QuitProgram;
+      end
+    else
+      selection = ...
+        questdlg(['Quit ' get(hMainFig, 'Name') '?'],...
+        ['Quit ' get(hMainFig, 'Name') '?'],...
+        'Yes', 'No', 'Yes');
+      if strcmp(selection, 'No')
+        return;
+      else
+        QuitProgram;
+      end
     end
-  
-  % ----------------------------------------------------------------
+
+  end
+
+% ----------------------------------------------------------------
   function QuitProgram(hObject, eventdata)
 
     delete(hMainFig);
-    
+
     % reset Matlab search path to default
     rmpath( [DEFAULT_PATH_FILE filesep 'tsg_util'] );
     rmpath( [DEFAULT_PATH_FILE filesep 'tsg_data'] );
     rmpath( [DEFAULT_PATH_FILE filesep 'tsg_io'] );
     rehash;
   end
-      
+
 
 end
-- 
GitLab