| function fout = waitbar_j(x,whichbar, varargin) |
| %WAITBAR Display wait bar. |
| % H = WAITBAR(X,'title', property, value, property, value, ...) |
| % creates and displays a waitbar of fractional length X. The |
| % handle to the waitbar figure is returned in H. |
| % X should be between 0 and 1. Optional arguments property and |
| % value allow to set corresponding waitbar figure properties. |
| % Property can also be an action keyword 'CreateCancelBtn', in |
| % which case a cancel button will be added to the figure, and |
| % the passed value string will be executed upon clicking on the |
| % cancel button or the close figure button. |
| % |
| % WAITBAR(X) will set the length of the bar in the most recently |
| % created waitbar window to the fractional length X. |
| % |
| % WAITBAR(X,H) will set the length of the bar in waitbar H |
| % to the fractional length X. |
| % |
| % WAITBAR(X,H,'updated title') will update the title text in |
| % the waitbar figure, in addition to setting the fractional |
| % length to X. |
| % |
| % WAITBAR is typically used inside a FOR loop that performs a |
| % lengthy computation. A sample usage is shown below: |
| % |
| % h = waitbar(0,'Please wait...'); |
| % for i=1:100, |
| % % computation here % |
| % waitbar(i/100,h) |
| % end |
| % close(h) |
| |
| % Clay M. Thompson 11-9-92 |
| % Vlad Kolesnikov 06-7-99 |
| % Copyright 1984-2001 The MathWorks, Inc. |
| % $Revision: 1.22 $ $Date: 2001/04/15 12:03:29 $ |
| |
| if nargin>=2 |
| if ischar(whichbar) |
| type=2; %we are initializing |
| name=whichbar; |
| elseif isnumeric(whichbar) |
| type=1; %we are updating, given a handle |
| f=whichbar; |
| else |
| error(['Input arguments of type ' class(whichbar) ' not valid.']) |
| end |
| elseif nargin==1 |
| f = findobj(allchild(0),'flat','Tag','TMWWaitbar'); |
| |
| if isempty(f) |
| type=2; |
| name='Waitbar'; |
| else |
| type=1; |
| f=f(1); |
| end |
| else |
| error('Input arguments not valid.'); |
| end |
| |
| x = max(0,min(100*x,100)); |
| |
| switch type |
| case 1, % waitbar(x) update |
| p = findobj(f,'Type','patch'); |
| l = findobj(f,'Type','line'); |
| if isempty(f) | isempty(p) | isempty(l), |
| error('Couldn''t find waitbar handles.'); |
| end |
| xpatch = get(p,'XData'); |
| xpatch = [0 x x 0]; |
| set(p,'XData',xpatch) |
| xline = get(l,'XData'); |
| set(l,'XData',xline); |
| |
| if nargin>2, |
| % Update waitbar title: |
| hAxes = findobj(f,'type','axes'); |
| hTitle = get(hAxes,'title'); |
| set(hTitle,'string',varargin{1}); |
| end |
| |
| case 2, % waitbar(x,name) initialize |
| vertMargin = 0; |
| if nargin > 2, |
| % we have optional arguments: property-value pairs |
| if rem (nargin, 2 ) ~= 0 |
| error( 'Optional initialization arguments must be passed in pairs' ); |
| end |
| end |
| |
| oldRootUnits = get(0,'Units'); |
| |
| set(0, 'Units', 'points'); |
| screenSize = get(0,'ScreenSize'); |
| |
| axFontSize=get(0,'FactoryAxesFontSize'); |
| |
| pointsPerPixel = 72/get(0,'ScreenPixelsPerInch'); |
| |
| width = 360 * pointsPerPixel; |
| height = 75 * pointsPerPixel; |
| pos = [screenSize(3)/2-width/2 screenSize(4)/2-height/2 width height]; |
| |
| %pos= [501.75 589.5 393.75 52.5]; |
| f = figure(... |
| 'Units', 'points', ... |
| 'BusyAction', 'queue', ... |
| 'Position', pos, ... |
| 'Resize','on', ... |
| 'CreateFcn','', ... |
| 'NumberTitle','off', ... |
| 'IntegerHandle','off', ... |
| 'MenuBar', 'none', ... |
| 'Tag','TMWWaitbar',... |
| 'Interruptible', 'off', ... |
| 'Visible','on'); |
| |
| %%%%%%%%%%%%%%%%%%%%% |
| % set figure properties as passed to the fcn |
| % pay special attention to the 'cancel' request |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| if nargin > 2, |
| propList = varargin(1:2:end); |
| valueList = varargin(2:2:end); |
| cancelBtnCreated = 0; |
| for ii = 1:length( propList ) |
| try |
| if strcmp(lower(propList{ii}), 'createcancelbtn' ) & ~cancelBtnCreated |
| cancelBtnHeight = 23 * pointsPerPixel; |
| cancelBtnWidth = 60 * pointsPerPixel; |
| newPos = pos; |
| vertMargin = vertMargin + cancelBtnHeight; |
| newPos(4) = newPos(4)+vertMargin; |
| callbackFcn = [valueList{ii}]; |
| set( f, 'Position', newPos, 'CloseRequestFcn', callbackFcn ); |
| cancelButt = uicontrol('Parent',f, ... |
| 'Units','points', ... |
| 'Callback',callbackFcn, ... |
| 'ButtonDownFcn', callbackFcn, ... |
| 'Enable','on', ... |
| 'Interruptible','off', ... |
| 'Position', [pos(3)-cancelBtnWidth*1.4, 7, ... |
| cancelBtnWidth, cancelBtnHeight], ... |
| 'String','Cancel', ... |
| 'Tag','TMWWaitbarCancelButton'); |
| cancelBtnCreated = 1; |
| else |
| % simply set the prop/value pair of the figure |
| set( f, propList{ii}, valueList{ii}); |
| end |
| catch |
| disp ( ['Warning: could not set property ''' propList{ii} ''' with value ''' num2str(valueList{ii}) '''' ] ); |
| end |
| end |
| end |
| |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| |
| |
| colormap([]); |
| |
| axNorm=[.05 .3 .9 .2]; |
| % axNorm=[1 1 1 1]; |
| axPos=axNorm.*[pos(3:4),pos(3:4)] + [0 vertMargin 0 0]; |
| |
| h = axes('XLim',[0 100],... |
| 'YLim',[0 1],... |
| 'Box','on', ... |
| 'Units','Points',... |
| 'FontSize', axFontSize,... |
| 'Position',axPos,... |
| 'XTickMode','manual',... |
| 'YTickMode','manual',... |
| 'XTick',[],... |
| 'YTick',[],... |
| 'XTickLabelMode','manual',... |
| 'XTickLabel',[],... |
| 'YTickLabelMode','manual',... |
| 'YTickLabel',[]); |
| |
| tHandle=title(name); |
| tHandle=get(h,'title'); |
| oldTitleUnits=get(tHandle,'Units'); |
| set(tHandle,... |
| 'Units', 'points',... |
| 'String', name); |
| |
| tExtent=get(tHandle,'Extent'); |
| set(tHandle,'Units',oldTitleUnits); |
| |
| titleHeight=tExtent(4)+axPos(2)+axPos(4)+5; |
| if titleHeight>pos(4) |
| pos(4)=titleHeight; |
| pos(2)=screenSize(4)/2-pos(4)/2; |
| figPosDirty=logical(1); |
| else |
| figPosDirty=logical(0); |
| end |
| |
| if tExtent(3)>pos(3)*1.10; |
| pos(3)=min(tExtent(3)*1.10,screenSize(3)); |
| pos(1)=screenSize(3)/2-pos(3)/2; |
| |
| axPos([1,3])=axNorm([1,3])*pos(3); |
| set(h,'Position',axPos); |
| |
| figPosDirty=logical(1); |
| end |
| |
| if figPosDirty |
| set(f,'Position',pos); |
| end |
| |
| xpatch = [0 x x 0]; |
| ypatch = [0 0 1 1]; |
| xline = [100 0 0 100 100]; |
| yline = [0 0 1 1 0]; |
| |
| p = patch(xpatch,ypatch,'r','EdgeColor','r','EraseMode','none'); |
| l = line(xline,yline,'EraseMode','none'); |
| set(l,'Color',get(gca,'XColor')); |
| |
| |
| set(f,'HandleVisibility','callback','visible','on', 'resize','off'); |
| |
| set(0, 'Units', oldRootUnits); |
| end % case |
| drawnow; |
| |
| if nargout==1, |
| fout = f; |
| end |