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);