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

    function wpfullsi(option,win_wptool,in3,in4,in5,in6,~)
%WPFULLSI Manage full size for axes.
%   WPFULLSI(OPTION,WIN_WPTOOL,IN3,IN4,IN5,IN6,IN7)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
%   Last Revision: 18-Jun-2012.
%   Copyright 1995-2012 The MathWorks, Inc.

if strcmp(option,'squish')
    % in3 = lst_handles
    % in4 = text handle
    % in5 = 'beg or 'end'
    % in6 = num full
    % in7 optional (redraw xlab)
    %-----------------------------
    WP_Axe_Cfs = in3(1);
    WP_Axe_Col = in3(2);
    usr = get(in4,'UserData');
    if strcmp(in5,'beg')
        old_pos = usr(1,:);
        new_pos = usr(2,:);
        if in6==4
            pos1 = get(WP_Axe_Cfs,'Position');
            pos2 = get(WP_Axe_Col,'Position');
            old_pos = [pos1(1) pos2(2) pos1(3) pos1(2)-pos2(2)+pos1(4)];
            dx = pos1(1)-pos2(1);
            dw = pos1(3)-pos2(3);
            dy = (pos1(2)-pos2(2)-pos2(4))/2;
            if abs(dx)>eps
                set(WP_Axe_Col,'Position',pos2+[dx 0 dw 0]);
            end
            set(WP_Axe_Cfs,'Position',pos1+[0 -dy 0 dy]);
            delta = [dx dy dw 0];
            set(in4,'UserData',[old_pos;new_pos;delta]);
        elseif in6==1
            sli_Pos  = in3(6); %#ok<NASGU>
            sli_Size = in3(7); %#ok<NASGU>
        end
    else
        new_pos = usr(1,:);
        old_pos = usr(2,:);
    end
    pos = new_pos(3:4)./old_pos(3:4);
    pos = [new_pos(1:2)-old_pos(1:2).*pos pos];
    for k=1:length(in3)
        p = get(in3(k),'position');
        p(1:2) = p(1:2).*pos(3:4)+pos(1:2);
        p(3:4) = p(3:4).*pos(3:4);
        set(in3(k),'position',p);
    end
    if (in6==4) && strcmp(in5,'end')
        delta = usr(3,:);
        dx = delta(1); dy = delta(2); dw = delta(3);
        if abs(dx)>eps
             set(WP_Axe_Col,'Position',get(WP_Axe_Col,'Position')-[dx 0 dw 0]);
        end
        set(WP_Axe_Cfs,'Position',get(WP_Axe_Cfs,'Position')+[0 dy 0 -dy]);                    
    end
    if nargin==7
        if (in6==4) || strcmp(in5,'end')
            xlab   = get(WP_Axe_Cfs,'xlabel');
            strlab = get(xlab,'String');
            wsetxlab(WP_Axe_Cfs,strlab);
            xlab   = get(WP_Axe_Col,'xlabel');
            strlab = get(xlab,'String');
            wsetxlab(WP_Axe_Col,strlab);
        end
    end
    return
end

% MemBloc2 of stored values.
%---------------------------
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_txt_full  = 'Txt_Full';
tag_pus_full  = ['Pus_Full.1';'Pus_Full.2';'Pus_Full.3';'Pus_Full.4'];
tag_axe_t_lin = 'Axe_TreeLines';
tag_axe_sig   = 'Axe_Sig';
tag_axe_pack  = 'Axe_Pack';
tag_axe_cfs   = 'Axe_Cfs';
tag_axe_col   = 'Axe_Col';
tag_sli_size  = 'Sli_Size';
tag_sli_pos   = 'Sli_Pos';

children    = get(win_wptool,'Children');
axe_handles = findobj(children,'flat','Type','axes');
uic_handles = findobj(children,'flat','Type','uicontrol');
pus_full    = zeros(4,1);
for k =1:4
    pus_full(k) = (findobj(uic_handles,'Tag',tag_pus_full(k,:)))';
end
txt_full    = findobj(uic_handles,'Style','text','Tag',tag_txt_full);
WP_Axe_Tree = findobj(axe_handles,'flat','Tag',tag_axe_t_lin);
WP_Axe_Sig  = findobj(axe_handles,'flat','Tag',tag_axe_sig);
WP_Axe_Pack = findobj(axe_handles,'flat','Tag',tag_axe_pack);
WP_Axe_Cfs  = findobj(axe_handles,'flat','Tag',tag_axe_cfs);
WP_Axe_Col  = findobj(axe_handles,'flat','Tag',tag_axe_col);
Sli_Pos     = findobj(uic_handles,'Tag',tag_sli_pos);
Sli_Size    = findobj(uic_handles,'Tag',tag_sli_size);

lst_handles = [WP_Axe_Cfs,WP_Axe_Col,WP_Axe_Tree,...
               WP_Axe_Pack,WP_Axe_Sig,Sli_Pos,Sli_Size];

switch option
    case 'full'
        % in3 = btn number. 
        %------------------
        mx = 0.06; my =0.06;
        pos_gra = wmemtool('rmb',win_wptool,n_wp_utils,ind_gra_area);
        pos_gra(1:2) = pos_gra(1:2)+[mx my];
        pos_gra(3:4) = pos_gra(3:4)-2*[mx my];

        % Test begin or end.
        %-------------------
        num = in3;
        btn = pus_full(num);
        act = get(btn,'UserData');
        if act==0
            % begin full size
            %----------------
            col = get(btn,'BackgroundColor');
            old_num = 0;
            for k=1:length(pus_full)
                act_old = get(pus_full(k),'UserData');
                if act_old==1
                    old_num = k;
                    set(pus_full(k),...
                        'BackgroundColor',col,...
                        'String',sprintf('%.0f',k),...
                        'UserData',0);
                    break;
                end
            end
            set(btn,'String',[getWavMSG('Wavelet:commongui:Str_Close') ...
                                ' ' sprintf('%.0f',num)],'UserData',1);
            
            if old_num~=0;
               pos_param = get(txt_full,'UserData'); %#ok<NASGU>
               wpfullsi('squish',win_wptool,lst_handles,txt_full,'end',old_num);
            end
            delta = zeros(1,4);
            switch num
                case 1 , pos = get(WP_Axe_Tree,'Position');
                case 2 , pos = get(WP_Axe_Pack,'Position');
                case 3 , pos = get(WP_Axe_Sig,'Position');
                case 4 , pos = get(WP_Axe_Cfs,'Position');
            end
            if num==1
                vis = 'on';
                usr_Pos = get(Sli_Pos,'UserData');
                if isempty(usr_Pos)
                    p_Pos = get(Sli_Pos,'Position');
                    p_Siz = get(Sli_Size,'Position');
                    set(Sli_Pos,'UserData',[p_Pos;p_Siz])
                else
                    p_Pos = usr_Pos(1,:); p_Siz = usr_Pos(2,:);
                end
                p_Pos(4) = p_Pos(4)/2;
                p_Siz(2) = p_Siz(2) + p_Siz(4)/4; 
                p_Siz(4) = p_Siz(4)/2;
                set(Sli_Pos,'Position',p_Pos);
                set(Sli_Size,'Position',p_Siz);
            else
                vis = 'off';
            end
            set([Sli_Pos Sli_Size],'Visible',vis);
            set(txt_full,'UserData',[pos;pos_gra;delta]);
            wpfullsi('squish',win_wptool,lst_handles,txt_full,'beg',num,'xlab');
        else
            % end full size.
            %---------------
            col = get(pus_full(5-num),'BackgroundColor');
            set(btn,'BackgroundColor',col,...
                    'String',sprintf('%.0f',num),...
                    'UserData',0);
            wpfullsi('squish',win_wptool,lst_handles,txt_full,'end',num,'xlab');
            usr_Pos = get(Sli_Pos,'UserData');
            if ~isempty(usr_Pos)
                p_Pos = usr_Pos(1,:); p_Siz = usr_Pos(2,:);
                set(Sli_Pos,'Position',p_Pos);
                set(Sli_Size,'Position',p_Siz);                
            end
            set([Sli_Pos Sli_Size],'Visible','on');
        end

    case 'clean'
        for k=1:length(pus_full)
            act_old = get(pus_full(k),'UserData');
            if act_old==1
                col = get(pus_full(5-k),'BackgroundColor');
                % old_num = k;
                set(pus_full(k),...
                    'BackgroundColor',col,...
                    'String',sprintf('%.0f',k),...
                    'UserData',0);
                wpfullsi('squish',win_wptool,lst_handles,txt_full,'end',k);
                set([Sli_Pos Sli_Size],'Visible','on');  
                break;
            end
        end
end