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