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

    function varargout = utanapar(option,fig,varargin)
%UTANAPAR Utilities for wavelet analysis parameters.
%   VARARGOUT = UTANAPAR(OPTION,FIG,VARARGIN)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 04-May-98.
%   Last Revision: 04-Jul-2013.
%   Copyright 1995-2014 The MathWorks, Inc.
%   $Revision: 1.6.4.21 $  $Date: 2013/08/23 23:45:11 $

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

% Tag property of objects.
%-------------------------
tag_ana_par = 'Fra_AnaPar';

switch option
    case {'Install_V3','Install_V3_CB','create'}
        % Defaults.
        %----------
        xleft = Inf; xright  = Inf; xloc = Inf;
        ytop  = Inf; ybottom = Inf; yloc = Inf;
        bkColor = '';
        datFlag = 1;
        levFlag = 1;
        enaVAL  = 'on';
        wtype   = 'dwt';
        deflev  = 1;
        maxlev  = max_lev_anal;

        % Inputs.
        %--------        
        nbarg = length(varargin);
        for k=1:2:nbarg
            arg = lower(varargin{k});
            switch arg
              case 'left'    , xleft   = varargin{k+1};
              case 'right'   , xright  = varargin{k+1};
              case 'xloc'    , xloc    = varargin{k+1};
              case 'bottom'  , ybottom = varargin{k+1};
              case 'top'     , ytop    = varargin{k+1};
              case 'yloc'    , yloc    = varargin{k+1};
              case 'bkcolor' , bkColor = varargin{k+1};              
              case 'datflag' , datFlag = varargin{k+1};
              case 'levflag' , levFlag = varargin{k+1};
              case 'enable'  , enaVAL  = varargin{k+1};
              case 'wtype'   , wtype   = varargin{k+1};
              case 'deflev'  , deflev  = varargin{k+1};
              case 'maxlev'  , maxlev  = varargin{k+1};
            end 
        end
        str_numfig = num2mstr(fig);
    
        % String property of objects (Not all are used).
        %-----------------------------------------------
        str_txt_typ = getWavMSG('Wavelet:commongui:Str_DatSiz');
        str_txt_nam = '';
        str_txt_wav = getWavMSG('Wavelet:commongui:Str_Wavelet');
        str_pop_fam = wavemngr('tfsn',wtype);
        str_pop_num = wavemngr('fields',{'fsn',str_pop_fam(1,:)},'tabNums');
        if isempty(str_pop_num) , str_pop_num = 'no'; end
        str_txt_lev = getWavMSG('Wavelet:commongui:Str_Level');
        str_levels  = int2str((1:maxlev)');
        new_VER = false;
        switch option
            case {'Install_V3','Install_V3_CB'}
                % Get Handles.
                %-------------
                handles = guihandles(fig);
                if isfield(handles,'Fra_AnaPar')
                    Fra_AnaPar = handles.Fra_AnaPar;
                else
                    new_VER = true;
                    Fra_AnaPar = handles.Pan_DAT_WAV;                    
                end
                if isfield(handles,'Txt_Data_NS')
                    Txt_Data_NS = handles.Txt_Data_NS;
                    Edi_Data_NS = handles.Edi_Data_NS;
                else
                    datFlag = false;
                end
                Txt_Wav     = handles.Txt_Wav;
                Pop_Wav_Fam = handles.Pop_Wav_Fam;
                Pop_Wav_Num = handles.Pop_Wav_Num;
 
                try
                    Txt_Lev = handles.Txt_Lev;
                    Pop_Lev = handles.Pop_Lev;
                catch %#ok<CTCH>
                    levFlag = false;
                end
                if ~datFlag
                    Txt_Data_NS = NaN;
                    Edi_Data_NS = NaN;
                end
                if ~levFlag
                    Txt_Lev = NaN;
                    Pop_Lev = NaN;
                end
                
                % UIC Updates.
                %-------------
                set(Pop_Wav_Fam,'String',str_pop_fam);
                set(Pop_Wav_Num,'String',str_pop_num);
                if levFlag
                    set(Pop_Lev,'String',str_levels,'Enable',enaVAL);
                end
                set([Pop_Wav_Fam,Pop_Wav_Num],'Enable',enaVAL);
                
            case 'create'
                % Get Globals.
                %--------------
                [Def_Txt_Height,Def_Btn_Height,Y_Spacing,shadowColor, ...
                    InActBkColor] = mextglob('get','Def_Txt_Height', ...
                            'Def_Btn_Height','Y_Spacing',...
                            'Def_ShadowColor','Def_Edi_InActBkColor');
                if isempty(bkColor)
                    bkColor = mextglob('get','Def_FraBkColor');
                end
                
                % Positions utilities.
                %---------------------
                bdx = 3;
                dy = Y_Spacing; bdy = 4;        
                d_txt  = (Def_Btn_Height-Def_Txt_Height);
                deltaY = (Def_Btn_Height+dy);
                
                old_units  = get(fig,'Units');
                fig_units  = 'pixels';
                if ~isequal(old_units,fig_units), set(fig,'Units',fig_units); end       
                
                % Setting frame position.
                %------------------------
                w_fra   = wfigmngr('get',fig,'fra_width');
                h_fra   = Def_Btn_Height+(datFlag+levFlag)*deltaY+3*bdy;
                xleft   = utposfra(xleft,xright,xloc,w_fra);
                ybottom = utposfra(ybottom,ytop,yloc,h_fra);
                pos_fra = [xleft,ybottom,w_fra,h_fra];
                
                % Position property of objects.
                %------------------------------
                w_uic = (w_fra-3*bdx)/3;
                x_uic = pos_fra(1)+bdx;
                ylow  = ybottom+h_fra-Def_Btn_Height-bdy;
                
                if datFlag
                    pos_txt_typ = [x_uic, ylow+d_txt/2, w_uic, Def_Txt_Height+3];  %Def_Txt_Height  High DPI adjustment
                    xleft       = pos_txt_typ(1)+pos_txt_typ(3);
                    pos_txt_nam = [xleft , ylow , 2*w_uic , Def_Btn_Height];
                    ylow        = ylow-deltaY;
                end
                xplus = 2;     
                pos_txt_wav    = [x_uic, ylow+d_txt/2, w_uic, Def_Txt_Height];
                xleft          = pos_txt_wav(1)+pos_txt_wav(3);
                pos_pop_fam    = [xleft, ylow, w_uic-xplus, Def_Btn_Height];
                pos_pop_num    = pos_pop_fam;
                pos_pop_num(1) = pos_pop_fam(1)+w_uic;
                pos_pop_num(3) = w_uic;
                
                if levFlag
                    ylow           = ylow-deltaY;
                    pos_txt_lev    = pos_txt_wav;
                    pos_txt_lev(2) = ylow+d_txt/2;
                    xleft          = pos_txt_lev(1)+pos_txt_lev(3);
                    pos_pop_lev    = [xleft, ylow, w_uic-xplus, Def_Btn_Height];
                end
                
                % Create objects.
                %----------------
                comFigProp = {'Parent',fig,'Units',fig_units};
                Fra_AnaPar = uicontrol(comFigProp{:},...
                    'Style','frame', ...
                    'Position',pos_fra, ...
                    'BackgroundColor',bkColor, ...
                    'ForegroundColor',shadowColor,  ...
                    'Tag',tag_ana_par ...
                );
                
                if datFlag
                    Txt_Data_NS = uicontrol(comFigProp{:},...
                        'Style','text',               ...
                        'HorizontalAlignment','left', ...
                        'Position',pos_txt_typ,       ...
                        'String',str_txt_typ,         ...
                        'BackgroundColor',bkColor ,   ...
                        'Tag','Txt_Data_NS' ...                        
                    );
                    
                    Edi_Data_NS = uicontrol(comFigProp{:},...
                        'Style','Edit',           ...
                        'Position',pos_txt_nam,   ...
                        'String',str_txt_nam,     ...
                        'Enable','inactive',      ...
                        'BackgroundColor',InActBkColor,...
                        'Tag','Edi_Data_NS' ...
                    );
                else
                    Txt_Data_NS = NaN;
                    Edi_Data_NS = NaN;
                end
                Txt_Wav = uicontrol(comFigProp{:},...
                    'Style','text',               ...
                    'HorizontalAlignment','left', ...
                    'Position',pos_txt_wav,       ...
                    'String',str_txt_wav,         ...
                    'Tag','Txt_Wav_Fam'           ...                    
                );
                
                Pop_Wav_Fam = uicontrol(comFigProp{:},...
                    'Style','Popup',        ...
                    'Position',pos_pop_fam, ...
                    'String',str_pop_fam,   ...
                    'Tag','Pop_Wav_Fam',    ...
                    'Enable',enaVAL         ...
                );
                
                Pop_Wav_Num = uicontrol(comFigProp{:},...
                    'Style','Popup',        ...
                    'Position',pos_pop_num, ...
                    'String',str_pop_num,   ...
                    'Visible','On',        ...
                    'Tag','Pop_Wav_Num',    ...                    
                    'Enable',enaVAL         ...
                );
                if levFlag
                    Txt_Lev = uicontrol(comFigProp{:},...
                        'Style','text',               ...
                        'HorizontalAlignment','left', ...
                        'Position',pos_txt_lev,       ...
                        'String',str_txt_lev,         ...
                        'BackgroundColor',bkColor,    ...
                        'Tag','Txt_Lev'               ...                                                  
                    );
                    
                    Pop_Lev = uicontrol(comFigProp{:},...
                        'Style','Popup',        ...
                        'Position',pos_pop_lev, ...
                        'String',str_levels,    ...
                        'Tag','Pop_Lev',        ...                          
                        'Enable',enaVAL,        ...
                        'Value',deflev          ...
                    );
                else
                    Txt_Lev = NaN;
                    Pop_Lev = NaN;
                end
               
                if ~isequal(old_units,fig_units)
                    anapar_HDL = [Fra_AnaPar;Txt_Data_NS;Edi_Data_NS;...
                        Txt_Wav;Pop_Wav_Fam;Pop_Wav_Num;Txt_Lev;Pop_Lev];
                    set([fig;anapar_HDL],'Units',old_units);
                end       
                drawnow;
                
        end
        
        % Set Wavelet Buttons.
        %---------------------
        cbanapar('cba_fam',fig,[Pop_Wav_Fam,Pop_Wav_Num]);

        % Callbacks update.
        %------------------
        switch option
            case {'Install_V3'} ,
            case {'Install_V3_CB','create'}
                cbanapar('cba_fam',fig,[Pop_Wav_Fam,Pop_Wav_Num]);
                pop_str     = num2mstr([Pop_Wav_Fam;Pop_Wav_Num]);
                cba_pop_fam = ['cbanapar(''cba_fam'',' str_numfig ',' pop_str ');']; 
                cba_pop_num = ['cbanapar(''cba_num'',' str_numfig ',' pop_str ');'];
                set(Pop_Wav_Fam,'Callback',cba_pop_fam);
                set(Pop_Wav_Num,'Callback',cba_pop_num);
        end
                       
		% Add Context Sensitive Help (CSHelp).
		%-------------------------------------
		hdl_UT_WAVELET = [Txt_Wav,Pop_Wav_Fam,Pop_Wav_Num];
		wfighelp('add_ContextMenu',fig,hdl_UT_WAVELET,'UT_WAVELET');
		%-------------------------------------

        % Store handles.
        %---------------
        ud.handles = {Fra_AnaPar;Txt_Data_NS;Edi_Data_NS;...
                     Txt_Wav;Pop_Wav_Fam;Pop_Wav_Num;Txt_Lev;Pop_Lev};                 
        if new_VER          
            wtbxappdata('set',fig,'Fra_AnaPar_PROP',ud);
        else
            set(Fra_AnaPar,'UserData',ud);
        end
        if nargout>0 , varargout = {get(Fra_AnaPar,'Position') , ud.handles}; end

    case 'create_copy'
        createArg = varargin{1};
        cbArg     = varargin{2};
        [toolPos,hdlNew] = utanapar('create',fig,createArg{:});
        if iscell(hdlNew) , hdlNew = cat(1,hdlNew{:}); end
        popNew = findobj(hdlNew,'Style','popupmenu');
        cbanapar('set',fig,cbArg{:});
        copyOpt = 1;
        if copyOpt
            Def_FraBkColor = mextglob('get','Def_Edi_InActBkColor');
            prop    = get(popNew,{'Value','String'});
            newProp = {'Style','Edit','BackgroundColor',Def_FraBkColor, ...
                       'Enable','Inactive', ...
                       'String'};
            for k = 1:size(prop,1)
               set(popNew(k),newProp{:},prop{k,2}(prop{k,1},:));
            end
            edi_NS = findobj(hdlNew,'Tag','Edi_Data_NS');
            set(edi_NS,'BackgroundColor',Def_FraBkColor);
        else
            % inactCol = mextglob('get','Def_TxtBkColor');
            % set(popNew,'Enable','inactive','ForegroundColor',inactCol);
        end
        if nargout>0 , varargout = {toolPos,hdlNew}; end

    case 'create_copyB'
        inFig = varargin{1};
        uic = findobj(get(fig,'Children'),'flat','Type','uicontrol');
        fra = findobj(uic,'Style','frame','Tag',tag_ana_par);
        ud  = get(fra,'UserData');
        handles = zeros(size(ud.handles));
        if iscell(ud.handles) , 
            hdl2copy = cat(1,ud.handles{:});
        else
            hdl2copy = ud.handles;
        end
        for k =1:length(ud.handles)
           handles(k) = copyobj(hdl2copy(k),inFig);
        end
	
        % Store handles.
        %---------------
        ud = struct('handles',handles);
        idxFRA = strcmp(get(handles,'Style'),'frame');
        set(handles(idxFRA),'UserData',ud);		
        pop = findobj(handles,'Style','popupmenu');
        if ~isempty(pop)
            Def_FraBkColor = mextglob('get','Def_Edi_InActBkColor');
            % Def_FraBkColor = mextglob('get','Def_FraBkColor');
            prop    = get(pop,{'Value','String'});
            newProp = {'Style','Edit','BackgroundColor',Def_FraBkColor, ...
                       'Enable','Inactive', ...
                       'String'};
            for k = 1:size(prop,1)
               set(pop(k),newProp{:},prop{k,2}(prop{k,1},:));
            end
        end

		% Add Context Sensitive Help (CSHelp).
		%-------------------------------------
        [Txt_Wav,Pop_Wav_Fam,Pop_Wav_Num] = ...
            utanapar('handles',inFig,'nam','fam','num');
        hdl_UT_WAVELET = [Txt_Wav,Pop_Wav_Fam,Pop_Wav_Num];
		wfighelp('add_ContextMenu',inFig,hdl_UT_WAVELET,'UT_WAVELET');
		%-------------------------------------

    case 'handles'
        ud = wtbxappdata('get',fig,'Fra_AnaPar_PROP');
        if isempty(ud)
            uic = findobj(get(fig,'Children'),'Type','uicontrol');
            fra = findobj(uic,'Style','frame','Tag',tag_ana_par);
            ud  = get(fra,'UserData');
        end        
        handles = ud.handles;
        handles([1,4,7]) = [];
        nbarg = length(varargin);
        if nbarg>0 && isequal(varargin{1},'all')
            varargout{1} = handles; return
        end       

        varargout = num2cell(handles);
        if  nbarg<1
            TMP = varargout;
            nbCell = length(TMP);
            for k = 1:nbCell
                varargout{k} = TMP{k}{1};
            end
            varargout = varargout(1:nbCell);
            return;
        end
        ind = [];
        for k = 1:nbarg
            hdlType = varargin{k};
            switch hdlType
                case 'typ' , ind = [ind;1]; %#ok<AGROW>
                case 'nam' , ind = [ind;2]; %#ok<AGROW>
                case 'fam' , ind = [ind;3]; %#ok<AGROW>
                case 'num' , ind = [ind;4]; %#ok<AGROW>
                case 'lev' , ind = [ind;5]; %#ok<AGROW>
                case 'pop' , ind = [ind;(3:5)']; %#ok<AGROW>
            end
        end
        TMP = varargout(ind);
        nbCell = length(TMP);
        InCell = iscell(TMP{1});
        for k = 1:nbCell                
            if InCell 
                varargout{k} = TMP{k}{1};
            else
                varargout{k} = TMP{k};
            end
            if ~ishandle(varargout{k}) , varargout{k} = 0; end
        end
        varargout = varargout(1:nbCell);

    case {'toolPosition','position'}
        fra = findobj(fig,'Style','frame','Tag',tag_ana_par);
        varargout = get(fra,{'Position','Units'});

    case 'set_cba_num'
        [Pop_Wav_Fam,Pop_Wav_Num] = utanapar('handles',fig,'fam','num');
        if nargin>2
            ena_hdl = varargin{1};
            pop_str = num2mstr([Pop_Wav_Fam ; Pop_Wav_Num]);
            ena_hdl = double(ena_hdl);
            cba_pop_num = ['cbanapar(''cba_num'',gcbf,' pop_str ',[],' ...
                            num2mstr(ena_hdl) ');'];
            set(Pop_Wav_Num,'Callback',cba_pop_num);
        end 

    otherwise
        errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg');
        error(message('Wavelet:FunctionArgVal:Invalid_Input'));
end