Skip to content
Snippets Groups Projects
tsgqc_GUI.m 64.5 KiB
Newer Older
% TSG (Thermosalinograph) Quality Control software
%
% $Id$
%

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

%%  Initialization tasks
%   ********************

% Clear Command Window display, giving up a "clean screen."
% ---------------------------------------------------------
clc;
% Define global variable VERSION number
% -------------------------------------
global VERSION

VERSION = '0.2a';

% Find program directory.
% functions (icons) should be store at a lower level
% add directories to Matlab search path, works on UNIX
% and Windows host
% ---------------------------------------------------
tsgqcname = mfilename;
fulltsgqcname = mfilename('fullpath');
DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ;
p = [pathsep,...
  DEFAULT_PATH_FILE,[filesep 'tsg_util' pathsep],...
  DEFAULT_PATH_FILE,[filesep 'tsg_data' pathsep],...
  DEFAULT_PATH_FILE,[filesep 'tsg_io' pathsep]
  ];
addpath( p, '-END' );
rehash;

% get screen dimensions (pixels)
% ------------------------------
set(0,'Units','pixels');
screenSize = get(0,'ScreenSize');

% define default font size based on screen resolution
% ---------------------------------------------------
if screenSize(3) <= 1024
  tsg.fontSize = 9;
% Screen limits for the GUI
% -------------------------
set(0,'Units','normalized');
guiLimits = get(0,'ScreenSize');
guiLimits(1) = guiLimits(1) + 0.01;
guiLimits(2) = guiLimits(2) + 0.05;
guiLimits(3) = guiLimits(3) - 0.02;
guiLimits(4) = guiLimits(4) - 0.15;
%% Main GUI
% Create and then hide the GUI as it is being constructed.
% --------------------------------------------------------
hMainFig = figure(...
  'Name', 'TSG Validation', ...
  'NumberTitle', 'off', ...
  'Resize', 'on', ...
  'Menubar','none', ...
  'Toolbar', 'none', ...
  'UserData', 'ButtonMotionOff', ...
  'WindowButtonMotionFcn', @MouseMotion, ...
  'CloseRequestFcn', @QuitProgram,...
  'HandleVisibility','callback',...
  'Visible','on',...
  'Units', 'normalized',...
  'Position',guiLimits, ...
  'Color', get( 0, 'DefaultUIControlBackgroundColor' ));

% Initialize tsg structure
% ------------------------
%tsg_initialisation(hMainFig)

%% Initialize tsg structure with tsg_preference function
% -----------------------------------------------------
tsg_preferences(hMainFig, tsgqcname);

% get root struct from root object
% --------------------------------
root = get(0,'Userdata');

% Retrieve named application data
% -------------------------------
tsg = getappdata( hMainFig, 'tsg_data');

%%  Menu File
%   -----------------------------------------------------------------------
hFileMenu = uimenu(...
  'Parent', hMainFig,...
  'HandleVisibility','callback',...
  'Label', 'File');
hOpenMenu = uimenu(...
  'Parent', hFileMenu,...
  'Label','Open',...
  'Accelerator','O',...
  'HandleVisibility','callback',...
  'Callback', @OpenMenuCallback);
hSaveMenu = uimenu(...
  'Parent', hFileMenu,...
  'Label','Save',...
  'Accelerator','S',...
  'Enable', 'off',...
  'UserData', 'off',...
  'HandleVisibility','callback',...
  'Callback',@SaveMenuCallback);
hQuitMenu = uimenu(...
  'Parent',hFileMenu,...
  'Label','Quit',...
  'Separator','on',...
  'Accelerator','Q',...
  'HandleVisibility','callback',...
  'Callback',@QuitMenuCallback);

% ---------------------------------
hEditMenu = uimenu(hMainFig,'Label','Edit');
uimenu(hEditMenu,'Label','Undo',...
  'Accelerator','Z',...
  'Enable', 'off',...
  'Callback',@UndoMenuCallback);
uimenu(hEditMenu,'Label','Redo',...
  'Accelerator','R',...
  'Enable', 'off',...
  'Callback',@RedoMenuCallback);

%%  Menu Climatology with Annual/Seasonal/Monthly submenu
% --------------------------------------------------------

% define structure s stored in userdata
% -------------------------------------
s = struct('type', 'annual', 'time', 1);

hClimatoMenu = uimenu(hMainFig,'Label','Climatology', ...
  'Tag', 'TAG_UIMENU_CLIMATO_MAIN', ...
  'UserData', s);

% by defautl at startup, select climatology to annual
% ---------------------------------------------------
uimenu(hClimatoMenu,'Label','Annual',...
  'Tag','TAG_UIMENU_CLIMATO_ANNUAL',...
  'Enable', 'on',...
  'Callback', {@ClimatoSelectMenuCallback, 'annual', 1});

% declare top-level seasonal menu
% -------------------------------
hClimatoSeasonalMenu = uimenu(hClimatoMenu,'Label','Seasonal');

% declare label for seasonal submenu
% ----------------------------------
label = {'jan-feb-mar','apr-may-jun','jul-aug-sept','oct-nov-dec'};

% loop over the four submenu
% --------------------------
for i=1:4
uimenu(hClimatoSeasonalMenu,'Label',label{i},...
  'Checked','off',...
  'Tag',['TAG_UIMENU_CLIMATO_SEASONAL_' i],...
  'Enable', 'on',...
  'Callback',{@ClimatoSelectMenuCallback, 'seasonal', i});
end

% declare top-level monthly menu
% -------------------------------
hClimatoMonthlyMenu = uimenu(hClimatoMenu,'Label','Monthly');

% declare label for monthly submenu
% ----------------------------------
label = {'january','february','march','april','may','june','july','august',...
         'september','october','november','december'};

% loop over the four submenu
% --------------------------
for i=1:12
uimenu(hClimatoMonthlyMenu,'Label',label{i},...
  'Checked','off',...
  'Tag',['TAG_UIMENU_CLIMATO_MONTHLY_' i],...
  'Callback',{@ClimatoSelectMenuCallback, 'monthly', i});
end


%%  Menu Option with Preferences submenu
% --------------------------------------------------------
hOptionMenu = uimenu(hMainFig,'Label','Option');
uimenu(hOptionMenu,'Label','Preferences',...
  'Checked', root.preference.autoload,...
  'Enable', 'on',...
%%  Toolbar
%   -----------------------------------------------------------------------
hToolbar       =   uitoolbar(...   % Toolbar for Open and Print buttons
  'Parent',hMainFig, ...
hOpenPushtool  =   uipushtool(...   % Opendoc toolbar button
  'Parent',hToolbar,...
  'TooltipString','Open file',...
  'CData', iconRead(fullfile(matlabroot, ...
  '/toolbox/matlab/icons/opendoc.mat')),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_OPEN',...
  'UserData', 'off',...
  'Enable', 'on',...
  'ClickedCallback', @OpenMenuCallback);
hSavePushtool  =   uipushtool(...   % Open Save toolbar button
  'Parent',hToolbar,...
  'TooltipString','Save NetCDF file',...
  'CData',iconRead( ...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'savedoc.mat']),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_SAVE',...
  'Enable', 'off',...
  'ClickedCallback', @SaveMenuCallback);
hZoomToggletool  =   uitoggletool(...   % Open Zoom toolbar button
  'Parent',hToolbar,...
  'Separator', 'on', ...
  'TooltipString','Zoom',...
  'CData', iconRead(fullfile(matlabroot, ...
  '/toolbox/matlab/icons/zoom.mat')),...
  'HandleVisibility','on', ...
  'OffCallback', @Zoom_OffMenuCallback,...
  'ONCallback',  @Zoom_OnMenuCallback);
hPanToggletool  =   uitoggletool(...   % Open Pan toolbar button
  'Parent',hToolbar,...
  'TooltipString','Pan',...
  'CData',iconRead(fullfile(matlabroot, ...
  '/toolbox/matlab/icons/pan.mat')),...
  'OnCallback',  @Pan_OnMenuCallback);
hQCToggletool  =   uitoggletool(...   % Open QC toolbar button
  'Parent',hToolbar,...
  'TooltipString','Validation codes',...
  'Separator', 'on', ...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'qcicon.mat']),...
  'Tag','PUSHTOOL_QC',...
  'OnCallback',  @QC_OnMenuCallback);
hMapToggletool  =   uitoggletool(...   % Open Map toolbar button
  'Parent',hToolbar,...
  'TooltipString','Map and ship track',...
  'Separator', 'on', ...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'mapicon.mat']),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_MAP',...
  'UserData', 'off', ...
  'Enable', 'off',...
  'OnCallback',  @Map_OnMenuCallback);
hClimToggletool  =   uitoggletool(...   % Open Climatology toolbar button
  'Parent',hToolbar,...
  'TooltipString','Climatology',...
  'Separator', 'on', ...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'climicon.mat']),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_CLIM',...
  'UserData', 'off',...
  'Enable', 'off',...
  'OnCallback',  @Clim_OnMenuCallback);
hBottleToggletool  = uitoggletool(...   % Correction module toolbar button
  'TooltipString','Correct the SSS TSG data',...
  'Separator', 'on', ...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'bottleicon.mat']),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_BOTTLE',...
  'OffCallback', @Bottle_OffMenuCallback,...
  'OnCallback',  @Bottle_OnMenuCallback);
hStartlimitToggletool  = uitoggletool(...   % Select beginning of time series toolbar button
  'Parent',hToolbar,...
  'TooltipString','Select start time',...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'startlimit.mat']),...
  'HandleVisibility','on', ...
  'Tag', 'CORRECT_STARTTIME', ...
  'UserData', 'off',...
  'Enable', 'off',...
  'OffCallback', @SelectTime_OffMenuCallback,...
  'OnCallback',  @SelectTime_OnMenuCallback);
hEndlimitToggletool  = uitoggletool(...   % Select end of time series
  'Parent',hToolbar,...
  'TooltipString','Select end time',...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'endlimit.mat']),...
  'HandleVisibility','on', ...
  'Tag', 'CORRECT_ENDTIME', ...
  'UserData', 'off',...
  'Enable', 'off',...
  'OffCallback', @SelectTime_OffMenuCallback,...
  'OnCallback',  @SelectTime_OnMenuCallback);
hHeaderPushtool  = uipushtool(...   % Open headerForm button
  'Parent',hToolbar,...
  'TooltipString','Fill the header form',...
  'Separator', 'on', ...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'hdricon.mat']),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_HEADER',...
  'Enable', 'off',...
  'ClickedCallback', @HeaderMenuCallback);

%% Dynamic text area
%   -----------------------------------------------------------------------
%  Dynamic text area that displays the loaded filename, date, position and
%  ------------------------------------------------------------------------
% -----------------
hInfoPanel = uipanel( ...
  'Parent', hMainFig, ...
  'Units', 'normalized', ...
  'BorderType', 'none',...
  'Visible', 'on', ...
  'Position',[.01, .96, .98, .04]);
% Dynamic text area that displays the date
% ----------------------------------------
uicontrol(...
  'Fontsize', tsg.fontSize, ...
  'Fontweight', 'bold', ...
  'HorizontalAlignment', 'left', ...
  'Fontsize', tsg.fontSize, ...
  'Visible','on',...
  'Units', 'normalized',...
  'HorizontalAlignment', 'left', ...
  'String', 'No file loaded', ...

% Text area that displays the date
% --------------------------------
uicontrol(...
  'Fontsize', tsg.fontSize, ...
  'Fontweight', 'bold', ...
  'HorizontalAlignment', 'left', ...
  'Fontsize', tsg.fontSize, ...
  'Visible','on',...
  'Units', 'normalized',...
  'HorizontalAlignment', 'left', ...
  'String', 'N/A', ...

% Text area that displays the latitude
% ------------------------------------
uicontrol(...
  'Fontsize', tsg.fontSize, ...
  'Fontweight', 'bold', ...
  'HorizontalAlignment', 'left', ...
  'String', 'Latitude:');
hInfoLatText = uicontrol(...
  'Fontsize', tsg.fontSize, ...
  'Visible','on',...
  'Units', 'normalized',...
  'HorizontalAlignment', 'left', ...
  'String', 'N/A', ...

% Text area that displays the longitude
% -------------------------------------
uicontrol(...
  'Fontsize', tsg.fontSize, ...
  'Fontweight', 'bold', ...
  'HorizontalAlignment', 'left', ...
  'Position',[.495, .25, .08, .6], ...
  'String', 'Longitude:');
hInfoLongText = uicontrol(...
  'Fontsize', tsg.fontSize, ...
  'Visible','on',...
  'Units', 'normalized',...
  'HorizontalAlignment', 'left', ...
  'String', 'N/A', ...

% Text area that display salinity and temperature
% -----------------------------------------------
uicontrol(...
  'Fontsize', tsg.fontSize, ...
  'Fontweight', 'bold', ...
  'HorizontalAlignment', 'left', ...
  'Position', [.68, .25, .05, .6], ...
  'Fontsize', tsg.fontSize, ...
  'Visible','on',...
  'Units', 'normalized',...
  'HorizontalAlignment', 'left', ...
  'String', 'N/A', ...
  'Fontsize', tsg.fontSize, ...
  'Fontweight', 'bold', ...
  'HorizontalAlignment', 'left', ...
  'Position',[.785, .25, .05, .6], ...
  'Fontsize', tsg.fontSize, ...
  'Visible','on',...
  'Units', 'normalized',...
  'HorizontalAlignment', 'left', ...
  'String', 'N/A', ...
  'Fontsize', tsg.fontSize, ...
  'Fontweight', 'bold', ...
  'HorizontalAlignment', 'left', ...
  'Fontsize', tsg.fontSize, ...
  'Visible','on',...
  'Units', 'normalized',...
  'HorizontalAlignment', 'left', ...
  'String', 'N/A', ...
%% Plot axes
%   -----------------------------------------------------------------------
% The axes 1,2 and 3 will be plot in a uipanel
% axe 1 as propertie 'HandleVisibility' set to 'on' to prevent hidden 
% visibility when first plot is empty
%--------------------------------------------------------------------
  'BorderType', 'etchedin',...
  'Position',[0.15, 0.0, .85, .95]); 
hPlotAxes(1) = axes(...     % the axes for plotting Salinity
  'Parent', hPlotsPanel, ...
  'Units', 'normalized', ...
  'Visible', 'off', ...
  'Tag', 'TAG_AXES_1', ...
  'HandleVisibility','on', ...  % set to callback after first plot
  'Position',[.05, .64, .93, .35]);
hPlotAxes(2) = axes(...     % the axes for plotting temperature
  'Parent', hPlotsPanel, ...
  'Units', 'normalized', ...
  'Tag', 'TAG_AXES_2', ...  
  'HandleVisibility','on', ...
  'Position',[.05, .33, .93, .27]);
hPlotAxes(3) = axes(...     % the axes for plotting ship velocity
  'Tag', 'TAG_AXES_3', ...
  'HandleVisibility','on', ...
  'Position',[.05, .02, .93, .27]);

% The map will be plot in a uipanel
hMapPanel = uipanel( ...
  'Parent', hMainFig, ...
  'Units', 'normalized', ...
  'Visible', 'off', ...
  'Position',[0.15, 0, .85, .58]);
hPlotAxes(4) = axes(...     % the axes for plotting ship track map
  'Parent', hMapPanel, ...
  'Units', 'normalized', ...
  'Visible', 'off', ...
  'Tag', 'TAG_AXES_MAP', ...  
%% Quality Control Button Group panel
%   -----------------------------------------------------------------------
  'Title', 'Validation Codes', ...
  'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ...
  'tag', 'TAG_QC_DISPLAY_PANEL',...
  'BorderType', 'etchedin',...
  'Position', [.0, .71, .15, .25]);
% Initialize CallBack for button group properties
% ----------------------------------------------- 
set(hbgQc,'SelectionChangeFcn',@RadiobuttonQc);

%% Context Menu and RadioButtons for Quality control
%   -----------------------------------------------------------------------
hQcCmenu = uicontextmenu(...
  'Parent', hMainFig, ...
  'HandleVisibility','on' );

% get list of keys from hashtable tsg.qc.hash, defined inside
% tsg_initialisation.m
% -----------------------------------------------------------
qc_list = get(tsg.qc.hash);

% internal loop count with state to on
% ------------------------------------
count = 0;

% iterate (loop) on each key store inside hastable
% ------------------------------------------------
for i=1:numel(qc_list)
  
  % get key and some values in hashtable
  % ------------------------------------
  key   = qc_list{i};
  label = get(tsg.qc.hash, key, 'label');
  color = get(tsg.qc.hash, key, 'color');
  state = get(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(...
      'Parent', hQcCmenu,...
      'HandleVisibility','on', ...
      'Label', label,...
      'ForegroundColor', color,...
      'Callback', {@Qc, key});
    % add button QC to hbgQc uibuttongroup
    % ------------------------------------
      'Parent', hbgQc,...
      'Style', 'radiobutton',...
      'Fontsize', tsg.fontSize-1, ...
      'HorizontalAlignment', 'left', ...
      'HandleVisibility','on', ...
      'String', label,...
      'Tag', ['TAG_QC_RADIO_' key], ...
      'Position', [.01, .85-count*.12, .6, 0.08]);
    % add text QC display statistic on hQcPanel
    % -----------------------------------------
      'Style', 'text',...
      'Units', 'normalized', ...
      'Fontsize', tsg.fontSize-1, ...
      'HorizontalAlignment', 'right', ...
      'HandleVisibility','on', ...
      'ForegroundColor', color,...
      'Tag', ['TAG_QC_TEXT_' key],...
      'Position', [.61, .85-count*.12, .37, 0.08]);
    
    % increment count
    % ---------------
    count = count + 1;
%% uiButtonGroup set to choose the Correction method
% -------------------------------------------------------------------------

% Create the button group
hbgCorMethod = uibuttongroup( ...
  'Parent',hMainFig, ...
  'Title','Correction Method', ...
  'Units', 'normalized', ...
  'FontSize',tsg.fontSize-1, 'Fontweight', 'bold',...
  'Position',[.0, .3, .15, .18]);

% Create 2 radio buttons in the button group
hrbCorCancel = uicontrol( ...
  'Style','pushbutton', ...
  'Parent',hbgCorMethod, ...
  'Units', 'normalized', ...
  'String','Cancel the adjustment',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'CORRECT_CANCEL_PUSH', ...
  'Enable', 'off',...
  'pos',[.05 .68 .9 .25], ...
  'HandleVisibility','callback', ...
  'Callback', @CorCancelCallback);
hrbCorLinear = uicontrol( ...
  'Style','pushbutton', ...
  'Parent',hbgCorMethod, ...
  'Units', 'normalized', ...
  'String','Linear adjustment',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'CORRECT_LINEAR_PUSH', ...
  'Enable', 'off',...
  'pos',[.05 .38 .9 .25], ...
  'HandleVisibility','callback', ...
  'Callback', @CorLinearCallback);
hrbCorMedian = uicontrol( ...
  'Style','pushbutton', ...
  'Parent',hbgCorMethod, ...
  'Units', 'normalized', ...
  'String','Running median filter',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'CORRECT_MEDIAN_PUSH', ...
  'Enable', 'off',...
  'pos',[.05 .08 .9 .25],...
  'HandleVisibility','callback', ...
  'Callback', @CorMedianCallback);

%% uiPanel for the Date limits used in the Correction module

% Choose the date limits for the correction
% --------------------------------------------------
% Create the uipanel
hpDateLimit = uipanel( ...
  'Parent', hMainFig, ...
  'Title', 'Date Limits', ...
  'Units', 'normalized', ...
  'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ...
  'Position', [.0, .51, .15, .18]);
%  'BackgroundColor', 'white',...

htDateMin = uicontrol( ...
  'Parent', hpDateLimit, ...
  'Style', 'Text', ...
  'String', 'Min : yyyy-mm-dd hh:mm:ss', ...
  'HorizontalAlignment', 'left', ...
  'Units', 'normalized', ...
  'FontSize', tsg.fontSize-1, ...
  'Position',[.01 .8 .95 .15]);
hetDateMin = uicontrol( ...
  'Parent', hpDateLimit, ...
  'Style', 'edit', ...
  'Units', 'normalized', ...
  'BackgroundColor', 'white',...
  'FontSize', tsg.fontSize, ...
  'Tag', 'CORRECT_DATEMIN_EDIT',...
  'Position',[.01 .6 .95 .17]);

htDateMax = uicontrol( ...
  'Parent', hpDateLimit, ...
  'Style', 'Text', ...
  'String', 'Max : yyyy-mm-dd hh:mm:ss', ...
  'HorizontalAlignment', 'left', ...
  'Units', 'normalized', ...
  'FontSize', tsg.fontSize-1, ...
  'Position',[.01 .35 .95 .15]);
hetDateMax = uicontrol( ...
  'Parent', hpDateLimit, ...
  'Style', 'edit', ...
  'Units', 'normalized', ...
  'BackgroundColor', 'white',...
  'FontSize', tsg.fontSize, ...
  'Tag', 'CORRECT_DATEMAX_EDIT',...
  'Enable', 'off', ...
  'Position',[.01 .15 .95 .17]);


%% test if user preference autoload field is checked (on)
% -------------------------------------------------------
if strcmp(root.preference.autoload, 'on')

  % this code need to be fatorized file/open menu
  % ---------------------------------------------
  
  % A TSG file has been open and read
  % ---------------------------------
  set( hOpenMenu, 'UserData', 'on' );

  % Show handles marked as hidden with HandleVisibility property set to
  % callback or off
  % -------------------------------------------------------------------
  set(0, 'ShowHiddenHandles', 'on');
  
  % enable toolbar menu pushtool
  % ----------------------------
  hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_');
  set(hdl_pushtool, 'Enable', 'on');

  % enable Save menu
  % ----------------
  set(hSaveMenu, 'Enable', 'on');

  % update the filename display
  % ---------------------------
  set( hInfoFileText, 'String', tsg.file.name);

  % update some fields in tsg structure
  % -----------------------------------
  updateTsgStruct(hMainFig);

  % Running average of TSG time series
  % ----------------------------------
  tsg_moveaverage(hMainFig);

  % The callback to detect the mouse motion can be set to on
  % --------------------------------------------------------
  set( hMainFig, 'UserData', 'ButtonMotionOn');

  % yes, plot the Salinity, temperature and velocity
  % ------------------------------------------------
  plot_SalTempVel( hMainFig, hPlotAxes );
  plotmap( hMainFig, hPlotAxes);
  plot_WS( hMainFig, hPlotAxes );
  plot_EXT( hMainFig, hPlotAxes );
  
  % Hide handles marked as hidden with HandleVisibility property set to
  % callback or off
  % -------------------------------------------------------------------
  set(0, 'ShowHiddenHandles', 'off');
  
end

% wait for user input (callback)
% ------------------------------


%% *************************** CALLBACKS **********************************
  %----------------------------------------------------------------------
  % Callback function run when the Open menu item is selected
  %----------------------------------------------------------------------
    % Pointer set to watch during reading and plotting
    % ------------------------------------------------
    set( hMainFig, 'Pointer', 'watch' );
    % Open standard dialog box for retrieving files
    % ---------------------------------------------
    [fileName, pathname, filterIndex] = uigetfile( ...
      {'*.txt';'*.xml';'*.nc';'*.lbv';'*.btl'}, '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.
    % -----------------------------------------------------------------
          error1 = readTsgDataTxt( hMainFig, fileName );
          error1 = readTsgDataXML( hMainFig, fileName );
          error1 = readTsgDataNetCDF( hMainFig, fileName );       
          error1 = readTsgDataLabview( hMainFig, fileName );  
        case 5
          error2 = readBucketData(hMainFig, fileName );
      end

      % A TSG file has been read. Plot the data.
      % ----------------------------------------
      if error1 ~= -1

        % A TSG file has been open and read
        % ---------------------------------
        set( hOpenMenu, 'UserData', 'on' );
        % enable toolbar menu pushtool
        % ----------------------------
        hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_');
        set(hdl_pushtool, 'Enable', 'on');
        
        % enable Save menu
        % ----------------
        set(hSaveMenu, 'Enable', 'on');
        % update the filename display
        % ---------------------------
        
        % update some fields in tsg structure
        % -----------------------------------
        updateTsgStruct(hMainFig);
        
        % Running average of TSG time series
        % ----------------------------------
        tsg_moveaverage(hMainFig);

        % The callback to detect the mouse motion can be set to on
        % --------------------------------------------------------
        set( hMainFig, 'UserData', 'ButtonMotionOn');

        % Make the Salinity, temperature and velocity plot
        % ------------------------------------------------
        plot_SalTempVel( hMainFig, hPlotAxes );

        % Plot the Map with the ship trackline
        % ------------------------------------
        plotmap( hMainFig, hPlotAxes)
    % Merge the different water sample (NetCdf or ASCII files) in
    % a unique structure : 'sample'
    % -----------------------------------------------------------
    %@ desactive le merge pour l'instant en attente d'une structure de
    %@[sample] = tsg_mergesample( hMainFig );

    %@ Save the 'sample' struct. as an application data
    % ------------------------------------------------
    %if ~isempty( sample )
    %    setappdata( hMainFig, 'sample', sample );
    %end

    % Plot Salinity bucket 
    % NOT at that step. It will interfere with the QC process
    % Maybe use a new pushbutton to draw or delete the bucket
    % -------------------------------------------------------
      plot_WS( hMainFig, hPlotAxes );
      plot_EXT( hMainFig, hPlotAxes );
    % Pointer reset to arrow
    % ----------------------
    set( hMainFig, 'Pointer', 'arrow' );

  end

%% Zoom_OffMenuCallback
  %----------------------------------------------------------------------
  % Callback function run when the zoom toggle toolbar is released
  %----------------------------------------------------------------------
  function Zoom_OffMenuCallback(hObject, eventdata)
    
    % turns interactive zooming off
    % -----------------------------
    zoom off;
Yves Gouriou's avatar
Yves Gouriou committed
 
    % 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
    % Turns off the automatic adaptation of date ticks
    % ------------------------------------------------
    zoomAdaptiveDateTicks('off');
    
  %----------------------------------------------------------------------
  % Callback function run when the zoom toggle toolbar is released
  %----------------------------------------------------------------------
  function Zoom_OnMenuCallback(hObject, eventdata)
    
    % cursor back to normal
    % ---------------------
    set(hMainFig,'Pointer','arrow');
    
    % returns a zoom mode object for the figure hMainFig handle
    % --------------------------------------------------------
    % 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');
    % Turns on the automatic adaptation of date ticks
    % -----------------------------------------------
    zoomAdaptiveDateTicks('on');
 
    % Desactivate some toggle buttons
    % -------------------------------
    set( hQCToggletool,  'state', 'off' );
    set( hPanToggletool, 'state', 'off' );
    set( hStartlimitToggletool, 'State', 'off' );
    set( hEndlimitToggletool,   'State', 'off' );
   
  %----------------------------------------------------------------------
  % Callback function run when the pan toggle toolbar is released
  %----------------------------------------------------------------------
  function Pan_OffMenuCallback(hObject, eventdata)
    
    % turns interactive pan off
    % -------------------------
    pan off;
    
Yves Gouriou's avatar
Yves Gouriou committed
    % 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