www.gusucode.com > mbclayouts 工具箱 matlab 源码程序 > mbclayouts/@xregsplitlayout/resizebar.m
function resizebar(obj) %RESIZEBAR Divider bar resizing function for splitlayout % % RESIZEBAR(SRCOBJ,EVT,OBJ) % Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc. ud = obj.datastore.info; figh = ancestor(get(obj,'Parent'), 'figure'); objud.Manager = MotionManager(figh); objud.Manager.EnableTree = false; objud.initpos = get(obj.rsbutton,'Position'); objud.stpos = get(figh,'CurrentPoint'); % limits sz = get(obj,'Position'); minw = ud.minwidth; if strcmp(ud.minwidthunits,'normalized') if ud.orientation minw = minw.*sz(4); else minw = minw.*sz(3); end end if (ud.orientation) objud.mind = sz(2)-objud.initpos(2)+minw(2); objud.maxd = sz(2)+sz(4)-objud.initpos(2)-objud.initpos(4)-minw(1); else objud.mind = sz(1)-objud.initpos(1)+minw(1); objud.maxd = sz(1)+sz(3)-objud.initpos(1)-objud.initpos(3)-minw(2); end objud.or = ud.orientation; % create dummy dragging object objud.dragobj = uicontrol('Style','text',... 'Parent',get(obj, 'Parent'),... 'Position',objud.initpos,... 'BackgroundColor',[.6 .6 .6],... 'Visible','on'); objud.figure = figh; bm = xregGui.ButtonUpManager(figh); bm.getNextEvent({@i_terminate, objud.dragobj, obj}); objud.Manager.MouseMoveFcn = {@i_drag,objud.dragobj, obj}; set(obj.rsbutton,'Value',1); set(objud.dragobj,'UserData',objud); function i_drag(srcobj,evt,moveobj, obj) % update dummy object position objud = get(moveobj,'UserData'); cp = evt.CurrentPoint; % work out delta if objud.or delta = cp(2)-objud.stpos(2); else delta = cp(1)-objud.stpos(1); end % limit delta delta = max([delta objud.mind]); delta = min([delta objud.maxd]); objpos = objud.initpos; if objud.or objpos(2) = objpos(2)+delta; else objpos(1) = objpos(1)+delta; end set(moveobj,'Position',objpos); function i_terminate(srcobj,evt,moveobj, obj) % get position, delete drag object, resize pack objud = get(moveobj,'UserData'); objud.Manager.MouseMoveFcn = ''; figh = objud.figure; delete(moveobj); cp = get(figh,'CurrentPoint'); if objud.or delta = cp(2)-objud.stpos(2); else delta = cp(1)-objud.stpos(1); end if delta % limit delta delta = max([delta objud.mind]); delta = min([delta objud.maxd]); % resize packing sp = get(obj,'split'); oldsp = sp; sz = get(obj,'Position'); ud = obj.datastore.info; if objud.or sp(1) = sp(1)-delta./(sz(4)-ud.divwidth); sp(2) = sp(2)+delta./(sz(4)-ud.divwidth); else sp(1) = sp(1)+delta./(sz(3)-ud.divwidth); sp(2) = sp(2)-delta./(sz(3)-ud.divwidth); end if sp~=oldsp ps = get(obj,'boolpackstatus'); set(obj,'packstatus','on','split',sp); if ~ps set(obj,'boolpackstatus',false); end end end % undo everything set(obj.rsbutton,'Value',0); objud.Manager.EnableTree = true; % fire callback if delta firecb(obj); end