235 lines
6.9 KiB
Mathematica
235 lines
6.9 KiB
Mathematica
|
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
|