(FILECREATED "19-Aug-87 11:31:36" {QV}<NOTECARDS>1.3KNEXT>PMIPATCH057.;3 9309
changes to: (VARS PMIPATCH057COMS)
previous date: " 7-Aug-87 18:09:28" {QV}<NOTECARDS>1.3KNEXT>PMIPATCH057.;2)
(* Copyright (c) 1987 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT PMIPATCH057COMS)
(RPAQQ PMIPATCH057COMS ((DECLARE: FIRST (P (NC.LoadFileFromDirectories (QUOTE NCBROWSERCARD))))
(* * pmi 8/7/87: Fixes bug reported by Cathy where deleting a card from a
browser caused it to go first to Orphans before being deleted for good.)
(* * Changed in NCBROWSERCARD)
(FNS NC.BrowserRemoveNode NC.DelBrowserContentsLink)))
(DECLARE: FIRST
(NC.LoadFileFromDirectories (QUOTE NCBROWSERCARD))
)
(* * pmi 8/7/87: Fixes bug reported by Cathy where deleting a card from a browser caused it to
go first to Orphans before being deleted for good.)
(* * Changed in NCBROWSERCARD)
(DEFINEQ
(NC.BrowserRemoveNode
(LAMBDA (Graph Window DeleteCardFlg NodeToRemove QuietFlg)
(* pmi: " 7-Aug-87 18:07")
(* * Called by grapher when user removes a node.)
(* * rht 11/17/85: Updated to handle new card and notefile formats.)
(* * rht 2/7/86: Changed to use NC.SetBrowserRoots instead of NC.PutProp)
(* * rht 4/30/86: Now takes optional NodeToRemove and QuietFlg argument.)
(* * rg 3/16/87 NC.DeleteNoteCards -> NC.DeleteNoteCard)
(* * pmi 8/7/87: Now passes DeleteCardFlg arg to NC.DelBrowserContentsLink. Also turned off confirmation in
NC.DeleteNoteCard.)
(PROG ((GraphCard (NC.CoerceToCard Window))
Card NodeToRemoveID RootCards NodesToRemove NumVirtuals)
(OR NodeToRemove (SETQ NodeToRemove (NC.SelectGraphNode Window Graph
(if DeleteCardFlg
then
"Choose node of card to delete."
else
"Choose node to remove."))))
(SETQ NodeToRemoveID (NC.CoerceToGraphNodeIDOrLabel NodeToRemove))
(SETQ Card (NC.CardFromBrowserNodeID NodeToRemoveID))
(* If we're supposed to be deleting a card, then check
that node represents a card and that user confirms.)
(if DeleteCardFlg
then (if (NC.ValidCardP Card)
then (if (NOT (NC.AskYesOrNo (CONCAT
"Are you sure you want to delete the "
(NC.RetrieveTitle Card)
" card? ")
"--"
(QUOTE Yes)
T Window NIL NIL))
then (FLIPNODE NodeToRemove Window)
(RETURN (NC.PrintMsg NIL T
"Card & Node delete aborted.")))
else (NC.PrintMsg NIL T "No card for that node.")
(FLASHW PROMPTWINDOW)
(FLIPNODE NodeToRemove Window)
(RETURN NIL)))
(AND (NC.ValidCardP GraphCard)
(NC.MarkCardDirty GraphCard))
(* We require that all virtual nodes for this node must be removed at once if this one has any link edges to or
from it.)
(SETQ NodesToRemove (for Node in (fetch (GRAPH GRAPHNODES) of Graph)
when (EQ NodeToRemoveID (NC.CoerceToGraphNodeIDOrLabel
Node))
collect Node)) (* If there are no edges into or out of this node,
then just delete from graph.)
(if (AND (NOT DeleteCardFlg)
(NULL (fetch (GRAPHNODE FROMNODES) of NodeToRemove))
(NULL (fetch (GRAPHNODE TONODES) of NodeToRemove)))
then (FLIPNODE NodeToRemove Window) (* Delete the browsercontents link from the browser.)
(if (AND (NC.ValidCardP Card)
(NC.ValidCardP GraphCard))
then (NC.DelBrowserContentsLink GraphCard Card)
(* Remove entry for this node from browser hash
array.)
(NC.RemoveBrowserNodeHashArrayEntry GraphCard Card))
(RETURN (NC.GraphRemoveNode NodeToRemove Graph Window)))
(* If there are companion virtual nodes, ask for user
confirmation.)
(if (AND (NOT DeleteCardFlg)
(GREATERP (SETQ NumVirtuals (LENGTH NodesToRemove))
1)
(NOT (PROGN (NC.PrintMsg Window T NumVirtuals
" virtual companion nodes will be removed."
(CHARACTER 13))
(NC.YesP (NC.AskUser "Still want to remove? " "--"
(QUOTE Yes)
NIL Window NIL NIL T)))))
then (FLIPNODE NodeToRemove Window)
(RETURN NIL)) (* Delete the browsercontents link from the browser.)
(AND (NC.ValidCardP Card)
(NC.ValidCardP GraphCard)
(NC.DelBrowserContentsLink GraphCard Card DeleteCardFlg))
(* Delete all record of links to and from this node on
prop lists.)
(NC.SmashGraphNodeIDProps NodeToRemoveID)
(for Node in (fetch (GRAPH GRAPHNODES) of Graph) eachtime (BLOCK)
bind UID when (type? UID (SETQ UID (NC.CoerceToGraphNodeID Node)))
do (NC.GraphNodeIDRemProp UID NodeToRemoveID))
(if (AND (NC.ValidCardP Card)
(NC.ValidCardP GraphCard))
then (* Remove from the root ids list.)
(SETQ RootCards (NC.FetchBrowserRoots GraphCard))
(if (for RootCard in RootCards eachtime (BLOCK)
thereis (NC.SameCardP Card RootCard))
then (NC.SetBrowserRoots GraphCard (for RootCard in RootCards
eachtime (BLOCK)
unless (NC.SameCardP Card
RootCard)
collect RootCard)))
(* Remove entry for this node from browser hash
array.)
(NC.RemoveBrowserNodeHashArrayEntry GraphCard Card))
(* Get rid of node and its virtual buddies from
graph.)
(AND Window (FLIPNODE NodeToRemove Window))
(for Node in NodesToRemove do (NC.GraphRemoveNode Node Graph Window))
(* Delete card if we're supposed to.)
(if DeleteCardFlg
then (NC.PrintMsg NIL T "Deleting " Card " ... ")
(NC.DeleteNoteCard Card NIL T)
(NC.PrintMsg NIL T "Done." (CHARACTER 13)))
(AND Window (REDISPLAYW Window))
(OR QuietFlg (NC.PrintMsg NIL T "Nodes: " (CONCATLIST
(for Node in NodesToRemove
collect (PACK* (fetch (GRAPHNODE NODEID)
of Node)
(QUOTE % ))))
"removed.")))))
(NC.DelBrowserContentsLink
(LAMBDA (GraphCard DestCard DeleteCardFlg) (* pmi: " 7-Aug-87 18:09")
(* * Delete the browsercontents link connecting GraphCard and DestID.)
(* * rht 11/17/85: updated to handle new card and notefile formats.)
(* * rht 4/30/86: Now checks to make sure there's a link to delete.)
(* * rht 5/26/87: Now handles cross-file browsercontents links.)
(* * pmi 8/7/87: Added DeleteCardFlg arg so we won't create orphans if DestCard is about to be deleted.)
(DECLARE (GLOBALVARS NC.BrowserContentsLinkLabel))
(LET ((Links (NCP.GetLinks GraphCard DestCard NC.BrowserContentsLinkLabel)))
(if (CDR Links)
then (NC.ReportError "NC.DelBrowserContentsLink" (CONCAT
"Multiple browser contents links between "
(NC.FetchTitle
GraphCard)
" and "
(NC.FetchTitle DestCard)
))
NIL)
(if Links
then (* Don't create an orphan if this card is about to be
deleted.)
(NC.DeleteLink (CAR Links)
DeleteCardFlg T)
else (* Could be that it's a cross file browsercontents
link.)
(for Link in (NCP.GetLinks GraphCard NIL NC.BrowserContentsLinkLabel)
bind CrossFileLinkCard (DestCardUID ←(fetch (Card UID) of DestCard))
when (AND (NC.CrossFileLinkCardP (SETQ CrossFileLinkCard
(fetch (Link DestinationCard)
of Link)))
(NC.SameUIDP DestCardUID (fetch (CrossFileLinkSubstance
CrossFileLinkDestCardUID)
of (NCP.CardSubstance
CrossFileLinkCard))))
do (RETURN (NC.DeleteLink Link T T)))))))
)
(PUTPROPS PMIPATCH057 COPYRIGHT ("Xerox Corporation" 1987))
(DECLARE: DONTCOPY
(FILEMAP (NIL (934 9227 (NC.BrowserRemoveNode 944 . 7247) (NC.DelBrowserContentsLink 7249 . 9225)))))
STOP