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

    function [out1,out2,out3,out4,out5,out6] = ...
                  dw1dvmod(option,win_dw1dtool,in3,in4,in5,in6,in7,in8,in9)
%DW1DVMOD Discrete wavelet 1-D view mode manager.

%   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.20.4.8 $

% Subfunction(s): 
%----------------
% SSSTRING.

%--------------------------------------
% mode 1 : scroll mode        = 'scr'
% mode 2 : decomposition mode = 'dec'
% mode 3 : separate mode      = 'sep'
% mode 4 : superimposed mode  = 'sup'
% mode 5 : tree mode          = 'tre'
% mode 6 : cfs mode           = 'cfs'
%--------------------------------------

% MemBloc1 of stored values.
%---------------------------
n_param_anal   = 'DWAn1d_Par_Anal';
% ind_sig_name   = 1;
% ind_sig_size   = 2;
% ind_wav_name   = 3;
ind_lev_anal   = 4;
% ind_axe_ref    = 5;
% ind_act_option = 6;
ind_ssig_type  = 7;
% ind_thr_val    = 8;
% nb1_stored     = 8;

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

% Tag property of objects.
%-------------------------
tag_pop_viewm   = 'View_Mode';
tag_pus_dispopt = 'Pus_Options';
tag_valapp_scr  = 'ValApp_Scr';
tag_txtapp_scr  = 'TxtApp_Scr';
tag_valdet_scr  = 'ValDet_Scr';
tag_txtdet_scr  = 'TxtDet_Scr';
tag_declev      = 'Pop_DecLev';
tag_txtdeclev   = 'Txt_DecLev';

% Handles of tagged objects.
%---------------------------
uic_handles = findobj(win_dw1dtool,'Type','uicontrol');
txt_handles = findobj(uic_handles,'Style','text');
pop_handles = findobj(uic_handles,'Style','popupmenu');
pus_dispopt = findobj(uic_handles,'Tag',tag_pus_dispopt);

% Local MemBloc of stored values.
%---------------------------
ind_scrm_1 =  1;
ind_scrm_2 =  2;
ind_decm_1 =  3;
ind_decm_2 =  4;
ind_sepm_1 =  5;
ind_sepm_2 =  6;
ind_supm_1 =  7;
ind_supm_2 =  8;
ind_trem_1 =  9;
ind_trem_2 = 10;
ind_cfsm_1 = 11;
ind_cfsm_2 = 12;
nb_stored  = 12;

switch option
    case 'ini_vm'
        %*****************************************************************%
        %** OPTION = 'ini_vm' - Default & Current values for every mode **%
        %*****************************************************************%
        % mode 1 : scroll mode        = 'scr'
        % mode 2 : decomposition mode = 'dec'
        % mode 3 : separate mode      = 'sep'
        % mode 4 : superimposed mode  = 'sup'
        % mode 5 : tree mode          = 'tre'
        % mode 6 : cfs  mode          = 'cfs'
        %--------------------------------------
        scrm = [1 1 1 1 0 1 0 0 1 1];
        decm = [1 0 1];
        sepm = [1 1 1 1 0 ones(1,max_lev_anal) 1 0 ones(1,max_lev_anal) 1];
        supm = [1 1 1 1 0 ones(1,max_lev_anal) 0 0 ones(1,max_lev_anal) 1];
        trem = [1 0 1];
        cfsm = [1 1 1 1 0 1 0 0 1 1];
        memB = cell(1,nb_stored);
        memB(ind_scrm_1) = {scrm};
        memB(ind_scrm_2) = {scrm};
        memB(ind_decm_1) = {decm};
        memB(ind_decm_2) = {decm};
        memB(ind_sepm_1) = {sepm};
        memB(ind_sepm_2) = {sepm};
        memB(ind_supm_1) = {supm};
        memB(ind_supm_2) = {supm};
        memB(ind_trem_1) = {trem};
        memB(ind_trem_2) = {trem};
        memB(ind_cfsm_1) = {cfsm};
        memB(ind_cfsm_2) = {cfsm};
        set(pus_dispopt,'UserData',memB);

    case 'set_vm'
        %**************************************************%
        %** OPTION = 'set_vm' - set View Mode Parameters **%
        %**************************************************%
        % mode 1 : scroll mode        = 'scr'
        % mode 2 : decomposition mode = 'dec'
        % mode 3 : separate mode      = 'sep'
        % mode 4 : superimposed mode  = 'sup'
        % mode 5 : tree mode          = 'tre'
        % mode 6 : cfs  mode          = 'cfs'
        %--------------------------------------
        % in3 = mode
        %------------
        switch in3
            case {1,'1','scr'}
                new_vm = [in4 in5 in6 in7 in8 in9];
                index  = ind_scrm_2;

            case {2,'2','dec'}
                new_vm = [in4 in5];
                index  = ind_decm_2;

            case {3,'3','sep'}
                Level_Anal = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_lev_anal);
                plus = ones(1,max_lev_anal-Level_Anal);
                new_vm = [in4 in5 in6 plus in7 in8 plus in9];
                index  = ind_sepm_2;

            case {4,'4','sup'}
                Level_Anal = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_lev_anal);
                plus = ones(1,max_lev_anal-Level_Anal);
                new_vm = [in4 in5 in6 plus in7 in8 plus in9];
                index  = ind_supm_2;

            case {5,'5','tre'}
                new_vm = [in4 in5];
                index  = ind_trem_2;

            case {6,'6','cfs'}
                new_vm = [in4 in5 in6 in7 in8 in9];
                index  = ind_cfsm_2;
        end
        memB = get(pus_dispopt,'UserData');
        old_vm  = memB{index};
        if find(new_vm~=old_vm)
            out1 = 1;
            memB(index) = {new_vm};
            set(pus_dispopt,'UserData',memB);
        else
            out1 = 0;
        end

    case 'get_vm'
        %**************************************************%
        %** OPTION = 'get_vm' - get View Mode Parameters **%
        %**************************************************%
        % mode 1 : scroll mode          = 'scr'
        % mode 2 : decomposition mode   = 'dec'
        % mode 3 : separate mode        = 'sep'
        % mode 4 : superimposed mode    = 'sup
        % mode 5 : tree mode            = 'tre'
        % mode 6 : cfs  mode            = 'cfs'
        %--------------------------------------
        % in3 = mode
        % in4 optional
        % if nargin=4 , initial options
        %------------------------------
        memB = get(pus_dispopt,'UserData');
        if nargin==3 , indplus = 1 ; else indplus = rem(in4,2); end
        switch in3
            case {1,'1','scr'}
                viewm = memB{ind_scrm_1+indplus};
                out1  = viewm(1:3);
                out2  = viewm(4:5);
                out3  = viewm(6);
                out4  = viewm(7:8);
                out5  = viewm(9);
                out6  = viewm(10);

            case {2,'2','dec'}
                viewm = memB{ind_decm_1+indplus};
                out1  = viewm(1:2);
                out2  = viewm(3);

            case {3,'3','sep'}
                Level_Anal = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_lev_anal);
                viewm = memB{ind_sepm_1+indplus};
                out1  = viewm(1:3);
                out2  = viewm(4:5);
                out3  = viewm(6:max_lev_anal+5);
                out3  = out3(1:Level_Anal);
                out4  = viewm(max_lev_anal+6:max_lev_anal+7);
                out5  = viewm(max_lev_anal+8:2*max_lev_anal+7);
                out5  = out5(1:Level_Anal);
                out6  = viewm(2*max_lev_anal+8);

            case {4,'4','sup'}
                Level_Anal = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_lev_anal);
                viewm = memB{ind_supm_1+indplus};
                out1  = viewm(1:3);
                out2  = viewm(4:5);
                out3  = viewm(6:max_lev_anal+5);
                out3  = out3(1:Level_Anal);
                out4  = viewm(max_lev_anal+6:max_lev_anal+7);
                out5  = viewm(max_lev_anal+8:2*max_lev_anal+7);
                out5  = out5(1:Level_Anal);
                out6  = viewm(2*max_lev_anal+8);

            case {5,'5','tre'}
                viewm = memB{ind_trem_1+indplus};
                out1  = viewm(1:2);
                out2  = viewm(3);

            case {6,'6','cfs'}
                viewm = memB{ind_cfsm_1+indplus};
                out1  = viewm(1:3);
                out2  = viewm(4:5);
                out3  = viewm(6);
                out4  = viewm(7:8);
                out5  = viewm(9);
                out6  = viewm(10);
        end

    case 'ch_vm'
        %***********************************************%
        %** OPTION = 'ch_vm' - Change Mode  View Mode **%
        %***********************************************%
        % in3 = 1 (optional) - clean
        % in3 = 2 (optional) - clean + redraw (return comp & deno)
        %----------------------------------------------------------
        % Handles of tagged objects.
        %---------------------------
        [btnHeight,ySpacing] = mextglob('get','Def_Btn_Height','Y_Spacing');
        pop_viewm   = findobj(pop_handles,'Tag',tag_pop_viewm);
        pop_app_scr = findobj(pop_handles,'Tag',tag_valapp_scr);
        pop_det_scr = findobj(pop_handles,'Tag',tag_valdet_scr);
        pop_lev_dec = findobj(pop_handles,'Tag',tag_declev);
        txt_app_scr = findobj(txt_handles,'Tag',tag_txtapp_scr);
        txt_det_scr = findobj(txt_handles,'Tag',tag_txtdet_scr);
        txt_lev_dec = findobj(txt_handles,'Tag',tag_txtdeclev);
        hdl_col     = utcolmap('handles',win_dw1dtool,'cell');
        hdl_col     = double(hdl_col(:)');
        
        if nargin==2 , in3 = 0; end
        old_mode = get(pop_viewm,'UserData');
        new_mode = get(pop_viewm,'Value');

        %-------------------------------------------------------------%
        %-- pour deno et comp on ne change que le signal synthetise --%
        %-- sinon oter cette partie                                 --%
        %-------------------------------------------------------------%
        if in3==2
            % Begin waiting.
            %---------------
            wwaiting('msg',win_dw1dtool, ...
                getWavMSG('Wavelet:commongui:WaitCompute'));

            switch new_mode
              case {2,'2','dec',5,'5','tre'}
                  val = dw1dvmod('get_vm',win_dw1dtool,new_mode);
                  ss_type = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_ssig_type);
                  str_ss  = ssString(ss_type);
                  switch lower(str_ss(1))
                      case 'c' , lab = getWavMSG('Wavelet:dw1dRF:ShowCompSig');
                      case 'd' , lab = getWavMSG('Wavelet:dw1dRF:ShowDenoSig');
                      case 's' , lab = getWavMSG('Wavelet:dw1dRF:ShowSyntSig');
                  end
                  set(pus_dispopt,'Value',val(2),'String',lab);

            end
            switch new_mode
                case {1,'1','scr'} , fname = 'dw1dscrm';
                case {2,'2','dec'} , fname = 'dw1ddecm';
                case {3,'3','sep'} , fname = 'dw1dsepm';
                case {4,'4','sup'} , fname = 'dw1dsupm';
                case {5,'5','tre'} , fname = 'dw1dtrem';
                case {6,'6','cfs'} , fname = 'dw1dcfsm';
            end
            feval(fname,'del_ss',win_dw1dtool);
            % clean_val = -0;    % reset axes history. 
            clean_val = -1;      % preserve axes history.
            feval(fname,'view',win_dw1dtool,clean_val)

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

            return;
        end
        %-------------------------------------------------------------%

        if (old_mode==new_mode)
            if in3==0
                return ;
            elseif in3==1 || in3==2
                new_mode  = 1;
                set(pop_viewm,'Value',new_mode,'UserData',new_mode);
                clear_val = 0;
            end
        else
            clear_val = new_mode;
            set(pop_viewm,'UserData',new_mode);
        end

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

        % Borders and double borders.
        %----------------------------
        win_units = get(win_dw1dtool,'Units');
        deltay    = btnHeight+4*ySpacing;
        if ~strcmp(win_units,'pixels')
            [~,deltay] = wfigutil('prop_size',win_dw1dtool,1,deltay);
        end
        pos_pop_viewm   = get(pop_viewm,'Position');

        pos_opt = get(pus_dispopt,'Position');
        switch old_mode
            case {1,'1','scr'}
                set([txt_app_scr,txt_det_scr,pop_app_scr,pop_det_scr, ...
                     pus_dispopt],'Visible','off');
                feval('dw1dscrm','clear',win_dw1dtool,clear_val);

            case {2,'2','dec'}
                set([txt_lev_dec,pop_lev_dec,pus_dispopt],'Visible','off');
                set(pus_dispopt,'Style','pushbutton');
                feval('dw1ddecm','clear',win_dw1dtool);
                drawnow;

            case {3,'3','sep'}
                if (new_mode==1) || (new_mode==2)
                    set(pus_dispopt,'Visible','off');
                end
                feval('dw1dsepm','clear',win_dw1dtool);
                drawnow;

            case {4,'4','sup'}
                if (new_mode==1) || (new_mode==2)
                    set(pus_dispopt,'Visible','off');
                end
                feval('dw1dsupm','clear',win_dw1dtool,clear_val);

            case {5,'5','tre'}
                set(pus_dispopt,'Visible','off');
                set(pus_dispopt,'Style','pushbutton');
                feval('dw1dtrem','clear',win_dw1dtool);
                drawnow;

            case {6,'6','cfs'}
                set([txt_app_scr,txt_det_scr,pop_app_scr,pop_det_scr, ...
                     pus_dispopt],'Visible','off');
                feval('dw1dcfsm','clear',win_dw1dtool,clear_val);
        end
        
        if ((new_mode==2) && find(old_mode==[1 3 4 5 6])) || ...
           ((new_mode==5) && find(old_mode==[1 2 3 4 6]))
            val = dw1dvmod('get_vm',win_dw1dtool,new_mode);
            ss_type = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_ssig_type);
            str_ss  = ssString(ss_type);
            if new_mode==2 , fname = 'dw1ddecm'; else fname = 'dw1dtrem'; end 
            cba_disp = [fname '(''ssig'',' ...
                            num2mstr(win_dw1dtool) ',' ...
                            num2mstr(pus_dispopt) ');'];
            switch lower(str_ss(1))
                case 'c' , lab = getWavMSG('Wavelet:dw1dRF:ShowCompSig');
                case 'd' , lab = getWavMSG('Wavelet:dw1dRF:ShowDenoSig');
                case 's' , lab = getWavMSG('Wavelet:dw1dRF:ShowSyntSig');                    
            end
            set(pus_dispopt,'Style','checkbox','Value',val(2),...
                           'String',lab,'Callback',cba_disp);

        elseif ((old_mode==2) && find(new_mode==[1 3 4 5 6])) || ...
               ((old_mode==5) && find(new_mode==[1 2 3 4 6]))
            cba_disp = ['dw1ddisp(''create'',' num2mstr(win_dw1dtool) ');'];
            set(pus_dispopt,...
                           'Style','pushbutton',            ...
                           'String',getWavMSG('Wavelet:dw1dRF:Str_MoreDisp_1D'), ...
                           'Callback',cba_disp);
        end

        switch new_mode
            case {1,'1','scr'}
                pos_txt1   = get(txt_app_scr,'Position');
                pos_opt(2) = pos_txt1(2)-deltay;
                set(pus_dispopt,'Position',pos_opt);
                set([txt_app_scr, txt_det_scr, ...
                     pop_app_scr, pop_det_scr, ...
                     pus_dispopt, hdl_col],    ...
                     'Visible','on');
                drawnow
                if (clear_val==0) && (in3==1) , return; end
                feval('dw1dscrm','view',win_dw1dtool,old_mode);

            case {2,'2','dec'}
                pos_txt1   = get(txt_lev_dec,'Position');
                pos_opt(2) = pos_txt1(2)-deltay;
                set(pus_dispopt,'Position',pos_opt);
                set([txt_lev_dec, pop_lev_dec,pus_dispopt],'Visible','on');
                set(hdl_col,'Visible','off');         
                drawnow
                lev = get(pop_lev_dec,'Value'); 
                feval('dw1ddecm','view',win_dw1dtool,old_mode,lev);

            case {3,'3','sep'}
                pos_opt(2) = pos_pop_viewm(2)-deltay;
                set(pus_dispopt,'Position',pos_opt);
                set([pus_dispopt,hdl_col],'Visible','on');
                drawnow
                feval('dw1dsepm','view',win_dw1dtool,old_mode);

            case {4,'4','sup'}
                pos_opt(2) = pos_pop_viewm(2)-deltay;
                set(pus_dispopt,'Position',pos_opt);
                set([pus_dispopt,hdl_col],'Visible','on');
                drawnow
                feval('dw1dsupm','view',win_dw1dtool,old_mode);

            case {5,'5','tre'}
                pos_txt1   = get(txt_lev_dec,'Position');
                pos_opt(2) = pos_txt1(2)-deltay;
                set(pus_dispopt,'Position',pos_opt);
                set(pus_dispopt,'Visible','on');
                set(hdl_col,'Visible','off');         
                drawnow
                lev = get(pop_lev_dec,'Value');
                feval('dw1dtrem','view',win_dw1dtool,old_mode,lev);

            case {6,'6','cfs'}
                pos_txt1   = get(txt_app_scr,'Position');
                pos_opt(2) = pos_txt1(2)-deltay;
                set(pus_dispopt,'Position',pos_opt);
                set([txt_app_scr, txt_det_scr, ...
                     pop_app_scr, pop_det_scr, ...
                     pus_dispopt],    ...
                     'Visible','on');
                set(hdl_col,'Visible','off');         
                drawnow
                if (clear_val==0) && (in3==1) , return; end
                feval('dw1dcfsm','view',win_dw1dtool,old_mode);
        end

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

    case 'ss_vm'
        %*******************************************************%
        %** OPTION = 'ss_vm' - set Visibility of synth signal **%
        %*******************************************************%
        % mode 1 : scroll mode        = 'scr'
        % mode 2 : decomposition mode = 'dec'
        % mode 3 : separate mode      = 'sep'
        % mode 4 : superimposed mode  = 'sup'
        % mode 5 : tree mode          = 'tre'
        % mode 6 : cfs  mode          = 'cfs'
        %-----------------------------------------
        % in3 = view_mode (s)
        % in4 = 0 (invisible) or in4 = 1 (visible)
        % in5 = 0 (invisible) or in5 = 1 (visible)
        %------------------------------------------

        if nargin==4 , in5 = in4; end
        memB = get(pus_dispopt,'UserData');
        if find(in3==1)
            viewm            = memB{ind_scrm_2};
            viewm(5)         = in4;
            viewm(8)         = in5;
            memB(ind_scrm_2) = {viewm};
        end

        if find(in3==2)
            viewm            = memB{ind_decm_2};
            viewm(2)         = in4;
            memB(ind_decm_2) = {viewm};
        end

        if find(in3==3)
            viewm                 = memB{ind_sepm_2};
            viewm(5)              = in4;
            viewm(max_lev_anal+7) = in5;
            memB(ind_sepm_2)      = {viewm};
        end

        if find(in3==4)
            viewm                 = memB{ind_supm_2};
            viewm(5)              = in4;
            viewm(max_lev_anal+7) = in5;
            memB(ind_supm_2)      = {viewm};
        end

        if find(in3==5)
            viewm            = memB{ind_trem_2};
            viewm(2)         = in4;
            memB(ind_trem_2) = {viewm};
        end

        if find(in3==6)
            viewm            = memB{ind_cfsm_2};
            viewm(5)         = in4;
            viewm(8)         = in5;
            memB(ind_cfsm_2) = {viewm};
        end

        set(pus_dispopt,'UserData',memB);

    case 'ccfs_vm'
        %*************************************************%
        %** OPTION = 'ccfs_vm' - get coloration options **%
        %*************************************************%
        % mode 1 : scroll mode        = 'scr'
        % mode 2 : decomposition mode = 'dec'
        % mode 3 : separate mode      = 'sep'
        % mode 4 : superimposed mode  = 'sup'
        % mode 5 : tree mode          = 'tre'
        % mode 6 : cfs  mode          = 'cfs'
        %--------------------------------------
        % in3 = mode
        %------------------------------
        memB = get(pus_dispopt,'UserData');
        switch in3
            case {1,'1','scr'}
                viewm = memB{ind_scrm_2};
                out1  = viewm(10);

            case {2,'2','dec'}
                viewm = memB{ind_decm_2};
                out1  = viewm(3);

            case {3,'3','sep'}
                viewm = memB{ind_sepm_2};
                out1  = viewm(2*max_lev_anal+8);

            case {4,'4','sup'}
                viewm = memB{ind_supm_2};
                out1  = viewm(2*max_lev_anal+8);

            case {5,'5','tre'}
                viewm = memB{ind_trem_2};
                out1  = viewm(3);

            case {6,'6','cfs'}
                viewm = memB{ind_cfsm_2};
                out1  = viewm(10);
        end

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


%--------------------------------------
function s = ssString(ss_type)

switch ss_type
    case 'ss', s = 'Synthesized';
    case 'ds', s = 'De-noised';
    case 'cs', s = 'Compressed';
end
%--------------------------------------