Newer
Older

jacques.grelet_ird.fr
committed
% tsgqc_GUI
% TSG (Thermosalinograph) Quality Control software
%
% $Id$
%
%% COPYRIGHT & LICENSE
% Copyright 2007 - IRD US191, all rights reserved.
%
% This file is part of tsgqc_GUI.
%
% Datagui is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% tsgqc_GUI is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Datagui; if not, write to the Free Software
% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
%% Initialization tasks
% ********************

jacques.grelet_ird.fr
committed
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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);
hQCToggletool = uitoggletool(... % Open QC toolbar button

jacques.grelet_ird.fr
committed
'Parent',hToolbar,...
'TooltipString','Validation codes',...
'Separator', 'on', ...
'CData',iconRead(...
[DEFAULT_PATH_FILE 'tsg_icon' filesep 'qcicon.mat']),...
'HandleVisibility','callback', ...

jacques.grelet_ird.fr
committed
'UserData', 'off',...
'Enable', 'off',...

jacques.grelet_ird.fr
committed
'OffCallback', @QC_OffMenuCallback,...
'ONCallback', @QC_OnMenuCallback);
hMapToggletool = uitoggletool(... % Open Map toolbar button

jacques.grelet_ird.fr
committed
'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',...

jacques.grelet_ird.fr
committed
'OffCallback', @Map_OffMenuCallback,...
'ONCallback', @Map_OnMenuCallback);
hClimToggletool = uitoggletool(... % Open Climatology toolbar button

jacques.grelet_ird.fr
committed
'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',...

jacques.grelet_ird.fr
committed
'OffCallback', @Clim_OffMenuCallback,...
'ONCallback', @Clim_OnMenuCallback);

jacques.grelet_ird.fr
committed
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', ...

jacques.grelet_ird.fr
committed
'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',...

jacques.grelet_ird.fr
committed
'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', 11, ...

jacques.grelet_ird.fr
committed
'Fontweight', 'bold', ...
'HorizontalAlignment', 'left', ...
'Position',[.02, .95, .03, .03], ...
'String', 'File:');
hInfoFileText = uicontrol(...
'Parent', hMainFig, ...
'Style', 'text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'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', 11, ...

jacques.grelet_ird.fr
committed
'Fontweight', 'bold', ...
'HorizontalAlignment', 'left', ...

jacques.grelet_ird.fr
committed
'Position',[.17, .95, .03, .03], ...

jacques.grelet_ird.fr
committed
'String', 'Date:');
hInfoDateText = uicontrol(...
'Parent', hMainFig, ...
'Style', 'text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Visible','on',...
'Units', 'normalized',...
'HorizontalAlignment', 'left', ...
'String', 'N/A', ...

jacques.grelet_ird.fr
committed
'Position', [.21, .95, .11, .03]);

jacques.grelet_ird.fr
committed
% Text area that displays the latitude
% ------------------------------------
uicontrol(...
'Parent', hMainFig, ...
'Units', 'normalized', ...
'Style', 'Text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Fontweight', 'bold', ...
'HorizontalAlignment', 'left', ...

jacques.grelet_ird.fr
committed
'Position',[.35, .95, .05, .03], ...

jacques.grelet_ird.fr
committed
'String', 'Latitude:');
hInfoLatText = uicontrol(...
'Parent', hMainFig, ...
'Style', 'text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Visible','on',...
'Units', 'normalized',...
'HorizontalAlignment', 'left', ...
'String', 'N/A', ...

jacques.grelet_ird.fr
committed
'Position', [.41, .95, .07, .03]);

jacques.grelet_ird.fr
committed
% Text area that displays the longitude
% -------------------------------------
uicontrol(...
'Parent', hMainFig, ...
'Units', 'normalized', ...
'Style', 'Text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Fontweight', 'bold', ...
'HorizontalAlignment', 'left', ...

jacques.grelet_ird.fr
committed
'Position',[.50, .95, .06, .03], ...

jacques.grelet_ird.fr
committed
'String', 'Longitude:');
hInfoLongText = uicontrol(...
'Parent', hMainFig, ...
'Style', 'text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Visible','on',...
'Units', 'normalized',...
'HorizontalAlignment', 'left', ...
'String', 'N/A', ...

jacques.grelet_ird.fr
committed
'Position', [.57, .95, .07, .03]);

jacques.grelet_ird.fr
committed
% Text area that display salinity and temperature
% -----------------------------------------------
uicontrol(...
'Parent', hMainFig, ...
'Units', 'normalized', ...
'Style', 'Text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Fontweight', 'bold', ...
'HorizontalAlignment', 'left', ...

jacques.grelet_ird.fr
committed
'Position',[.65, .95, .03, .03], ...

jacques.grelet_ird.fr
committed
'String', 'SSPS:');
hInfoSSPSText = uicontrol(...
'Parent', hMainFig, ...
'Style', 'text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Visible','on',...
'Units', 'normalized',...
'HorizontalAlignment', 'left', ...
'String', 'N/A', ...

jacques.grelet_ird.fr
committed
'Position', [.69, .95, .05, .03]);

jacques.grelet_ird.fr
committed
uicontrol(...
'Parent', hMainFig, ...
'Units', 'normalized', ...
'Style', 'Text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Fontweight', 'bold', ...
'HorizontalAlignment', 'left', ...

jacques.grelet_ird.fr
committed
'Position',[.75, .95, .03, .03], ...

jacques.grelet_ird.fr
committed
'String', 'SSJT:');
hInfoSSJTText = uicontrol(...
'Parent', hMainFig, ...
'Style', 'text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Visible','on',...
'Units', 'normalized',...
'HorizontalAlignment', 'left', ...
'String', 'N/A', ...

jacques.grelet_ird.fr
committed
'Position', [.79, .95, .05, .03]);

jacques.grelet_ird.fr
committed
uicontrol(...
'Parent', hMainFig, ...
'Units', 'normalized', ...
'Style', 'Text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Fontweight', 'bold', ...
'HorizontalAlignment', 'left', ...

jacques.grelet_ird.fr
committed
'Position',[.85, .95, .03, .03], ...

jacques.grelet_ird.fr
committed
'String', 'SSTP:');
hInfoSSTPText = uicontrol(...
'Parent', hMainFig, ...
'Style', 'text', ...
'Fontsize', 11, ...

jacques.grelet_ird.fr
committed
'Visible','on',...
'Units', 'normalized',...
'HorizontalAlignment', 'left', ...
'String', 'N/A', ...

jacques.grelet_ird.fr
committed
'Position', [.89, .95, .05, .03]);

jacques.grelet_ird.fr
committed
%% 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]);

jacques.grelet_ird.fr
committed
% The second and third axes will be plot in a uipanel
hPlotsPanel = uipanel( ...

jacques.grelet_ird.fr
committed
'Parent', hMainFig, ...
'Units', 'normalized', ...

jacques.grelet_ird.fr
committed
'BorderType', 'none',...
'Visible', 'on', ...
'Position',[0, 0, 1, .57]);
hPlotAxes(2) = axes(... % the axes for plotting temperature
'Parent', hPlotsPanel, ...
'Units', 'normalized', ...

jacques.grelet_ird.fr
committed
'Visible', 'off', ...
'HandleVisibility','callback', ...

jacques.grelet_ird.fr
committed
'Position',[.05, .48, .9, .47]);

jacques.grelet_ird.fr
committed
hPlotAxes(3) = axes(... % the axes for plotting ship velocity

jacques.grelet_ird.fr
committed
'Parent', hPlotsPanel, ...

jacques.grelet_ird.fr
committed
'Units', 'normalized', ...
'Visible', 'off', ...
'HandleVisibility','callback', ...

jacques.grelet_ird.fr
committed
'Position',[.05, .06, .9, .32]);

jacques.grelet_ird.fr
committed
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
% 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', ...
'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',...

jacques.grelet_ird.fr
committed
hQcCmenuGood = uimenu(...
'Parent', hQcCmenu,...
'HandleVisibility','off', ...
'Label', 'Good',...
'ForegroundColor', 'b',...

jacques.grelet_ird.fr
committed
hQcCmenuProbGood = uimenu(...
'Parent', hQcCmenu,...
'HandleVisibility','off', ...
'Label', 'Probably Good',...

jacques.grelet_ird.fr
committed
'ForegroundColor', 'g');
hQcCmenuProbBad = uimenu(...
'Parent', hQcCmenu,...
'HandleVisibility','off', ...
'Label', 'Probably bad',...
'ForegroundColor', 'm',...

jacques.grelet_ird.fr
committed
hQcCmenuBad = uimenu(...
'Parent', hQcCmenu,...
'HandleVisibility','off', ...
'Label', 'Bad',...
'ForegroundColor', 'r',...

jacques.grelet_ird.fr
committed
% Initialisation
% --------------
tsg_initialisation(hMainFig, hQcCmenu)

jacques.grelet_ird.fr
committed
% -------------------------
% Callbacks for tsgcqc_GUI

jacques.grelet_ird.fr
committed
% ------------------------

jacques.grelet_ird.fr
committed
%----------------------------------------------------------------------
% Callback function run when the Open menu item is selected
%----------------------------------------------------------------------

jacques.grelet_ird.fr
committed
function OpenMenuCallback(hObject, eventdata)

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% Pointer set to watch during reading and plotting
% ------------------------------------------------
set( hMainFig, 'Pointer', 'watch' );
Yves Gouriou
committed

jacques.grelet_ird.fr
committed
% Make the fileName

jacques.grelet_ird.fr
committed
% ATTENTION : function OpenMenuCallback(hObject, eventdata)
% This has to be made general for UNIX and WINDOWS system
% ---------------------------------------------------------

jacques.grelet_ird.fr
committed
[fileName, pathname, filterIndex] = uigetfile( ...
{'*.txt';'*.xml';'*.nc';'*.lbv';'*.btl'}, 'Pick a file');

jacques.grelet_ird.fr
committed
error1 = -1;
error2 = -1;

jacques.grelet_ird.fr
committed
if ~isequal(fileName, 0)

jacques.grelet_ird.fr
committed
% Read the data
% -------------
switch filterIndex
case 1

jacques.grelet_ird.fr
committed
error1 = readTsgDataTxt( hMainFig, fileName );

jacques.grelet_ird.fr
committed
case 2

jacques.grelet_ird.fr
committed
error1 = readTsgDataXML( hMainFig, fileName );

jacques.grelet_ird.fr
committed
case 3

jacques.grelet_ird.fr
committed
error1 = readTsgDataNetCDF( hMainFig, fileName );

jacques.grelet_ird.fr
committed
%# a modifier
if error1 == 1
error2 = error1;
end
case 4
error1 = readTsgDataLabview( hMainFig, fileName );
case 5

jacques.grelet_ird.fr
committed
error2 = readBucketData(hMainFig, fileName );

jacques.grelet_ird.fr
committed
otherwise
return;

jacques.grelet_ird.fr
committed
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' );

jacques.grelet_ird.fr
committed
% enable menu pushtool
% --------------------

jacques.grelet_ird.fr
committed
hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_');
set(hdl_pushtool, 'Enable', 'on');

jacques.grelet_ird.fr
committed
% update the filename display
% ---------------------------

jacques.grelet_ird.fr
committed
set( hInfoFileText, 'String', fileName);

jacques.grelet_ird.fr
committed
% update some fields in tsg structure
% -----------------------------------
updateTsgStruct(hMainFig);

jacques.grelet_ird.fr
committed
% The callback to detect the mouse motion can be set to on
% --------------------------------------------------------
set( hMainFig, 'UserData', 'ButtonMotionOn');
% Make the Salinity, temperature and velocity plot
% ------------------------------------------------

jacques.grelet_ird.fr
committed
plot_SalTempVel( hMainFig, hPlotAxes );
% Plot the Map with the ship trackline
% ------------------------------------
plotmap( hMainFig, hPlotAxes)

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
% 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

jacques.grelet_ird.fr
committed
%donn�es validee

jacques.grelet_ird.fr
committed
%@[sample] = tsg_mergesample( hMainFig );
%@ Save the 'sample' struct. as an application data
% ------------------------------------------------
%if ~isempty( sample )
% setappdata( hMainFig, 'sample', sample );
%end
% Plot Salinity bucket
% NOT at that step. It will interfere with the QC process
% Maybe use a new pushbutton to draw or delete the bucket
% -------------------------------------------------------

jacques.grelet_ird.fr
committed
if error2 ~= -1
plot_SalTsgSample( hMainFig, hPlotAxes );
end

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% Pointer reset to arrow
% ----------------------
set( hMainFig, 'Pointer', 'arrow' );
end

jacques.grelet_ird.fr
committed
%----------------------------------------------------------------------
%----------------------------------------------------------------------

jacques.grelet_ird.fr
committed
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
% Desactivate the QC toggle button
% --------------------------------
set(hQCPushtool, 'state', 'off' );

jacques.grelet_ird.fr
committed
zoom on
zoomAdaptiveDateTicks('on');

jacques.grelet_ird.fr
committed
% zoomColor = get(hZoomPushtool,'CData');
% set(hZoomplusPushtool,'CData', zoomColor);
end

jacques.grelet_ird.fr
committed
%----------------------------------------------------------------------
%----------------------------------------------------------------------

jacques.grelet_ird.fr
committed
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
% Desactivate the QC toggle button
% --------------------------------
set(hQCPushtool, 'state', 'off' );

jacques.grelet_ird.fr
committed
pan on
panAdaptiveDateTicks('on');
end
end

jacques.grelet_ird.fr
committed
%----------------------------------------------------------------------
%----------------------------------------------------------------------
function QC_OffMenuCallback(gcbo, eventdata)
% Desactive right clic menu on first axes (salinity)
% ---------------------------------------------------
set(hPlotAxes(1),'UIContextMenu', []);
% Desactive clic mouse menu (zoom) on first axes (salinity)
% ----------------------------------------------------------
set(hPlotAxes(1),'ButtonDownFcn', []);
% cursor back to normal
% ---------------------
set(hMainFig,'Pointer','arrow');
end

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
%----------------------------------------------------------------------
%----------------------------------------------------------------------
function QC_OnMenuCallback(gcbo, eventdata)

jacques.grelet_ird.fr
committed
% Desactivate the Zoom and Pan functions.
% ---------------------------------------
zoom off; pan off
panAdaptiveDateTicks('off');zoomAdaptiveDateTicks('off');

jacques.grelet_ird.fr
committed
% Activate right clic context menu on first axes (salinity)
% ---------------------------------------------------------
set(hPlotAxes(1),'UIContextMenu', hQcCmenu);

jacques.grelet_ird.fr
committed
% Activate clic mouse menu on first axes (salinity)
% -------------------------------------------------
set(hPlotAxes(1),'ButtonDownFcn', @QC_SelectCallback);
% Try to make visible the context menu a the top of
% the figure. DOESN'T WORK
%oldUnits = get(hMainFig,'units' );
%set(hMainFig,'units', 'pixels');
%figPos = get(hMainFig,'Position');
%set(hQcCmenu, 'Visible', 'on', 'Position', [figPos(1) figPos(4)]);
%set(hMainFig,'units', oldUnits);

jacques.grelet_ird.fr
committed
% change cursor to crosshai aspect
% --------------------------------
set( hMainFig, 'Pointer', 'crosshair');
% -------------------------------------------------------------
% nested function on mouse clic
% -------------------------------------------------------------
function QC_SelectCallback(gcbo, eventdata)

jacques.grelet_ird.fr
committed
% disable ButtonMotion on main fig during select
% ----------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', []);

jacques.grelet_ird.fr
committed
% Retrieve named application data
% -------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% 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

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
point1 = point1(1,1:2); % extract x and y
point2 = point2(1,1:2);
p1 = min(point1,point2);
p2 = max(point1,point2); % calculate locations

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% get index on selected zone
% ---------------------------
ind = find(tsg.DAYD > p1(1,1) & tsg.DAYD < p2(1,1) & ...
tsg.SSPS > p1(1,2) & tsg.SSPS < p2(1,2));
tsg.SSPS_QC(ind) = tsg.qc.Code.ACTIVE;
% set current axes and plot
% -------------------------
axes(hPlotAxes(1));
hold on
color = ['.' tsg.qc.Color.ACTIVE];
plot(tsg.DAYD(ind), tsg.SSPS(ind), color );
hold off
% As soon as a modification took place the data should be saved
% -------------------------------------------------------------
set( hSaveMenu, 'UserData', 'on' );
% Save the modifications
% ----------------------
setappdata( hMainFig, 'tsg_data', tsg);
% disable ButtonMotion on main fig during select
% ----------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion);

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
% %----------------------------------------------------------------------
% function QCMenuCallback_old(gcbo, eventdata,handles)
% % Callback function run when the QC pushbutton is selected
%
% % Desactivate the Zoom and Pan functions.
% % ---------------------------------------
% zoom off; pan off
% panAdaptiveDateTicks('off');zoomAdaptiveDateTicks('off');
%
% % Toggle the tag of the Qc pushbutton to 'on' or 'off'
% % ----------------------------------------------------
% switch get(hQCToggletool, 'UserData');

jacques.grelet_ird.fr
committed
% case 'off'
% set(hQCToggletool, 'UserData', 'on' );

jacques.grelet_ird.fr
committed
% set(hPlotAxes(1),'UIContextMenu', hQcCmenu);
% set( hMainFig, 'Pointer', 'crosshair');
% case 'on'
% set(hQCToggletool, 'UserData', 'off' );

jacques.grelet_ird.fr
committed
% set(hPlotAxes(1),'UIContextMenu', []);
% set(hMainFig,'Pointer','arrow');
% end
%
% qualityCode = -1;
% ind = [];
% while strcmp( get(hQCToggletool, 'UserData'),'on')

jacques.grelet_ird.fr
committed
%
% k = waitforbuttonpress;
%
% % If the QC pushbutton is pressed we quit the callback
% % ----------------------------------------------------
% if strcmp( get(hQCToggletool, 'UserData'),'off')

jacques.grelet_ird.fr
committed
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
%
% % 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
% % ---------------------------------------
% 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
%
% % Retrieve named application data
% % -------------------------------
% tsg = getappdata( hMainFig, 'tsg_data');
%
% 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');
%
% end
%
% % Plot the data with the color of the chosen quality Code.
% % Is it the right place for this source code ????
% % --------------------------------------------------------
% if qualityCode ~= -1
%
% % Retrieve named application data - Code could have been changed
% % --------------------------------------------------------------
% tsg = getappdata( hMainFig, 'tsg_data');
%
% tsg.SSPS_QC(ind) = tsg.qc.Code.ACTIVE;
%
% % Save the modifications
% % ----------------------
% setappdata( hMainFig, 'tsg_data', tsg);
%
% axes(hPlotAxes(1));
% hold on
% color = ['.' tsg.qc.Color.ACTIVE];
% plot(tsg.DAYD(ind), tsg.SSPS(ind), color );
% hold off
%
% end
% end
% end
%----------------------------------------------------------------------
% Callback function run when the QC context menu is selected
%---------------------------------------------------------------------
function Qc(hObject, eventdata)
% Retrieve Default Quality Code and Color
% ---------------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
switch hObject
case hQcCmenuNocontrol
tsg.qc.Code.ACTIVE = tsg.qc.Code.NO_CONTROL;
tsg.qc.Color.ACTIVE = tsg.qc.Color.NO_CONTROL;
case hQcCmenuGood
tsg.qc.Code.ACTIVE = tsg.qc.Code.GOOD;
tsg.qc.Color.ACTIVE = tsg.qc.Color.GOOD;
case hQcCmenuProbGood
tsg.qc.Code.ACTIVE = tsg.qc.Code.PROBABLY_GOOD;
tsg.qc.Color.ACTIVE = tsg.qc.Color.PROBABLY_GOOD;
case hQcCmenuProbBad
tsg.qc.Code.ACTIVE = tsg.qc.Code.PROBABLY_BAD;
tsg.qc.Color.ACTIVE = tsg.qc.Color.PROBABLY_BAD;
case hQcCmenuBad
tsg.qc.Code.ACTIVE = tsg.qc.Code.BAD;
tsg.qc.Color.ACTIVE = tsg.qc.Color.BAD;
end
setappdata( hMainFig, 'tsg_data', tsg );
% uiwait in the QCMenuCallback function
% -------------------------------------
%uiresume

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
%---------------------------------------------------------------------
%---------------------------------------------------------------------

jacques.grelet_ird.fr
committed
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));

jacques.grelet_ird.fr
committed
% Dynamically display data in uicontrol
% -------------------------------------

jacques.grelet_ird.fr
committed
if x > tsg.DAYD(1) && x < tsg.DAYD(end)
indCursor = find( tsg.DAYD > x);
set( hInfoDateText, 'String',...

jacques.grelet_ird.fr
committed
datestr(tsg.DAYD(indCursor(1)),'dd/mm/yyyy HH:MM'));

jacques.grelet_ird.fr
committed
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

jacques.grelet_ird.fr
committed
% 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);

jacques.grelet_ird.fr
committed
end
end
end
end

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
%---------------------------------------------------------------------
% Callback function run when the Map tool bar item is unselected
%---------------------------------------------------------------------
function Map_OffMenuCallback(hObject, eventdata)
% Make the earth map invisible
% ----------------------------
set(hMapPanel, 'Visible', 'off' );
end

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
%---------------------------------------------------------------------
% Callback function run when the Map tool bar item is selected
%---------------------------------------------------------------------
function Map_OnMenuCallback(hObject, eventdata)
% Make the earth map visible
% --------------------------
set(hMapPanel, 'Visible', 'on' );

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
%---------------------------------------------------------------------
%---------------------------------------------------------------------

jacques.grelet_ird.fr
committed
function BottleMenuCallback(hObject, eventdata)
% Callback function run when the Bottle tool bar item is selected
% Get the tsg data structure
% --------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% Test if tsg and sample data have been loaded
% --------------------------------------------
if ~isempty( tsg.SSPS_WS ) || ~isempty( tsg.SSPS_EXT )
% Call the GUI for tsg correction
% -------------------------------
msgbox('Correction module not yet implemented', 'modal');
% tsgcor_GUI( hMainFig );
else
msgbox('TSG or Sample data not loaded in the program', 'modal');
end
% Vieux bout de code pour le trace et la suppression des bouteilles
% 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

jacques.grelet_ird.fr
committed
% Test if the sample Push button has been pressed
% -----------------------------------------------
% if strcmp( get(hBottlePushtool, 'UserData'), 'off')

jacques.grelet_ird.fr
committed
% Sample Push button - UserData set to 'on'
% ------------------------------------
% set( hBottlePushtool, 'UserData', 'on' );

jacques.grelet_ird.fr
committed
% 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' );

jacques.grelet_ird.fr
committed
% 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

jacques.grelet_ird.fr
committed
%------------------------------------------------------------------------
% Callback function run when the Levitus climatology toolbar is unselected
%------------------------------------------------------------------------
function Clim_OffMenuCallback(hObject, eventdata)

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% Get line handles
% ----------------------------------------------
hLine1 = get( hPlotAxes(1), 'UserData');
hLine2 = get( hPlotAxes(2), 'UserData');
% Delete climatology linesthe on axes
% -----------------------------------
try
delete(hLine1.stdClimMinus);
delete(hLine1.stdClimPlus);
delete(hLine1.meanClim);
delete(hLine2.stdClimMinus);
delete(hLine2.stdClimPlus);
delete(hLine2.meanClim);
catch
end
end

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
%------------------------------------------------------------------------
% Callback function run when the Levitus climatology toolbar is unselected
%------------------------------------------------------------------------
function Clim_OnMenuCallback(hObject, eventdata)

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% Test if the TSG and bucket files have been read
% -----------------------------------------------
if strcmp( get(hOpenMenu, 'UserData'), 'on' )

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% Get data
% -----------------------
tsg = getappdata( hMainFig, 'tsg_data' );

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% Get line handles
% ----------------

jacques.grelet_ird.fr
committed
hLine1 = get( hPlotAxes(1), 'UserData');
hLine2 = get( hPlotAxes(2), 'UserData');

jacques.grelet_ird.fr
committed
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
% 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);

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
% Plot mean salinity climatology
% ------------------------------
hLine1.meanClim = line( ...
time, mean_psal,'Linestyle', '-', 'Color','k');
% Plot with 3 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 );

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
% -------------------------------------------------------------------
% Callback function run when the headerForm tool bar item is selected
% -------------------------------------------------------------------

jacques.grelet_ird.fr
committed
function HeaderMenuCallback(hObject, eventdata)

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% call header form function
% -------------------------
headerForm(hMainFig);
end

jacques.grelet_ird.fr
committed
% -------------------------------------------------------------------
% Callback function run when the Save menu item is selected
% -------------------------------------------------------------------

jacques.grelet_ird.fr
committed
function SaveMenuCallback(hObject, eventdata)

jacques.grelet_ird.fr
committed
% Retrieve named application data
% -------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% get fileName without extension in cell
% --------------------------------------
file = textscan( tsg.file.name,'%s','delimiter','.');

jacques.grelet_ird.fr
committed
% 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', ...

jacques.grelet_ird.fr
committed
'Save file name', [file{1}{1} '.nc']);

jacques.grelet_ird.fr
committed
% 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
% -----------------

jacques.grelet_ird.fr
committed
error = writeTSGDataNetCDF( hMainFig, [pathName fileName] );

jacques.grelet_ird.fr
committed
% Pointer reset to arrow
% ----------------------
set( hMainFig, 'Pointer', 'arrow' );
% Check for a writing pb to NetCDF
% must to be rewriting
% --------------------------------
if error == -1

jacques.grelet_ird.fr
committed
warning(['NetCDF writing error:' [pathName fileName]]);

jacques.grelet_ird.fr
committed
return;

jacques.grelet_ird.fr
committed
% update the display
% ------------------
set( hInfoFileText, 'String', fileName);

jacques.grelet_ird.fr
committed
% enable Quality Control mode
% ---------------------------
hdl_pushtool = findobj('Tag', 'QC');
set(hdl_pushtool, 'Enable', 'on');

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
% -----------------------------------------------------------------
% Callback function run when the Quit menu item is selected
% -----------------------------------------------------------------
function QuitMenuCallback(hObject, eventdata)

jacques.grelet_ird.fr
committed
% If the data have been modified and not save, the program

jacques.grelet_ird.fr
committed
% ask to save the data

jacques.grelet_ird.fr
committed
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
% --------------------------------------------------------
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

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
% -----------------------------------------------------------------
% call from:
% QuitMenuCallback
% callback 'CloseRequestFcn', @QuitProgram

jacques.grelet_ird.fr
committed
% -----------------------------------------------------------------

jacques.grelet_ird.fr
committed
function QuitProgram(hObject, eventdata)

jacques.grelet_ird.fr
committed
% close the main windows
% ----------------------

jacques.grelet_ird.fr
committed
delete(hMainFig);

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% reset Matlab search path to default

jacques.grelet_ird.fr
committed
% -----------------------------------

jacques.grelet_ird.fr
committed
rmpath( [DEFAULT_PATH_FILE filesep 'tsg_util'] );
rmpath( [DEFAULT_PATH_FILE filesep 'tsg_data'] );
rmpath( [DEFAULT_PATH_FILE filesep 'tsg_io'] );

jacques.grelet_ird.fr
committed
rehash;
end

jacques.grelet_ird.fr
committed