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

    function out1 = wptreeop(option,win_wptool,in3,in4)
%WPTREEOP Operations on wavelet packets tree.
%   OUT1 = WPTREEOP(OPTION,WIN_WPTOOL,IN3,IN4)

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

%==========================================================%
switch option
    case {'vis','split_merge','rec','select_on','stat'}
		mouseSelect = get(win_wptool,'SelectionType');
		if ~isequal(mouseSelect,'normal') , return; end
end
%==========================================================%

% MB2 (main window).
%-------------------
n_wp_utils = 'WP_Utils';
ind_tree_lin  = 1;
ind_tree_txt  = 2;
ind_type_txt  = 3;
ind_sel_nodes = 4;
% ind_gra_area  = 5;
ind_nb_colors = 6;
% nb2_stored    = 6;

% Tag property of objects.
%-------------------------
tag_pop_colm  = 'Txt_PopM';  % WP-1D only
tag_axe_t_lin = 'Axe_TreeLines';
tag_txt_in_t  = 'Txt_In_tree';
% tag_lin_in_t  = 'Lin_In_tree';
% tag_axe_sig   = 'Axe_Sig';
tag_axe_pack  = 'Axe_Pack';
tag_axe_cfs   = 'Axe_Cfs';
tag_curtree   = 'Pop_CurTree';
tag_nodlab    = 'Pop_NodLab';
tag_nodact    = 'Pop_NodAct';
tag_img_cfs   = 'Img_WPCfs';
tag_img_nod   = 'Img_NodCfs';

% Handles.
%---------
if ~ishandle(win_wptool) , win_wptool = gcbf; end
hdl_Struct = guihandles(win_wptool);
children   = get(win_wptool,'Children');
pop_handles = findobj(children,'flat','Style','popupmenu');
axe_handles = findobj(children,'flat','Type','axes');
WP_Axe_Tree = findobj(axe_handles,'flat','Tag',tag_axe_t_lin);
WP_Axe_Pack = findobj(axe_handles,'flat','Tag',tag_axe_pack);
WP_Axe_Cfs  = findobj(axe_handles,'flat','Tag',tag_axe_cfs);

% Miscellaneous Values.
%-------------------------
[txt_color,sel_color,ftn_size] = ...
                wtbutils('wputils','tree_op',get(WP_Axe_Tree,'Xcolor'));
                        
% To correct a warning on slider !! 
%----------------------------------
tag_sli_pos   = 'Sli_Pos';
WP_Sli_Pos =  findobj(children,'Tag',tag_sli_pos);
mini = get(WP_Sli_Pos,'Min');
maxi = get(WP_Sli_Pos,'Max');
if mini<= maxi
    set(WP_Sli_Pos,'Min',mini-sqrt(eps),'Max',maxi);
end
%---------------------------------------------------------------
            
            
switch option
    case 'nodact'
        pop_nodact = findobj(pop_handles,'Tag',tag_nodact);
        v     = get(pop_nodact,'Value');
        old_v = get(pop_nodact,'UserData');
        if isempty(old_v) , old_v = 0; end
        set(pop_nodact,'UserData',v);
        if     any(v==(1:6)) && old_v==7  , ok = 1;
        elseif any(old_v==(1:6)) && v==7  , ok = 1;
        elseif old_v==7 && v==7
            if nargin==3
               if strcmp(in3,'reset')
                    set(pop_nodact,'Value',1);
                    set(pop_nodact,'UserData',1);
                    v  = 1; ok = 1;
               else
                   return;
               end
            else
               return;
            end
        else
            ok = 0;
        end
        if ok
            WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree');
            order = treeord(WP_Tree);
            img_handles = findobj(WP_Axe_Cfs,'Tag',tag_img_cfs);
        end

        Tree_Texts = wmemtool('rmb',win_wptool,n_wp_utils,ind_tree_txt);
        str_win = 'gcbf';
        switch v
            case 1
                btndown_fcn = [mfilename '(''vis'',' str_win ');'];

            case 2
                wptreeop('select_off',win_wptool);
                btndown_fcn = [mfilename '(''split_merge'',' str_win ');'];

            case 3
                wptreeop('select_off',win_wptool);
                btndown_fcn = [mfilename '(''rec'',' str_win ');'];

            case 4
                btndown_fcn = [mfilename '(''select_on'',' str_win ');'];

            case 5
                wptreeop('select_off',win_wptool);
                set(pop_nodact,'Value',1);
                btndown_fcn = [mfilename '(''vis'',' str_win ');'];

            case 6
                btndown_fcn = [mfilename '(''stat'',' str_win ');'];

            case 7
                tn = tnodes(WP_Tree);
                nbTT = length(Tree_Texts);
                nodes = false(1,nbTT);
                for k = 1:nbTT
                    us = get(Tree_Texts(k),'UserData');
                    if ~isempty(us) && isempty(find(tn==us,1))
                        nodes(k) = true;
                    end
                end
                set(Tree_Texts(nodes),'Visible','off');
                btndown_fcn = ['wptreeop(''colcfs'',' str_win ');'];
                set(img_handles,'Visible','off');
        end
        if any(v==(1:6)) && old_v==7
            if order==2
                delete(findobj(WP_Axe_Cfs,'Tag',tag_img_nod));
                set(WP_Axe_Cfs,'NextPlot','replace');
            end
            Tree_Texts = Tree_Texts(Tree_Texts~=0);
            set(Tree_Texts,'Visible','on');
            set(img_handles,'Visible','on');
            drawnow
            if order==2
                pop_colm = findobj(win_wptool,'Style','popupmenu',...
                                'Tag',tag_pop_colm);
                col_mode = get(pop_colm,'Value');
                if find(col_mode==[1 2 3 4])
                    strlab = getWavMSG('Wavelet:wp1d2dRF:FrqOrdCfs');
                else
                    strlab = getWavMSG('Wavelet:wp1d2dRF:DUCf_LRTr');
                end
                wsetxlab(WP_Axe_Cfs,strlab);
            else
                wsetxlab(WP_Axe_Cfs,'');
            end
        elseif any(old_v==(1:6)) && v==7
            wsetxlab(WP_Axe_Cfs,'');
        end
        Tree_Texts = Tree_Texts(Tree_Texts~=0);
        set(Tree_Texts,'ButtonDownFcn',btndown_fcn);
        return

    case 'nodlab'
        pop_nodlab = findobj(pop_handles,'Tag',tag_nodlab);
        pop_nodact = findobj(pop_handles,'Tag',tag_nodact);
        v_lab = get(pop_nodlab,'Value');
        v_act = get(pop_nodact,'Value');
        if v_act==7
            txt_in_tree = findobj(WP_Axe_Tree,'Tag',tag_txt_in_t);
            txt_off     = findobj(txt_in_tree,'Visible','off');
        end
        Tree_Texts = wmemtool('rmb',win_wptool,n_wp_utils,ind_tree_txt);
        if v_lab==6
            set(Tree_Texts(Tree_Texts~=0),'Visible','off'); return
        end
        switch v_lab
           case 1 , labtype = 'p';
           case 2 , labtype = 'i';
           case 3 , labtype = 'e';
           case 4 , labtype = 'eo';
           case 5 , labtype = 's';
           case 7 , labtype = 't';
           case 8 , labtype = 'en';               
        end
        wmemtool('wmb',win_wptool,n_wp_utils,ind_type_txt,labtype);
        WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree');
        nodes   = allnodes(WP_Tree);
        labels  = tlabels(WP_Tree,labtype,nodes);
        for k=1:length(nodes)
            set(Tree_Texts(1+nodes(k)),'String',deblank(labels(k,:)));
        end
        set(Tree_Texts(Tree_Texts~=0),'Visible','on');
        if v_act==7 , set(txt_off,'Visible','off'); end
        return

    case 'select_off'
        Selected_Nodes = wmemtool('rmb',win_wptool,n_wp_utils,ind_sel_nodes);
        if ~isempty(Selected_Nodes)
            set(Selected_Nodes(2,:),'Color',txt_color);
            wmemtool('wmb',win_wptool,n_wp_utils,ind_sel_nodes,[]);
        end
        return

    case 'select_on'
        [obj,node] = findnode(win_wptool,WP_Axe_Tree);
        if isempty(obj) , return; end

        Selected_Nodes = wmemtool('rmb',win_wptool,n_wp_utils,ind_sel_nodes);
        col = get(obj,'Color');
        if col==txt_color
            Selected_Nodes = [Selected_Nodes [node;double(obj)]];
            set(obj,'Color',sel_color);
        else
            Selected_Nodes(:,Selected_Nodes(2,:)==double(obj)) = [];
            set(obj,'Color',txt_color);
        end
        wmemtool('wmb',win_wptool,n_wp_utils,ind_sel_nodes,Selected_Nodes);
        return;

    case 'stat'
        [obj,node] = findnode(win_wptool,WP_Axe_Tree);
        if isempty(obj) , return; end

        set(wfindobj('figure'),'Pointer','watch');
        WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree');
        order = treeord(WP_Tree);
        if  order==2
            out1 = wp1dstat('create',win_wptool,node);
        elseif  order==4
            out1 = wp2dstat('create',win_wptool,node);
        end
        set(wfindobj('figure'),'Pointer','arrow');
        return

    case 'colcfs'
        [obj,node] = findnode(win_wptool,WP_Axe_Tree);
        if isempty(obj) , return; end

        set(wfindobj('figure'),'Pointer','watch');
        WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree');
        order = treeord(WP_Tree);
        img_handles = findobj(WP_Axe_Cfs,'Tag',tag_img_cfs);
        if order==2
            us = get(img_handles,'UserData');
            tn = depo2ind(order,us(:,1:2));
            num_img = find(node==tn);
            set(img_handles,'Visible','off');
            if num_img~=0
                xd = get(img_handles,'XData');
                nd = get(img_handles,'CData');
                NBrows = size(nd,1);
                y1 = us(num_img,3);
                y2 = us(num_img,4); 
                r1 = ceil(y1*NBrows)+1;
                r2 = floor(y2*NBrows);
                nd = nd(r1:r2,:);
                if r1==r2
                    ydata(1) = (y2+y1)/2;
                    ydata(2) = y2;
                else
                    alfa = 1/(2*(r2-r1+1));
                    ydata = [(1-alfa)*y1+alfa*y2 (1-alfa)*y2+alfa*y1];
                end
                set(WP_Axe_Cfs,'NextPlot','add');
                delete(findobj(WP_Axe_Cfs,'Tag',tag_img_nod));
                image('Parent',WP_Axe_Cfs, ...
                      'XData',xd,'YData',ydata, ...
                      'CData',nd,'Tag',tag_img_nod ...
                      );
                strlab = getWavMSG('Wavelet:wp1d2dRF:Str_Pck', ...
                                us(num_img,1),us(num_img,2),node);
                wsetxlab(WP_Axe_Cfs,strlab);
                set(WP_Axe_Cfs,'Tag',tag_axe_cfs)
            end

        elseif order==4
            num_img = 0;
            for k=1:length(img_handles)
                us = get(img_handles(k),'UserData');
                us = us(1:2);
                if node==depo2ind(order,us) , num_img = k; break; end
            end
            img_on = findobj(img_handles,'Visible','on');
            set(img_on,'Visible','off');
            if num_img~=0
                set(img_handles(num_img),'Visible','on');
                strlab = getWavMSG('Wavelet:wp1d2dRF:Str_Pck',us(1),us(2),node);
                wsetxlab(WP_Axe_Cfs,strlab);
            end
        end
        set(wfindobj('figure'),'Pointer','arrow');
        return

    case 'slide_size'
        % in3 = slider_size.
        % in4 = slider_pos.
        %--------------------
        if ~ishandle(in3);
            in3 = hdl_Struct.Sli_Size;
            in4 = hdl_Struct.Sli_Pos;
        end
        v = get(in3,'Value');
        set(in3,'UserData',v);
        half = 1/((2*v)^(v/4));

        % Setting slider-pos properties.
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        if v>1
            old_bound = get(in4,'Max');
            old_val   = get(in4,'Value');
            new_bound = abs(0.5-half);
            if old_bound ~= 0
                new_val = -new_bound+(old_val+old_bound)*(new_bound/old_bound);
            else
                new_val = 0;
            end
            delta = 0;
            if new_val>new_bound-delta , new_val = new_bound-delta;
            elseif new_val<-new_bound+delta , new_val = -new_bound+delta;
            end
            set(in4,'Min',-new_bound,'Max',new_bound,...
                'Value',new_val,'Visible','on');
        else
            new_val = 0;
            set(in4,'Min',0,'Max',0,'Value',0,'Visible','off');
        end
        set(WP_Axe_Tree,'XLim',[new_val-half new_val+half]);
        return

    case 'slide_pos'
        % in3 = slider_pos.
        %------------------
        if ~ishandle(in3);
            in3 = hdl_Struct.Sli_Pos;
        end        
        mVM = get(in3,{'Min','Value','Max'});
        delta = 0; 
        OK = (mVM{2}>mVM{1}+delta) &&  (mVM{2}<mVM{3}-delta);
        if ~OK
            if mVM{2}<=mVM{1} , val = mVM{1}; else val = mVM{3}; end            
            set(in3,'Value',val,'Visible','On')
        end
        x0 = mVM{2};
        u  = get(WP_Axe_Tree,'XLim');
        demi_ecart = (u(2)-u(1))/2;
        set(WP_Axe_Tree,'XLim',[x0-demi_ecart x0+demi_ecart]);
        return

    case {'best','blvl','wp2wtree','restore','input_tree','cuttree'}
        % Begin waiting.
        %--------------
        wwaiting('msg',win_wptool,getWavMSG('Wavelet:commongui:WaitCompute'));
        wptreeop('select_off',win_wptool);
        if ~strcmp(option,'input_tree')
            WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree');
        else
            WP_Tree = in3;
        end
        switch option
            case 'best'
                WP_Tree = besttree(WP_Tree);
                Axe_TreeTitle = getWavMSG('Wavelet:wp1d2dRF:BestTree');

            case 'blvl'
                WP_Tree = bestlevt(WP_Tree);
                Axe_TreeTitle = getWavMSG('Wavelet:wp1d2dRF:BestLevTree');

            case 'wp2wtree'
                WP_Tree = wp2wtree(WP_Tree);
                Axe_TreeTitle = getWavMSG('Wavelet:wp1d2dRF:WavTree');
                
            case 'restore'
                WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree_Saved');
                Axe_TreeTitle = getWavMSG('Wavelet:wp1d2dRF:DecTree');

            case 'input_tree'
                Axe_TreeTitle = getWavMSG('Wavelet:wp1d2dRF:DecTree');

            case 'cuttree'
                % in3 = pop_hdl
                %--------------
                if ~ishandle(in3) , in3 = gcbo; end
                val = get(in3,'Value');
                lev = val-1;
                depth = treedpth(WP_Tree);
                if lev==depth , wwaiting('off',win_wptool); return; end

                [WP_Tree,n2m] = wpcutree(WP_Tree,lev);
                if isempty(n2m) , wwaiting('off',win_wptool); return; end
                Axe_TreeTitle = getWavMSG('Wavelet:wp1d2dRF:CutTree');
        end


        depth = treedpth(WP_Tree);
        str_depth = int2str((0:depth)');
        pop_cur = findobj(pop_handles,'Tag',tag_curtree);
        set(pop_cur,'String',str_depth,'Value',depth+1);

        xlab    = get(WP_Axe_Cfs,'xlabel');
        strxlab = get(xlab,'String');
        titl    = get(WP_Axe_Cfs,'title');
        strtitl = get(titl,'String');

        hdl_in_axes = [...
                        get(WP_Axe_Tree,'Children'); ...
                        get(WP_Axe_Cfs,'Children');  ...
                        get(WP_Axe_Pack,'Children')  ...
                        ];

        delete(hdl_in_axes); drawnow

        wmemtool('wmb',win_wptool,n_wp_utils,...
                       ind_tree_lin,[],ind_tree_txt,[]);
        wtbxappdata('set',win_wptool,'WP_Tree',WP_Tree);           
        nb_col = wmemtool('rmb',win_wptool,n_wp_utils,ind_nb_colors);
		wtitle(Axe_TreeTitle,'Parent',WP_Axe_Tree);
		wtitle(getWavMSG('Wavelet:wp1d2dRF:NodActRes'),'Parent',WP_Axe_Pack);
		wpplottr('first',win_wptool,WP_Tree);
		wptreeop('nodlab',win_wptool);
		pop_nodact = findobj(pop_handles,'Tag',tag_nodact);
		act = get(pop_nodact,'Value');
		wptreeop('nodact',win_wptool,'reset');
		pop_colm = findobj(pop_handles,'Tag',tag_pop_colm);
        col_mode = get(pop_colm,'Value');
        wpplotcf(WP_Tree,col_mode,WP_Axe_Cfs,nb_col);
        wtitle(strtitl,'Parent',WP_Axe_Cfs);
        order = treeord(WP_Tree);
        if order==2
            if act==7
                xlab = get(WP_Axe_Cfs,'xlabel');
                strxlab = get(xlab,'String');
            end
            wsetxlab(WP_Axe_Cfs,strxlab);
        end
        if ~strcmp(option,'input_tree') , dynvtool('get',win_wptool,0); end

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

    case {'vis','rec','split_merge'}
        [obj,node] = findnode(win_wptool,WP_Axe_Tree);
        if isempty(obj) , return; end

end

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

WP_Tree = wtbxappdata('get',win_wptool,'WP_Tree');
if ~isempty(WP_Tree) , order = treeord(WP_Tree); end
switch option
    case {'vis','rec'}
		[d,p] = ind2depo(order,node);
        size0   = read(WP_Tree,'sizes',0);
        switch option
            case 'vis' , pack = wpcoef(WP_Tree,node);
            case 'rec' , pack = wprcoef(WP_Tree,node);
        end
        switch option
          case 'vis'
            flg_code = 1;
            trunc_p  = [d size0];
		    str_pck  = getWavMSG('Wavelet:wp1d2dRF:Str_Pck',d,p,node);

          case 'rec'
            if p==0 , flg_code = 0; else flg_code = 1; end
            trunc_p = [0 size0];
            str_pck = getWavMSG('Wavelet:wp1d2dRF:Str_RecPck',d,p,node);
        end
		delete(get(WP_Axe_Pack,'Children'));
		dynvtool('ini_his',win_wptool,1)
		if order == 2
            xmax = length(pack);
		    if xmax==1, xmax = 1+0.01; end
		    ymin = min(pack);       ymax = max(pack);
			if abs(ymax-ymin)<sqrt(eps) , ymin = ymin-0.0001; ymax = ymax+0.0001; end
			if p==0
				if d==0 , colNAME = 'sig'; else colNAME = 'app'; end
			else
				colNAME = 'det';
			end
			color = wtbutils('colors',colNAME,1);
			plot(pack,'Color',color,'Parent',WP_Axe_Pack);
			set(WP_Axe_Pack,'XLim',[1 xmax],'YLim',[ymin ymax],'Tag',tag_axe_pack);
			wtitle(str_pck,...
				'FontSize',ftn_size,...
				'Color',get(WP_Axe_Tree,'Xcolor'),...
				'Parent',WP_Axe_Pack);
		else
			% Image Coding Value.
			%-------------------
			codemat_v = wimgcode('get'); 			
		    NB_Colors2D = wmemtool('rmb',win_wptool,n_wp_utils,ind_nb_colors);
		    pack = wimgcode('cod',flg_code,pack,NB_Colors2D,codemat_v,trunc_p);
		    image('CData',pack,'Parent',WP_Axe_Pack);
		    wtitle(str_pck,...
		           'FontSize',ftn_size,...
		           'Color',get(WP_Axe_Tree,'Xcolor'),...
		           'Parent',WP_Axe_Pack);
		    set(WP_Axe_Pack, ...
		           'Tag',tag_axe_pack,     ...
		           'Layer','top',            ...
		           'YDir','Reverse',        ...
		           'XLim',[1 size(pack,2)] + 0.5*[-1 1],  ...
		           'YLim',[1 size(pack,1)] + 0.5*[-1 1]   ...
		           );
		end
		dynvtool('put',win_wptool)
		% axes(WP_Axe_Tree);

    case 'split_merge'
        pack_exist = istnode(WP_Tree,node);     
        if pack_exist == 0
            WP_Tree = nodejoin(WP_Tree,node);
            labels  = [];
        else
            WP_Tree = wpsplt(WP_Tree,node);
            child   = node*order+(1:order)';
            labtype = wmemtool('rmb',win_wptool,n_wp_utils,ind_type_txt);
            labels  = tlabels(WP_Tree,labtype,child);
        end
        wtbxappdata('set',win_wptool,'WP_Tree',WP_Tree);
        depth = treedpth(WP_Tree);
        str_depth = int2str((0:depth)');
        pop_cur = findobj(pop_handles,'Tag',tag_curtree);
        set(pop_cur,'String',str_depth,'Value',depth+1);

        % Drawing New Tree.
        %------------------
        wtitle(getWavMSG('Wavelet:wp1d2dRF:DecTree'),'Parent',WP_Axe_Tree);
        wpplottr('split_merge',win_wptool,WP_Tree,node,labels);
        wptreeop('cfs',win_wptool);

    case 'cfs'
        xlab    = get(WP_Axe_Cfs,'xlabel');
        strxlab = get(xlab,'String');
        titl    = get(WP_Axe_Cfs,'title');
        strtitl = get(titl,'String');
        delete(get(WP_Axe_Cfs,'Children'));
        nb_col   = wmemtool('rmb',win_wptool,n_wp_utils,ind_nb_colors);
        pop_colm = findobj(pop_handles,'Tag',tag_pop_colm);
        col_mode = get(pop_colm,'Value');
        wpplotcf(WP_Tree,col_mode,WP_Axe_Cfs,nb_col);
        wtitle(strtitl,'Parent',WP_Axe_Cfs)
        if order==2 , wsetxlab(WP_Axe_Cfs,strxlab); end

    case 'col_mode'	% option = 'col_mode' -- only for WP-1D
	% b_pop	= in3.
	%-------------
    if ~ishandle(in3)
        in3 = hdl_Struct.Txt_PopM;
    end
	colorMode = get(in3,'Value');
	user	= get(in3,'UserData');
	if colorMode~=user
	    set(in3,'UserData',colorMode);
	    titl    = get(WP_Axe_Cfs,'title');
	    strtitl = get(titl,'String');
	    delete(get(WP_Axe_Cfs,'Children'));
	    nb_col = wmemtool('rmb',win_wptool,n_wp_utils,ind_nb_colors);
        wpplotcf(WP_Tree,colorMode,WP_Axe_Cfs,nb_col);
	    wtitle(strtitl,'Parent',WP_Axe_Cfs)
	    if order==2
            if find(colorMode==[1 2 3 4])
                strxlab = getWavMSG('Wavelet:wp1d2dRF:FrqOrdCfs');
            else
                strxlab = getWavMSG('Wavelet:wp1d2dRF:DUCf_LRTr');
            end
	        wsetxlab(WP_Axe_Cfs,strxlab);
	    end
	end

    case 'recons'
        Selected_Nodes = wmemtool('rmb',win_wptool,n_wp_utils,ind_sel_nodes);
        if isempty(Selected_Nodes) , wwaiting('off',win_wptool); return; end

        nodes   = sort(Selected_Nodes(1,:));
        n2m     = [];
        un_sel  = [];
        ter_nod = [];
        k = 1;
        while k<=length(nodes)
            nod_sel = nodes(k);
            desc    = nodedesc(WP_Tree,nod_sel);
            desc    = desc(2:length(desc));
            if isempty(desc)
                ter_nod = [ter_nod nod_sel];   %#ok<AGROW>
            else
                xind = wcommon(nodes,desc);
                indx = find(xind);
                un_sel = [un_sel nodes(indx)]; %#ok<AGROW>
                nodes(indx) = [];
                n2m = [n2m nod_sel];           %#ok<AGROW>
            end
            k = k+1;
        end
        if ~isempty(un_sel)
            xind = wcommon(Selected_Nodes(1,:),un_sel);
            indx = find(xind);
            set(Selected_Nodes(2,indx),'Color',txt_color);
            Selected_Nodes(:,indx) = [];
            wmemtool('wmb',win_wptool,n_wp_utils,...
                           ind_sel_nodes,Selected_Nodes);
        end

        Tree_Texts = wmemtool('rmb',win_wptool,n_wp_utils,ind_tree_txt);
        Tree_Texts = Tree_Texts(Tree_Texts~=0);
        set(Tree_Texts,'Visible','off');
        set(Selected_Nodes(2,:),'Visible','on');
        drawnow
        WP_Tree = nodejoin(WP_Tree,n2m(:));
        [order,tnods] = get(WP_Tree,'order','tn');
        sizes = read(WP_Tree,'tnsizes');
        xind = wcommon(tnods,[ter_nod n2m]);
        indic = find(xind==0);
        for j = 1:length(indic)
            k = indic(j);
            WP_Tree = write(WP_Tree,'data',tnods(k),zeros(sizes(k,:)));
        end
        [WP_Tree,pack] = nodejoin(WP_Tree,0); %#ok<ASGLU>


        % Drawing Packet.
        %----------------
        nodes = (sort(Selected_Nodes(1,:)))';
        Tree_Type_TxtV = wmemtool('rmb',win_wptool,n_wp_utils,ind_type_txt);
        str_pck = getWavMSG('Wavelet:wp1d2dRF:Str_RecIni');
        len     =  length(nodes);
        if strcmp(Tree_Type_TxtV,'i')
            ind = depo2ind(order,nodes);
            for k=1:len
                str_pck = [str_pck '(' sprintf('%.0f',ind(k)) ')']; %#ok<AGROW>
                if k<len , str_pck = [str_pck '+']; end             %#ok<AGROW>
            end
        else
            [d,p] = ind2depo(order,nodes);
            for k=1:len
                str_pck = [str_pck '(' sprintf('%.0f',d(k)) ',' ...
                                        sprintf('%.0f',p(k)), ')']; %#ok<AGROW>
                if k<len , str_pck = [str_pck '+']; end             %#ok<AGROW>
            end
        end
        
        delete(get(WP_Axe_Pack,'Children'));
        dynvtool('ini_his',win_wptool,1)
        if order == 2
            xmax = length(pack);
            if xmax==1, xmax = 1+0.01; end
            ymin = min(pack); ymax = max(pack);
            if ymin==ymax , ymin = ymin-0.0001; ymax = ymax+0.0001; end
            color = wtbutils('colors','wp1d','recons');
            line(...
                'XData',1:length(pack),...
                'YData',pack,...
                'Color',color,...
                'Parent',WP_Axe_Pack);
            set(WP_Axe_Pack,'XLim',[1 xmax],'YLim',[ymin ymax]);
            wtitle(str_pck,...
                'FontSize',ftn_size,...
                'Parent',WP_Axe_Pack);
            
        else
			% Image Coding Value.
			%-------------------
			codemat_v = wimgcode('get');
			
            NB_Colors2D = ...
                    wmemtool('rmb',win_wptool,n_wp_utils,ind_nb_colors);
            image(...
                  'CData',wimgcode('cod',0,pack,NB_Colors2D,codemat_v),...
                  'Parent',WP_Axe_Pack);
            wtitle(str_pck,...
                   'FontSize',ftn_size,...
                   'Color',get(WP_Axe_Tree,'Xcolor'),...
                   'Parent',WP_Axe_Pack);
		    set(WP_Axe_Pack, ...
		           'Tag',tag_axe_pack,     ...
		           'Layer','top',            ...
		           'YDir','Reverse',        ...
		           'XLim',[1 size(pack,2)] + 0.5*[-1 1],  ...
		           'YLim',[1 size(pack,1)] + 0.5*[-1 1]   ...
		           );
        end
        dynvtool('put',win_wptool)
        % axes(WP_Axe_Tree);
        set(Tree_Texts,'Visible','on');
end

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


%------------------------------------------------
function [obj,node] = findnode(win,axe)

obj = get(win,'CurrentObject');
if ~isempty(obj)
   if ~isequal(get(obj,'Parent'),axe)
      obj = [];
   else
      node = get(obj,'UserData');
   end
end
%------------------------------------------------