www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/@cgtools/@cgbrowser/deletenode.m
function deletenode(h) %DELETENODE Delete current browser node % % DELETENODE(CGB) deletes the current browser node. % Copyright 2000-2011 The MathWorks, Inc. and Ford Global Technologies, Inc. if h.GUIExists pOld=h.SelNode; if pOld~=0 pPROJ = address(pOld.project); A= UpdateConnections(pPROJ.info); if h.CurrentType.matchtype(cgtypes.cgddtype) % Delete differently for variable dictionary item= find(A.pData==h.SelSubItem); else % New delete method item= find(A.pNode==pOld); end if ~CanDelete(A,item) AllUsers= getAllUsers(A,item); % Data is still referenced elsewhere pOtherNodes= MainPtrList(A,AllUsers); dh= xregdialog('name','Linked Items','resize','off'); xregcenterfigure(dh,[350 200],h.Figure); xregpersistfigpos(dh,'key','CageCantDeleteDialog'); txt=uicontrol('Parent',dh,... 'Style','text',... 'HorizontalAlignment','left',... 'String',[A.Names{item} ' cannot be removed because the information',... ' is currently being referenced by other items in Cage. ',... 'You must remove the following items before removing ',A.Names{item}]); lst = mbcwidgets.List('parent',dh,... 'Editable', false, ... 'SelectionMode', 'None'); lst.Peer.setIconBaseLocation(cgrespath); lst.Peer.setColumnData( {'Item'} ); lst.Peer.setColumnWidths(300); Names = pveceval(pOtherNodes,@getname); Icons = pveceval(pOtherNodes,@iconfile); lst.Peer.setData(Names(:),Icons(:)); cls=uicontrol('Parent',dh,... 'Style','pushbutton',... 'String','Close',... 'Callback','set(gcbf,''visible'',''off'');'); lyt=xreggridbaglayout(dh,'dimension',[3 2],... 'rowsizes',[45 -1 25],... 'colsizes',[-1 65],... 'mergeblock',{[1 1],[1 2]},... 'mergeblock',{[2 2],[1 2]},... 'gapy',10,... 'border',[10 10 10 10],... 'packstatus','off',... 'elements',{txt,lst,[],[],[],cls}); dh.LayoutManager=lyt; set(lyt,'packstatus','on'); dh.showDialog(cls); delete(dh); else pOldSub = h.SelSubItem; % Warn user that they are about to remove an item and give the % option of cancelling if pOldSub~=0 nm=pOld.name(pOldSub); else nm=pOld.name; end resp=questdlg(sprintf('Do you want to delete %s?', nm),... 'Confirm Deletion','Yes','No','Yes'); if strcmp(resp,'Yes') % Attempt removal from treeview/listview % Get new current item from treeview/listview and switch % browser to display this item if h.ListOn % use list remove(h.Hand.Figure.List,pOld,pOldSub); [pNew,pNewSub]=getPointers(h.Hand.Figure.List); else % use tree remove(h.Hand.Figure.Tree,pOld); pNew=h.Hand.Figure.Tree.Selected; pNewSub=xregpointer; end % Get any post-delete callback before we move away from the % node delcb = h.getBrowserOptions('postdeletecallback'); if pOld~=pNew % Move to a null node before deletion h.setnewnode(xregpointer,xregpointer); elseif pOldSub~=pNewSub % Move to a null subitem before deletion h.setnewnode(pOld, xregpointer); end % Delete underlying data if h.CurrentType.matchtype(cgtypes.cgddtype) % delete variable delete(A,item); else % delete node from project tree delete(pOld.info); end % Execute deletion callback after item is deleted if ~isempty(delcb) xregcallback(delcb, h, []); end if pNew==0 pNew=pPROJ.getprimarynode(h.CurrentType); pNewSub=xregpointer; end if ~isempty(pNew) h.setnewnode(pNew,pNewSub); end end end end end