function mmgui(varargin) %MMGUI Double-Click Activation of Plotting GUIs. (MM) % MMGUI or MMGUI on enables double-click activation of the functions % MMSAXES, MMSLINE,MMSMAP, and MMSSURF in the current figure. % Double-clicking on a axes activates MMSAXES. % Double-clicking on a line activates MMSLINE. % Double-clicking on the figure background activates MMSMAP. % Double-clicking on a surface or patch activates MMSSURF. % % MMGUI off disables all double-click activation in the current figure. % MMGUI default enables double-clicking on all new plots. % MMGUI defaultoff disables double-clicking on all new plots. % MMGUI all enables double-clicking on ALL objects in all figures. % MMGUI alloff disables all double-click activation on All objects. % MMGUI axes enables double-click activation of MMSAXES % in the current figure. % MMGUI line enables double-click activation of MMSLINE % in the current figure. % MMGUI map enables double-click activation of MMSMAP % in the current figure. % MMGUI surf enables double-click activation of MMSSURF % in the current figure. % MMGUI(H) enables double-clicking of all functions % on the figure having handle H. % Multiple inputs are accepted, e.g., % MMGUI off axes map enables just MMSAXES and MMSMAP in the current figure. % % Warning: MMGUI overwrites the ButtonDownFcn of graphics objects. % Calls: mmgcf % D.C. Hanselman, University of Maine, Orono, ME 04469 % 12/2/96, v5: 1/14/97 % Mastering MATLAB 5, Prentice Hall, ISBN 0-13-858366-8 fbdf='mmgui(''MMSMAP'')'; abdf='mmgui(''MMSAXES'')'; lbdf='mmgui(''MMSLINE'')'; sbdf='mmgui(''MMSSURF'')'; flag=1; ni=nargin; if ni==0 mmgui('on'); return end for i=1:ni arg=varargin{i}; if ~ischar(arg) % handle input tp=get(arg,'type'); if strcmp(tp,'figure') set(arg,'ButtonDownFcn',fbdf) Ha=mmgca(Hf,flag); set(Ha,'ButtonDownFcn',abdf) Hl=findobj(Ha,'Type','line'); set(Hl,'ButtonDownFcn',lbdf) Hs=[findobj(Ha,'Type','surface'); findobj(Ha,'Type','patch')]; set(Hs,'ButtonDownFcn',sbdf) else error('Handle Must Point to a Figure.') end elseif strcmp(arg,'on') % apply to current figure and all children Hf=mmgcf(flag); set(Hf,'ButtonDownFcn',fbdf) Ha=findobj(Hf,'Type','axes'); set(Ha,'ButtonDownFcn',abdf) set(findobj(Ha,'Type','line'),'ButtonDownFcn',lbdf) Hs=[findobj(Ha,'Type','surface'); findobj(Ha,'Type','patch')]; set(Hs,'ButtonDownFcn',sbdf) elseif strcmp(arg,'off') % disable Hf=mmgcf(flag); set(Hf,'ButtonDownFcn','') Ha=findobj(Hf,'Type','axes'); set(Ha,'ButtonDownFcn','') set(findobj(Ha,'Type','line'),'ButtonDownFcn','') Hs=[findobj(Ha,'Type','surface'); findobj(Ha,'Type','patch')]; set(Hs,'ButtonDownFcn','') elseif strcmp(arg,'default') set(0,'DefaultFigureButtonDownFcn',fbdf,... 'DefaultAxesButtonDownFcn',abdf,... 'DefaultLineButtonDownFcn',lbdf,... 'DefaultSurfaceButtonDownFcn',sbdf,... 'DefaultPatchButtonDownFcn',sbdf) elseif strcmp(arg,'defaultoff') set(0,'DefaultFigureButtonDownFcn','',... 'DefaultAxesButtonDownFcn','',... 'DefaultLineButtonDownFcn','',... 'DefaultSurfaceButtonDownFcn','',... 'DefaultPatchButtonDownFcn','') elseif strcmp(arg,'all') set(findobj('Type','figure'),'ButtonDownFcn',fbdf) set(findobj('Type','axes'),'ButtonDownFcn',abdf) set(findobj('Type','line'),'ButtonDownFcn',lbdf) set(findobj('Type','surface'),'ButtonDownFcn',sbdf) set(findobj('Type','patch'),'ButtonDownFcn',sbdf) elseif strcmp(arg,'alloff') set(findobj('Type','figure'),'ButtonDownFcn','') set(findobj('Type','axes'),'ButtonDownFcn','') set(findobj('Type','line'),'ButtonDownFcn','') set(findobj('Type','surface'),'ButtonDownFcn','') set(findobj('Type','patch'),'ButtonDownFcn','') elseif strcmp(arg,'axes') Hf=mmgcf(flag); Ha=findobj(Hf,'Type','axes'); if isempty(Ha), error('No Axes Exists in the Current Figure.'), end set(Ha,'ButtonDownFcn',abdf) elseif strcmp(arg,'line') Hf=mmgcf(flag); Ha=findobj(Hf,'Type','axes'); if isempty(Ha), error('No Axes Exists in the Current Figure.'), end Hl=findobj(Ha,'Type','line'); set(Hl,'ButtonDownFcn',lbdf) elseif strcmp(arg,'map') Hf=mmgcf(flag); set(Hf,'ButtonDownFcn',fbdf) elseif strcmp(arg,'surf') Hf=mmgcf(flag); Ha=findobj(Hf,'Type','axes'); if isempty(Ha), error('No Axes Exists in the Current Figure.'), end Hs=[findobj(Ha,'Type','surface'); findobj(Ha,'Type','patch')]; set(Hs,'ButtonDownFcn',sbdf) elseif strcmp(arg,'MMSAXES') if strcmp(get(gcf,'SelectionType'),'open') h=findobj('Type','figure','Tag','MMSAXES'); if isempty(h), mmsaxes else, figure(h(1)) end end elseif strcmp(arg,'MMSLINE') if strcmp(get(gcf,'SelectionType'),'open') h=findobj('Type','figure','Tag','MMSLINE'); if isempty(h), mmsline else, figure(h(1)) end end elseif strcmp(arg,'MMSMAP') if strcmp(get(gcf,'SelectionType'),'open') h=findobj('Type','figure','Tag','MMSMAP'); if isempty(h), mmsmap else, figure(h(1)) end end elseif strcmp(arg,'MMSSURF') if strcmp(get(gcf,'SelectionType'),'open') h=findobj('Type','figure','Tag','MMSSURF'); if isempty(h), mmssurf else, figure(h(1)) end end else error(sprintf('Unknown Input Argument: ''%s''',arg)) end end