From b2b3de10c55f2ec6921d4c5eb4a59c7bb999dd9b Mon Sep 17 00:00:00 2001 From: Jacques Grelet <jacques.grelet@ird.fr> Date: Sat, 28 Jan 2017 06:27:58 +0000 Subject: [PATCH] move quitProgram as nested function in tsgqc resolve problem with icons path under R2016b compiler need to tested with R2012b compiler remove debug info in readTsgIniLabview.m --- compiler/Windows (x64)/R2016b/tsgqc.prj | 87 +- tsg_io/readTsgIniLabview.m | 6 +- tsg_util/quitProgram.m | 42 - tsg_util/tsg_preferences.m | 9 +- tsgqc.m | 1135 ++++++++++++----------- 5 files changed, 678 insertions(+), 601 deletions(-) delete mode 100644 tsg_util/quitProgram.m diff --git a/compiler/Windows (x64)/R2016b/tsgqc.prj b/compiler/Windows (x64)/R2016b/tsgqc.prj index 3dc7259..d632163 100644 --- a/compiler/Windows (x64)/R2016b/tsgqc.prj +++ b/compiler/Windows (x64)/R2016b/tsgqc.prj @@ -1,9 +1,9 @@ <deployment-project plugin="plugin.ezdeploy" plugin-version="1.0"> - <configuration build-checksum="3362879886" file="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc.prj" location="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b" name="tsgqc" preferred-package-location="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc\for_redistribution" preferred-package-type="package.type.exe" target="target.ezdeploy.standalone" target-name="Application Compiler"> + <configuration build-checksum="1123329992" file="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc.prj" location="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b" name="tsgqc" preferred-package-location="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc\for_redistribution" preferred-package-type="package.type.exe" target="target.ezdeploy.standalone" target-name="Application Compiler"> <param.appname>tsgqc</param.appname> <param.icon /> <param.icons /> - <param.version>1.45</param.version> + <param.version>1.46</param.version> <param.authnamewatermark>Jacques Grelet</param.authnamewatermark> <param.email>Jacques.Grelet@ird.fr</param.email> <param.company>IRD</param.company> @@ -31,7 +31,7 @@ <param.web.mcr.name>MyAppInstaller_web</param.web.mcr.name> <param.package.mcr.name>MyAppInstaller_mcr</param.package.mcr.name> <param.no.mcr.name>MyAppInstaller_app</param.no.mcr.name> - <param.windows.command.prompt>true</param.windows.command.prompt> + <param.windows.command.prompt>false</param.windows.command.prompt> <param.create.log>false</param.create.log> <param.log.file /> <unset> @@ -57,16 +57,91 @@ <param.web.mcr.name /> <param.package.mcr.name /> <param.no.mcr.name /> - <param.windows.command.prompt /> <param.create.log /> <param.log.file /> </unset> <fileset.main> <file>C:\svn\tsg-qc\trunk\tsgqc.m</file> </fileset.main> - <fileset.resources /> + <fileset.resources> + <file>C:\svn\oceano\lib\matlab\isas13_annual_surf.nc</file> + <file>C:\svn\oceano\lib\matlab\isas13_monthly_surf.nc</file> + <file>C:\svn\oceano\lib\matlab\isas13_seasonal_surf.nc</file> + <file>C:\svn\oceano\lib\matlab\woa01_annual_surf.nc</file> + <file>C:\svn\oceano\lib\matlab\woa01_monthly_surf.nc</file> + <file>C:\svn\oceano\lib\matlab\woa01_seasonal_surf.nc</file> + <file>C:\svn\oceano\lib\matlab\woa05_annual_surf.nc</file> + <file>C:\svn\oceano\lib\matlab\woa05_monthly_surf.nc</file> + <file>C:\svn\oceano\lib\matlab\woa05_seasonal_surf.nc</file> + <file>C:\svn\tsg-qc\trunk\@dynaload</file> + <file>C:\svn\tsg-qc\trunk\@hashtable</file> + <file>C:\svn\tsg-qc\trunk\@kml</file> + <file>C:\svn\tsg-qc\trunk\@kmlAnimation</file> + <file>C:\svn\tsg-qc\trunk\@netcdf_native</file> + <file>C:\svn\tsg-qc\trunk\@node</file> + <file>C:\svn\tsg-qc\trunk\@stack</file> + <file>C:\svn\tsg-qc\trunk\@tsg_nc</file> + <file>C:\svn\tsg-qc\trunk\tsg_data</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\bottleicon.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\climicon.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\delbottleicon.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\Google-Earth-icon.gif</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\hdricon.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\interp.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\mapicon.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\outils.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\pan.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\printdoc.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\qcicon.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\reporticon.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\savedoc.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\selecttime.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\Thermo.jpg</file> + <file>C:\svn\tsg-qc\trunk\tsg_icon\zoom.mat</file> + <file>C:\svn\tsg-qc\trunk\tsg_io</file> + <file>C:\svn\tsg-qc\trunk\tsg_util</file> + <file>C:\Users\jgrelet\Matlab\toolbox\m_map</file> + </fileset.resources> <fileset.package /> - <fileset.depfun /> + <fileset.depfun> + <file>${MATLAB_ROOT}\toolbox\matlab\demos\topo.mat</file> + <file>C:\svn\oceano\lib\matlab\dd2dm.m</file> + <file>C:\svn\oceano\lib\matlab\medianf.m</file> + <file>C:\svn\oceano\lib\matlab\tbase.m</file> + <file>C:\svn\oceano\lib\matlab\to_date.m</file> + <file>C:\svn\oceano\lib\matlab\to_day.m</file> + <file>C:\svn\oceano\lib\matlab\to_sec.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\camera.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\captureScreen.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\colorbar.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\contour.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\contour3.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\contourf.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\createFolder.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\kml.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\model.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\modelTour.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\newAnimation.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\newFolder.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\overlay.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\parseIconURL.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\plot.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\plot3.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\point.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\poly.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\poly3.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\polyMap.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\quadoverlay.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\quiver.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\quiver3d.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\scatter.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\scatter3.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\screenoverlay.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\surf.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\text.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\transfer.m</file> + <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kmlAnimation\kmlAnimation.m</file> + </fileset.depfun> <build-deliverables> <file location="${PROJECT_ROOT}\tsgqc\for_testing" name="tsgqc.exe" optional="false">C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc\for_testing\tsgqc.exe</file> <file location="${PROJECT_ROOT}\tsgqc\for_testing" name="splash.png" optional="false">C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc\for_testing\splash.png</file> diff --git a/tsg_io/readTsgIniLabview.m b/tsg_io/readTsgIniLabview.m index dbd1111..19e0168 100644 --- a/tsg_io/readTsgIniLabview.m +++ b/tsg_io/readTsgIniLabview.m @@ -79,7 +79,7 @@ while ~feof(fid) % for debbuging only % ------------------ - fprintf('%s -> %s\n', clef, tsg.(clef)); + %fprintf('%s -> %s\n', clef, tsg.(clef)); continue end @@ -154,7 +154,7 @@ while ~feof(fid) % for debbuging only % ------------------ - fprintf('%s => %s\n', clef, tsg.(clef)); + %fprintf('%s => %s\n', clef, tsg.(clef)); case 2 @@ -166,7 +166,7 @@ while ~feof(fid) % for debbuging only % ------------------ - fprintf('%s => %f\n', clef, tsg.(clef)); + %fprintf('%s => %f\n', clef, tsg.(clef)); end diff --git a/tsg_util/quitProgram.m b/tsg_util/quitProgram.m deleted file mode 100644 index b5405c9..0000000 --- a/tsg_util/quitProgram.m +++ /dev/null @@ -1,42 +0,0 @@ -function quitProgram(DEFAULT_PATH_FILE, varargin) -% QUITPROGRAM Exit tsgqc_GUI application -% -% Input -% ----- -% hTsgGUI ............ Handel to the main user interface -% -% Output -% ------ -% none -% -% $Id$ - -% close all windows -% ----------------- -for i=1:size(varargin,2) - delete(varargin{i}); -end - -% reset userdata property of root Matalab object (0) for next use -% --------------------------------------------------------------- -set(0, 'userdata', []); - -% reset Matlab search path to default -% addpath isn't mandatory and failed with compiled applications -% -------------------------------------------------------------- -if (~isdeployed) - rmpath( [DEFAULT_PATH_FILE filesep 'tsg_util'] ); - rmpath( [DEFAULT_PATH_FILE filesep 'tsg_data'] ); - rmpath( [DEFAULT_PATH_FILE filesep 'tsg_io'] ); -end - -% Refresh file system caches -% -------------------------- -rehash; - -% clear base workspace just before quit, this is the only method -% to clear NetCDF variables assign to base workspace with assignin -% ---------------------------------------------------------------- -evalin('base','clear all'); - -end diff --git a/tsg_util/tsg_preferences.m b/tsg_util/tsg_preferences.m index 04eb35d..7d90b30 100644 --- a/tsg_util/tsg_preferences.m +++ b/tsg_util/tsg_preferences.m @@ -1,4 +1,4 @@ -function tsg_preferences(hTsgGUI, app_name, DEFAULT_PATH_FILE) +function ok = tsg_preferences(hTsgGUI, app_name, DEFAULT_PATH_FILE) % tsg_preferences(S1,S2) returns structure tsg saved in S1.mat file % and with S2 internal version number. % If S1.mat dosn't exist, call tsg_initialisation to create it in @@ -11,7 +11,7 @@ function tsg_preferences(hTsgGUI, app_name, DEFAULT_PATH_FILE) % % Output % ------ -% none +% boolean % % $Id$ @@ -73,7 +73,8 @@ switch fid % quit program % ------------ - quitProgram(DEFAULT_PATH_FILE, hTsgGUI); + ok = false; + return end @@ -119,6 +120,8 @@ close(wb) % --------------------- set(hTsgGUI,'Pointer','arrow'); +ok = true; +return % ---------------------------------------------------------------------- % nested function new_config diff --git a/tsgqc.m b/tsgqc.m index bc382b3..e581751 100644 --- a/tsgqc.m +++ b/tsgqc.m @@ -38,9 +38,9 @@ global GOSUD_FORMAT_VERSION % version number, may be used to initialize some files when it change % 0.90x -> 1.0RCx % ------------------------------------------------------------------- -VERSION = 1.450; % -> 1.44 -CHAR_VERSION = '1.450'; -DATE_VERSION = 'july 5 2016'; +VERSION = 1.460; % -> 1.44 +CHAR_VERSION = '1.460'; +DATE_VERSION = 'january 27 2017'; % netcdf file version, see DATA FORMAT TSG document: % CORTSG_format_gosud.doc @@ -63,24 +63,33 @@ tsgqcname = mfilename; fulltsgqcname = mfilename('fullpath'); % regular expression expr if it occurs at the end of the input string +% on windows: 'tsgqc\\?$', linux: 'tsgqc/?$' % ------------------------------------------------------------------- -expr = strcat(tsgqcname, '$'); +if ispc + expr = strcat(tsgqcname, filesep, filesep, '?$'); +else + expr = strcat(tsgqcname, filesep, '?$'); +end % get pathname % ------------ DEFAULT_PATH_FILE = regexprep(fulltsgqcname, expr, ''); +if (isdeployed) + DEFAULT_PATH_FILE = regexprep(DEFAULT_PATH_FILE, expr, ''); +end +DEFAULT_PATH_FILE % update Matlab pathdef only for session % addpath isn't mandatory and failed with compiled applications % ------------------------------------------------------------- if (~isdeployed) - p = [pathsep,... - DEFAULT_PATH_FILE,[ 'tsg_util' pathsep],... - DEFAULT_PATH_FILE,[ 'tsg_data' pathsep],... - DEFAULT_PATH_FILE,[ 'tsg_io' pathsep] - ]; - addpath( p, '-end' ); - rehash; + p = [pathsep,... + DEFAULT_PATH_FILE,[ 'tsg_util' pathsep],... + DEFAULT_PATH_FILE,[ 'tsg_data' pathsep],... + DEFAULT_PATH_FILE,[ 'tsg_io' pathsep] + ]; + addpath( p, '-end' ); + rehash; end % define 'HandleVisibility' property for all objects @@ -91,7 +100,7 @@ handleVisibility = 'on'; % % ------------------------------ % set(0,'Units','pixels'); % screenSize = get(0,'ScreenSize'); -% +% % % set default font size % % --------------------- % if screenSize(3) <= 1024 @@ -143,14 +152,14 @@ if strcmp(display, 'on') fprintf('inputFile: %s\noutpuFile: %s\n', inputFile, outputFile); return; end - + % if property help is set to on, display help and quit % ----------------------------------------------------------- if strcmp(help, 'on') fprintf('tsgqc\n'); fprintf('tsgqc(inputfile,<file>, outputfile, <file>)\n'); fprintf('tsgqc(inputfile,<file>, outputfile, <file>),''display'',''on''\n'); - fprintf('tsgqc(''help'',''on'')\n'); + fprintf('tsgqc(''help'',''on'')\n'); return; end @@ -164,13 +173,13 @@ hMainFig = findobj('Tag', 'TAG_TSG-QC_GUI'); % if TSGQC figure exist and still running, don't create a new instance % -------------------------------------------------------------------- if ~isempty(hMainFig) - + % display error dialog box and quit % --------------------------------- errordlg({'An instance of TSGQC is still running !!!', ... 'Open it from you task bar'}, 'Warning TSGQC'); return; - + end % Create and then hide the GUI as it is being constructed. @@ -190,7 +199,7 @@ hMainFig = figure(... 'Units', 'normalized',... 'Position',guiLimits, ... 'Color', get( 0, 'DefaultUIControlBackgroundColor' )); - + %% Check Matlab version for use of KeyPressFcn and KeyReleaseFcn properties % ------------------------------------------------------------------------- switch ( version('-release') ) @@ -198,15 +207,17 @@ switch ( version('-release') ) % dont process KeyPressFcn and KeyReleaseFcn events otherwise - % show crossline when shitf key is pressed, vertical bar when ctrl key - % -------------------------------------------------------------------- - set( hMainFig, 'KeyPressFcn', @keyPressFcnCallback,... - 'KeyReleaseFcn', @keyReleaseFcnCallback); -end + % show crossline when shitf key is pressed, vertical bar when ctrl key + % -------------------------------------------------------------------- + set( hMainFig, 'KeyPressFcn', @keyPressFcnCallback,... + 'KeyReleaseFcn', @keyReleaseFcnCallback); +end %% Initialize tsg structure with tsg_preference function % ----------------------------------------------------- -tsg_preferences(hMainFig, tsgqcname, DEFAULT_PATH_FILE); +if ~tsg_preferences(hMainFig, tsgqcname, DEFAULT_PATH_FILE) + quitProgram(DEFAULT_PATH_FILE, hMainFig, hMapFig); +end % Retrieve named application data % ------------------------------- @@ -810,17 +821,17 @@ count = 0; % iterate (loop) on each key store inside hastable % ------------------------------------------------ for key = qc_list - + % get key and some values in hashtable tsg.qc.hash % ------------------------------------------------ label = tsg.qc.hash.(key).label; color = tsg.qc.hash.(key).color; state = tsg.qc.hash.(key).state; - + % construct context menu with only code set to 'on' (valid) % --------------------------------------------------------- if strcmp( state, 'on') - + % add menu to hQcCmenu uicontextmenu % ---------------------------------- uimenu(... @@ -829,7 +840,7 @@ for key = qc_list 'Label', label,... 'ForegroundColor', color,... 'Callback', {@Qc, key}); - + % add button QC to hbgQc uibuttongroup % ------------------------------------ uicontrol(... @@ -841,7 +852,7 @@ for key = qc_list 'String', label,... 'Tag', ['TAG_QC_RADIO_' char(key)], ... 'Units', 'normalized', 'Position', [.01, .85-count*.12, .6, 0.09]); - + % add text QC display statistic on hQcPanel % ----------------------------------------- uicontrol(... @@ -853,7 +864,7 @@ for key = qc_list 'String', 'N/A ',... 'Tag', ['TAG_QC_TEXT_' char(key)],... 'Units', 'normalized', 'Position', [.61, .85-count*.12, .37, 0.09]); - + % increment count % --------------- count = count + 1; @@ -880,23 +891,23 @@ count = 0; % iterate (loop) on each key store inside hastable % ------------------------------------------------ for key = qc_list - + % get key and some values in hashtable tsg.qc.hash % ------------------------------------------------ label = tsg.qc.hash.(key).label; color = tsg.qc.hash.(key).color; state = tsg.qc.hash.(key).state; - + value = 0; if strcmp(char(key), 'HARBOUR') || strcmp(char(key), 'GOOD') ||... strcmp(char(key), 'PROBABLY_GOOD') value = 1; end - + % construct context menu with only code set to 'on' (valid) % --------------------------------------------------------- if strcmp( state, 'on') - + % add button QC to hbgQc uibuttongroup % ------------------------------------ cbCorr(i) = uicontrol(... @@ -908,7 +919,7 @@ for key = qc_list 'Tag', ['TAG_CHECK_CORRECTION_' char(key)], ... 'HandleVisibility', 'on',... 'Units', 'normalized', 'Position', [.01, .85-count*.12, .6, 0.09]); - + % increment count % --------------- count = count + 1; @@ -1227,7 +1238,7 @@ hrbInterpCancel = uicontrol( ... % % end of main function (GUI definition) -% +% %% *************************** CALLBACKS ********************************** % All following callback are in nested functions @@ -1236,7 +1247,7 @@ hrbInterpCancel = uicontrol( ... %% OpenMenuCallback function run when the Open menu item is selected %---------------------------------------------------------------------- function OpenMenuCallback(hObject, eventdata) - + % Activate or desactivate uipanels % -------------------------------- set( hpCalCoef, 'Visible', 'off' ); @@ -1244,7 +1255,7 @@ hrbInterpCancel = uicontrol( ... set( hpInterpPos, 'Visible', 'off' ); % set( hMapFig, 'Visible', 'off' ); % set( hbgParameter, 'Visible', 'off'); - + % Toggle button % ------------- set( hBottleToggletool, 'state', 'off' ); @@ -1256,93 +1267,93 @@ hrbInterpCancel = uicontrol( ... % set( hMapToggletool, 'state', 'off' ); set( hTimelimitToggletool, 'state', 'off' ); % set( hZoomToggletool, 'state', 'off' ); - + % Open standard dialog box for retrieving files % --------------------------------------------- fileExtension = ({'*.lbv';'*.nc';'*.arg';'*.ast';'*.btl';'*.ora';... '*.sdf';'*.spl'; '*.transmit*'; '*.tsgqc';'*.xml';'*.cnv'}); [fileName, pathname, filterIndex] = uigetfile( fileExtension, 'Pick a file'); - + % flushes the event queue and updates the closed uigetfile window % --------------------------------------------------------------- drawnow; - + % if the user clicks the Cancel button or closes the dialog window, % FileName and PathName are set to 0. % ----------------------------------------------------------------- if ~isequal(fileName, 0) - + % Pointer set to watch during reading and plotting % ------------------------------------------------ set( hMainFig, 'Pointer', 'watch' ); - + % construct valid and full file path % ----------------------------------- fullFileName = strcat(pathname, fileName); - + % Read the data % ------------- - [errTsg, errSpl] = read_data( hMainFig, char(fileExtension(filterIndex)), fullFileName); - + [errTsg, errSpl] = read_data( hMainFig, char(fileExtension(filterIndex)), fullFileName); + % Get the tsg structure % --------------------- tsg = getappdata( hMainFig, 'tsg_data'); - + % Keep the pathname of the tsgqc m_file % ------------------------------------- - tsgqcname = mfilename; - fulltsgqcname = mfilename('fullpath'); - tsg.DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ; - setappdata( hMainFig, 'tsg_data', tsg); - +% tsgqcname = mfilename; +% fulltsgqcname = mfilename('fullpath'); +% tsg.DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ; +% setappdata( hMainFig, 'tsg_data', tsg); + % A TSG file has been read % ------------------------ if errTsg > 0 - + % set WindowButtonMotionFcn on % ---------------------------- set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - + % A TSG file has been open and read % --------------------------------- set( hOpenMenu, 'UserData', 'on' ); - + % enable toolbar menu pushtool % ---------------------------- hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_'); set(hdl_pushtool, 'Enable', 'on'); - + set( hbgParameter, 'Visible', 'on'); - + % Enable Save and Export menu % --------------------------- set(hSaveMenu, 'Enable', 'on'); set(hExportMenu, 'Enable', 'on'); set(hQCMenu, 'Enable', 'on'); - + % update some fields in tsg structure and restore tsg % --------------------------------------------------- -% updateTsgStruct(hMainFig ); -% tsg = getappdata( hMainFig, 'tsg_data'); - + % updateTsgStruct(hMainFig ); + % tsg = getappdata( hMainFig, 'tsg_data'); + % update the filename display % --------------------------- set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext)); - + % The callback to detect the mouse motion can be set to on % -------------------------------------------------------- set( hMainFig, 'UserData', 'ButtonMotionOn'); - + % Update QC statistics % -------------------- display_QC( hMainFig ); - + % Initialise the popupmenu displaying the parameters that can be % plot % -------------------------------------------------------------- initParameterChoice( hMainFig, pmhPara ); tsg = getappdata( hMainFig, 'tsg_data'); - + % Test if there is records with the same date and time. % very simple test made because of a bug in the acquisition % software used on IRD VOS @@ -1354,7 +1365,7 @@ hrbInterpCancel = uicontrol( ... testMissPos(hMainFig); elseif errTsg > -2 - + % Problem to read the file or % Choice of parameters for Labview file canceled by the user % TSG structure has been reinitialize @@ -1362,13 +1373,13 @@ hrbInterpCancel = uicontrol( ... % ---------------------------------------------------------- hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_'); set(hdl_pushtool, 'Enable', 'off'); - + set( hOpenPushtool, 'Enable', 'on' ); - + end %if errTsg > 0 - + if errTsg == 1 || errSpl == 1 - + % Draw the 3 plots of the validation figure % The plots need to be re-initialize because of a bug with % the zoom function. When you open a new TSG file and you @@ -1378,7 +1389,7 @@ hrbInterpCancel = uicontrol( ... delete( hPlotAxes(1) ); delete( hPlotAxes(2) ); delete( hPlotAxes(3) ); - + hPlotAxes(1) = axes( 'Parent', hPlotsPanel, 'Visible', 'off', ... 'box', 'on', 'Units', 'normalized','Tag', 'TAG_AXES_1', ... 'HandleVisibility','on', 'Position',[.05, .64, .93, .35]); @@ -1388,30 +1399,30 @@ hrbInterpCancel = uicontrol( ... hPlotAxes(3) = axes('Parent', hPlotsPanel, 'Visible', 'off',... 'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_3', ... 'HandleVisibility','on', 'Position',[.05, .02, .93, .27]); - + resetAxes( hMainFig, hPlotAxes ) - + 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} ); - + set( hMapFig, 'Name', tsg.file.name); - + % Update the map if already displayed % ----------------------------------- if strcmp( get(hMapFig,'visible'), 'on') == 1 erase_Line( hPlotAxes, 4 ); plot_map( hMainFig, hPlotAxes); end - + end - + end % if ~isequal(fileName, 0) - + % Pointer reset to arrow % ---------------------- set( hMainFig, 'Pointer', 'arrow' ); - + end %% Inter_OnMenuCallback ................................... Interpolation @@ -1419,7 +1430,7 @@ hrbInterpCancel = uicontrol( ... % Callback function run when % function Inter_OnMenuCallback( hObject, eventdata) - + % Activate or desactivate uipanels % -------------------------------- set( hpDateLimit, 'Visible', 'on' ); @@ -1427,7 +1438,7 @@ hrbInterpCancel = uicontrol( ... set( hpCalCoef, 'Visible', 'off'); set( hbgQc, 'Visible', 'off'); set( hbgParameter, 'Visible', 'off'); - + % Toggle button % ------------- set( hBottleToggletool, 'state', 'off', 'enable', 'off'); @@ -1438,26 +1449,26 @@ hrbInterpCancel = uicontrol( ... set( hTimelimitToggletool, 'state', 'off', 'enable', 'on' ); set( hZoomInToggletool, 'state', 'off', 'enable', 'on' ); set( hZoomOutToggletool, 'state', 'off', 'enable', 'on' ); - + set( hHeaderPushtool, 'enable', 'off' ); - + % Get application data TSG % ------------------------ tsg = getappdata( hMainFig, 'tsg_data'); - + % 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)); - + % Draw the 3 plots of the interpolation figure % -------------------------------------------- plot_Interpolation( hMainFig, hPlotAxes, 1 ); plot_Interpolation( hMainFig, hPlotAxes, 2 ); plot_Interpolation( hMainFig, hPlotAxes, 3 ); - + end %% Inter_OffMenuCallback .................................. Interpolation @@ -1465,14 +1476,14 @@ hrbInterpCancel = uicontrol( ... % Callback function run when % function Inter_OffMenuCallback( hObject, eventdata) - + % Activate or desactivate uipanels % -------------------------------- set( hpCalCoef, 'Visible', 'off' ); set( hpDateLimit, 'Visible', 'off' ); set( hpInterpPos, 'Visible', 'off' ); set( hbgParameter, 'Visible', 'on' ); - + % Enable Pushbuttons % ------------------ set( hBottleToggletool, 'state', 'off', 'enable', 'on' ); @@ -1483,23 +1494,23 @@ hrbInterpCancel = uicontrol( ... set( hTimelimitToggletool, 'state', 'off', 'enable', 'off' ); set( hZoomInToggletool, 'state', 'off', 'enable', 'on' ); set( hZoomOutToggletool, 'state', 'off', 'enable', 'on' ); - + set( hHeaderPushtool, 'enable', 'on' ); - + % Get tsg structure % ----------------- tsg = getappdata( hMainFig, 'tsg_data' ); - + % Draw the 3 plots of the validation figure % ----------------------------------------- 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} ); - + % Set the pointer % --------------- set( hMainFig, 'Pointer', 'arrow'); - + end %% InterpLinearCallback ...............................Interpolation Linear @@ -1507,29 +1518,29 @@ hrbInterpCancel = uicontrol( ... % Callback function run when %---------------------------------------------------------------------- function InterpPosLinearCallback( hObject, eventdata) - + % 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'); - + error = interpPosLinear( hMainFig, dateMin, dateMax ); - + switch error - + case 1 - + % Plot in the 3 axes % ------------------ plot_Interpolation( hMainFig, hPlotAxes, 2 ); plot_Interpolation( hMainFig, hPlotAxes, 3 ); - + case -1 msgbox( 'Date limits are not correct',... 'Correction module', 'warn', 'modal'); end - - + + end %% InterpOtherCallback ...............................Interpolation OTher @@ -1537,7 +1548,7 @@ hrbInterpCancel = uicontrol( ... % Callback function run when %---------------------------------------------------------------------- function InterpPosOtherCallback( hObject, eventdata) - + msgbox( 'Method not yet implemented', ... 'Function InterpOtherCallback', ... 'warn',... @@ -1548,33 +1559,33 @@ hrbInterpCancel = uicontrol( ... %---------------------------------------------------------------------- function InterpPosCancelCallback(hObject, eventdata) % Callback function run when - + % Get tsg application data % ------------------------ tsg = getappdata( hMainFig, 'tsg_data' ); - + % Get NO_CONTROL and INTERPOLATED_VALUE codes % ------------------------------------------- NO_CONTROL = tsg.qc.hash.NO_CONTROL.code; INTERPOLATED_VALUE = tsg.qc.hash.INTERPOLATED_VALUE.code; - + if ~isempty( tsg.POSITION_QC ) iINTERP = find( tsg.POSITION_QC == INTERPOLATED_VALUE); tsg.LATX( iINTERP ) = NaN * ones( size( iINTERP), 1 ); tsg.LONX( iINTERP ) = NaN * ones( size( iINTERP), 1 ); tsg.POSITION_QC = []; end - + % Save tsg application data % -------------------------- setappdata( hMainFig, 'tsg_data', tsg ); - + % Refresh plots % ------------- plot_Interpolation( hMainFig, hPlotAxes, 1 ); plot_Interpolation( hMainFig, hPlotAxes, 2 ); plot_Interpolation( hMainFig, hPlotAxes, 3 ); - + end @@ -1583,13 +1594,13 @@ hrbInterpCancel = uicontrol( ... % Callback function run when %---------------------------------------------------------------------- function Cal_OnMenuCallback( hObject, eventdata) - + % Activate or desactivate uipanels % -------------------------------- set( hpCalCoef, 'Visible', 'on' ); set( hbgParameter, 'Visible', 'off'); set( hbgQc, 'Visible', 'off'); - + % Pushbutton % ---------- set( hQCToggletool, 'enable', 'off' ); @@ -1597,22 +1608,22 @@ hrbInterpCancel = uicontrol( ... set( hBottleToggletool, 'enable', 'off' ); set( hInterpToggletool, 'enable', 'off' ); set( hHeaderPushtool, 'enable', 'off' ); - + set( hPanToggletool, 'state', 'off', 'enable', 'on' ); set( hTimelimitToggletool, 'state', 'off', 'enable', 'off' ); set( hZoomInToggletool, 'state', 'off', 'enable', 'on' ); set( hZoomOutToggletool, 'state', 'off', 'enable', 'on' ); - + % Get tsg application data % ------------------------ tsg = getappdata( hMainFig, 'tsg_data' ); - + % Draw the 3 plots of the validation figure % ----------------------------------------- plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' ); plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' ); plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' ); - + % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array % ------------------------------------------------------------ A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV); @@ -1621,7 +1632,7 @@ hrbInterpCancel = uicontrol( ... B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV); A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV); B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV); - + % Write the Cal Coef in the Editable uicontrol % -------------------------------------------- set( hetCalCNDCSlope, 'String', num2str(tsg.CNDC_LINCOEF(A_CNDC))); @@ -1630,7 +1641,7 @@ hrbInterpCancel = uicontrol( ... set( hetCalSSJTOffset, 'String', num2str(tsg.SSJT_LINCOEF(B_SSJT))); set( hetCalSSTPSlope, 'String', num2str(tsg.SSTP_LINCOEF(A_SSTP))); set( hetCalSSTPOffset, 'String', num2str(tsg.SSTP_LINCOEF(B_SSTP))); - + % Intermediate variables % ---------------------- tsg.CNDC_LINCOEF_NEW(A_CNDC) = str2num(get( hetCalCNDCSlope, 'String')); @@ -1639,11 +1650,11 @@ hrbInterpCancel = uicontrol( ... tsg.SSJT_LINCOEF_NEW(B_SSJT) = str2num(get( hetCalSSJTOffset, 'String')); tsg.SSTP_LINCOEF_NEW(A_SSTP) = str2num(get( hetCalSSTPSlope, 'String')); tsg.SSTP_LINCOEF_NEW(B_SSTP) = str2num(get( hetCalSSTPOffset, 'String')); - + % Save tsg application data % -------------------------- setappdata( hMainFig, 'tsg_data', tsg ); - + end @@ -1652,12 +1663,12 @@ hrbInterpCancel = uicontrol( ... % Callback function run when %---------------------------------------------------------------------- function Cal_OffMenuCallback( hObject, eventdata) - + % Activate or desactivate uipanels % -------------------------------- set( hpCalCoef, 'Visible', 'off' ); set( hbgParameter, 'Visible', 'on'); - + % Enable Pushbuttons % ------------------ set( hClimToggletool, 'enable', 'on' ); @@ -1669,11 +1680,11 @@ hrbInterpCancel = uicontrol( ... set( hTimelimitToggletool, 'state', 'off', 'enable', 'on' ); set( hZoomInToggletool, 'state', 'off', 'enable', 'on' ); set( hZoomOutToggletool, 'state', 'off', 'enable', 'on' ); - + % Get tsg application data % ------------------------ tsg = getappdata( hMainFig, 'tsg_data' ); - + % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array % ------------------------------------------------------------ A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV); @@ -1682,7 +1693,7 @@ hrbInterpCancel = uicontrol( ... B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV); A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV); B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV); - + % Save the calibration coefficient % -------------------------------- tsg.CNDC_LINCOEF(A_CNDC) = tsg.CNDC_LINCOEF_NEW(A_CNDC); @@ -1691,32 +1702,32 @@ hrbInterpCancel = uicontrol( ... tsg.SSJT_LINCOEF(B_SSJT) = tsg.SSJT_LINCOEF_NEW(B_SSJT); tsg.SSTP_LINCOEF(A_SSTP) = tsg.SSTP_LINCOEF_NEW(A_SSTP); tsg.SSTP_LINCOEF(B_SSTP) = tsg.SSTP_LINCOEF_NEW(B_SSTP); - + tsg.CNDC_LINCOEF_NEW = []; tsg.SSJT_LINCOEF_NEW = []; tsg.SSTP_LINCOEF_NEW = []; - + % Save tsg application data % -------------------------- setappdata( hMainFig, 'tsg_data', tsg ); - + % Draw the 3 plots of the validation figure % ----------------------------------------- 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} ); - - + + end %% CalibrateCallback .......................................... Calibration function CalibrateCallback(hObject, eventdata) % Callback function run when - + % Get tsg application data % ------------------------ tsg = getappdata( hMainFig, 'tsg_data' ); - + % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array % ------------------------------------------------------------ A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV); @@ -1725,7 +1736,7 @@ hrbInterpCancel = uicontrol( ... B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV); A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV); B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV); - + % Get the calibration coefficients. % They will be used in the function calibration % --------------------------------------------- @@ -1735,54 +1746,54 @@ hrbInterpCancel = uicontrol( ... tsg.SSJT_LINCOEF_NEW(B_SSJT) = str2num(get( hetCalSSJTOffset, 'String')); tsg.SSTP_LINCOEF_NEW(A_SSTP) = str2num(get( hetCalSSTPSlope, 'String')); tsg.SSTP_LINCOEF_NEW(B_SSTP) = str2num(get( hetCalSSTPOffset, 'String')); - + % Save tsg application data % -------------------------- setappdata( hMainFig, 'tsg_data', tsg ); - + % Calibrate the sensors % --------------------- calibration( hMainFig ); - + % Update the Adjusted variables (SSPS - SSJT) with calibrated records % ------------------------------------------------------------------- % updateAdjustedVariable( hMainFig ); - + % Refresh plot #1 % --------------- plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' ); plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' ); plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' ); - + % As soon as a modification took place the data should be saved % ------------------------------------------------------------- set( hSaveMenu, 'UserData', 'on' ); - + end %% CancelCalibrationCallback .................................. Calibration function CancelCalibrationCallback(hObject, eventdata) % Callback function run when - + % Get tsg application data % ------------------------ tsg = getappdata( hMainFig, 'tsg_data' ); - + % Emptied the CAL variables % ------------------------- tsg.CNDC_CAL = []; tsg.SSPS_CAL = []; tsg.SSJT_CAL = []; tsg.SSTP_CAL = []; - + % Save tsg application data % -------------------------- setappdata( hMainFig, 'tsg_data', tsg ); - + % Update the Adjusted variables % ----------------------------- % updateAdjustedVariable( hMainFig ); - + % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array % ------------------------------------------------------------ A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV); @@ -1791,7 +1802,7 @@ hrbInterpCancel = uicontrol( ... B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV); A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV); B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV); - + % Write the Cal Coef in the Editable uicontrol % -------------------------------------------- set( hetCalCNDCSlope, 'String', num2str(tsg.CNDC_LINCOEF(A_CNDC))); @@ -1800,17 +1811,17 @@ hrbInterpCancel = uicontrol( ... set( hetCalSSJTOffset, 'String', num2str(tsg.SSJT_LINCOEF(B_SSJT))); set( hetCalSSTPSlope, 'String', num2str(tsg.SSTP_LINCOEF(A_SSTP))); set( hetCalSSTPOffset, 'String', num2str(tsg.SSTP_LINCOEF(B_SSTP))); - + % Refresh plot #1 % --------------- plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' ); plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' ); plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' ); - + % As soon as a modification took place the data should be saved % ------------------------------------------------------------- set( hSaveMenu, 'UserData', 'on' ); - + end %% ZoomIn_OnMenuCallback @@ -1819,7 +1830,7 @@ hrbInterpCancel = uicontrol( ... % is pressed %---------------------------------------------------------------------- function ZoomIn_OnMenuCallback(hObject, eventdata) - + % Desactivate some toggle buttons, hZoomOutToggletool changed state % must be call before zoom function because the callback set zoom to % off @@ -1828,37 +1839,37 @@ hrbInterpCancel = uicontrol( ... set( hQCToggletool, 'state', 'off' ); set( hPanToggletool, 'state', 'off' ); set( hTimelimitToggletool, 'state', 'off' ); - + % Hide the map. Otherwise it slows down the zooming % ------------------------------------------------- % set( hMapToggletool, 'state', 'off' ); - + % returns a zoom mode object for the figure hMainFig handle % --------------------------------------------------------- hZoom = zoom(hMainFig); - + % Turns off the automatic adaptation of date ticks % ------------------------------------------------ zoomAdaptiveDateTicks('off'); - + % turns interactive zooming to in (increase) % ------------------------------------------ set(hZoom, 'direction', 'in'); - + % Disallows a zoom operation on the MAP axes objects % -------------------------------------------------- % setAllowAxesZoom(hZoom, hPlotAxes(4), false); - + % turns on interactive zooming (same effect than zoom on) but prevent % side effect on another figure % ------------------------------------------------------------------- set(hZoom, 'enable', 'on'); - + % Set this callback to listen to when a zoom operation finishes % must be call after enable zoom (bug ?) % ------------------------------------------------------------- set(hZoom, 'ActionPostCallback', @ZoomPan_PostCallback); - + end %% ZoomIn_OffMenuCallback @@ -1867,11 +1878,11 @@ hrbInterpCancel = uicontrol( ... % is pressed %---------------------------------------------------------------------- function ZoomIn_OffMenuCallback(hObject, eventdata) - + % disable zoom mode % ----------------- zoom off; - + end %% ZoomOut_OnMenuCallback @@ -1880,39 +1891,39 @@ hrbInterpCancel = uicontrol( ... % is pressed %------------------------------------------------------------------------ function ZoomOut_OnMenuCallback(hObject, eventdata) - + % Desactivate Zoom In Toggle toggle button % ----------------------------------------- set( hZoomInToggletool, 'state', 'off' ); set( hQCToggletool, 'state', 'off' ); set( hPanToggletool, 'state', 'off' ); set( hTimelimitToggletool, 'state', 'off' ); - + % Hide the map. Otherwise it slows down the zooming % ------------------------------------------------- % set( hMapToggletool, 'state', 'off' ); - + % returns a zoom mode object for the figure hMainFig handle % --------------------------------------------------------- hZoom = zoom(hMainFig); - + % turns interactive zooming out (decrease) % ---------------------------------------- set(hZoom, 'direction', 'out'); - + % Disallows a zoom operation on the MAP axes objects % -------------------------------------------------- % setAllowAxesZoom(hZoom, hPlotAxes(4), false); - + % turns on interactive zooming (same effect than zoom on) but prevent % side effect on another figure % ------------------------------------------------------------------- set(hZoom, 'enable', 'on'); - + % Set this callback to listen to when a zoom operation finishes % ------------------------------------------------------------- set(hZoom, 'ActionPostCallback', @ZoomPan_PostCallback); - + end %% ZoomOut_OffMenuCallback @@ -1921,15 +1932,15 @@ hrbInterpCancel = uicontrol( ... % is pressed %------------------------------------------------------------------------ function ZoomOut_OffMenuCallback(hObject, eventdata) - + % turns interactive zooming off % ----------------------------- zoom off; - + % cursor back to normal, test if it's really necessery % ----------------------------------------------------- %set(hMainFig, 'Pointer', 'arrow'); - + end %% Pan_OnMenuCallback @@ -1937,36 +1948,36 @@ hrbInterpCancel = uicontrol( ... % Callback function run when the pan toggle toolbar is selected %---------------------------------------------------------------------- function Pan_OnMenuCallback(hObject, eventdata) - + % Desactivate some toggle buttons % ------------------------------- set( hQCToggletool, 'state', 'off' ); set( hTimelimitToggletool, 'state', 'off' ); set( hZoomInToggletool, 'state', 'off' ); set( hZoomOutToggletool, 'state', 'off' ); - + % Hide the map. Otherwise it slows down the panning % ------------------------------------------------- % set( hMapToggletool, 'state', 'off' ); - + % Returns a pan mode object for the figure handle % ----------------------------------------------- hPan = pan(hMainFig); - + % Disallows a pan operation on the MAP axes objects % -------------------------------------------------- % setAllowAxesPan(hPan, hPlotAxes(4), false); - + % turns on interactive pan (same effect than pan on) but prevent % side effect on another figure % -------------------------------------------------------------- set(hPan, 'enable', 'on'); - + % Set this callback to listen to when a zoom operation finishes % must be call after enable zoom (bug ?) % ------------------------------------------------------------- set(hPan, 'ActionPostCallback', @ZoomPan_PostCallback); - + end %% Pan_OffMenuCallback @@ -1974,15 +1985,15 @@ hrbInterpCancel = uicontrol( ... % Callback function run when the pan toggle toolbar is released %---------------------------------------------------------------------- function Pan_OffMenuCallback(hObject, eventdata) - + % turns interactive pan off % ------------------------- pan off; - + % cursor back to normal, test if it's really necessery % ----------------------------------------------------- %set(hMainFig, 'Pointer', 'arrow'); - + end %% ZoomPan_PostCallback @@ -1990,21 +2001,21 @@ hrbInterpCancel = uicontrol( ... % Callback function run when zoom or pan action finishes: redraw axes %------------------------------------------------------------------------ function ZoomPan_PostCallback(hObject, eventdata) - + % Set the right limit and interval to the 3 axes % ---------------------------------------------- for iaxe = 1:3 set(hPlotAxes(iaxe), 'XTickMode', 'auto') datetick(hPlotAxes(iaxe), 'x', 'keeplimits') end - + % Re-draw the map once the zoom/pan is off % ---------------------------------------- if strcmp( get(hMapFig,'visible'), 'on') == 1 erase_Line( hPlotAxes, 4 ); plot_map( hMainFig, hPlotAxes); end - + end %% QCMenuCallback @@ -2039,12 +2050,12 @@ hrbInterpCancel = uicontrol( ... otherwise msgbox('QCMenuCallback : erreur', 'QCMenuCallback','error', 'modal'); end - + % -------------------------- % refresh QC statistic panel % -------------------------- display_QC( hMainFig ); - + % ------------------ % Refresh the plots %------------------- @@ -2052,18 +2063,18 @@ hrbInterpCancel = uicontrol( ... % Get the parameter displayed on plot number 1 : figure at the top % ----------------------------------------------------------------- PARA = getParaCorModule( hMainFig ); - + % Draw plot 1 % ----------- plot_Validation( hMainFig, hPlotAxes, 1, PARA{1} ); - + % Update the map if already displayed % ----------------------------------- if strcmp( get(hMapFig,'visible'), 'on') == 1 erase_Line( hPlotAxes, 4 ); plot_map( hMainFig, hPlotAxes); end - + end @@ -2072,12 +2083,12 @@ hrbInterpCancel = uicontrol( ... % Callback function run when the QC toggle tool is pressed %---------------------------------------------------------------------- function QC_OnMenuCallback(gcbo, eventdata) - + % Make the QC code uipanel visible % -------------------------------- set( hbgQc, 'Visible' ,'on'); set( hbgParameter, 'Visible', 'off'); - + % Desactivate toggletools. % ------------------------ set( hZoomInToggletool, 'state', 'off', 'enable', 'on' ); @@ -2086,146 +2097,146 @@ hrbInterpCancel = uicontrol( ... set( hTimelimitToggletool, 'state', 'off' ); set( hCalToggletool, 'state', 'off', 'enable', 'off' ); set( hInterpToggletool, 'state', 'off', 'enable', 'off' ); - + % Retrieve named application data % ------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); PARA = getParaCorModule( hMainFig ); SAMPLE = tsg.plot.sample; - + % refresh QC statistic panel % -------------------------- display_QC( hMainFig ); - + % Activate right clic context menu on first axes (salinity) % --------------------------------------------------------- set(hPlotAxes(1),'UIContextMenu', hQcCmenu); - + % Activate clic mouse menu on first axes (salinity) for next rbbox % ---------------------------------------------------------------- set(hPlotAxes(1),'ButtonDownFcn', @QC_SelectCallback); - + % change cursor to crosshair aspect % --------------------------------- set( hMainFig, 'Pointer', 'crosshair'); - + % ------------------------------------------------------------- % nested function on mouse clic when QC toggle tool is selected % ------------------------------------------------------------- function QC_SelectCallback(gcbo, eventdata) - + % disable ButtonMotion on main fig during select % prevent drawing to map % ---------------------------------------------- set( hMainFig, 'WindowButtonMotionFcn', []); - + % 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 - + % The following code is only executed if the left mouse button is clicked. % If the right mouse button is clicked, this code must not be % executed as the variable 'ind' will be emptied. And this variable % is used when the context menu (callback 'Qc') is called % ----------------------------------------------------------------- if ~strcmp( get(gcf, 'SelectionType'), 'alt') - + % The QC is applied either on TSG data either on Sample data. % it depends if the Botte Toggle button has been cliked on % ----------------------------------------------------------- if strcmp( get(hBottleToggletool, 'state'), 'on') - + % get index on selected zone % -------------------------- if ~isempty(tsg.DAYD_EXT) - + ind = find(tsg.DAYD_EXT > p1(1) & tsg.DAYD_EXT < p2(1) & ... tsg.EXT_DIF > p1(2) & tsg.EXT_DIF < p2(2)); - + % Keep the information on the indices of the selected zone % -------------------------------------------------------- tsg.rbboxind = ind .* ones(size(ind)); - + % Modifiy the QC % -------------- tsg.([SAMPLE '_EXT_QC'])(ind) = tsg.qc.active.Code; - + % Save the modifications % ---------------------- setappdata( hMainFig, 'tsg_data', tsg); - + % plot selected data with selected code % -------------------------------------- plot_Correction( hMainFig, hPlotAxes, PARA); - + end - + else - + % get index on selected zone % --------------------------- ind = find(tsg.DAYD > p1(1,1) & tsg.DAYD < p2(1,1) & ... tsg.(PARA{1}) > p1(1,2) & tsg.(PARA{1}) < p2(1,2)); - + % Keep the information on the indices of the selected zone % -------------------------------------------------------- tsg.rbboxind = ind .* ones(size(ind)); - + % Modifiy the QC % -------------- tsg.([PARA{1} '_QC'])(ind) = tsg.qc.active.Code; - + % put last SSPS_QC in queue (Undo/Redo) % ------------------------------------- %tsg.queue = push( tsg.queue, tsg.([PARA '_QC'])); - + % store QC in queue object, for undo % ---------------------------------- %tsg.queue = push(tsg.queue, tsg.([PARA '_QC'])); - + % Save the modifications % ---------------------- setappdata( hMainFig, 'tsg_data', tsg); - + % Draw plot 1 of the validation figure % ------------------------------------ plot_Validation( hMainFig, hPlotAxes, 1, PARA{1} ); - + % refresh QC statistic panel % -------------------------- display_QC( hMainFig ); - + % Update the map if already displayed % ----------------------------------- if strcmp( get(hMapFig,'visible'), 'on') == 1 erase_Line( hPlotAxes, 4 ); plot_map( hMainFig, hPlotAxes); end - + % enable undo menu % ---------------- set(findobj('tag','UIMENU_UNDO'),'enable','on'); end - + % As soon as a modification took place the data should be saved % ------------------------------------------------------------- set( hSaveMenu, 'UserData', 'on' ); - + end - + % enable ButtonMotion on main fig after select QC area % ---------------------------------------------------- set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - + end end @@ -2234,24 +2245,24 @@ hrbInterpCancel = uicontrol( ... % Callback function run when the QC toggle tool is released %---------------------------------------------------------------------- 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', []); - + % Uipanel visible or not % ----------------------- set( hbgQc, 'Visible', 'off' ); - + if strcmp( get(hBottleToggletool, 'state'), 'off' ) set( hCalToggletool, 'state', 'off', 'enable', 'on' ); set( hInterpToggletool, 'state', 'off', 'enable', 'on' ); end - + % uibuttongroup uipanel used to choose a parameter is set to % on only if the Correction screen (bottle toggletool) is off % ----------------------------------------------------------- @@ -2265,7 +2276,7 @@ hrbInterpCancel = uicontrol( ... tsg.POSITION_QC = max(tsg.LATX_QC,tsg.LONX_QC ); tsg.LATX_QC = tsg.POSITION_QC; tsg.LONX_QC = tsg.POSITION_QC; - + % Save the modifications % ---------------------- setappdata( hMainFig, 'tsg_data', tsg); @@ -2273,7 +2284,7 @@ hrbInterpCancel = uicontrol( ... % cursor back to normal % --------------------- set(hMainFig,'Pointer','arrow'); - + end %% Qc context menu selected ........................ Quality Control Module @@ -2284,59 +2295,59 @@ hrbInterpCancel = uicontrol( ... % %----------------------------------------------------------- function Qc(hObject, eventdata, key) - + % Retrieve Default Quality Code and Color % --------------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); - + % Get the parameter (SSPS, SSJT or SSTP) % -------------------------------------- PARA = getParaCorModule( hMainFig ); SAMPLE = tsg.plot.sample; - + % get key and some values in hashtable % ------------------------------------ code = tsg.qc.hash.(key).code; color = tsg.qc.hash.(key).color; - + % set active code and color from selected context menu % ---------------------------------------------------- tsg.qc.active.Code = code; tsg.qc.active.Color = color; - + % Modify and plot the last selected tsg data % ------------------------------------------ if isfield(tsg, 'rbboxind') && ~isempty( tsg.rbboxind ) - + if strcmp( get(hBottleToggletool, 'state'), 'on') - + tsg.([SAMPLE '_EXT_QC'])(tsg.rbboxind) = tsg.qc.active.Code; - + % Save tsg.SSPS_QC and tsg.qc.active.Code % in the application data % ---------------------------------------- setappdata( hMainFig, 'tsg_data', tsg ); - + % Draw the 3 plots of the Correction figure % ----------------------------------------- plot_Correction( hMainFig, hPlotAxes, PARA ); - + else tsg.([PARA{1} '_QC'])(tsg.rbboxind) = tsg.qc.active.Code; - - % Save tsg.SSPS_QC in the application data before use + + % Save tsg.SSPS_QC in the application data before use % inside plot_Validation % --------------------------------------------------- setappdata( hMainFig, 'tsg_data', tsg ); - + % Draw plot 1 of the validation figure % ------------------------------------ plot_Validation( hMainFig, hPlotAxes, 1, PARA{1} ); - + end - + end - + % Update the radio button corresponding to the selected % QC context menu (rbg : RadioButtonGroup) % ----------------------------------------------------- @@ -2346,11 +2357,11 @@ hrbInterpCancel = uicontrol( ... % ind = strcmp(radioTag, hbgTagCell); % Compare the TAG % hRadioButton = hbgChildren( ind == 1 ); % Get the handle of the button % set(hbgQc, 'SelectedObject', hRadioButton); % Make this button active - + display_QC( hMainFig); - + setappdata( hMainFig, 'tsg_data', tsg ); - + end %% Radiobutton Quality Control ..................... Quality Control Module @@ -2358,29 +2369,29 @@ hrbInterpCancel = uicontrol( ... % Callback to select CODE and COLOR QC from the RadioButton Group % --------------------------------------------------------------- function RadiobuttonQc(source, eventdata) - + % Retrieve Default Quality Code and Color % --------------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); - + % Retrieve the key from the active RadioButton % -------------------------------------------- rbTag = get(eventdata.NewValue,'Tag'); key = strrep(rbTag, 'TAG_QC_RADIO_', ''); - + % store his handle to uibuttongroup userdata % ------------------------------------------ set(hbgQc,'Userdata', eventdata.NewValue); - + % set active code and color from selected context menu % ---------------------------------------------------- tsg.qc.active.Code = tsg.qc.hash.(key).code; tsg.qc.active.Color = tsg.qc.hash.(key).color; - + % save tsg struct % ---------------- setappdata( hMainFig, 'tsg_data', tsg ); - + end %% preQcPanCallback .................................Quality Control Module @@ -2388,9 +2399,9 @@ hrbInterpCancel = uicontrol( ... % Callback function ... to be completed % --------------------------------------------------------------- function preQcPanCallback(obj, evd) - + set(hQCToggletool, 'state', 'off' ); - + end %% postQcPanCallback ............................... Quality Control Module @@ -2398,27 +2409,27 @@ hrbInterpCancel = uicontrol( ... % Callback function ... to be completed % --------------------------------------------------------------- function postQcPanCallback(obj, evd) - + % Set the right limit and interval to the 3 axes % ---------------------------------------------- for iaxe = 1:3 set(hPlotAxes(iaxe),'XTickMode','auto') datetick(hPlotAxes(iaxe),'x','keeplimits') end - + % Re-draw the map once the pan is off - only valide in QC mode % ------------------------------------------------------------- if strcmp( get(hMapFig, 'visible'), 'on') == 1 erase_Line( hPlotAxes, 4 ); plot_map( hMainFig, hPlotAxes); end - + % restacks the figure to the top of the screen % -------------------------------------------- figure( hMainFig); - + set(hQCToggletool, 'state', 'on' ); - + end %% MouseMotion @@ -2427,27 +2438,27 @@ hrbInterpCancel = uicontrol( ... % draw corresponding measurement position on map %--------------------------------------------------------------------- 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 current position of cusor and return its coordinates in % axes with handle h_axes % ----------------------------------------------------------- a = get(hPlotAxes(1), 'CurrentPoint'); x = a(2,1); y = a(2,2); - + % Get the Limits of axes 1 % ------------------------ limx = get(hPlotAxes(1), 'XLim'); limy = get(hPlotAxes(1), 'YLim'); - + % Code to Activate the PAN function when QC mode is active % A PAN zone is defined in the bottom (10%) of PlotAxes(1) % 2 callback are needed : @@ -2458,11 +2469,11 @@ hrbInterpCancel = uicontrol( ... % if we are in QC mode % --------------------- if strcmp( get(hQCToggletool, 'state' ), 'on' ); - + % Suppose that Y axes is increasing from the bottom to the top % ------------------------------------------------------------ limy2 = limy(1) + (limy(2)-limy(1)) * 0.10; - + if x > limx(1) && x < limx(2) && y <= limy2 && y >= limy(1) hPan = pan(hMainFig); set(hPan,'ActionPreCallback', @preQcPanCallback); @@ -2477,12 +2488,12 @@ hrbInterpCancel = uicontrol( ... end % end of cursor test location end % end of QC mode test - + % Dynamically display data in uicontrol for valid data % ---------------------------------------------------- if x > tsg.DAYD(1) && x < tsg.DAYD(end) - - % get index of cursor location + + % get index of cursor location % ---------------------------- indCursor = find( tsg.DAYD > x, 1, 'first'); @@ -2490,14 +2501,14 @@ hrbInterpCancel = uicontrol( ... % --------------------------------------------------------- set( hInfoDateText, 'String',... datestr(tsg.DAYD(indCursor),'dd/mm/yyyy HH:MM')); - if tsg.preference.positions_format_value == 1 - set( hInfoLatText, 'String', dd2dm(tsg.LATX(indCursor), 0) ); - set( hInfoLongText, 'String', ... - dd2dm(mod(tsg.LONX(indCursor) + 180, 360) - 180, 1) ); + if tsg.preference.positions_format_value == 1 + set( hInfoLatText, 'String', dd2dm(tsg.LATX(indCursor), 0) ); + set( hInfoLongText, 'String', ... + dd2dm(mod(tsg.LONX(indCursor) + 180, 360) - 180, 1) ); else - set( hInfoLatText, 'String', tsg.LATX(indCursor) ); - set( hInfoLongText, 'String', ... - mod(tsg.LONX(indCursor) + 180, 360) - 180 ); + set( hInfoLatText, 'String', tsg.LATX(indCursor) ); + set( hInfoLongText, 'String', ... + mod(tsg.LONX(indCursor) + 180, 360) - 180 ); end if ~isempty(tsg.SSPS) set( hInfoSSPSText, 'String', tsg.SSPS(indCursor) ); @@ -2508,23 +2519,23 @@ hrbInterpCancel = uicontrol( ... if ~isempty(tsg.SSTP) set( hInfoSSTPText, 'String', tsg.SSTP(indCursor) ); end - + % Plot the position on the map if this one is active % -------------------------------------------------- if strcmp( get(hMapFig, 'Visible'), 'on') - + % Select the map axes % ------------------- axes( hPlotAxes(4)); - + % Look for a MARKER (Red point) on the ship track % ----------------------------------------------- h = findobj( hPlotAxes(4), '-regexp','Tag', 'TAG_PLOT4_LINE_MARKER'); - + if isempty( h ) % if no Marker - + if ~isnan( tsg.LONX(indCursor) ) - + % Plot a Marker (Red point) on the ship track % ------------------------------------------- hMarker = m_line( mod(tsg.LONX(indCursor(1)) + ... @@ -2532,17 +2543,17 @@ hrbInterpCancel = uicontrol( ... tsg.LATX(indCursor(1)),... 'Marker', 'o', 'MarkerSize', 5, ... 'Color', 'r', 'MarkerFaceColor', 'r'); - + % Put a tag on the Marker - This tag allows to get the handle % of the Marker % ----------------------------------------------------------- set( hMarker, 'TAG', 'TAG_PLOT4_LINE_MARKER' ); end - + else % a marker exists - + if ~isnan( tsg.LONX(indCursor) ) - + % Delete the Marker and redraw it % ------------------------------- delete( h); @@ -2550,15 +2561,15 @@ hrbInterpCancel = uicontrol( ... tsg.LONX(indCursor), tsg.LATX(indCursor),... 'Marker', 'o', 'MarkerSize', 5, ... 'Color', 'r', 'MarkerFaceColor', 'r'); - + % Put a tag on the Marker - This tag allows to get the handle % of the Marker % ----------------------------------------------------------- set( hMarker, 'TAG', 'TAG_PLOT4_LINE_MARKER' ); end end - - end % end of map visible + + end % end of map visible else @@ -2581,25 +2592,25 @@ hrbInterpCancel = uicontrol( ... % Callback function run when the Map tool bar item is selected %--------------------------------------------------------------------- function Map_OnMenuCallback(hObject, eventdata) - + % 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' ); - + erase_Line( hPlotAxes, 4 ); - + plot_map( hMainFig, hPlotAxes) % De-activate keyPressFcn callback on main fig % -------------------------------------------- set(hMainFig, 'KeyPressFcn', []); - + end %% Map_OffMenuCallback @@ -2607,15 +2618,15 @@ hrbInterpCancel = uicontrol( ... % Callback function run when the Map tool bar item is unselected %--------------------------------------------------------------------- function Map_OffMenuCallback(hObject, eventdata) - + % Make the earth map invisible % ---------------------------- set(hMapFig, 'Visible', 'off' ); - % Re-activate keyPressFcn callback on main fig + % Re-activate keyPressFcn callback on main fig % --------------------------------------------- set(hMainFig, 'KeyPressFcn', @keyPressFcnCallback); - + end %% Bottle_OnMenuCallback ................................ Correction Module @@ -2624,16 +2635,16 @@ hrbInterpCancel = uicontrol( ... %--------------------------------------------------------------------- function Bottle_OnMenuCallback(hObject, eventdata) % 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) % ------------------------------------------------------ SAMPLE = tsg.plot.sample; PARA = getParaCorModule( hMainFig ); - + % Switch somme buttons % -------------------- set( hQCToggletool, 'state', 'off' ); @@ -2645,7 +2656,7 @@ hrbInterpCancel = uicontrol( ... set( hCalToggletool, 'enable', 'off' ); set( hInterpToggletool, 'enable', 'off' ); set( hTimelimitToggletool, 'enable', 'on' ); - + % Activate or desactivate uipanels % --------------------------------- set( hpDateLimit, 'Visible', 'on' ); @@ -2653,7 +2664,7 @@ hrbInterpCancel = uicontrol( ... set( hCorPanel, 'Visible', 'on' ); set( hbgParameter, 'Visible', 'off'); set( hbgQc, 'Visible', 'off'); - + if ~isempty( tsg.([SAMPLE '_EXT']) ) % Compute the sample-TSG differences @@ -2680,15 +2691,15 @@ hrbInterpCancel = uicontrol( ... noNaN = tsg.DAYD(~isnan( tsg.DAYD )); set( hetDateMin, 'String', datestr(noNaN(1), 31)); set( hetDateMax, 'String', datestr(noNaN(end), 31)); - -end + + end %% Bottle_OffMenuCallback ............................... Correction module %--------------------------------------------------------------------- % Callback function run when the bootle push tool is selected %--------------------------------------------------------------------- function Bottle_OffMenuCallback(hObject, eventdata) - + % If necessary toggle off some buttons % ------------------------------------ set( hQCToggletool, 'state', 'off' ); @@ -2700,42 +2711,42 @@ end 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 % ----------------------------------------- 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} ); - + % Necessary to unzoom as the new plot keep in memory the preceding zoom % --------------------------------------------------------------------- zoom out; - + % Set the pointer % --------------- set( hMainFig, 'Pointer', 'arrow'); - + end %% OldCorCancelCallback .................................... Correction Module function OldCorCancelCallback(hObject, eventdata) % Callback function run when ... - + % Desactivate somme Toggle button % ------------------------------- set( hZoomInToggletool, 'state', 'off' ); @@ -2743,31 +2754,31 @@ end 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 ); - + % To cancel the correction set the ADJUSTED variable % to [] % -------------------------------------------------- tsg.([PARA{1} '_ADJUSTED']) = []; tsg.([PARA{1} '_ADJUSTED_QC']) = []; tsg.([PARA{1} '_ADJUSTED_ERROR']) = []; - + % Save tsg data % ------------- setappdata(hMainFig, 'tsg_data', tsg); - + % Plot in the 3 axes % ------------------ plot_Correction( hMainFig, hPlotAxes, PARA ); - + end %% cancelCorrectionCallback .................................... Correction Module function cancelCorrectionCallback(hObject, eventdata, Limits) @@ -2775,8 +2786,8 @@ end % corrections made from comparison with bottles or ARGO data. % The deletion can be made for th whole time series or % between 2 dates. -% $Id$ - + % $Id$ + % Desactivate somme Toggle button % ------------------------------- set( hZoomInToggletool, 'state', 'off' ); @@ -2784,19 +2795,19 @@ end 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 - % ------------------------------------------------------ + % The correction will be cancelled either for the entire + % time series or within date limits + % ------------------------------------------------------ ind = 0; switch Limits @@ -2805,28 +2816,28 @@ end 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 - % -------------------------------- + + % ind = size(tsg.([PARA{1} '_ADJUSTED'])); + + % Get the indices between 2 dates + % -------------------------------- case 'part' - + % 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 @@ -2840,22 +2851,22 @@ end 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 ); - + end %% gradientCorrectionCallback .................................... Correction Module function gradientCorrectionCallback(hObject, eventdata) % Callback function run when - + % Desactivate somme Toggle button % ------------------------------- set( hZoomInToggletool, 'state', 'off' ); @@ -2863,57 +2874,57 @@ end set( hPanToggletool, 'state', 'off' ); set( hQCToggletool, 'state', 'off' ); set( hTimelimitToggletool, 'state', 'off' ); - + % Get the time limits 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'); - + % 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 ); SAMPLE = tsg.plot.sample; - + if ~isempty( tsg.([SAMPLE '_EXT']) ) - + % Compute the sample-TSG differences % ---------------------------------- diffTsgSample( hMainFig, PARA ); - + % Correction % ---------- error = corTsgGradient(hMainFig, PARA, dateMin, dateMax); - + switch error - + case 1 - + % Plot in the 3 axes % ------------------ plot_Correction( hMainFig, hPlotAxes, PARA ); - + case -1 - + if DateMax <= DateMin msgbox( 'Date limits are not correct',... 'Correction module', 'warn', 'modal'); end - + end - + end - + end %% biasCorrectionCallback .................................... Correction Module function biasCorrectionCallback(hObject, eventdata) % Callback function run when - + % Desactivate somme Toggle button % ------------------------------- set( hZoomInToggletool, 'state', 'off' ); @@ -2921,24 +2932,24 @@ end 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 ); SAMPLE = tsg.plot.sample; - + if ~isempty( tsg.([SAMPLE '_EXT']) ) - + % Compute the sample-TSG differences % ---------------------------------- diffTsgSample( hMainFig, PARA ); @@ -2948,17 +2959,17 @@ end % Correction % ---------- error = corTsgBias(hMainFig, PARA, dateMin, dateMax); - + switch error - + case 1 - + % Plot in the 3 axes % ------------------ plot_Correction( hMainFig, hPlotAxes, PARA ); - + case -1 - + if DateMax <= DateMin msgbox( 'Date limits are not correct',... 'Correction module', 'warn', 'modal'); @@ -2966,14 +2977,14 @@ end otherwise msgbox( 'CorBiasCallback : Error different or -1',' ', 'error'); - + end end - + %% linearCorrectionCallback .................................... Correction Module function linearCorrectionCallback(hObject, eventdata) % Callback function run when - + % Desactivate somme Toggle button % ------------------------------- set( hZoomInToggletool, 'state', 'off' ); @@ -2981,53 +2992,53 @@ end 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 ); SAMPLE = tsg.plot.sample; - + if ~isempty( tsg.([SAMPLE '_EXT']) ) - + % Compute the sample-TSG differences % ---------------------------------- diffTsgSample( hMainFig, PARA ); - + % Correction % ---------- error = corTsgLinear(hMainFig, PARA, dateMin, dateMax); - + switch error - + case 1 - + % Plot in the 3 axes % ------------------ plot_Correction( hMainFig, hPlotAxes, PARA ); - + case -1 msgbox( 'Date limits are not correct',... 'Correction module', 'warn', 'modal'); end - + end - + end %% medianCorrectionCallback .................................... Correction Module function medianCorrectionCallback(hObject, eventdata) % Callback function run when - + % Desactivate somme Toggle button % ------------------------------- set( hZoomInToggletool, 'state', 'off' ); @@ -3035,45 +3046,45 @@ end 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 ); SAMPLE = tsg.plot.sample; - + if ~isempty( tsg.([SAMPLE '_EXT']) ) - + % Compute the sample-TSG differences % ---------------------------------- diffTsgSample( hMainFig, PARA ); - + % Correction % ---------- error = corTsgMedian(hMainFig, PARA, dateMin, dateMax); - + switch error - + case 1 - + % Plot in the 3 axes % ------------------ plot_Correction( hMainFig, hPlotAxes, PARA ); - + otherwise - + % Nothing is done - Error msg within the corTsgMedian function end - + end end @@ -3082,17 +3093,17 @@ end % --------------------------- function SelectParameter(hObject, eventdata, nplot) % Callback function run when the .... - + % Get application data % -------------------- tsg = getappdata( hMainFig, 'tsg_data'); - + % Get the active string of the selected box % ----------------------------------------- val = get( hObject, 'Value' ); string_list = get( hObject, 'String' ); selected_string = string_list{val}; - + % Get the default parameter % ------------------------- tsg.plot.parameter{nplot} = selected_string; @@ -3102,11 +3113,11 @@ end tsg.plot.sample = 'SSTP'; end end - + % Save application data % -------------------- setappdata( hMainFig, 'tsg_data', tsg); - + % Disable the climatology % ----------------------- plotClim = 0; @@ -3114,36 +3125,36 @@ end 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); end - + end %% SelectTime_OnMenuCallback %--------------------------- function SelectTime_OnMenuCallback(hObject, eventdata) % 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; @@ -3152,51 +3163,51 @@ end 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(gcbo, eventdata) - + % 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); @@ -3207,15 +3218,15 @@ end %---------------------------- function SelectTime_OffMenuCallback(hObject, eventdata) % Callback function run when the .... - + % Desactivate time limit buttons % ------------------------------ set( hTimelimitToggletool, 'state', 'off'); - + set( hMainFig, 'WindowButtonDownFcn', []); - + set( hMainFig, 'Pointer', 'arrow'); - + end %% Clim_OffMenuCallback @@ -3223,15 +3234,15 @@ end % Callback function run when the Levitus climatology toolbar is unselected %------------------------------------------------------------------------ function Clim_OffMenuCallback(hObject, eventdata) - + % Get lines handles from tag % -------------------------- hLines = findobj('-regexp', 'Tag', 'TAG_LINE_CLIMATO_'); - + % Delete climatology lines on axes % --------------------------------- delete(hLines); - + end %% Clim_OnMenuCallback @@ -3239,15 +3250,15 @@ end % Callback function run when the Levitus climatology toolbar is unselected %------------------------------------------------------------------------ function Clim_OnMenuCallback(hObject, eventdata) - + % Test if the TSG and bucket files have been read % ----------------------------------------------- if strcmp( get(hOpenMenu, 'UserData'), 'on' ) - + % plot climatology % ---------------- plot_Climatology(hMainFig, hPlotAxes); - + end end @@ -3256,35 +3267,35 @@ end % Callback function run when climato submenu is selected % ------------------------------------------------------------------- function ClimatoSelectMenuCallback(hObject, eventdata, 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 % ----------------------------------- set(hObject, 'checked', 'on'); - + % 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; - + % plot and read (eventually) new climatology % ------------------------------------------ plot_Climatology(hMainFig, hPlotAxes); end - + end %% PreferencesMenuCallback @@ -3292,30 +3303,30 @@ end % Callback function run when Option/Preference is selected % ------------------------------------------------------------------- function PreferencesMenuCallback(hObject, eventdata) - + 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) + tsg.preference.map_resolution ~= oldmapres) erase_Line( hPlotAxes, 4 ); plot_map( hMainFig, hPlotAxes); end - + end - + end %% HelpMenuCallback @@ -3340,11 +3351,11 @@ end % Callback function run when the headerForm tool bar item is selected % ------------------------------------------------------------------- function HeaderMenuCallback(hObject, eventdata) - + % call header form function % ------------------------- headerForm(hMainFig); - + end %% PrintFigMenuCallback @@ -3352,65 +3363,65 @@ end % Callback function run when the Report tool bar item is selected % ------------------------------------------------------------------- function PrintFigMenuCallback(hObject, eventdata) - + % 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') - + % Default parameter % ----------------------------------------------------- PARA = getParaCorModule( hMainFig ); - + plot_Correction( hMainFig, hPlot, PARA ); - + elseif strcmp(get(hCalToggletool,'state'), 'on') - + plot_Calibration( hMainFig, hPlot, 1, 'SSPS' ); plot_Calibration( hMainFig, hPlot, 2, 'SSJT' ); plot_Calibration( hMainFig, hPlot, 3, 'SSTP' ); % elseif strcmp(get(hMapToggletool,'state'), 'on') % plot_map( hMainFig, hPlot) - + elseif strcmp(get(hInterpToggletool,'state'), 'on') - + plot_Interpolation( hMainFig, hPlot, 1 ); plot_Interpolation( hMainFig, hPlot, 2 ); plot_Interpolation( hMainFig, hPlot, 3 ); - + else - + plot_Validation( hMainFig, hPlot, 1, tsg.plot.parameter{1} ); plot_Validation( hMainFig, hPlot, 2, tsg.plot.parameter{2} ); plot_Validation( hMainFig, hPlot, 3, tsg.plot.parameter{3} ); - + % I = getframe(hPlotAxes(1)); % imwrite(I.cdata, 'myplot.png'); end - + linkaxes([hPlot(1),hPlot(2),hPlot(3)], 'x'); for i = 1 : length( hPlot ) % set(hPlot(i), 'box', 'on','XTickMode','auto'); set(hPlot(i), 'box', 'on','XTickMode','auto'); datetick(hPlot(i),'x','mm/dd','keepticks' ); end - + % enable ButtonMotion on main fig after select QC area % ---------------------------------------------------- set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - + end %% ReportMenuCallback @@ -3418,11 +3429,11 @@ end % Callback function run when the Report tool bar item is selected % ------------------------------------------------------------------- function ReportMenuCallback(hObject, eventdata) - + % call report function % -------------------- saveReport(hMainFig); - + end %% GoogleEarthMenuCallback @@ -3430,8 +3441,8 @@ end % Callback function run when the Google Earth tool bar item is selected % ------------------------------------------------------------------- function GoogleEarthMenuCallback(hObject, eventdata) - - % Get tsg application data + + % Get tsg application data % ------------------------ tsg = getappdata( hMainFig, 'tsg_data' ); @@ -3439,11 +3450,11 @@ end % -------------------------- k = kml(tsg.CYCLE_MESURE); - % Color value format must be passed as a character array according + % Color value format must be passed as a character array according % to the format string 'AABBGGRR', eg: red = 'FF0000FF' k.plot(tsg.LONX,tsg.LATX, 'linewidth', 2, 'linecolor', 'FF0000FF'); k.run; - + end %% SaveMenuCallback @@ -3451,43 +3462,43 @@ end % Callback function run when the Save menu item is selected % ------------------------------------------------------------------- function SaveMenuCallback(hObject, eventdata) - + % Retrieve named application data % ------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); - + % 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', strcat(tsg.file.name, '.nc')); - + % if user press cancel button, all var are set to zero % ---------------------------------------------------- if filterindex == 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 % ----------------- error = writeTSGDataNetCDF(hMainFig, strcat(pathName, fileName)); - + % Pointer reset to arrow % ---------------------- set( hMainFig, 'Pointer', 'arrow' ); - + % Check for NetCDF writing error % must to be rewriting % ------------------------------ @@ -3496,17 +3507,17 @@ end 'NetCDF writing error: %s %s', pathName, fileName); return; end - + % update the display % ------------------ set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext)); - + % enable Quality Control mode % --------------------------- hdl_pushtool = findobj('Tag', 'QC'); set(hdl_pushtool, 'Enable', 'on'); end - + end %% ExportTsgCallback @@ -3514,47 +3525,47 @@ end % Callback function run when the Export menu item is selected % ------------------------------------------------------------------- function ExportTsgCallback(hObject, eventdata) - + % Retrieve named application data % ------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); - + % Desactivate MouseMotion 'off' % ---------------------------- set( hMainFig, 'WindowButtonMotionFcn', []); - + % Open standard dialog box for saving files % ----------------------------------------- [fileName, pathName, filterindex] = uiputfile('*.tsgqc', ... 'Save file name', strcat(tsg.file.name, '.tsgqc')); - + % if user press cancel button, all var are set to zero % ---------------------------------------------------- if filterindex == 0 return; end - + % Pointer set to watch during reading and plotting % ------------------------------------------------ set( hMainFig, 'Pointer', 'watch' ); - + % Write a .TSG (ascii) file % -------------------------- error = writeAsciiTsg(hMainFig, strcat(pathName, fileName)); - + % Pointer reset to arrow % ---------------------- set( hMainFig, 'Pointer', 'arrow' ); - + % enable Quality Control mode % --------------------------- hdl_pushtool = findobj('Tag', 'QC'); set(hdl_pushtool, 'Enable', 'on'); - + % Set MouseMotion 'on' % -------------------- set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - + % Check for .TSG writing error - must to be rewriting % Because of the 'return' - These line must be at the end % -------------------------------------------------------- @@ -3563,54 +3574,54 @@ end 'TSG no ouput: %s %s', pathName, fileName); return; end - + end %% ExportSampleCallback % ------------------------------------------------------------------- % Callback function run when the Export menu item is selected % ------------------------------------------------------------------- function ExportSampleCallback(hObject, eventdata) - + % Retrieve named application data % ------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); - + % Desactivate MouseMotion 'off' % ---------------------------- set( hMainFig, 'WindowButtonMotionFcn', []); - + % Open standard dialog box for saving files % ----------------------------------------- [fileName, pathName, filterindex] = uiputfile('*.spl', ... 'Save file name', strcat(tsg.file.name, '.spl')); - + % if user press cancel button, all var are set to zero % ---------------------------------------------------- if filterindex == 0 return; end - + % Pointer set to watch during reading and plotting % ------------------------------------------------ set( hMainFig, 'Pointer', 'watch' ); - + % Write a .SPL (ascii) file % -------------------------- error = writeAsciiSample(hMainFig, strcat(pathName, fileName)); - + % Pointer reset to arrow % ---------------------- set( hMainFig, 'Pointer', 'arrow' ); - + % enable Quality Control mode % --------------------------- hdl_pushtool = findobj('Tag', 'QC'); set(hdl_pushtool, 'Enable', 'on'); - + % Set MouseMotion 'on' % -------------------- set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - + % Check for .TSG writing error - must to be rewriting % Because of the 'return' - These line must be at the end % -------------------------------------------------------- @@ -3619,7 +3630,7 @@ end 'TSG no ouput: %s %s', pathName, fileName); return; end - + end %% UndoMenuCallback @@ -3627,18 +3638,18 @@ end % Callback function run when the Edit/Undo menu item is selected (Ctrl+Z) % ----------------------------------------------------------------------- function UndoMenuCallback(hObject, eventdata) - + % Undo module not yet implemented % ------------------------------- % msgbox('Undo module not yet implemented', 'modal'); - + %tsg.queue = undo(tsg.queue); %tsg.SSPS_QC = get(tsg.queue); - + % Make the Salinity, temperature and velocity plot % ------------------------------------------------ plot_SalTempVel( hMainFig, hPlotAxes ); - + end %% RedoMenuCallback @@ -3646,11 +3657,11 @@ end % Callback function run when the Edit/Redo menu item is selected (Ctrl+R) % ----------------------------------------------------------------------- function RedoMenuCallback(hObject, eventdata) - + % Redo module not yet implemented % ------------------------------- msgbox('Redo module not yet implemented', 'modal'); - + end %% KeyPressFcnCallback @@ -3658,45 +3669,45 @@ end % Callback function run when key is pressed % ----------------------------------------------------------------------- function keyPressFcnCallback(hObject, evnt) - + % MATLAB generates repeated KeyPressFcn events, desactivate callback % ------------------------------------------------------------------ set(hObject, 'KeyPressFcn', []); - + % check if key is pressed % ----------------------- if ~isempty(evnt.Key) - + % test key, shift or control % -------------------------- switch evnt.Key - + case 'shift' - + % get current pointer shape % ------------------------- pointerShape = get(hObject, 'pointer'); - + % save current cursor shape % ------------------------- setappdata( hMainFig, 'tsg_pointer', pointerShape); - + % set cursor to fullcross or reset to normal arrow % ------------------------------------------------ set(hObject, 'pointer', 'fullcrosshair'); - + case 'control' - + % Get current position of cusor and return its coordinates in % axes % ----------------------------------------------------------- a = get(hPlotAxes(1), 'CurrentPoint'); x = a(2,1); - + % Test if cursor is inside data interval % ------------------------------------- if x > tsg.DAYD(1) && x < tsg.DAYD(end) - + % loop over 3 subplot and draw vertical lines % ------------------------------------------- for iplot = 1:3 @@ -3707,11 +3718,11 @@ end end end - + end % end of switch - + end - + end @@ -3720,41 +3731,41 @@ end % Callback function run when key is release % ----------------------------------------------------------------------- function keyReleaseFcnCallback(hObject, evnt) - + % check if key is pressed % ----------------------- if ~isempty(evnt.Key) - + % test key, shift or control % -------------------------- switch evnt.Key - + case 'shift' - + % get stored cursor shape % ----------------------- pointerShape = getappdata( hMainFig, 'tsg_pointer'); - + % if pointer equal to fullcrosshair, oups, error, reset to arrow % --------------------------------------------------------------- if strcmp(pointerShape, 'fullcrosshair') pointerShape = 'arrow'; set(hObject, 'pointer', pointerShape); end - + % set pointer % ----------- set(hObject, 'pointer', pointerShape); - + case 'control' - % find vertical lines and delete them - % ----------------------------------- - hdl_lines = findobj( 'Tag', 'VERTICAL_TAG_LINE' ); - delete(hdl_lines); - + % find vertical lines and delete them + % ----------------------------------- + hdl_lines = findobj( 'Tag', 'VERTICAL_TAG_LINE' ); + delete(hdl_lines); + end % end of switch - + end % end of if % Re-activate callback @@ -3768,12 +3779,12 @@ end % Callback function run when the Quit Map Figure item is selected % ----------------------------------------------------------------- function QuitMapCallback(hObject, eventdata) - + % Make the earth map invisible % ---------------------------- set(hMapFig, 'Visible', 'off' ); set(hMapToggletool, 'state', 'off' ); - + end %% QuitMenuCallback @@ -3785,22 +3796,22 @@ end % Get the data from the application GUI % ------------------------------------- tsg = getappdata(hMainFig, 'tsg_data'); - + % in case of bad initialisation, the user could close the windows % --------------------------------------------------------------- try - + % save config mat file in prefdir % ------------------------------- config_file = [prefdir, filesep, tsgqcname, '.mat']; - + % save preference mat file % ------------------------ if exist('tsg', 'var') && isfield( tsg, 'preference') preference = tsg.preference; save( config_file, 'preference'); end - + % If the data have been modified and not save, the program % ask to save the data % -------------------------------------------------------- @@ -3809,19 +3820,19 @@ end questdlg('The file has been modified. Do you want to save it ?',... 'Save before Quit?',... 'Yes', 'No', 'Yes'); - + if strcmp(selection, 'Yes') - + % call File/Save Menu Callback before before quit % ----------------------------------------------- SaveMenuCallback; - + end - + % quit program % ------------ quitProgram(DEFAULT_PATH_FILE, hMainFig, hMapFig); - + else selection = ... questdlg(['Quit ' get(hMainFig, 'Name') '?'],... @@ -3833,7 +3844,7 @@ end quitProgram(DEFAULT_PATH_FILE, hMainFig, hMapFig); end end - + % catch error during close windows % -------------------------------- catch @@ -3842,9 +3853,39 @@ end fprintf('abnormal program termination during close user request\n'); quitProgram(DEFAULT_PATH_FILE, hMainFig); end + + end % end of QuitMenuCallback - end + function quitProgram(DEFAULT_PATH_FILE, varargin) + + % close all windows + % ----------------- + for ii=1:size(varargin,2) + delete(varargin{ii}); + end + + % reset userdata property of root Matalab object (0) for next use + % --------------------------------------------------------------- + set(0, 'userdata', []); + + % reset Matlab search path to default + % addpath isn't mandatory and failed with compiled applications + % -------------------------------------------------------------- + if (~isdeployed) + rmpath( [DEFAULT_PATH_FILE filesep 'tsg_util'] ); + rmpath( [DEFAULT_PATH_FILE filesep 'tsg_data'] ); + rmpath( [DEFAULT_PATH_FILE filesep 'tsg_io'] ); + end + + % Refresh file system caches + % -------------------------- + rehash; + + % clear base workspace just before quit, this is the only method + % to clear NetCDF variables assign to base workspace with assignin + % ---------------------------------------------------------------- + evalin('base','clear all'); + + end % end of quitProgram -% end of tsgqc -% ---------------- -end +end % end of tsgqc -- GitLab