www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/cw1dmngr.m

    function varargout = cw1dmngr(option,fig,varargin)
%CW1DMNGR Continuous wavelet 1-D drawing manager.
%   CW1DMNGR(OPTION,WIN_CW1DTOOL,IN3)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
%   Last Revision: 10-Jun-2013.
%   Copyright 1995-2013 The MathWorks, Inc.
%   $Revision: 1.19.4.18 $ $Date: 2013/07/05 04:29:36 $

% Default values.
%----------------
max_lev_anal = 12;
default_nbcolors = 128;

% Memory bloc of stored values.
%==============================
% MB0.
%-----
n_InfoInit   = 'InfoInit';
ind_filename = 1;
ind_pathname = 2;
% nb0_stored   = 2;

% MB1.
%-----
n_param_anal   = 'Par_Anal';
ind_sig_name   = 1;
ind_sig_size   = 2;
ind_wav_name   = 3;
% ind_lev_anal   = 4;
ind_act_option = 5;
% ind_gra_area   = 6;
% nb1_stored     = 6;

% MB2.
%-----
n_coefs_sca    = 'Coefs_Scales';
ind_coefs      = 1;
ind_scales     = 2;
ind_frequencies = 3;
ind_sca_OR_frq = 4;
% nb2_stored     = 4;

% Handles of objects.
%====================
handles  = wfigmngr('getValue',fig,'CW1D_handles');
toolATTR = wfigmngr('getValue',fig,'ToolSettings');
toolMode = toolATTR.Mod;

% UIC.
%-----
hdl_UIC = handles.hdl_UIC;
 
% AXES.
%------
hdl_Re_AXES = handles.hdl_Re_AXES;
hdl_Im_AXES = [];

% MENUS.
%-------
men_SAV_EXP = handles.hdl_MEN([2 5]);


% Separate Real and Complex tools.
%---------------------------------
switch toolMode
  case {'real'}
    hdl_Im_AXES = [];
    dummy = struct2cell(hdl_UIC);
    [...
     fra_sam , txt_sam , edi_sam , ...
     fra_sca , txt_sca , pop_sca , ...
     pus_ana ,                     ...
     txt_min , edi_min ,           ...
     txt_stp , edi_stp ,           ...
     txt_max , edi_max ,           ...
     txt_pow , pop_pow ,           ...
     txt_msc , edi_msc ,           ...
     pus_lin , pus_ref ,           ...
     fra_axe , txt_axe ,           ...
     chk_DEC , chk_LC  , chk_LML , ...
     rad_SCA , rad_FRQ ,           ...
     fra_ccm , txt_ccm , pop_ccm   ...
                                      ] = deal(dummy{:}); %#ok<ASGLU>
  
  case {'abs','arg','all'}
    hdl_Im_AXES = handles.hdl_Im_AXES;
    dummy = struct2cell(hdl_UIC);
    [...
     fra_sam , txt_sam , edi_sam , ...
     fra_sca , txt_sca , pop_sca , ...
     pus_ana ,                     ...
     txt_min , edi_min ,           ...
     txt_stp , edi_stp ,           ...
     txt_max , edi_max ,           ...
     txt_pow , pop_pow ,           ...
     txt_msc , edi_msc ,           ...
     pus_lin , pus_ref ,           ...
     fra_axe , txt_axe ,           ...
     rad_MOD , rad_ANG , rad_ALL,  ...
     chk_DEC , chk_LC  , chk_LML , ...
     rad_SCA , rad_FRQ ,           ...
     fra_ccm , txt_ccm , pop_ccm   ...
                                      ] = deal(dummy{:}); %#ok<ASGLU>
end
chk_for_AXES = [chk_DEC,chk_LC,chk_LML];

switch option
    case 'plotSignal'
      sig_Anal = varargin{1};
      cw1dutil('plotSignal',fig, ...
          hdl_Re_AXES(1),sig_Anal,hdl_Re_AXES(1:4));
      if ~isequal(toolMode,'real')
           cw1dutil('plotSignal',fig, ...
              hdl_Im_AXES(1),sig_Anal,hdl_Im_AXES(1:4));
      end

    case 'setSamPer'
      delta = wstr2num(get(edi_sam,'String'));
      err = isempty(delta);
      if ~err , err = delta<eps; end
      if ~err
          wav_Name = wmemtool('rmb',fig,n_param_anal,ind_wav_name);
          scales   = wmemtool('rmb',fig,n_coefs_sca,ind_scales);
          frequencies = scal2frq(scales,wav_Name,delta);
          wmemtool('wmb',fig,n_coefs_sca,ind_frequencies,frequencies);
          cw1dmngr('newCfsLine',fig);
      else
          set(edi_sam,'String',get(edi_sam,'UserData'));
      end

    case 'newScaleMode'
      new_mode = get(pop_sca,'Value');
      old_mode = get(pop_sca,'UserData');
      if new_mode==old_mode ,  return; end
      set(pop_sca,'UserData',new_mode);

      Y_Spacing = mextglob('get','Y_Spacing');
      win_units = get(fig,'Units');
      if strcmp(win_units,'pixels')
          dy = Y_Spacing;
      else
          [~,dy] = wfigutil('prop_size',fig,1,Y_Spacing);
      end
      p12 = get(pus_ana,'Position');
      switch new_mode
        case 1
          hdl_of = [txt_pow pop_pow txt_msc edi_msc];
          hdl_on = [txt_min,edi_min,txt_stp,edi_stp,txt_max,edi_max];
          p2 = get(edi_max,'Position');

        case 2
          hdl_of = [txt_min,edi_min,txt_stp,edi_stp,txt_max,edi_max,...
                    txt_msc,edi_msc];
          hdl_on = [txt_pow,pop_pow];
          p2 = get(pop_pow,'Position');

        case 3
          hdl_of = [txt_min,edi_min,txt_stp,edi_stp,txt_max,edi_max,...
                    txt_pow,pop_pow];
          hdl_on = [txt_msc,edi_msc];
          p2 = get(edi_msc,'Position');
      end
      pos_fra_sca = get(fra_sca,'Position');
      pos_txt_sca = get(txt_sca,'Position');
      pos_fra_sca(2) = p2(2)-dy;
      pos_fra_sca(4) = pos_txt_sca(2)+pos_txt_sca(4)/2-pos_fra_sca(2);
      hdl_move = [fra_sca,pus_ana];
      set([hdl_of , hdl_move],'Visible','off');
      if isequal(toolMode,'real') , deltaY = 4*dy; else deltaY = 3*dy; end
      p12(2) = p2(2)-p12(4)-deltaY;
      set(fra_sca,'Position',pos_fra_sca);
      set(pus_ana,'Position',p12);
      set([hdl_on,hdl_move],'Visible','on');

    case 'newCfsLine'
      switch toolMode
        case {'real'}
          vis = lower(get(hdl_Re_AXES(3),'Visible'));
          if isequal(vis,'off') , return; end
          axeLIN = hdl_Re_AXES([2 4]);

        case {'abs','arg','all'}
          visRe = lower(get(hdl_Re_AXES(3),'Visible'));
          visIm = lower(get(hdl_Im_AXES(3),'Visible'));
          if isequal(visRe,'off') && isequal(visIm,'off'), return; end
          axeLIN = [hdl_Re_AXES([2 4]) ; hdl_Im_AXES([2 4])];
      end
      scales = wmemtool('rmb',fig,n_coefs_sca,ind_scales);
      if isempty(varargin)
          lHor = mngmbtn('getLines',fig,'Hor');
          if isempty(lHor) , return; end

          par = find(axeLIN==get(lHor,'Parent'),1);
          if isempty(par) , return; end
 
          ind_sca = get(lHor,'YData');
          ind_sca = round(ind_sca(1));
      else
          ind_sca = round(length(scales)/2);
      end
      [coefs,frequencies] = wmemtool('rmb',fig,n_coefs_sca, ...
                                          ind_coefs,ind_frequencies);
      if (ind_sca<=0) || (ind_sca>size(coefs,1)) , return; end
      scale = scales(ind_sca);
      freq  = frequencies(ind_sca);
      coefs = coefs(ind_sca,:);      
      toolATTR.Sca = scale;
      toolATTR.Frq = freq;
      wfigmngr('storeValue',fig,'ToolSettings',toolATTR);
      linTitles = cw1dutil('cfsLineTitle',fig);
      switch toolMode
        case {'real'}          
          cw1dutil('plotCfsLine',fig,hdl_Re_AXES(3),coefs,linTitles{1});

        case {'abs','arg','all'}
          cw1dutil('plotCfsLine',fig,hdl_Re_AXES(3),abs(coefs),linTitles{1});
          cw1dutil('plotCfsLine',fig,hdl_Im_AXES(3),angle(coefs),linTitles{2});
      end

    case 'newChainLine'
      switch toolMode
        case {'real'}
          vis = lower(get(hdl_Re_AXES(4),'Visible'));
          if isequal(vis,'off') , return; end
          axeLIN = hdl_Re_AXES([2 4]);

        case {'abs','arg','all'}
          visRe = lower(get(hdl_Re_AXES(4),'Visible'));
          visIm = lower(get(hdl_Im_AXES(4),'Visible'));
          if isequal(visRe,'off') && isequal(visIm,'off'), return; end
          axeLIN = [hdl_Re_AXES([2 4]) ; hdl_Im_AXES([2 4])];
      end
	  
      if isempty(varargin)
          lHor = mngmbtn('getLines',fig,'Hor');
          if isempty(lHor) , return; end
          par = find(axeLIN==get(lHor,'Parent'),1);
          if isempty(par) , return; end
		  yInd = get(lHor,'YData');
          yInd = round(yInd(1));		  
      else
          par = 2;
          yInd = [];
      end

	  % Begin waiting.
      %----------------
      wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitCompute'));

 	  set(pus_ref,'Enable','off');
      if isequal(par,2) || isequal(par,4)
          set(pus_lin,'Enable','off');
      end
	  [coefs,scales] = wmemtool('rmb',fig,n_coefs_sca, ...
                                      ind_coefs,ind_scales);
      nbRow  = size(coefs,1);
	  if isempty(yInd) , yInd = nbRow; end;
      indBeg = nbRow;
      if (0<yInd) && (yInd<=nbRow)
          indBeg = yInd;
          coefs(yInd+1:end,:) = 0;
      end
      switch toolMode
        case 'real'
          [coefs,strTitle] = cw1dutil('computeChainLine',fig, ...
                                   scales,coefs,indBeg);
          cw1dutil('plotChainLine',fig,hdl_Re_AXES(4),scales,coefs,strTitle);
                     
        otherwise
          [tmpCoefs,strTitle] = cw1dutil('computeChainLine',fig, ...
                                    scales,abs(coefs),indBeg);
          cw1dutil('plotChainLine',fig,hdl_Re_AXES(4),scales,tmpCoefs,strTitle);
          [tmpCoefs,strTitle] = cw1dutil('computeChainLine',fig, ...
                                    scales,angle(coefs),indBeg);
          cw1dutil('plotChainLine',fig,hdl_Im_AXES(4),scales,tmpCoefs,strTitle);
      end

      % End waiting.
      %-------------
      wwaiting('off',fig);
    
    case 'setPosAxes'
      % Axes Visibility.
      %-----------------
      % 1 1 1 1 ;
      % 1 1 1 0 ;
      % 1 1 0 1 ;
      % 1 0 1 1 ;
      % 1 1 0 0 ;
      % 1 0 1 0 ;
      % 1 0 0 1 ;
      % 1 0 0 0 ;
      %------------
      if ~isempty(varargin) , newTITLE = 1; else newTITLE = 0; end
      vis = toolATTR.Vis;
      pos = toolATTR.Pos;
      vis = vis(:,2:end);
      flgDEC = get(chk_DEC,'Value');
      flgLC  = get(chk_LC ,'Value');
      flgLML = get(chk_LML,'Value');
      flgVIS = [flgDEC,flgLC,flgLML];

	  [flag_lin,flag_ref,hdl_axe] = cw1dmngr('get_Ena_Flag',fig);
	  
      if flgLC && flgDEC && flag_lin , ena_lin = 'on'; else ena_lin = 'off'; end
	  if flgLML && flag_ref , ena_ref = 'on'; else ena_ref = 'off'; end  
	  set(pus_lin,'Enable',ena_lin);
	  set(pus_ref,'Enable',ena_ref);
      ind = 0;
      for k = 1:size(vis,1)
         ok = isequal(vis(k,:),flgVIS);
         if ok , ind = k; break; end
      end
      toolATTR.Num = ind;
      wfigmngr('storeValue',fig,'ToolSettings',toolATTR);

	  % Set View Axes Btn.
	  %-------------------
	  if (ind==8 ) && ~isequal(toolMode,'all')
		  ena_zaxe = 'Off';
	  else
		  ena_zaxe = 'On';
	  end
	  dynvtool('dynvzaxe_BtnOnOff',fig,ena_zaxe);

      pos = pos(:,:,ind);
      vis = getonoff([1,flgVIS,flgDEC]);
      switch toolMode
        case 'real'
          hdl_OFF = []; hdl_ON = hdl_Re_AXES; indTitle = 1;

        case 'abs'
          hdl_OFF = hdl_Im_AXES; hdl_ON = hdl_Re_AXES; indTitle = 1;
		  if ~isempty(find(hdl_OFF==hdl_axe,1))
			  set([pus_lin,pus_ref],'Enable','Off');
		  end
		  
	    case 'arg' 
          hdl_OFF = hdl_Re_AXES; hdl_ON = hdl_Im_AXES; indTitle = 2;
		  if ~isempty(find(hdl_OFF==hdl_axe,1))
			  set([pus_lin,pus_ref],'Enable','Off');
		  end

        case 'all'
         hdl_OFF = [];
         hdl_ON  = [hdl_Re_AXES,hdl_Im_AXES];
         indTitle = [1 2];
         pos(:,:,2) = pos;
         bdx   = pos(1,1,1);
         w_axe = pos(1,3,1)/2-bdx;
         pos(1:4,3,1:2) = w_axe;
         pos(1:4,1,2)   = bdx+w_axe+2*bdx;
      end
      set(wfindobj([hdl_OFF;hdl_ON]),'Visible','off')

      if newTITLE
          cfsTitles = cw1dutil('cfsColorTitle',fig,toolMode,pop_ccm);
          linTitles = cw1dutil('cfsLineTitle',fig);
          for j = 1:size(hdl_ON,2)
              k = indTitle(j);
              wtitle(cfsTitles{k},'Parent',hdl_ON(2,j),'Visible','off');
              wtitle(linTitles{k},'Parent',hdl_ON(3,j),'Visible','off');
          end
      end
      
      for k = 1:4
        for j = 1:size(hdl_ON,2)
            hdl_IN = wfindobj(hdl_ON(k,j));
            set(hdl_ON(k,j),'Position',pos(k,:,j))
            set(hdl_IN,'Visible',vis{k})
        end
      end      
      for k = 5
          hdl_IN = wfindobj(hdl_Re_AXES(k));
          set(hdl_Re_AXES(k),'Position',pos(k,:,1))
          set(hdl_IN,'Visible',vis{k})
      end

    case 'setPosAxesIMAG'
      if isempty(varargin)
          rad_SEL = gcbo;
          paramSET = {fig,'dummy'};
      else
          rad_SEL = varargin{1};
          paramSET = {fig};
      end       
      rad_OLD = wfindobj([rad_MOD,rad_ANG,rad_ALL],'UserData',1);
      set([rad_MOD,rad_ANG,rad_ALL],'Value',0,'UserData',[]);
      set(rad_SEL,'Value',1,'UserData',1);
      if isequal(rad_SEL,rad_OLD) , return; end
      toolATTR = wfigmngr('getValue',fig,'ToolSettings');
      indMOD = find(rad_SEL==[rad_MOD,rad_ANG,rad_ALL]);
      switch indMOD
        case 1 , toolATTR.Mod = 'abs';
        case 2 , toolATTR.Mod = 'arg';
        case 3 , toolATTR.Mod = 'all';        
      end
      wfigmngr('storeValue',fig,'ToolSettings',toolATTR);
      cw1dmngr('setPosAxes',paramSET{:});    

    case 'sca_OR_frq'
      rad_SEL = gcbo;
      rad_OLD = wfindobj([rad_SCA,rad_FRQ],'UserData',1);
      set([rad_SCA,rad_FRQ],'Value',0,'UserData',[]);
      set(rad_SEL,'Value',1,'UserData',1);
      if isequal(rad_SEL,rad_OLD) , return; end
      if isequal(rad_SEL,rad_SCA)
          sca_OR_frq = ind_scales;
      else
          sca_OR_frq = ind_frequencies;
      end
      wmemtool('wmb',fig,n_coefs_sca,ind_sca_OR_frq,sca_OR_frq);
      mngmbtn('cleanXYPos',fig);

    case 'getScales'
      % Getting  Analysis parameters.
      %------------------------------
      [wav_Name,sig_Size] = ...
          wmemtool('rmb',fig,n_param_anal,ind_wav_name,ind_sig_size);
      powmax = fix(log(sig_Size)/log(2));
      scamax = 2^(powmax-1);
      sca_mod = get(pop_sca,'Value');
      col_mod = get(pop_ccm,'Value');
      set(pop_ccm,'UserData',col_mod);
      err = 0;
      switch sca_mod
        case 1
          mi = wstr2num(get(edi_min,'String'));
          st = wstr2num(get(edi_stp,'String'));
          ma = wstr2num(get(edi_max,'String'));
          if     isempty(st) , st = 1; err = 1;
          elseif st<=0       , st = 1; err = 1;
          end
          if     isempty(mi) , mi = 1; err = 1;
          elseif mi<sqrt(eps), mi = 1; err = 1;
          end
          if     isempty(ma) , ma = min(32,scamax); err = 1;
          elseif ma>scamax   , ma = min(32,scamax); err = 1;
          end
          if ma<mi
              if     ma<sqrt(eps) , ma = mi;   err = 1;
              elseif mi>scamax    , mi = ma;   err = 1;
              else
                  tmp = mi; mi = ma; ma = tmp; err = 1;
              end
          end
          if err==1
              set(edi_min,'String',num2str(mi));
              set(edi_stp,'String',num2str(st));
              set(edi_max,'String',num2str(ma));
              col = get(edi_min,'ForegroundColor');
              for k=1:10
                  set([edi_min,edi_stp,edi_max],'ForegroundColor','r');
                  pause(0.5);
                  set([edi_min,edi_stp,edi_max],'ForegroundColor',col);
              end
              err = 0;
          end
          level  = [ '[' num2str(mi) ':' num2str(st) ':' num2str(ma) ']'];
          scales = eval(level);

        case 2
          powmax = get(pop_pow,'Value');
          scales = 2.^(1:powmax);

        case 3
          level = get(edi_msc,'String');
          try
              levs = eval(level);
          catch %#ok<CTCH>
              err = 1;
          end
          if err==1
              set(edi_msc,'String',getWavMSG('Wavelet:divGUIRF:Str_ERROR'));
              col = get(edi_msc,'ForegroundColor');
              set(edi_msc,'ForegroundColor','r');
              pause(2)
              set(edi_msc,'String','[ ]');
              set(edi_msc,'ForegroundColor',col);
              varargout = {err,[],[]};
              return
          end
          levs = levs(:)';
          scales = levs(levs>0);
          scales = scales(scales<=scamax);
          if ~isequal(levs,scales) , err = 1; end
          if err==1
              old_txt = get(edi_msc,'String');
              set(edi_msc,'String',getWavMSG('Wavelet:divGUIRF:Str_WARN'));
              col = get(edi_msc,'ForegroundColor');
              for k=1:10
                  set(edi_msc,'ForegroundColor','r');
                  pause(0.50);
                  set(edi_msc,'ForegroundColor',col);
              end
              set(edi_msc,'String',old_txt);
              err = 0;
          end
      end
      delta = wstr2num(get(edi_sam,'String'));
      frequencies = scal2frq(scales,wav_Name,delta);
      err = (err | isempty(scales));
      if ~err , set(pop_ccm,'UserData',-1); end
      varargout = {err,scales,frequencies};

    case 'computeCoefs'
      sig_Anal = varargin{1};
      scales   = varargin{2};
      wav_Name = varargin{3};
      %----------------------
      txt_msg = wwaiting('handle',fig);
      dynvtool('hide',fig);
      drawnow
      precis   = 10;
      len      = length(sig_Anal);
      nbscales = length(scales);
      varargout{1} = zeros(nbscales,len);
      wtype = wavemngr('type',wav_Name);
      numALG   = 1;
      switch numALG
        case 1
          [psi,psi_xval] = intwave(wav_Name,precis);
          % if wtype==5 , psi = conj(psi); end
          psi_xval = psi_xval-psi_xval(1);
          dxval = psi_xval(2);
          xmax  = psi_xval(length(psi_xval));
          ind   = 1;
          for a = scales
              msg = {' ',getWavMSG('Wavelet:divGUIRF:Str_CompSca',num2str(a,'%5.3f'))};
              set(txt_msg,'String',msg);
              drawnow
              j = 1+floor((0:a*xmax)/(a*dxval));
              if length(j)==1 , j = [1 1]; end
              f = fliplr(psi(j));
              varargout{1}(ind,:) = -sqrt(a)*wkeep1(diff(conv(sig_Anal,f)),len);
              ind = ind+1;
          end
        case 2        
          switch wtype
            case {1,3} , [~,psi,psi_xval] = wavefun(wav_Name,precis);
            case 2     , [~,psi,~,~,psi_xval] = wavefun(wav_Name,precis);
            case {4,5} , [psi,psi_xval] = wavefun(wav_Name,precis);
          end
          % if wtype==5 , psi = conj(psi); end
          psi_xval = psi_xval-psi_xval(1);
          dxval = psi_xval(2);
          xmax  = psi_xval(end);
          ind   = 1;
          for a = scales
              msg = {' ',getWavMSG('Wavelet:divGUIRF:Str_CompSca',num2str(a,'%5.3f'))};
              set(txt_msg,'String',msg);
              drawnow
              j = 1 + floor((0:a*xmax)/(a*dxval));
              if length(j)==1 , j = [1 1]; end
              f = fliplr(psi(j));
              varargout{1}(ind,:) = wkeep1(conv(sig_Anal,f),len);
              ind = ind+1;
          end
      end
      set(txt_msg,'String','');
      dynvtool('show',fig);

    case 'computeCoefsMNGR'
      sig_Anal = wtbxappdata('get',fig,'sig_Anal');

      % Getting scales and frequencies.
      %-------------------------------
      [err,scales,frequencies] = cw1dmngr('getScales',fig);
      if err , return; end

      % Setting Dynamic Visualization tool.
      %------------------------------------
      mngmbtn('delLines',fig,'All');

      % Setting Axes.
      %--------------
      sig_Size = length(sig_Anal);
      NB_Img  = size(scales,2);
      xValMin = 1;
      xValMax = sig_Size;
      axeProp = {...
          'Layer','top',             ...
          'YDir','reverse',          ...
          'XLim',[xValMin xValMax],  ...
          'YLim',[0.5 NB_Img+0.5],   ...
          'YTickLabelMode','manual', ...
          'YTick',[],                ...
          'YTickLabel',[],           ...
          'Box','On',                ...
          'XGrid','Off',             ...
          'YGrid','Off',             ...
          'NextPlot','Replace'       ...
          };

      h_AXES = [hdl_Re_AXES,hdl_Im_AXES];
      set(h_AXES(2,:),axeProp{:});

      image([0 1],[0 1],(1:default_nbcolors),'Parent',hdl_Re_AXES(5));
      ud.dynvzaxe.enable = 'off';
      set(hdl_Re_AXES(5),...
              'XTicklabel',[],'YTickLabel',[],...
              'XGrid','Off','YGrid','Off',...
              'UserData',ud);
      wsetxlab(hdl_Re_AXES(5),getWavMSG('Wavelet:dw1dRF:ScaColMinMax'));

      % Computing coefficients.
      %------------------------
      wav_Name = wmemtool('rmb',fig,n_param_anal,ind_wav_name);
      coefs    = cw1dmngr('computeCoefs',fig,sig_Anal,scales,wav_Name);
      wmemtool('wmb',fig,n_coefs_sca,ind_coefs,coefs,...
                     ind_scales,scales,ind_frequencies,frequencies);

      % Begin waiting.
      %---------------
      wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitCompute'));

      % Coloration of coefficients.
      %----------------------------
      cw1dmngr('colorCoefs',fig,'draw');

      % Plot line of coefficients.
      %---------------------------
      cw1dmngr('newCfsLine',fig,'init');

      % Computing local maxima.
      %------------------------
      cw1dmngr('newChainLine',fig,'init');

      % Setting Dynamic Visualization tool.
      %------------------------------------
      axeCMD = h_AXES(1:4,:);
      axeCMD = axeCMD(:)';
      axeCOO = h_AXES([2,4],:);
      axeCOO = axeCOO(:)';
      dynvtool('init',fig,[],axeCMD,[],[1 0],...
               '','','cw1dcoor',axeCOO,'','','r');

      % End waiting.
      %-------------
      wwaiting('off',fig);

    case 'initColorCoefs'
      testFirst = varargin{1};
      continu   = 0;
      varargout = {continu,{},0,0,'',[]};
      img_cfs   = findobj(hdl_Re_AXES(2),'Type','image');
      old_para  = get(pop_ccm,'UserData');
      if testFirst && (isempty(img_cfs) || old_para(1)==0) , return; end
      col_mod   = get(pop_ccm,'Value');
      switch toolMode
        case 'real'
           switch col_mod
            case 1 , absval = 1; levval = 'row'; view_m = 'gbl';
            case 2 , absval = 0; levval = 'row'; view_m = 'gbl';
            case 3 , absval = 1; levval = 'mat'; view_m = 'gbl';
            case 4 , absval = 0; levval = 'mat'; view_m = 'gbl';
            case 5 , absval = 1; levval = 'row'; view_m = 'cur';
            case 6 , absval = 0; levval = 'row'; view_m = 'cur';
            case 7 , absval = 1; levval = 'mat'; view_m = 'cur';
            case 8 , absval = 0; levval = 'mat'; view_m = 'cur';
          end

        otherwise
          absval = 0;
          switch col_mod
            case 1 , levval = 'row'; view_m = 'gbl';
            case 2 , levval = 'mat'; view_m = 'gbl';
            case 3 , levval = 'row'; view_m = 'cur';
            case 4 , levval = 'mat'; view_m = 'cur';
          end
      end
      sig_Size = wmemtool('rmb',fig,n_param_anal,ind_sig_size);
      xind1 = 1;
      xind2 = sig_Size;
      if isequal(view_m,'cur')
          xlim_selbox = mngmbtn('getbox',fig);
          if ~isempty(xlim_selbox)
              xlim_selbox = [min(xlim_selbox) max(xlim_selbox)];
          else
              xlim_selbox = get(hdl_Re_AXES(1),'XLim');
          end
          xlim_selbox = round(xlim_selbox);
          xind1 = max(1,xlim_selbox(1));
          xind2 = min(sig_Size,xlim_selbox(2));
      end
      new_para = [col_mod xind1 xind2];
      if isequal(new_para,old_para) , return; end
      set(pop_ccm,'UserData',new_para);

      % Axes properties & Ytickslabel construction .
      %---------------------------------------------
      scales = wmemtool('rmb',fig,n_coefs_sca,ind_scales);
      len  = length(scales);
      nb   = ceil(len/20);
      tics = 1:nb:len;
      tmp  = scales(1:nb:nb*length(tics));
      labs = num2str(tmp(:));
      axeProp = {...
        'XGrid','Off',             ...
        'YGrid','Off',             ...
        'YTickLabelMode','manual', ...
        'YTick',tics,              ...
        'YTickLabel',labs,         ...
        'YDir','normal',           ...
        'Box','On'                 ...
       };

      % Setting outputs.
      %------------------
      continu = 1;
      varargout = {continu,axeProp,levval,absval,view_m,xind1:xind2};

    case 'plotColorCoefs'
      [type,axeCOEFS,axeProp,levval,absval,view_m,xVal] = deal(varargin{:});

      % Waiting message.
      %-----------------
      msg_ini = getWavMSG('Wavelet:moreMSGRF:Wait_CfsCOL');
      txt_msg = wwaiting('msg',fig,msg_ini);

      % Getting coefs and scales.
      %--------------------------
      [coefs,scales] = wmemtool('rmb',fig,n_coefs_sca,ind_coefs,ind_scales);
      switch type
        case 'abs'   , coefs = abs(coefs);
        case 'angle' , coefs = angle(coefs);
      end

      % Coloration of coefficients.
      %-----------------------------
      if strcmp(view_m,'cur')
          if strcmp(levval,'mat')
              cmin = min(min(coefs(:,xVal)));
              cmax = max(max(coefs(:,xVal)));
              coefs(coefs<cmin) = cmin;
              coefs(coefs>cmax) = cmax;
          else
              cmin = min((coefs(:,xVal)),[],2);
              cmax = max((coefs(:,xVal)),[],2);
              fprf = 'Coloration - scale a = %5.3f';
              for k=1:length(scales)
                  msg = {' ',sprintf(fprf,scales(k))};
                  set(txt_msg,'String',msg);
                  drawnow
                  coefs(k,coefs(k,:)<cmin(k)) = cmin(k);
                  coefs(k,coefs(k,:)>cmax(k)) = cmax(k);
              end
              wwaiting('msg',fig,msg_ini);
              drawnow
          end
      end
      coefs = wcodemat(coefs,default_nbcolors,levval,absval);

      % Plot coefficients.
      %-------------------
      cfsTitles = cw1dutil('cfsColorTitle',fig,toolMode,pop_ccm);
      indTitle = find(axeCOEFS==[hdl_Re_AXES(2);hdl_Im_AXES]);
      if indTitle>1 , indTitle = 2; end
      vis = get(axeCOEFS,'Visible');
      img_cfs = findobj(axeCOEFS,'Type','image');
      if isempty(img_cfs)
          image('CData',coefs,'Visible',vis,'Parent',axeCOEFS);
      else
          set(img_cfs,'CData',coefs,'Visible',vis);
      end
      set(axeCOEFS,axeProp{:});
      if iscell(cfsTitles) , cfsTitles = cfsTitles{indTitle}; end
      wtitle(cfsTitles,'Parent',axeCOEFS,'Visible',vis);

    case 'colorCoefs'
      %******************************************%
      %** changing color mode for coefficients **%
      %******************************************%
      testFirst = (length(varargin)<1);
      [continu,axeProp,levval,absval,view_m,xVal] = ...
           cw1dmngr('initColorCoefs',fig,testFirst);
      if ~continu , return; end

      % Waiting message.
      %-----------------
      msg_ini = getWavMSG('Wavelet:divGUIRF:WaitCfsCol');
      wwaiting('msg',fig,msg_ini);

      switch toolMode
        case 'real'
          cw1dmngr('plotColorCoefs',fig,'real',...
          hdl_Re_AXES(2),axeProp,levval,absval,view_m,xVal)
 
        otherwise
          cw1dmngr('plotColorCoefs',fig,'abs',...
          hdl_Re_AXES(2),axeProp,levval,absval,view_m,xVal);
          cw1dmngr('plotColorCoefs',fig,'angle',...
          hdl_Im_AXES(2),axeProp,levval,absval,view_m,xVal);
      end

      % End waiting.
      %-------------
      wwaiting('off',fig);

    case 'clean'
      calling_opt = varargin{1};

      % Testing first use. End of Cleaning when first is true.
      %-------------------------------------------------------
      active_option = wmemtool('rmb',fig,n_param_anal,ind_act_option);
      if isempty(active_option) , first = 1; else first = 0; end

      % Cleaning UIC.
      %--------------
      if ~strcmp(calling_opt,'new_anal')
          [sig_nam,sig_len] = wmemtool('rmb',fig,n_param_anal,...
                                ind_sig_name,ind_sig_size);
          sig_len = max(sig_len);
          sca_def = int2str(min(64,sig_len));
          lev_def = min(6,nextpow2(sig_len+1)-1);

          pow_max = fix(log(sig_len)/log(2));
          sca_max = 2^(pow_max-1);
          lev_max = min(pow_max,max_lev_anal);

          cbanapar('set',fig,'n_s',{sig_nam,sig_len});
          set(edi_sam,'String','1','UserData','1');
          set(pop_sca,'Value',1,'UserData',0);
          set(pop_ccm,'Value',1,'UserData',0);
          str_pop_pow = int2str((1:lev_max)');
          set(pop_pow,'String',str_pop_pow,'Value',lev_def);
          set(edi_min,'String','1');
          set(edi_stp,'String','1');
          set(edi_max,'String',sca_def);
          set(edi_msc,'String',[ '[1:1:' sca_def ']' ]);
          sca_max_STR = ['<= ' int2str(sca_max)];
          str_txt_max = getWavMSG('Wavelet:divGUIRF:CWT_MaxSCA',sca_max_STR); 
          set(txt_max,'String',str_txt_max);
          action = get(pop_sca,'Callback');
          eval(action);
      end
      if first
          switch toolMode
            case 'real' , set(hdl_Re_AXES,'Visible','on');
            otherwise   , cw1dmngr('setPosAxesIMAG',fig,rad_ALL);
          end
          return;
      end

      % Setting enable property of objects.
      %------------------------------------
      cbanapar('Enable',fig,'off');

      % Cleaning DynVTool.
      %-------------------
      dynvtool('stop',fig);

      % Cleaning Axes.
      %---------------
      h_AXES = [hdl_Re_AXES , hdl_Im_AXES];
      toDEL = h_AXES(2:4,:);
      toDEL = allchild(toDEL(:));
      toDEL = cat(1,toDEL{:});
      delete(toDEL);
      if ~strcmp(calling_opt,'new_anal')
          toDEL = h_AXES(1,:);
          toDEL = allchild(toDEL(:));
          if iscell(toDEL),  toDEL = cat(1,toDEL{:}); end
          delete(toDEL)
      end
      set(h_AXES([2,4],:), ...
          'YTickLabelMode','manual','YTick',[],'YTickLabel',[]);
      numView  = toolATTR.Num;
      optDRAW  = 'nothing';
      if ~isequal(toolMode,'real') && ~isequal(toolMode,'all')
          optDRAW = 'setPosAxesIMAG';
      else
          if ~isequal(numView,1) || ...
             (isequal(numView,1) && isequal(toolMode,'all')) 
              optDRAW = 'setPosAxes'; 
          end
      end
  
      switch optDRAW
        case 'nothing'
          set(h_AXES,'Visible','on');

        case 'setPosAxes'
          set([chk_DEC,chk_LC,chk_LML],'Value',1)
          cw1dmngr('setPosAxes',fig)

        case 'setPosAxesIMAG'
          set([chk_DEC,chk_LC,chk_LML],'Value',1)
          cw1dmngr('setPosAxesIMAG',fig,rad_ALL)
      end

    case 'set_gui'
      calling_opt = varargin{1};
      switch calling_opt
        case {'demo'}
          wav_Name = wmemtool('rmb',fig,n_param_anal,ind_wav_name);
          cbanapar('set',fig,'wav',wav_Name);
          set(edi_min,'String',sprintf('%.0f',varargin{2}));
          set(edi_stp,'String',sprintf('%.0f',varargin{3}));
          set(edi_max,'String',sprintf('%.0f',varargin{4}));
          set(pop_ccm,'Value',varargin{5});
          if length(varargin)>5
              cbcolmap('set',fig,'pal',{'same',varargin{6}});
          end
      end

    case {'enable','Enable'}
      calling_opt  = varargin{1};
      HDL_1 = [...
        edi_sam , pop_sca , pus_ana , ...
        edi_min , edi_stp , edi_max , ...
        pop_pow , edi_msc             ...
        ];

      HDL_2 = [...
        chk_DEC , chk_LC  , chk_LML , ...
        rad_SCA , rad_FRQ , pop_ccm   ...
        ];

	  HDL_3 = [pus_lin , pus_ref];
		
      switch toolMode
        case {'real'}
        case {'abs','arg','all'}
          HDL_2 = [HDL_2 , rad_MOD , rad_ANG , rad_ALL];
      end

      switch calling_opt
        case 'load'
          cbanapar('Enable',fig,'On');
          cbcolmap('Enable',fig,'On');
          set(HDL_1,'Enable','on');
          set(HDL_2, 'Enable','off');
          set(men_SAV_EXP, 'Enable','off');
          set(chk_for_AXES,'Enable','on')

        case {'demo','anal'}
          cbanapar('Enable',fig,'On');
          cbcolmap('Enable',fig,'On');
          set(HDL_1,'Enable','on');
          set(HDL_2,'Enable','on');
          set(men_SAV_EXP,'Enable','on');
      end
	  
	  set(HDL_3, 'Enable','off');

    case 'load'
      nbIn = length(varargin);
      if nbIn==0
          % Loading file.
          %--------------
          [sigInfos,sig_Anal,ok] = ...
              utguidiv('load_sig',fig,'Signal_Mask', ...
              getWavMSG('Wavelet:commongui:LoadSig'));
      else
          % val = varargin{2};
          % switch val
          %     case 0 , opt = '1d';
          %     case 1 , opt = '1d_Im';
          % end
          opt = '1d';
          [sigInfos,sig_Anal,ok] = wtbximport(opt);
      end
      if ~ok, return; end

      % Setting Analysis parameters.
      %-----------------------------
      wtbxappdata('set',fig,'sig_Anal',sig_Anal);
      wmemtool('wmb',fig,n_param_anal, ...
                     ind_sig_name,sigInfos.name,...
                     ind_sig_size,sigInfos.size ...
                     );
      wmemtool('wmb',fig,n_InfoInit, ...
                     ind_filename,sigInfos.filename, ...
                     ind_pathname,sigInfos.pathname  ...
                     );

      % Get the current view.
      %---------------------     
      old_valCHK = get(chk_for_AXES,'Value');      

      % Cleaning.
      %----------
      wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitClean'));
      cw1dmngr('clean',fig,option);
      wmemtool('wmb',fig,n_param_anal,ind_act_option,option);
 
      % Drawing.
      %---------
      cw1dmngr('plotSignal',fig,sig_Anal);

      % Setting enabled values.
      %------------------------
      cw1dmngr('Enable',fig,option);

      % Restore the previous view.
      %---------------------------
      restoreView(fig,chk_for_AXES,old_valCHK);

      % End waiting.
      %---------------
      wwaiting('off',fig);
      
    case 'demo'
      % Loading file.
      %--------------
      sig_Name = deblank(varargin{1});
      wav_Name = deblank(varargin{2});
      filename = [sig_Name '.mat'];
      pathname = utguidiv('WTB_DemoPath',filename);
      [sigInfos,sig_Anal,ok] = ...
          utguidiv('load_dem1D',fig,pathname,filename);
      if ~ok, return; end

      % Setting Analysis parameters.
      %-----------------------------
      wtbxappdata('set',fig,'sig_Anal',sig_Anal);
      wmemtool('wmb',fig,n_param_anal, ...
                     ind_sig_name,sigInfos.name,...
                     ind_sig_size,sigInfos.size ...
                     );
      wmemtool('wmb',fig,n_InfoInit, ...
                     ind_filename,sigInfos.filename, ...
                     ind_pathname,sigInfos.pathname  ...
                     );

      % Get the current view.
      %---------------------     
      old_valCHK = get(chk_for_AXES,'Value');      

      % Cleaning.
      %----------      
      wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitClean'));
      cw1dmngr('clean',fig,option);

      % Setting GUI values.
      %--------------------
      wmemtool('wmb',fig,n_param_anal, ...
                     ind_act_option,option,ind_wav_name,wav_Name);
      cw1dmngr('set_gui',fig,option,varargin{3:end});

      % Drawing & Computing .
      %----------------------
      cw1dmngr('plotSignal',fig,sig_Anal);
      wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitCompute'));
      cw1dmngr('computeCoefsMNGR',fig);
 
      % Setting enabled values.
      %------------------------
      cw1dmngr('Enable',fig,option);

      % Restore the previous view.
      %---------------------------
      restoreView(fig,chk_for_AXES,old_valCHK);
      
      % End waiting.
      %---------------
      wwaiting('off',fig);

    case 'save'
      % Testing file.
      %--------------
      [filename,pathname,ok] = utguidiv('test_save',fig, ...
                         '*.mat',getWavMSG('Wavelet:divGUIRF:SaveCfs_CW1D'));
      if ~ok, return; end

      % Begin waiting.
      %--------------
      wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitSaveCfs'));

      % Getting Analysis values.
      %-------------------------
      [coefs,scales] = ...
          wmemtool('rmb',fig,n_coefs_sca,ind_coefs,ind_scales); %#ok<ASGLU,NASGU>
      wname = wmemtool('rmb',fig,n_param_anal,ind_wav_name); %#ok<NASGU>

      % Saving file.
      %--------------
      [name,ext] = strtok(filename,'.');
      if isempty(ext) || isequal(ext,'.')
          ext = '.wc1'; filename = [name ext];
      end
      saveStr = {'coefs','scales','wname'};
      wwaiting('off',fig);
      try
        save([pathname filename],saveStr{:});
      catch %#ok<CTCH>
        errargt(mfilename,getWavMSG('Wavelet:commongui:SaveFail'),'msg');
      end

    case 'exp_wrks'
      wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitExport'));
      [coefs,scales] = wmemtool('rmb',fig,n_coefs_sca,ind_coefs,ind_scales);
      wname = wmemtool('rmb',fig,n_param_anal,ind_wav_name);
      S = struct('coefs',coefs,'scales',scales,'wname',wname);
      wtbxexport(S,'name','dec_CW1D','title',  ...
                getWavMSG('Wavelet:commongui:Str_Cfs'));      
      wwaiting('off',fig);

    case 'anal'
      active_option = wmemtool('rmb',fig,n_param_anal,ind_act_option);

      % Waiting message.
      %-----------------
      wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitCleanCompute'));

      % Get the current view.
      %---------------------     
      old_valCHK = get(chk_for_AXES,'Value');      
      
      if ~strcmp(active_option,'load')
          % Cleaning.
          %----------
          cw1dmngr('clean',fig,'new_anal');

          % Setting enabled values.
          %------------------------
          cw1dmngr('Enable',fig,'load');
      end

      % Setting Analysis parameters
      %-----------------------------
      wav_Name = cbanapar('get',fig,'wav');
      wmemtool('wmb',fig,n_param_anal,  ...
                     ind_act_option,option,ind_wav_name,wav_Name);

      % Computing & Drawing.
      %--------------------
      cw1dmngr('computeCoefsMNGR',fig);

      % Restore the previous view.
      %---------------------------
      restoreView(fig,chk_for_AXES,old_valCHK);

      % Setting enabled values.
      %------------------------
      cw1dmngr('Enable',fig,option);

      % End waiting.
      %-------------
      wwaiting('off',fig);

    case 'WindowButtonUpFcn'
		[flag_lin,flag_ref] = cw1dmngr('get_Ena_Flag',fig);
		if flag_lin , ena_lin = 'On'; else ena_lin = 'Off'; end
		if flag_ref , ena_ref = 'On'; else ena_ref = 'Off'; end
		set(pus_lin,'Enable',ena_lin); 
		set(pus_ref,'Enable',ena_ref);

    case 'get_Ena_Flag'
		flag_lin = 0;
        flag_ref = 0;
		hdl_axe  = NaN;
		switch toolMode
			case {'real'}
				axeLIN = hdl_Re_AXES([2,4]);
                axeFLG = hdl_Re_AXES([3,4]);
			case {'abs','arg','all'}
				axeLIN = [hdl_Re_AXES([2,4]) ; hdl_Im_AXES([2,4])];
                axeFLG = [hdl_Re_AXES([3,4]) ; hdl_Im_AXES([3,4])];
                axeFLG = axeFLG(:)';
		end
		lHor = mngmbtn('getLines',fig,'Hor');
		if ~isempty(lHor) && ishandle(lHor)
			idx = find(axeLIN==get(lHor,'Parent'));
			if ~isempty(idx)
				hdl_axe  = axeLIN(idx);
                visFLG = get(axeFLG,'Visible');
                switch toolMode
                    case {'real'}
                        flag_lin = isequal(visFLG{1},'on');
                        flag_ref = isequal(visFLG{2},'on');
                    case {'abs','arg','all'}
                        flag_lin = isequal(visFLG{1},'on') | ...
                                   isequal(visFLG{3},'on');
                        flag_ref = isequal(visFLG{2},'on') | ...
                                   isequal(visFLG{4},'on');
                end
			end
		end	
		varargout = {flag_lin,flag_ref,hdl_axe};
		
	otherwise
      errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg');
      error(message('Wavelet:FunctionArgVal:Unknown_Opt'));
end


%---------------------------------------------------------%
function restoreView(fig,chk_for_AXES,old_valCHK)

new_valCHK = get(chk_for_AXES,'Value'); 
if ~isequal(old_valCHK,new_valCHK)
    for k=1:length(old_valCHK) , 
        set(chk_for_AXES(k),'Value',old_valCHK{k}); 
    end
    cw1dmngr('setPosAxes',fig);   
end
%---------------------------------------------------------%