Newer
Older
end % end of BuntonMotionOn
end % end of mouseMotion function
%---------------------------------------------------------------------
% Callback function run when the Map tool bar item is selected
%---------------------------------------------------------------------
function Map_OnMenuCallback(src, evnt)
% Desactivate Zoom and Pan toggle buttons
% ---------------------------------------
set(hZoomInToggletool, 'state', 'off' );
set(hZoomOutToggletool, 'state', 'off' );
set(hPanToggletool, 'state', 'off' );
% Make the earth map visible
% --------------------------
set(hMapFig, 'Visible', 'on' );

jacques.grelet_ird.fr
committed
% De-activate keyPressFcn callback on main fig
% --------------------------------------------
%set(hMainFig, 'KeyPressFcn', []);
%---------------------------------------------------------------------
% Callback function run when the Map tool bar item is unselected
%---------------------------------------------------------------------
function Map_OffMenuCallback(src, evnt)
% ----------------------------
% Re-activate keyPressFcn callback on main fig
% see Enabling user callbacks during zoom/pan on Undocumented Matlab
% https://undocumentedmatlab.com/blog/enabling-user-callbacks-during-zoom-pan
% This should work in both HG1 and HG2:
% ------------------------------------------------------------------------
% hManager = uigetmodemanager(hMainFig);
% try
% set(hManager.WindowListenerHandles, 'Enable', 'off'); % HG1 (prior R2014b)
% catch
% [hManager.WindowListenerHandles.Enabled] = deal(false); % HG2 (R2014b)
% end
% set(hMainFig, 'WindowKeyPressFcn', []);
% comment this line to prevent warning
% set(hMainFig, 'KeyPressFcn', @keyPressFcnCallback);
%% Bottle_OnMenuCallback ................................ Correction Module
%---------------------------------------------------------------------
% Callback function run when the bootle push tool is selected
%---------------------------------------------------------------------
function Bottle_OnMenuCallback(src, evnt)
% Callback function run when the Bottle tool bar item is selected
% Get the tsg structure
% ---------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get the parameter we are working on (SSPS, SSJT, SSTP)
% ------------------------------------------------------
PARA = getParaCorModule( hMainFig );
% Switch somme buttons
% --------------------
set( hQCToggletool, 'state', 'off' );
set( hZoomInToggletool, 'state', 'off', 'enable', 'on' );
set( hZoomOutToggletool, 'state', 'off', 'enable', 'on' );
set( hPanToggletool, 'state', 'off' );
set( hClimToggletool, 'state', 'off', 'enable', 'off');
set( hCalToggletool, 'enable', 'off' );
set( hInterpToggletool, 'enable', 'off' );
set( hTimelimitToggletool, 'enable', 'on' );
% Activate or desactivate uipanels
% ---------------------------------
set( hpDateLimit, 'Visible', 'on' );
set( hbgCorMethod, 'Visible', 'on' );
set( hCorPanel, 'Visible', 'on' );
set( hbgParameter, 'Visible', 'off');
set( hbgQc, 'Visible', 'off');
if ~isempty( tsg.([SAMPLE '_EXT']) )
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
tsg = getappdata( hMainFig, 'tsg_data');
msgbox('No sample data file has been read', 'modal');
Yves Gouriou
committed
end
Yves Gouriou
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
% Necessary to unzoom as the new plot keep in memory the preceding zoom
% ---------------------------------------------------------------------
zoom out;
% reset map border
% ----------------
tsg.preference.map.border = ...
str2double(tsg.preference.map.border_string(tsg.preference.map.border_value));
setappdata( hMainFig, 'tsg_data', tsg );
Yves Gouriou
committed
% Get the information on time limits of the time series
% Write them in the uipanel
% -----------------------------------------------------
noNaN = tsg.DAYD(~isnan( tsg.DAYD ));
set( hetDateMin, 'String', datestr(noNaN(1), 31));
set( hetDateMax, 'String', datestr(noNaN(end), 31));
%% Bottle_OffMenuCallback ............................... Correction module
%---------------------------------------------------------------------
% Callback function run when the bootle push tool is selected
%---------------------------------------------------------------------
function Bottle_OffMenuCallback(src, evnt)
% If necessary toggle off some buttons
% ------------------------------------
set( hQCToggletool, 'state', 'off' );
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hClimToggletool, 'enable', 'on');
set( hCalToggletool, 'enable', 'on' );
set( hInterpToggletool, 'enable', 'on' );
set( hTimelimitToggletool, 'enable', 'off' );
% Activate or Desactivate uipanel
% --------------------------------
set( hpDateLimit, 'Visible', 'off' );
set( hCorPanel, 'Visible', 'off' );
set( hbgCorMethod, 'Visible', 'off' );
set( hbgParameter, 'Visible', 'on');
% Desactivate Click Mouse on figure
% ---------------------------------
set( hMainFig, 'WindowButtonDownFcn', []);
% Get tsg structure
% -----------------
tsg = getappdata( hMainFig, 'tsg_data' );
% Draw the 3 plots of the validation figure and unzoom as the new
% plot keep in memory the preceding zoom
Yves Gouriou
committed
% -----------------------------------------
plot_Validation( hMainFig, hPlotAxes, 1, tsg.plot.parameter{1} );
plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
% reset map border
% ----------------
tsg.preference.map.border = ...
str2double(tsg.preference.map.border_string(tsg.preference.map.border_value));
setappdata( hMainFig, 'tsg_data', tsg );
% Set the pointer
% ---------------
set( hMainFig, 'Pointer', 'arrow');
%% cancelCorrectionCallback .................................... Correction Module
function cancelCorrectionCallback(src, evnt, Limits)
% Callback function run when the user want to cancel the
% corrections made from comparison with bottles or ARGO data.
% The deletion can be made for th whole time series or
% between 2 dates.
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
% The correction will be cancelled either for the entire
% time series or within date limits
% ------------------------------------------------------
ind = 0;
switch Limits
% Get the indices of the whole time series
% ----------------------------------------
case 'total'
ind = find( tsg.DAYD >= tsg.DAYD(1) & tsg.DAYD <= tsg.DAYD(end) );
% ind = size(tsg.([PARA{1} '_ADJUSTED']));
% Get the indices between 2 dates
% --------------------------------
% Get the date limits used for the correction
% -------------------------------------------
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
% Find indices within date limits
% --------------------------------
if dateMax > dateMin
ind = find( tsg.DAYD >= dateMin & tsg.DAYD <= dateMax );
end
otherwise
msgbox( 'CorCancelCallback : error', 'CorCancelCallback', 'error', modal);
end
if ~isempty(ind) && ~isempty( tsg.([PARA{1} '_ADJUSTED']) )
% Cancel the correction : set the ADJUSTED variable to NaN
% and ADJUSTED_QC to 0 (Bytes)
% --------------------------------------------------------
tsg.([PARA{1} '_ADJUSTED'])(ind) = ...
NaN*ones(size(tsg.([PARA{1} '_ADJUSTED'])(ind))) ;
tsg.([PARA{1} '_ADJUSTED_QC'])(ind) = ...
zeros*ones(size(tsg.([PARA{1} '_ADJUSTED_QC'])(ind))) ;
tsg.([PARA{1} '_ADJUSTED_ERROR'])(ind) = ...
NaN*ones(size(tsg.([PARA{1} '_ADJUSTED_ERROR'])(ind))) ;
end
% Save tsg data
% -------------
setappdata(hMainFig, 'tsg_data', tsg);
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
%% gradientCorrectionCallback .................................... Correction Module
function gradientCorrectionCallback(src, evnt)
gael.alory_legos.obs-mip.fr
committed
% Callback function run when
gael.alory_legos.obs-mip.fr
committed
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get the time limits for the correction
% --------------------------------------
gael.alory_legos.obs-mip.fr
committed
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
gael.alory_legos.obs-mip.fr
committed
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
gael.alory_legos.obs-mip.fr
committed
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
SAMPLE = tsg.plot.sample;
gael.alory_legos.obs-mip.fr
committed
if ~isempty( tsg.([SAMPLE '_EXT']) )
gael.alory_legos.obs-mip.fr
committed
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
gael.alory_legos.obs-mip.fr
committed
% Correction
% ----------
error = corTsgGradient(hMainFig, PARA, dateMin, dateMax);
gael.alory_legos.obs-mip.fr
committed
switch error
gael.alory_legos.obs-mip.fr
committed
case 1
gael.alory_legos.obs-mip.fr
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
if DateMax <= DateMin
msgbox( 'Date limits are not correct',...
'Correction module', 'warn', 'modal');
end
gael.alory_legos.obs-mip.fr
committed
end
gael.alory_legos.obs-mip.fr
committed
end
gael.alory_legos.obs-mip.fr
committed
end
%% biasCorrectionCallback .................................... Correction Module
function biasCorrectionCallback(src, evnt)
Yves Gouriou
committed
% Callback function run when
Yves Gouriou
committed
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
Yves Gouriou
committed
% Get the time limits for the correction A TESTER
% -----------------------------------------------
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
Yves Gouriou
committed
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
Yves Gouriou
committed
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
SAMPLE = tsg.plot.sample;
Yves Gouriou
committed
if ~isempty( tsg.([SAMPLE '_EXT']) )
Yves Gouriou
committed
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
Yves Gouriou
committed
end
% Correction
% ----------
error = corTsgBias(hMainFig, PARA, dateMin, dateMax);
Yves Gouriou
committed
switch error
Yves Gouriou
committed
case 1
Yves Gouriou
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
Yves Gouriou
committed
case -1
Yves Gouriou
committed
if DateMax <= DateMin
msgbox( 'Date limits are not correct',...
'Correction module', 'warn', 'modal');
end
otherwise
msgbox( 'CorBiasCallback : Error different or -1',' ', 'error');
Yves Gouriou
committed
end
end
%% linearCorrectionCallback .................................... Correction Module
function linearCorrectionCallback(src, evnt)
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get the time limits for the correction A TESTER
% -----------------------------------------------
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
if ~isempty( tsg.([SAMPLE '_EXT']) )
Yves Gouriou
committed
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
Yves Gouriou
committed
% Correction
% ----------
error = corTsgLinear(hMainFig, PARA, dateMin, dateMax);
Yves Gouriou
committed
switch error
Yves Gouriou
committed
case 1
Yves Gouriou
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
Yves Gouriou
committed
case -1
msgbox( 'Date limits are not correct',...
'Correction module', 'warn', 'modal');
end
%% medianCorrectionCallback .................................... Correction Module
function medianCorrectionCallback(src, evnt)
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get the time limits for the correction A TESTER
% --------------------------------------
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
if ~isempty( tsg.([SAMPLE '_EXT']) )
Yves Gouriou
committed
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
Yves Gouriou
committed
% Correction
% ----------
error = corTsgMedian(hMainFig, PARA, dateMin, dateMax);
Yves Gouriou
committed
switch error
Yves Gouriou
committed
case 1
Yves Gouriou
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
% Nothing is done - Error msg within the corTsgMedian function
Yves Gouriou
committed
end
%% PopupMenu Select Parameter
% POP_UP filled in with the function "initParameterChoice"
% ---------------------------
function SelectParameter(src, evnt, nplot)
% Callback function run when the ....
% Get application data
% --------------------
tsg = getappdata( hMainFig, 'tsg_data');
% Get the active string of the selected box
% -----------------------------------------
val = get( src, 'Value' );
string_list = get( src, 'String' );
selected_string = string_list{val};
% Get the default parameter
% -------------------------
tsg.plot.sample = selected_string;
if strcmp( tsg.plot.sample, 'SSJT' )
tsg.plot.sample = 'SSTP';
% Save application data
% --------------------
setappdata( hMainFig, 'tsg_data', tsg);
% Disable the climatology
% -----------------------
plotClim = 0;
if strcmp( get(hClimToggletool, 'state'), 'on' )
set( hClimToggletool, 'state', 'off' );
plotClim = 1;
end
% Disable the climatology
% -----------------------
set( hClimToggletool, 'state', 'off' );
plot_Validation( hMainFig, hPlotAxes, 1, tsg.plot.parameter{1} );
plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
% Plot the climatology if it was already plotted
% ----------------------------------------------
if plotClim
set( hClimToggletool, 'state', 'on' );
plot_Climatology(hMainFig, hPlotAxes);
%% SelectTime_OnMenuCallback
%---------------------------
function SelectTime_OnMenuCallback(src, evnt)
% Callback function run when the ....
% Desactivate Zoom and Pan functions.
% ----------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
% Create a pointer to select the time limits
% ------------------------------------------
selTimePointer = ones(16)+1;
selTimePointer(1,:) = 1; selTimePointer(16,:) = 1;
selTimePointer(:,1) = 1; selTimePointer(:,16) = 1;
selTimePointer(1:4,8:9) = 1; selTimePointer(13:16,8:9) = 1;
selTimePointer(8:9,1:4) = 1; selTimePointer(8:9,13:16) = 1;
selTimePointer(5:12,5:12) = NaN; % Create a transparent region in the center
% Activate clic mouse menu on second axes (salinity) for next rbbox
% ----------------------------------------------------------------
set(hMainFig,'WindowButtonDownFcn', @Time_SelectCallback);
% change cursor
% ---------------
set( hMainFig, 'Pointer', 'custom',...
'PointerShapeCData', selTimePointer, 'PointerShapeHotSpot',[9 9]);
% ----------------------------------------------------------------------
% nested function on mouse clic when Select Time toggle tool is selected
% ----------------------------------------------------------------------
function Time_SelectCallback(src, evnt)
% disable ButtonMotion on main fig during select
% prevent drawing to map
% ----------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', []);
% 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
point1 = point1(1,1:2); % extract x and y
point2 = point2(1,1:2);
p1 = min(point1,point2);
p2 = max(point1,point2); % calculate locations
% get index on selected zone - Only on X axes (time)
% --------------------------------------------------
ind = find(tsg.DAYD >= p1(1,1) & tsg.DAYD <= p2(1,1));
% Write the date in the Editable uicontrol
% ----------------------------------------
set( hetDateMin, 'String', datestr(tsg.DAYD(ind(1)), 31));
set( hetDateMax, 'String', datestr(tsg.DAYD(ind(end)), 31));
% enable ButtonMotion on main fig after select QC area
% ----------------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion);
end
end
%% SelectTime_OffMenuCallback
%----------------------------
function SelectTime_OffMenuCallback(src, evnt)
% Desactivate time limit buttons
% ------------------------------
set( hTimelimitToggletool, 'state', 'off');
end
%% Clim_OffMenuCallback
%------------------------------------------------------------------------
% Callback function run when the Levitus climatology toolbar is unselected
%------------------------------------------------------------------------
function Clim_OffMenuCallback(src, evnt)
% Get the tsg struct from the application GUI
% -------------------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% set climato on map to none (disable)
% ------------------------------------
tsg.preference.map.climatology = 'none';
% mask climato range uipanel on map
set(findobj('tag', 'TAG_MAP_CLIMATO_UIPANEL'),'Visible', 'off');
% resize map panel for axes
set(findobj('tag', 'TAG_MAP_CLIMATO_AXES'),'Position',[0, 0, 1, 1])
% Save tsg structure
% ------------------
setappdata( hMainFig, 'tsg_data', tsg);
% Get lines handles from tag
% --------------------------
hLines = findobj('-regexp', 'Tag', 'TAG_LINE_CLIMATO_');
% disable and check/uncheck climato menu on map
set(findobj('tag', 'TAG_UIMENU_MAP_CLIMATOLOGY_WITH_PCOLOR'),...
'enable', 'off', 'checked', 'off');
set(findobj('tag', 'TAG_UIMENU_MAP_CLIMATOLOGY_WITH_CONTOURF'),...
'enable', 'off', 'checked', 'off');
set(findobj('tag', 'TAG_UIMENU_MAP_CLIMATOLOGY_WITH_NONE'),...
'checked', 'on');
% Delete climatology lines on axes
% ---------------------------------
delete(hLines);
% Update the map (if visible)
% ----------------------------
if strcmp( get(hMapFig,'visible'), 'on') == 1
plot_map( hMainFig, hPlotAxes);
end
%------------------------------------------------------------------------
% Callback function run when the Levitus climatology toolbar is unselected
%------------------------------------------------------------------------
function Clim_OnMenuCallback(src, evnt)
% Test if the TSG and bucket files have been read
% -----------------------------------------------
if strcmp( get(hOpenMenu, 'UserData'), 'on' )
% Read surface climatology (annual, seasonal or monthly)
% ------------------------------------------------------
if read_Climatology(hMainFig)
% enable climato menu on map
set(findobj('tag', 'TAG_UIMENU_MAP_CLIMATOLOGY_WITH_PCOLOR'),'enable', 'on');
set(findobj('tag', 'TAG_UIMENU_MAP_CLIMATOLOGY_WITH_CONTOURF'),'enable', 'on');
% plot climatology
% ----------------
plot_Climatology(hMainFig, hPlotAxes);
end
end
end
%% ClimatoSelectMenuCallback
% -------------------------------------------------------------------
% Callback function run when climato submenu is selected
% -------------------------------------------------------------------
function ClimatoSelectMenuCallback(src, evnt, climato, time)
% find all climato submenu and set 'checked' property to 'off'
% ------------------------------------------------------------
hdl = findobj( '-regexp', 'tag', 'TAG_UIMENU_CLIMATO');
set(hdl, 'checked', 'off');
% set current climato submenu checked
% -----------------------------------
% memorize action on climatology menu for next use
% ------------------------------------------------
s.type = climato;
s.time = time;
set(hClimatoMenu, 'userdata', s);
% check if climatology toggle button is set
% -----------------------------------------
if strcmp(get(hClimToggletool, 'state'), 'on')
% clear last plotted climatology
% ------------------------------
Clim_OffMenuCallback;
% Read surface climatology (annual, seasonal or monthly)
% ------------------------------------------------------
read_Climatology(hMainFig);
% plot and read (eventually) new climatology
% ------------------------------------------
plot_Climatology(hMainFig, hPlotAxes);
end
%% PreferencesMenuCallback
% -------------------------------------------------------------------
% Callback function run when Option/Preference is selected
% -------------------------------------------------------------------
function PreferencesMenuCallback(src, evnt)
oldmapres=tsg.preference.map.resolution;
% call preferences form function
% ------------------------------
if( preferencesForm(hMainFig) )
% if form is validate, update plots only if plot exist
% ----------------------------------------------------
if ~isempty(findobj( '-regexp', 'Tag', ('TAG_PLOT\d_LINE_')))
SelectParameter(pmhPara(1),[],1);
end
% Update the map (if visible) if ship speed QC has been applied
% or map resolution has been changed
% -------------------------------------------------------------
if (strcmp( get(hMapFig,'visible'), 'on') == 1 & ...
tsg.preference.map.resolution ~= oldmapres)
erase_Line( hPlotAxes, 4 );
plot_map( hMainFig, hPlotAxes);
%% HelpMenuCallback
% -------------------------------------------------------------------
% Callback function run when Help/Help is selected
% -------------------------------------------------------------------
function HelpMenuCallback(src, evnt)
msgbox( 'Function Help not yet implemented', 'warn', 'modal');
end
%% AboutMenuCallback
% -------------------------------------------------------------------
% Callback function run when Help/About is selected
% -------------------------------------------------------------------
function AboutMenuCallback(src, evnt)
aboutDialog(hMainFig, DEFAULT_PATH_FILE);

jacques.grelet_ird.fr
committed
%% Map menus
% -----------
function mapResolutionCallback(src, evnt, resolution)
% get the tsg structure
% ---------------------
tsg = getappdata( hMainFig, 'tsg_data');

jacques.grelet_ird.fr
committed
hdls = findobj( '-regexp', 'tag', 'TAG_UIMENU_MAP_RESOLUTION_');
set(hdls, 'Checked', 'off'); % set all menu off
set(src, 'Checked', 'on'); % set the menu on

jacques.grelet_ird.fr
committed
% set map resolution
% ------------------
tsg.preference.map.resolution = resolution;

jacques.grelet_ird.fr
committed
% Save the modifications for use new setting

jacques.grelet_ird.fr
committed
% -----------------------------------------
setappdata( hMainFig, 'tsg_data', tsg);
% redraw map
% ------------------------------------------
erase_Line( hPlotAxes, 4 );
plot_map(hMainFig, hPlotAxes);
end
function mapPatchMenuCallback(src, evnt, patch)
% get the tsg structure
% ---------------------
tsg = getappdata( hMainFig, 'tsg_data');

jacques.grelet_ird.fr
committed
if patch
% find map with patch submenu and set 'checked' property to 'off'
% ------------------------------------------------------------
hdl = findobj( '-regexp', 'tag', 'TAG_UIMENU_MAP_WITHOUT_PATCH');
set(hdl, 'checked', 'off');
% set current climato submenu checked
% -----------------------------------
set(src, 'checked', 'on');
% set tsg.preference for next use
% ------------------------------------------------
tsg.preference.map.patch_value = 2;

jacques.grelet_ird.fr
committed
else
hdl = findobj( '-regexp', 'tag', 'TAG_UIMENU_MAP_WITH_PATCH');
set(hdl, 'checked', 'off');
% set current climato submenu checked
% -----------------------------------

jacques.grelet_ird.fr
committed
% set tsg.preference for next use
% ------------------------------------------------
tsg.preference.map.patch_value = 1;

jacques.grelet_ird.fr
committed
% Save the modifications for use new setting
% -----------------------------------------
setappdata( hMainFig, 'tsg_data', tsg);
% redraw map
% ------------------------------------------
erase_Line( hPlotAxes, 4 );
plot_map(hMainFig, hPlotAxes);
end
% function mapDynaBorderCallback

jacques.grelet_ird.fr
committed
% --------------------------------
function mapDynaBorderCallback(src, evnt, border)
% get the tsg structure
% ---------------------
tsg = getappdata( hMainFig, 'tsg_data');
hdls = findobj( '-regexp', 'tag', 'TAG_UIMENU_MAP_BORDER_');
set(hdls, 'Checked', 'off');

jacques.grelet_ird.fr
committed
set(src, 'Checked', 'on');
% change the map border from menu on map
% --------------------------------------
tsg.preference.map.border = border;

jacques.grelet_ird.fr
committed
setappdata( hMainFig, 'tsg_data', tsg);
% redraw map
% ------------------------------------------
erase_Line( hPlotAxes, 4 );
plot_map(hMainFig, hPlotAxes);
end
% display 2D climatology on map if pushbutton climato is on
% ---------------------------------------------------------
function mapClimatologyCallback(src, evnt, climato)
% get the tsg structure
% ---------------------
tsg = getappdata( hMainFig, 'tsg_data');
% check only the selected menu
% -----------------------------
hdls = findobj( '-regexp', 'tag', 'TAG_UIMENU_MAP_CLIMATOLOGY_WITH_');
set(hdls, 'Checked', 'off');
set(src, 'Checked', 'on');
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
% change the map 2D climatology from menu on map
% ----------------------------------------------
tsg.preference.map.climatology = climato;
% save tsg.preference.map.climatology
% -----------------------------------
setappdata( hMainFig, 'tsg_data', tsg);
% redraw map
% ------------------------------------------
erase_Line( hPlotAxes, 4 );
plot_map(hMainFig, hPlotAxes);
end
% call when user change range value for contourf climato on map
% -------------------------------------------------------------
function mapContourfCallback(src, evnt, type)
% get the tsg structure
% ---------------------
tsg = getappdata( hMainFig, 'tsg_data');
% change the map 2D climatology from menu on map
% ----------------------------------------------
tsg.preference.map.climato.(tsg.plot.sample).(type) = str2double(get(src,'string'));
% save tsg.preference.map.climatology
% -----------------------------------
setappdata( hMainFig, 'tsg_data', tsg);
% redraw map
% ------------------------------------------
erase_Line( hPlotAxes, 4 );
plot_map(hMainFig, hPlotAxes);
% print map figure from menu
% ----------------------------
function mapPrintCallback(src, evnt)
printdlg(get(hPlotAxes(4),'parent'));
end
function mapPrintPreviewCallback(src, evnt)
printpreview(get(hPlotAxes(4),'parent'));
end
% save the map as image file
% --------------------------
function mapSaveAsCallback(src, evnt)
[file, path] = uiputfile({'*.jpeg';'*.png';'*.pdf';'*.tiff';'*.bmp';'*.eps'});
if file == 0
return
end
fprintf(1, 'Save figure map as %s\n', fullfile(path,file));
saveas(get(hPlotAxes(4),'parent'), fullfile(path,file));
end
%% HeaderMenuCallback
% -------------------------------------------------------------------
% Callback function run when the headerForm tool bar item is selected
% -------------------------------------------------------------------
function HeaderMenuCallback(src, evnt)
% call header form function
% -------------------------
headerForm(hMainFig);
end
%% PrintFigMenuCallback
% -------------------------------------------------------------------
% Callback function run when the Report tool bar item is selected
% -------------------------------------------------------------------
function PrintFigMenuCallback(src, evnt)
% disable ButtonMotion on main fig during select
% ----------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', []);
% Get the tsg structure
% ---------------------
tsg = getappdata( hMainFig, 'tsg_data');
hPrintFig = figure( 'Name', 'Print','NumberTitle', 'off','Resize', 'on');
hPlot(1) = subplot(3,1,1);
hPlot(2) = subplot(3,1,2);
hPlot(3) = subplot(3,1,3);
title( hPlot(1), tsg.file.name, 'interpreter', 'none');
if strcmp(get(hBottleToggletool,'state'), 'on')