gusucode.com > 信号处理工具箱 - signal源码程序 > signal\signal\siggui\private\sbresize.m

    function sbresize(create_flag,fig)
%SBRESIZE Resize function for Signal Browser.
%   SBRESIZE will resize only those objects which need resizing.
%   SBRESIZE(1) will resize every object.  Use this syntax at creation
%   of the figure.
%
%   SBRESIZE(create_flag,fig) resizes the browser with figure handle fig.
 
%   Copyright (c) 1988-98 by The MathWorks, Inc.
% $Revision: 1.1 $

%   TPK, 12/2/95

    if nargin == 0
        create_flag = 0;
    end

    if nargin <= 1
        fig = gcbo;
    end
    
    ud = get(fig,'userdata');
    sz = ud.sz;

    fp = get(fig,'position');   % in pixels already

    toolbar_ht = sz.ih;

    panner_port = [0 0 fp(3)-(sz.rw*ud.prefs.tool.ruler) ...
                    sz.ph*ud.prefs.tool.panner];
    mainaxes_port = [0 panner_port(4) ...
                     fp(3)-(sz.rw*ud.prefs.tool.ruler) ...
                     fp(4)-(toolbar_ht+panner_port(4))];

    mainaxes_pos = mainaxes_port + ...
               [sz.as(1) sz.as(2) -(sz.as(1)+sz.as(3)) -(sz.as(2)+sz.as(4))];

    if mainaxes_pos(3)<ud.prefs.minsize(1)  ...
         | mainaxes_pos(4)<ud.prefs.minsize(2)
       %disp('    SIGBROWSE: figure too small - resizing')
       
       % minsize(1)   - minimum width of main axes in pixels
       % minsize(2)   - minimum height of main axes in pixels

       w = sz.rw*ud.prefs.tool.ruler+sz.as(1)+...
             sz.as(3)+ud.prefs.minsize(1);
       w = max(w,fp(3));
       h = panner_port(4)+sz.as(2)+sz.as(4)+ud.prefs.minsize(2)+toolbar_ht;
       h = max(h,fp(4));
       fp = [fp(1) fp(2)+fp(4)-h w h];
       set(fig,'position',fp)
       % return
    end

% recompute these with new figure position:
    panner_port = [0 0 fp(3)-(sz.rw*ud.prefs.tool.ruler) ...
                    sz.ph*ud.prefs.tool.panner];
    mainaxes_port = [0 panner_port(4) ...
                     fp(3)-(sz.rw*ud.prefs.tool.ruler) ...
                     fp(4)-(toolbar_ht+panner_port(4))];

    mainaxes_pos = mainaxes_port + ...
               [sz.as(1) sz.as(2) -(sz.as(1)+sz.as(3)) -(sz.as(2)+sz.as(4))];

    hand = ud.hand;

    % Tweak position & size of uicontrols: [horz_pos ver_pos width height]
    switch computer
    case 'MAC2'
        popTweak = [0 -8 0  1];
        btnTweak = [0 -3 0 -2];
    case 'PCWIN'
        popTweak = [0 -2 0  0];
        btnTweak = [0 -1 0 -2];
    otherwise  % UNIX
        popTweak = [0 -4 0 -1];
        btnTweak = [0 -4 0  0];
    end
 
    % 1-by-4 position vectors
    pos = {
    ud.mainaxes        mainaxes_pos
    ud.mainaxes_border mainaxes_pos+[-1 -1 2 2]
    hand.complexpopup  [sz.fus fp(4)-sz.uh*2 sz.bw sz.uh] + popTweak
    hand.arraybutton   [sz.fus fp(4)-sz.uh   sz.bw sz.uh] + btnTweak
    };

%    hand.complexpopup  [mainaxes_pos(1) mainaxes_pos(2)+mainaxes_pos(4)+3 ...
%                          110 sz.uh]
%    hand.arraybutton   [sz.fus fp(4)-sz.ih/2-sz.uh/2 sz.bw sz.uh]

    set([pos{:,1}],{'position'},pos(:,2))