Skip to content
Snippets Groups Projects
tsgqc_GUI.m 98.1 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

% 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 is remove at this time
   use use block comments, see:
   http://blogs.mathworks.com/loren/2006/08/30/commenting-code/
   --------------------------------------
  'CloseRequestFcn', @QuitMenuCallback,...
%}
'HandleVisibility','callback',...
  'Units', 'normalized',...
  'Position',guiLimits, ...
  'Color', get( 0, 'DefaultUIControlBackgroundColor' ));

%% Initialize tsg structure with tsg_preference function
% -----------------------------------------------------
% 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);
hExportMenu = uimenu(...
  'Parent', hFileMenu,...
  'Label','Export',...
  'Accelerator','E',...
  'Enable', 'off',...
  'UserData', 'off',...
  'HandleVisibility','callback',...
  'Callback',@ExportMenuCallback);
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',...
  'Enable', 'on',...
%%  Toolbar pushbuttons
%   -----------------------------------------------------------------------
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',...
Yves Gouriou's avatar
Yves Gouriou committed
  'Separator', 'on', ...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'qcicon.mat']),...
  'Tag','PUSHTOOL_QC',...
  'OnCallback',  @QC_OnMenuCallback);
Yves Gouriou's avatar
Yves Gouriou committed
hTimelimitToggletool  = uitoggletool(...   
  'Parent',hToolbar,...
  'TooltipString','Select time limit',...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'selecttime.mat']),...
  'HandleVisibility','on', ...
  'Tag', 'CORRECT_STARTTIME', ...
  'UserData', 'off',...
  'Enable', 'off',...
  'OffCallback', @SelectTime_OffMenuCallback,...
  'OnCallback',  @SelectTime_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',...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'climicon.mat']),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_CLIM',...
  'UserData', 'off',...
  'Enable', 'off',...
  'OnCallback',  @Clim_OnMenuCallback);
Yves Gouriou's avatar
Yves Gouriou committed
hCalToggletool  =   uitoggletool(...   % 
Yves Gouriou's avatar
Yves Gouriou committed
  'TooltipString','Calibration sensors',...
Yves Gouriou's avatar
Yves Gouriou committed
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'outils.mat']),...
  'HandleVisibility','on', ...
Yves Gouriou's avatar
Yves Gouriou committed
  'Tag','PUSHTOOL_CAL',...
Yves Gouriou's avatar
Yves Gouriou committed
  'OffCallback', @Cal_OffMenuCallback,...
  'OnCallback',  @Cal_OnMenuCallback);
hInterpToggletool  =   uitoggletool(...   % 
Yves Gouriou's avatar
Yves Gouriou committed
  'TooltipString','Interpolate missing position',...
Yves Gouriou's avatar
Yves Gouriou committed
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'interp.mat']),...
  'HandleVisibility','on', ...
Yves Gouriou's avatar
Yves Gouriou committed
  'Tag','PUSHTOOL_INTERP',...
  'UserData', 'off',...
  'Enable', 'off',...
Yves Gouriou's avatar
Yves Gouriou committed
  'OffCallback', @Inter_OffMenuCallback,...
  'OnCallback',  @Inter_OnMenuCallback);
hBottleToggletool  = uitoggletool(...   % Correction module toolbar button
  'Parent',hToolbar,...
  'TooltipString','Correct the SSS TSG data',...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'bottleicon.mat']),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_BOTTLE',...
  'UserData', 'off',...
  'Enable', 'off',...
  'OffCallback', @Bottle_OffMenuCallback,...
  'OnCallback',  @Bottle_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);

hReportPushtool  = uipushtool(...   % Open Report saving button
  'Parent',hToolbar,...
  'TooltipString','Save a report',...
  'CData',iconRead(...
  [DEFAULT_PATH_FILE 'tsg_icon' filesep 'reporticon.mat']),...
  'HandleVisibility','on', ...
  'Tag','PUSHTOOL_REPORT',...
  'Enable', 'off',...
  'ClickedCallback', @ReportMenuCallback);

%% 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',...
Yves Gouriou's avatar
Yves Gouriou committed
  'Visible', 'on',...
  'Position',[0.15, 0.0, .85, .95]); 
hPlotAxes(1) = axes(...     % the axes for plotting Salinity
  'Parent', hPlotsPanel, ...
  'Units', 'normalized', ...
Yves Gouriou's avatar
Yves Gouriou committed
  'Visible', 'off','box', 'on', 'XLimMode', 'auto', 'YLimMode', 'auto',  ...
  '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', ...
Yves Gouriou's avatar
Yves Gouriou committed
  'Visible', 'off', 'box', 'on',...
  'Tag', 'TAG_AXES_2', ...  
  'HandleVisibility','on', ...
  'Position',[.05, .33, .93, .27]);
hPlotAxes(3) = axes(...     % the axes for plotting ship velocity
Yves Gouriou's avatar
Yves Gouriou committed
  'Visible', 'off', 'box', 'on',...
  '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', ...  
%% uipanel for Quality Control Buttons - uibutton group 
%   -----------------------------------------------------------------------
  'Title', 'Validation Codes', ...
  'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ...
  'tag', 'TAG_QC_DISPLAY_PANEL',...
  'Visible', 'off',...
  'BorderType', 'etchedin',...
  'Units', 'normalized', '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, 'ForegroundColor', color,...
      'HorizontalAlignment', 'left', ...
      'HandleVisibility','on', ...
      'String', label,...
      'Tag', ['TAG_QC_RADIO_' key], ...
      'Units', 'normalized', 'Position', [.01, .85-count*.12, .6, 0.09]);
    % add text QC display statistic on hQcPanel
    % -----------------------------------------
      'Fontsize', tsg.fontSize-1, 'ForegroundColor', color,...
      'HorizontalAlignment', 'right', ...
      'HandleVisibility','on', ...
      'Units', 'normalized', 'Position', [.61, .85-count*.12, .37, 0.09]);
    
    % increment count
    % ---------------
    count = count + 1;
%% uibutton group panel - Choose the parameter (SSPS - SSTP - SSJT)
%   -----------------------------------------------------------------------
hbgParameter = uibuttongroup(...
  'Parent', hMainFig, ...
  'Title', 'TSG Parameter', ...
  'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ...
  'tag', 'TAG_PARA_DISPLAY_PANEL',...
  'HandleVisibility','on',...
  'Visible', 'off',...
  'BorderType', 'etchedin',...
  'Units', 'normalized', 'Position', [.0, .81, .15, .15]);

para    = [ 'SSPS'; 'SSJT'; 'SSTP' ];
strPara = [ ['Salinity ' para(1,:) '   ']; ...
            ['Temperature ' para(2,:)]; ...
            ['Temperature ' para(3,:)] ];  
for i = 1:3

  % add button QC to hbgParameter uibuttongroup
  % -------------------------------------------
  uicontrol(...
    'Parent', hbgParameter,...
    'Style', 'radiobutton',...
    'Fontsize', tsg.fontSize-1, 'ForegroundColor', color,...
    'HorizontalAlignment', 'left', ...
    'HandleVisibility','on', ...
    'String', strPara(i, :),...
    'Tag', ['TAG_PARA_RADIO_' para(i,:)], ...
    'Units', 'normalized', 'Position', [.05, .8-(i-1)*.30, .90, 0.12]);

end

% Initialize CallBack for button group properties
% ----------------------------------------------- 
set(hbgParameter,'SelectionChangeFcn',@RadiobuttonParameter);


%% 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, .25, .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', ...
  'pos',[.05 .08 .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', ...
  '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', ...
  'pos',[.05 .68 .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, .46, .15, .18]);

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',...
  'Position',[.01 .15 .95 .17]);
%% uiPanel for the Calibration coefficient used the Correction module

% Create the uipanel
hpCalCoef = uipanel( ...
  'Parent', hMainFig, ...
  'Title', 'Calibration', ...
  'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ...
  'Visible', 'off', ...
  'Units', 'normalized','Position', [.0, .46, .15, .50]);
 htCalCNDC1 = uicontrol( ...
   'Style', 'Text', 'String', 'Conductivity : C = A*C + B', ...
   'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .925 .95 .05]);
 htCalCNDC2 = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'Text', 'String', 'A', ...
   'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .85 .08 .05]);
 hetCalCNDCSlope = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'edit', ...
   'FontSize', tsg.fontSize, 'BackgroundColor', 'white',...
   'Tag', 'CORRECT_CAL_CNDC_A',...
   'HandleVisibility','on', ...
   'Units', 'normalized', 'Position',[.1 .85 .85 .05]);
 htCalCNDC3 = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'Text', 'String', 'B', ...
   'HorizontalAlignment', 'left',  'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .775 .08 .05]);
 hetCalCNDCOffset = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'edit', ...
   'FontSize', tsg.fontSize, 'BackgroundColor', 'white',...
   'HandleVisibility','on', ...
   'Tag', 'CORRECT_CAL_CNDC_B',...
   'Units', 'normalized', 'Position',[.1 .775 .85 .05]);
 htCalSSJT1 = uicontrol( ...
   'Style', 'Text', 'String', 'SSJT : T = A*T + B', ...
   'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .675 .95 .05]);
 htCalSSJT2 = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'Text', 'String', 'A', ...
   'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .6 .08 .05]);
 hetCalSSJTSlope = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'edit', ...
   'BackgroundColor', 'white',...
   'FontSize', tsg.fontSize, ...
   'HandleVisibility','on', ...
   'Tag', 'CORRECT_CAL_SSJT_A',...
   'Units', 'normalized', 'Position',[.1 .6 .85 .05]);
 htCalSSJT3 = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'Text', 'String', 'B', ...
   'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .525 .08 .05]);
 hetCalSSJTOffset = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'edit', ...
   'FontSize', tsg.fontSize, 'BackgroundColor', 'white',...
   'HandleVisibility','on', ...
   'Tag', 'CORRECT_CAL_SSJT_B',...
   'Units', 'normalized', 'Position',[.1 .525 .85 .05]);

 htCalSSTP1 = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'Text', 'String', 'SSPT : T = A*T + B', ...
   'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .425 .95 .05]);
 htCalSSTP2 = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'Text', 'String', 'A', ...
   'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .35 .08 .05]);
 hetCalSSTPSlope = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'edit', ...
   'BackgroundColor', 'white',...
   'FontSize', tsg.fontSize, ...
   'HandleVisibility','on', ...
   'Tag', 'CORRECT_CAL_SSJT_A',...
   'Units', 'normalized', 'Position',[.1 .35 .85 .05]);
 htCalSSTP3 = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'Text', 'String', 'B', ...
   'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
   'Units', 'normalized', 'Position',[.01 .275 .08 .05]);
 hetCalSSTPOffset = uicontrol( ...
   'Parent', hpCalCoef, ...
   'Style', 'edit', ...
   'FontSize', tsg.fontSize, 'BackgroundColor', 'white',...
   'HandleVisibility','on', ...
   'Tag', 'CORRECT_CAL_SSJT_B',...
   'Units', 'normalized', 'Position',[.1 .275 .85 .05]);
  'Style','pushbutton', 'Parent',hpCalCoef, ...
  'String','Calibrate',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'CORRECT_CAL_PUSH', ...
  'Units', 'normalized','pos',[.05 .15 .9 .075], ...
  'HandleVisibility','callback', ...
  'Callback', @CalibrateCallback);
 hrbCancelCal = uicontrol( ...
  'Style','pushbutton', 'Parent',hpCalCoef, ...
  'String','Cancel calibration',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'CORRECT_CAL_PUSH', ...
  'Units', 'normalized','pos',[.05 .05 .9 .075], ...
  'HandleVisibility','callback', ...
  'Callback', @CancelCalibrationCallback);
Yves Gouriou's avatar
Yves Gouriou committed
%% uiPanel for Interpolation of position

% Create the uipanel
hpInterpPos = uipanel( ...
  'Parent', hMainFig, ...
  'Title', 'Lat-Lon interpolation', ...
  'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ...
  'Visible', 'off', ...
  'Units', 'normalized','Position', [.0, .75, .15, .21]);
Yves Gouriou's avatar
Yves Gouriou committed
hrbInterpLinear = uicontrol( ...
  'Style','pushbutton', 'Parent',hpInterpPos, ...
  'String','Linear interpolation',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'TAG_PUSH_INTERP_LINEAR', ...
  'Units', 'normalized','pos',[.05 .65 .9 .25], ...
Yves Gouriou's avatar
Yves Gouriou committed
  'HandleVisibility','callback', ...
  'Callback', @InterpPosLinearCallback);
hrbInterpOther = uicontrol( ...
  'Style','pushbutton', 'Parent',hpInterpPos, ...
  'String','Other method',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'TAG_PUSH_INTERP_OTHER', ...
  'Units', 'normalized','pos',[.05 .35 .9 .25], ...
Yves Gouriou's avatar
Yves Gouriou committed
  'HandleVisibility','callback', ...
  'Callback', @InterpPosOtherCallback);
hrbInterpCancel = uicontrol( ...
  'Style','pushbutton', 'Parent',hpInterpPos, ...
  'String','Cancel interpolation',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'TAG_PUSH_INTERP_CANCEL', ...
  'Units', 'normalized','pos',[.05 .05 .9 .25], ...
  'HandleVisibility','callback', ...
  'Callback', @InterpPosCancelCallback);

%% test if user preference autoload field is checked (on)
% -------------------------------------------------------
  % 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', strcat(tsg.file.name, tsg.file.ext));

  % update some fields in tsg structure
  % -----------------------------------
  updateTsgStruct( hMainFig );
  % Get application data for the test
  % ---------------------------------
  tsg = getappdata( hMainFig, 'tsg_data');
  
  % Get the default parameter
  % -------------------------
  PARA = tsg.preference.parameter;
  
  % The smooth TSG time series (tsg_moveaverage) is
  % no more computed : too long
  % We now computed a smooth value only at the position of the sample
  % in diffTsgSample
  % -----------------------------------------------------------------
  %tsg_moveaverage( hMainFig, PARA );

  % Merge sample from different origins : WS and EXT
  % ------------------------------------------------
  tsg_mergesample( hMainFig, PARA );