www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/MBrowser.m
function h=MBrowser(varargin) % MBROWSER Instantiate a Model Browser object % % obj=MBrowser; % Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc. % This file also houses the activeX callbacks for the MBrowser object persistent objH % Search for a current MBrowser, else return a new one if isempty(objH) % make absolutely sure MB isn't around somewhere? fH=mvf; if ~isempty(fH) % get handle from userdata objH= get(fH,'MBH'); else % create a blank new object objH= xregtools.MBrowser; end elseif ~isa(objH,'xregtools.MBrowser') % handle has been deleted? Create a valid one objH= xregtools.MBrowser; end if nargin % ActiveX event codes ev=varargin{2}; srcobj=varargin{1}; try srcobj.Nodes; tree=1; catch tree=0; end hFig=objH.Figure; MM=MotionManager(hFig); MM.EnableTree=false; if tree %%%%% TreeView Callbacks %%%%% switch ev case {13,11} % click event, node collapse event PR=xregGui.PointerRepository; ptrID=PR.stackSetPointer(hFig,'watch'); p = iGetPointer(srcobj); if ~isempty(p); objH.SelectNode(p); end PR.stackRemovePointer(hFig,ptrID); case 3 % Key press event keycode= double(varargin{3}); switch keycode case {16,17} % shift and control keys do nothing case 45 % Insert p = iGetPointer(srcobj); MB = p.MBsupport; if MB.newmodel objH.NewNode; end case 46 % Delete objH.DeleteNode; case 113 % F2 edit srcobj.StartLabelEdit; otherwise % Spoof a click event MBrowser(varargin{1}, 13); end case 9 % Label Event cancel=varargin{3}; newstring=varargin{4}; if ~cancel if ~isempty(deblank(newstring)) p = iGetPointer(srcobj); oldname = p.name; p.name(newstring); newname = p.name; if ~strcmp(newname, newstring) % Name was rejected by node: revert to old name p.name(oldname); srcobj.CancelNextLabelEdit = 1; h = errordlg(sprintf(['Cannot rename %s: an item with the name you' ... ' specified already exists. Specify a different name.'], oldname), ... 'Error Renaming Item', 'modal'); waitfor(h); else objH.doDrawText; end else srcobj.CancelNextLabelEdit = 1; end end case 14 % Right-click event % Call the context handler for the current node objH.opencontext(srcobj,varargin{3},varargin{4}); end else %%%%% ListView Callbacks %%%%% switch ev case 2 % Double click - same as tree nodeclick PR=xregGui.PointerRepository; ptrID=PR.stackSetPointer(hFig,'watch'); p = iGetPointer(srcobj); if ~isempty(p) objH.SelectNode(p); end PR.stackRemovePointer(hFig,ptrID); case 5 % Key up keycode= double(varargin{3}); switch keycode case 45 % Insert p = objH.CurrentNode; MB = p.MBsupport; if MB.newmodel objH.NewNode; end case 46 % Delete objH.DeleteNode('ListView'); end end end MM.EnableTree=true; else h=objH; end function p = iGetPointer(srcobj) try key = srcobj.SelectedItem.Key; pindex = sscanf(key,'K%d'); p = assign(xregpointer,pindex); catch p = null(xregpointer,0); end