From a02563325fb11d3ee07862cf678768f3b3ba2e52 Mon Sep 17 00:00:00 2001
From: Yves Gouriou <yves.gouriou@ird.fr>
Date: Tue, 4 Dec 2007 15:56:25 +0000
Subject: [PATCH] =?UTF-8?q?dev=5Ftsgcor=20renomm=C3=A9=20tsgcor=5FGUI?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 tsgcor_GUI.m | 643 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 643 insertions(+)
 create mode 100644 tsgcor_GUI.m

diff --git a/tsgcor_GUI.m b/tsgcor_GUI.m
new file mode 100644
index 0000000..690a379
--- /dev/null
+++ b/tsgcor_GUI.m
@@ -0,0 +1,643 @@
+function tsgcor_GUI( hMainFig )
+% tsgcor_GUI 
+%
+% GUI for correction of TSG data by comparison to samples
+% this GUI is a children of tsgqc_GUI
+%
+%
+
+%% 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
+%   ********************
+    clc
+    
+    % Find program directory.
+    % functions (icons) should be store at a lower level
+    % add directories to Matlab search path, works on UNIX
+    % and Windows host
+    % ---------------------------------------------------
+    tsgqcname = mfilename;
+    fulltsgqcname = mfilename('fullpath');
+    DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ;
+    p = [pathsep,...
+         DEFAULT_PATH_FILE,[filesep 'tsg_util' pathsep],...
+         DEFAULT_PATH_FILE,[filesep 'tsg_data' pathsep]
+        ];
+    addpath( p, '-END' );
+    rehash;
+    
+    % Screen limits for the GUI
+    % -------------------------
+    set(0,'Units','normalized');
+    guiLimits = get(0,'ScreenSize');
+    guiLimits(1) = guiLimits(1) + 0.05;
+    guiLimits(2) = guiLimits(2) + 0.05;
+    guiLimits(3) = guiLimits(3) - 0.1;
+    guiLimits(4) = guiLimits(4) - 0.2;
+
+    % Create and then hide the GUI as it is being constructed.
+    % --------------------------------------------------------
+    hChild1Fig = figure(...
+                'Name', 'TSG Correction', ...
+                'NumberTitle', 'off', ...
+                'Resize', 'on', ...
+                'Menubar','none', ...
+                'Toolbar', 'none', ...
+                'Tag', 'ButtonMotionOff', ...
+                'WindowButtonMotionFcn', @MouseMotion, ...
+                'CloseRequestFcn', @QuitProgram,...
+                'HandleVisibility','callback',...
+                'Visible','on',...
+                'Units', 'normalized',...
+                'Position',guiLimits);
+    
+    %  Construct the Menu
+    %   -----------------
+    hFileMenu = uimenu(...
+                    'Parent', hChild1Fig,...
+                    'HandleVisibility','callback',...
+                    'Label', 'File');
+    hSaveMenu = uimenu(...
+                    'Parent', hFileMenu,...
+                    'Label','Save',...
+                    'Accelerator','S',...
+                    'Tag', 'off', ...
+                    'HandleVisibility','callback',...
+                    'Callback',@SaveMenuCallback);
+    hQuitMenu = uimenu(...
+                    'Parent',hFileMenu,...
+                    'Label','Quit',...
+                    'Separator','on',...
+                    'Accelerator','Q',...
+                    'HandleVisibility','callback',...
+                    'Callback',@QuitMenuCallback);
+
+    %  Construct the Toolbar
+    %   -----------------
+    hToolbar       =   uitoolbar(...   % Toolbar for Open and Print buttons
+                        'Parent',hChild1Fig, ...
+                        'HandleVisibility','callback');
+    hSavePushtool  =   uipushtool(...   % Open Save toolbar button
+                        'Parent',hToolbar,...
+                        'TooltipString','Save file',...
+                        'CData',iconRead( ...
+                           [DEFAULT_PATH_FILE 'tsg_icon' filesep 'savedoc.mat']),...
+                        'HandleVisibility','callback', ...
+                        'ClickedCallback', @SaveMenuCallback);
+    hZoomPushtool  =   uipushtool(...   % Open Zoom toolbar button
+                        'Parent',hToolbar,...
+                        'Separator', 'on', ...
+                        'TooltipString','Zoom',...
+                        'CData', iconRead(fullfile(matlabroot, ...
+                                     '/toolbox/matlab/icons/zoom.mat')),...
+                        'HandleVisibility','callback', ...
+                        'ClickedCallback', @ZoomMenuCallback);
+    hPanPushtool  =   uipushtool(...   % Open Pan toolbar button
+                        'Parent',hToolbar,...
+                        'TooltipString','Pan',...
+                        'CData',iconRead(fullfile(matlabroot, ...
+                                      '/toolbox/matlab/icons/pan.mat')),...
+                        'HandleVisibility','callback', ...
+                        'ClickedCallback', @PanMenuCallback);
+    hBottlePushtool  = uipushtool(...   % Open toolbar button
+                        'Parent',hToolbar,...
+                        'TooltipString','Plot the Samples',...
+                        'Separator', 'on', ...
+                        'Tag', 'off', ...
+                        'CData',iconRead(...
+                         [DEFAULT_PATH_FILE 'tsg_icon' filesep 'bottleicon.mat']),...
+                        'HandleVisibility','callback', ...
+                        'ClickedCallback', @BottleMenuCallback);
+
+    % Static text that displays the position, salinity and temperature
+    % ----------------------------------------------------------------
+    hInfoText = uicontrol(...
+                'Parent', hChild1Fig, ...
+                'Style', 'text', ...
+                'Fontsize', 12, ...
+                'Fontweight', 'bold', ...
+                'Visible','on',...
+                'Units', 'normalized',...
+                'String', 'Information sur la position du curseur', ...
+                'Position', [.05, .95, .9, .03]);
+    
+    % Construct the plot axes
+    % -----------------------
+    hPlotAxes(1) = axes(...     % the axes for plotting Salinity
+                'Parent', hChild1Fig, ...
+                'Units', 'normalized', ...
+                'Visible', 'off', ...
+                'HandleVisibility','callback', ...
+                'Position',[.25, .6, .7, .32]); 
+    hPlotAxes(2) = axes(...     % the axes for plotting temperature
+                'Parent', hChild1Fig, ...
+                'Units', 'normalized', ...
+                'Visible', 'off', ...
+                'HandleVisibility','callback', ...
+                'Position',[.25, .3, .7, .25]); 
+    hPlotAxes(3) = axes(...     % the axes for plotting ship velocity
+                'Parent', hChild1Fig, ...
+                'Units', 'normalized', ...
+                'Visible', 'off', ...
+                'HandleVisibility','callback', ...
+                'Position',[.25, .05, .7, .2]); 
+
+    % Choose the date limits for the correction
+    % --------------------------------------------------
+    % Create the uipanel
+    hpDateLimit = uipanel( ...
+                'Parent', hChild1Fig, ...
+                'Title', 'Date Limits', ...
+                'Units', 'normalized', ...
+                'FontSize', 11, ...
+                'Fontweight', 'bold', ...
+                'BackgroundColor', 'white',...
+                'Position',[.01 .75 .2 .19]);
+
+    htDateMin = uicontrol( ...
+                'Parent', hpDateLimit, ...
+                'Style', 'Text', ...
+                'String', 'Minimum  (mm/dd/yyyy)', ...
+                'HorizontalAlignment', 'left', ...
+                'Units', 'normalized', ...
+                'backgroundcolor', 'white', ...
+                'FontSize', 10, ...
+                'Position',[.05 .8 .9 .15]);
+
+    hetDateMin = uicontrol( ...
+                'Parent', hpDateLimit, ...
+                'Style', 'edit', ...
+                'Units', 'normalized', ...
+                'FontSize', 10, ...
+                'Position',[.05 .6 .9 .18]);
+
+    htDateMax = uicontrol( ...
+                'Parent', hpDateLimit, ...
+                'Style', 'Text', ...
+                'String', 'Maximum  (mm/dd/yyyy)', ...
+                'HorizontalAlignment', 'left', ...
+                'Units', 'normalized', ...
+                'backgroundcolor', 'white', ...
+                'FontSize', 10, ...
+                'Position',[.05 .3 .9 .15]);
+
+    hetDateMax = uicontrol( ...
+                'Parent', hpDateLimit, ...
+                'Style', 'edit', ...
+                'Units', 'normalized', ...
+                'FontSize', 10, ...
+                'Position',[.05 .1 .9 .18]);
+                      
+            
+    % Choose the correction method
+    % --------------------------------------------------
+    % Create the button group
+    hbgMethod = uibuttongroup( ...
+                'Parent',hChild1Fig, ...
+                'Title','Correction Method', ...
+                'Units', 'normalized', ...
+                'FontSize',11, ...
+                'Fontweight', 'bold', ...
+                'BackgroundColor','white',...
+                'Position',[.01 .6 .2 .14]);
+             
+    % Create 2 radio buttons in the button group
+    hrbLinear = uicontrol( ...
+                'Style','Radio', ...
+                'Parent',hbgMethod, ...
+                'Units', 'normalized', ...
+                'String','Linear adjustment',...
+                'pos',[.05 .55 .9 .4], ...
+                'HandleVisibility','off');
+    hrbMedian = uicontrol( ...
+                'Style','Radio', ...
+                'Parent',hbgMethod, ...
+                'Units', 'normalized', ...
+                'String','Running median filter',...
+                'pos',[.05 .05 .9 .4],...
+                'HandleVisibility','off');
+               
+    % Initialize some button group properties 
+    set(hbgMethod,'SelectionChangeFcn',@selcbk);
+    set(hbgMethod,'SelectedObject',[]);  % No selection
+    set(hbgMethod,'Visible','on');
+            
+    % Construct the context menu to delete samples
+    % --------------------------------------------
+    hSampleCmenu      = uicontextmenu(...
+                            'Parent', hChild1Fig, ...
+                            'HandleVisibility','callback' );
+    hSampleCmenuDel   = uimenu(...
+                            'Parent', hSampleCmenu,... 
+                            'HandleVisibility','off', ...
+                            'Label', 'Delete',...
+                            'ForegroundColor', 'k',...
+                            'Callback', @QcDel);
+    hSampleCmenuNoDel = uimenu(...
+                            'Parent', hSampleCmenu,... 
+                            'HandleVisibility','off', ...
+                            'Label', 'Keep',...
+                            'ForegroundColor', 'b',...
+                            'Callback', @QcKeep);
+
+% Pointer set to watch during reading and plotting
+% ------------------------------------------------
+set( hChild1Fig, 'Pointer', 'watch' );
+
+% Get the data useful to the correction GUI
+% -----------------------------------------
+tsg    = getappdata( hMainFig, 'tsg_data' );
+sample = getappdata( hMainFig, 'sample' );
+cst    = getappdata( hMainFig, 'constante');
+
+% dt between 2 tsg measurements
+TSG_SAMPLING_TIME = tsg.TIME(2) - tsg.TIME(1);
+
+% Running average of TSG time series over TSG_DT_SMOOTH hour.
+[psal_smooth, nval] = ...
+      dev_moveaverage(tsg.TIME, tsg.PSAL, cst.TSG_DT_SMOOTH, cst.TSG_STDMAX);
+
+% Compute the sample-TSG differences
+sample = dev_diffTsgSample(tsg, psal_smooth, sample, TSG_SAMPLING_TIME);
+
+% Update application data sample
+setappdata( hMainFig, 'sample', sample );
+
+% Tracé
+% -----
+tsg_plot_SalTsgSample( hMainFig, hPlotAxes );
+
+% Pointer reset to arrow
+% ----------------------
+set( hChild1Fig, 'Pointer', 'arrow' );
+
+
+% The callback to detect the mouse motion can be set to on
+% --------------------------------------------------------
+set( hChild1Fig, 'Tag', 'ButtonMotionOn');
+
+
+% tsg = dev_corMethod1(tsg, sample, dateMin, dateMax, cst.COR_TIME_WINDOWS);
+
+    
+%  Callbacks for tsgcqc_GUI
+%  ************************
+
+    %----------------------------------------------------------------------
+    function ZoomMenuCallback(hObject, eventdata)
+    % Callback function run when the ...    
+        
+        % Returns a zoom mode object for the figure handle
+        % ------------------------------------------------
+        hZoom = zoom(hChild1Fig);
+        
+        % Specifies whether this mode is currently enabled on the figure
+        % --------------------------------------------------------------
+        zoomOnOff = get(hZoom, 'Enable' );
+        switch zoomOnOff
+            case 'on'
+                zoom off
+                zoomAdaptiveDateTicks('off');
+            case 'off'
+                pan off
+%                set(hQCPushtool, 'Tag', 'off' );
+
+                zoom on
+                zoomAdaptiveDateTicks('on');
+        end
+    end
+
+    %----------------------------------------------------------------------
+    function PanMenuCallback(hObject, eventdata)
+    % Callback function run when the ....    
+        
+        % Returns a pan mode object for the figure handle
+        % -----------------------------------------------
+        hPan = pan(hChild1Fig);
+        
+        % Specifies whether this mode is currently enabled on the figure
+        % --------------------------------------------------------------
+        panOnOff = get(hPan, 'Enable' );
+        switch panOnOff
+            case 'on'
+                pan off
+                panAdaptiveDateTicks('off');
+            case 'off'
+                zoom off
+%                set(hQCPushtool, 'Tag', 'off' );
+
+                pan on
+                panAdaptiveDateTicks('on');                
+        end
+    end
+
+    %----------------------------------------------------------------------
+    function QCMenuCallback(gcbo, eventdata,handles)
+    % Callback function run when the QC pushbutton is selected
+        
+        % Desactivate the Zoom and Pan functions.
+        % ---------------------------------------
+%        zoom off; pan off
+%        panAdaptiveDateTicks('off');zoomAdaptiveDateTicks('off');
+
+        % Retrieve named application data
+        % -------------------------------
+%        tsg = getappdata( hMainFig, 'tsg_data');
+        
+        % Toggle the tag of the Qc pushbutton to 'on' or 'off'
+        % ----------------------------------------------------
+%        switch get(hQCPushtool, 'Tag'); 
+%            case 'off'
+%                set(hQCPushtool, 'Tag', 'on' );
+%                set(hPlotAxes(1),'UIContextMenu', hQcCmenu);
+%                set( hMainFig, 'Pointer', 'crosshair');
+%            case 'on'
+%                set(hQCPushtool, 'Tag', 'off' );
+%                set(hPlotAxes(1),'UIContextMenu', []);
+%                set(hMainFig,'Pointer','arrow');
+%        end
+        
+%        qualityCode = -1;
+%        ind = [];
+%        while strcmp( get(hQCPushtool, 'Tag'),'on')
+        
+%            k = waitforbuttonpress;
+        
+            % If the QC pushbutton is pressed we quit the callback
+            % ----------------------------------------------------
+%            if strcmp( get(hQCPushtool, 'Tag'),'off')
+                        
+                % Desactivate the context menu use to choose the
+                % Quality Codes
+                % ----------------------------------------------
+%                set(hQcCmenu, 'Visible', 'off');
+%                break
+%            end
+
+            % Test if the right mouse button is clicked
+            % -----------------------------------------
+%            if strcmp(get(hMainFig, 'SelectionType'), 'alt') && ~isempty(ind)
+                % Wait for a QC Context Menu choice : The user choose the
+                % quality code
+                % -------------------------------------------------------
+%                uiwait
+%                qualityCode = 1;
+
+%            else
+
+                % Mouse motion callback desactivated when a selection is
+                % made. Otherwise there is a conflict with the map if it
+                % is activated
+                % -------------------------------------------------------
+%                set( hMainFig, 'Tag', 'ButtonMotionOff');
+                
+                % Selection of the data within the figure
+                % ---------------------------------------
+%                point1 = get(gca,'CurrentPoint');    % button down detected
+%                finalRect = rbbox;                   % return figure units
+%                point2 = get(gca,'CurrentPoint');    % button up detected
+
+%                point1 = point1(1,1:2);              % extract x and y
+%                point2 = point2(1,1:2);
+        
+%                p1 = min(point1,point2); 
+%                p2 = max(point1,point2);             % calculate locations
+
+%                ind = find(tsg.TIME > p1(1,1) & tsg.TIME < p2(1,1) & ...
+%                            tsg.PSAL > p1(1,2) & tsg.PSAL < p2(1,2));
+                
+                % As soon as a modification took place the data should be
+                % saved
+                % -------------------------------------------------------
+%                set( hSaveMenu, 'Tag', 'on' );
+                        
+                % Selection made : Mouse motion callback re-activated
+                % --------------------------------------------------
+%                set( hMainFig, 'Tag', 'ButtonMotionOn');
+
+%            end
+
+            % Plot the data with the color of the chosen quality Code.
+            % Is it the right place for this source code ????
+            % --------------------------------------------------------
+%            if qualityCode ~= -1
+                
+%                quality = get( hQcCmenu, 'UserData');
+
+%                tsg.PSAL_QC(ind) = quality.Code;   
+                
+                % Save the modifications
+                % ----------------------
+%                setappdata( hMainFig, 'tsg_data', tsg);
+               
+%                axes(hPlotAxes(1));
+%                hold on
+%                color = ['.' quality.Color];
+%                plot(tsg.TIME(ind), tsg.PSAL(ind), color );
+%                hold off
+                
+%            end
+%        end
+    end
+
+    %---------------------------------------------------------------------
+    function QcDel(hObject, eventdata)
+    % Callback function run when the QC context menu is selected
+      
+         % Retrieve Default Quality Code and Color
+         % ---------------------------------------
+         %qc = getappdata( hMainFig, 'qcColor');
+         
+         %quality.Code  = qc.Code.NO_CONTROL;
+         %quality.Color = qc.Color.NO_CONTROL;
+         %set( hQcCmenu, 'UserData', quality );
+         
+         % uiwait in the QCMenuCallback function
+         % -------------------------------------
+         %uiresume
+     end
+
+    %---------------------------------------------------------------------
+     function QcKeep(hObject, eventdata)
+    % Callback function run when the QC context menu is selected
+         
+         % Retrieve named application data
+         % -------------------------------
+         %qc = getappdata( hMainFig, 'qcColor');
+         
+         %quality.Code  = qc.Code.GOOD;
+         %quality.Color = qc.Color.GOOD;
+         %set( hQcCmenu, 'UserData', quality );
+         
+         % uiwait in the QCMenuCallback function
+         % -------------------------------------
+         %uiresume
+     end
+ 
+    %---------------------------------------------------------------------
+    function MouseMotion(hObject, eventdata)
+     
+      % Test if the callback can be activated
+      % -------------------------------------
+      if strcmp( get( hChild1Fig, 'Tag'), 'ButtonMotionOn')
+          
+        % Retrieve named application data
+        % -------------------------------
+        tsg = getappdata( hMainFig, 'tsg_data');
+        
+        % Get the mouse position
+        % ----------------------
+        point = get(gcf,'CurrentPoint');
+        
+        if point(1) > .05 && point(2) > .6 && point(1) < .95 && point(2) < .92
+    
+            % Get current position of cusor and return its coordinates in
+            % axes with handle h_axes
+            % -----------------------------------------------------------
+            [x, y] = gpos(hPlotAxes(1));
+                    
+            if x > tsg.TIME(1) && x < tsg.TIME(end)
+            
+                indCursor = find( tsg.TIME > x);
+                % use sprintf with format instead strcat & num2str but flag
+                % - don't work with 0, eg %+07.4f
+                set( hInfoText, 'String',...
+                  sprintf(['%s   -   Latitude = %s   -   Longitude = %s '...
+                           '  -   Salinity = %07.4f   -   Temperature = %07.4f'],...
+                    datestr(tsg.TIME(indCursor(1)),'dd/mm/yyyy HH:MM'),...
+                    dd2dm(tsg.LATITUDE(indCursor(1)),0), ...
+                    dd2dm(tsg.LONGITUDE(indCursor(1)),1), ...
+                    tsg.PSAL(indCursor(1)), ...
+                    tsg.TEMP_TSG(indCursor(1))...
+                ));
+            
+            end
+        end
+      end
+    end
+
+    %---------------------------------------------------------------------
+    function BottleMenuCallback(hObject, eventdata)
+    % Callback function run when the Bottle tool bar item is selected
+    %
+    % Plot or Delete the buckets measurements on the Salinity graph
+    %
+    % Need to read them right now - but they will be soon in the NetCdf
+    % file
+ 
+    % Test if the sample Push button has been pressed
+    % -----------------------------------------------
+%        if strcmp( get(hBottlePushtool, 'Tag'), 'off')
+        
+            % Sample Push button - Tag set to 'on'
+            % ------------------------------------
+%            set( hBottlePushtool, 'Tag', 'on' );
+
+            % Retrieve named application data
+            % -------------------------------
+%            sample = getappdata( hMainFig, 'sample');
+%            hLine  = get( hPlotAxes(1), 'UserData');
+
+
+            % Plot the samples if the TSG file has been read
+            % ----------------------------------------------
+%            if strcmp( get(hOpenMenu, 'Tag'), 'on' ) && ~isempty( sample )
+%                axes( hPlotAxes(1) );
+%                hLine.Sample = line( ...
+%                    sample.TIME, sample.PSAL,...
+%                    'Linestyle', 'none', 'Marker','o','MarkerSize',5, ...
+%                    'Color','r', 'MarkerFaceColor','r');
+ 
+                % Store the handle of the bucketline
+                % ----------------------------------
+%                set( hPlotAxes(1), 'UserData', hLine );
+%            end
+        
+%        else
+
+%            set( hBottlePushtool, 'Tag', 'off' );
+
+            % The bucket pushbutton has been pressed again : 
+            % Delete the bucket on figure
+            % ----------------------------------------------
+%            hLine = get( hPlotAxes(1), 'UserData');
+%            if ~isempty( hLine ) && ishandle( hLine.Sample )
+%                delete(hLine.Sample);
+%            end
+%        end
+    end
+
+
+    % -----------------------------------------------------------------
+    function SaveMenuCallback(hObject, eventdata)
+    % Callback function run when the Save menu item is selected
+        
+%        [fileName, pathName, filterIndex] = uiputfile('*.txt', ...
+%                                            'Save file name');
+        
+%        fileName = [pathName fileName];
+%        error = tsg_writeTsgData( hMainFig, fileName );
+%        if ~error
+            % 
+%        end
+    end
+
+        
+    % -----------------------------------------------------------------
+    function QuitMenuCallback(hObject, eventdata)
+    % Callback function run when the Quit menu item is selected
+            
+        % If the data have been modified and not save, the program
+        % propose to save the data
+        % --------------------------------------------------------
+        if  strcmp( get( hSaveMenu, 'Tag' ), 'on')
+            selection = ...
+            questdlg('The file has been modified.  Do you want to save it ?',...
+                      'Save before Quit?',...
+                      'Yes', 'No', 'Yes');
+            if strcmp(selection, 'Yes')
+                return;
+            else
+                QuitProgram;
+            end
+        else
+            selection = ...
+                    questdlg(['Quit ' get(hChild1Fig, 'Name') '?'],...
+                             ['Quit ' get(hChild1Fig, 'Name') '?'],...
+                              'Yes', 'No', 'Yes');
+            if strcmp(selection, 'No')
+                return;
+            else    
+                QuitProgram;
+            end
+        end
+
+    end
+  
+  % ----------------------------------------------------------------
+  function QuitProgram(hObject, eventdata)
+
+    delete(hChild1Fig);
+
+  end
+      
+end
-- 
GitLab