www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/mv_StatusBar.m

    function mv_StatusBar(Action,varargin);
%MV_STATUSBAR

%  Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc.



switch lower(Action)
case 'create'
   i_Create(varargin{:});
case 'clear'
   i_Clear(varargin{:});
case 'progress'
   i_Progress(varargin{:});
case 'message'
   i_Message(varargin{:});
case 'progressvis'
   i_Progressvis(varargin{:});
case 'move'
   i_Move(varargin{:});
case 'messagecolour'
   i_msgclr(varargin{:});
end


function i_Create(hFig,pos);

uicontrol('Parent',hFig,...
   'Style','text',...
   'HorizontalAlignment','left',...
   'Tag','mvStatusText',...
   'Position',[pos(1)+20,pos(2)+5,pos(3)/2 15]);

uicontrol('Parent',hFig,...
   'Style','text',...
   'Position',[pos(1)+pos(3)*2/3 pos(2)+5 pos(3)/4 15],...
   'Tag','mvStatusWindow',...
   'BackgroundColor','w');
uicontrol('Parent',hFig,...
   'Style','text',...
   'Position',[pos(1)+pos(3)*2/3 pos(2)+5 pos(3)/4 15],...
   'Visible','off',...
   'Tag','mvStatusProgress',...
   'BackgroundColor',[0 0.5 0.5],...
   'UserData','off');
uicontrol('Parent',hFig,...
   'Style','text',...
   'Position',[pos(1)+pos(3)*2/3-pos(3)/4-10 pos(2)+5 pos(3)/4 15],...
   'Visible','off',...
   'HorizontalAlignment','right',...
   'Tag','mvStatusProgText',...
   'UserData','off');


function [hText,hProg,hWind,hProgText]= i_FindStatus(hFig)

hText= findobj(hFig,'Tag','mvStatusText');
hProg= findobj(hFig,'Tag','mvStatusProgress');
hWind= findobj(hFig,'Tag','mvStatusWindow');
hProgText= findobj(hFig,'Tag','mvStatusProgText');



function i_Clear(hFig)

[hText,hProg]= i_FindStatus(hFig);
set(hText,'String','');
ProgPos= get(hProg,'Position');
ProgPos(3) = 1;
set(hProg,'Position',ProgPos);

function i_Message(hFig,Message,Progress,varargin)

[hText,hProg,hWind]= i_FindStatus(hFig);
set(hText,'String',Message);
if nargin > 2
   WholePos=get(hWind,'Position');
   ProgPos= get(hProg,'Position');
   if length(Progress)>1
      ProgPos(3) = WholePos(3)* (Progress(1)/Progress(2));
   else
      ProgPos(3) = WholePos(3)* Progress(1)/100;
   end   
   if ProgPos(3)>0
      set(hProg,'Position',ProgPos,'Visible','on');
   else
      set(hProg,'Visible','off');
   end   
end

% Option for not redrawing - big performance hit in DOE gui here!
if (nargin>3 & strcmp(varargin{1},'noredraw')) | strcmp(get(hFig,'Visible'),'off')
else
   drawnow;
end

function i_Progress(hFig,Progress,ProgText)

[hText,hProg,hWind,hProgText]= i_FindStatus(hFig);
WholePos=get(hWind,'Position');
ProgPos= get(hProg,'Position');
if length(Progress)>1
   ProgPos(3) = WholePos(3)* (Progress(1)/Progress(2));
else
   ProgPos(3) = WholePos(3)* Progress(1)/100;
end   
if ProgPos(3)>0  
   set(hProg,'Position',ProgPos,'UserData','on');
   if strcmp(get(hWind,'Visible'),'on')
      % Only bring up if the window is visible (implies the waitbar is on)
      set(hProg,'Visible','on');
   end
else
   set(hProg,'Visible','off','UserData','off');
end   
if nargin>2
   set(hProgText,'String',ProgText,'Visible','on')
end
drawnow


function i_Progressvis(hFig,vis)
% Switches progress meter visibility

[hText,hProg,hWind,hProgText]= i_FindStatus(hFig);

if strcmp(vis,'off');
   set([hWind;hProg;hProgText],'Visible','off');
elseif strcmp(vis,'on')
   if ~strcmp(get(hProg,'UserData'),'off')
      % Turn on the Progress meter
      set(hProg,'Visible','on');
   end
   %Turn on the Progress window
   set(hProgText,'Visible','on','String','');
   set(hWind,'Visible','on');
end



function i_Move(hFig,pos)
% Allows repositioning of statusbar

[hText,hProg,hWind,hProgTxt]= i_FindStatus(hFig);

WholePos=get(hWind,'Position');
ProgPos= get(hProg,'Position');
ratio=ProgPos(3)/WholePos(3);
set([hText;hWind;hProg;hProgTxt],{'Position'},...
   {  [pos(1)+20,pos(2)+5,pos(3)/2 15];...
      [pos(1)+pos(3)*2/3 pos(2)+5 pos(3)/4 15];...
      [pos(1)+pos(3)*2/3 pos(2)+5 (pos(3)/4)*ratio 15];...
      [pos(1)+pos(3)*2/3-pos(3)/4-10 pos(2)+5 pos(3)/4 15]});

function i_msgclr(hFig, clr, varargin)
% Allows changing of message ui background/foreground

if nargin==2
   prop='backgroundcolor';
elseif strcmp(varargin{1},'fg')
   prop='foregroundcolor';
else
   prop='backgroundcolor';
end

[hText,hProg,hWind]= i_FindStatus(hFig);

set(hText,prop,clr);