(FILECREATED "21-May-86 10:28:45" {QV}<NOTECARDS>1.3K>FGHPATCH042.;1 9789   

      changes to:  (VARS FGHPATCH042COMS))


(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT FGHPATCH042COMS)

(RPAQQ FGHPATCH042COMS ((* * Fix to unreported bugs whereby which Unconnect and reconnect nodes in 
			     browsers would destroy the title bar menus. From NCBROWSERCARD)
			  (FNS NC.UnconnectNodesInBrowser NC.ConnectNodesInBrowser)))
(* * Fix to unreported bugs whereby which Unconnect and reconnect nodes in browsers would 
destroy the title bar menus. From NCBROWSERCARD)

(DEFINEQ

(NC.UnconnectNodesInBrowser
  (LAMBDA (Window)                                           (* fgh: "21-May-86 10:02")

          (* * Remove all the links in the browser.)



          (* * rht 11/17/85: Now handles new card and notefile objects.)



          (* * rht 2/7/86: Now gets and sets browser format, etc. via fetch/set fns.)



          (* * fgh 5/21/86 Updated reinstallation of title bar menus after SHOWGRAPH to use new title bar menu mechanism.)


    (PROG (Card Graph GraphNodes BrowserFormat DropVirtualNodesFlg)
	    (SETQ Card (NC.CoerceToCard Window))
	    (SETQ BrowserFormat (NC.FetchBrowserFormat Card))
                                                             (* If user wants *GRAPH* format, i.e. virtual nodes 
							     eliminated, then set the flag)
	    (if (FMEMB NC.*Graph*BrowserFormat BrowserFormat)
		then (SETQ DropVirtualNodesFlg T))
	    (SETQ GraphNodes (fetch (GRAPH GRAPHNODES) of (SETQ Graph (WINDOWPROP
								    Window
								    (QUOTE GRAPH)))))
                                                             (* smash all the nodeID's proplists and TONODES 
							     fields.)
	    (for Node in GraphNodes bind NodeID unless (PROGN (BLOCK)
									(LISTP
									  (SETQ NodeID
									    (fetch (GRAPHNODE
										       NODEID)
									       of Node))))
	       do (NC.SmashGraphNodeIDProps NodeID)
		    (replace (GRAPHNODE TONODES) of Node with NIL)
		    (replace (GRAPHNODE FROMNODES) of Node with NIL))
	    (NC.MakeLinksLegend Graph Window DropVirtualNodesFlg)
	    (SHOWGRAPH Graph Window (FUNCTION NC.GraphCardLeftButtonFn)
			 (FUNCTION NC.GraphCardMiddleButtonFn)
			 NIL T)

          (* * Have to reset windowprops since SHOWGRAPH messes with them.)

                                                             (* Disable the old-style right button grapher editor 
							     menu.)
	    (WINDOWPROP Window (QUOTE RIGHTBUTTONFN)
			  (FUNCTION NC.BrowserRightButtonFn))
	    (WINDOWADDPROP Window (QUOTE REPAINTFN)
			     (FUNCTION NC.BrowserRepaintFn)
			     T)
	    (NC.InstallTitleBarButtonEventFn Window (FUNCTION NC.GraphTitleBarButtonEventFn))
	    (NC.SetSubstance Card (WINDOWPROP Window (QUOTE GRAPH)))
	    (NC.MarkCardDirty Card)
	    (NC.SetBrowserLinksLegend Card NIL)
	    (NC.ClearMsg Window T))))

(NC.ConnectNodesInBrowser
  (LAMBDA (Window)                                           (* fgh: "21-May-86 10:02")

          (* * Draw any links, from the current link set, between any pairs of nodes currently being shown in the browser.)



          (* * rht 2/7/86: Now gets and sets browser format, etc. via fetch/set fns. Also fixed one last old call to 
	  GETPROPLIST on a NodeID.)



          (* * rht 3/2/86: Added WINDOWPROP for SCROLLFN and RESHAPEFN.)



          (* * fgh 5/21/86 Updated reinstallation of title bar menus after SHOWGRAPH to use new title bar menu mechanism.)


    (PROG (Card LinkLabels Graph GraphNodes BrowserFormat DropVirtualNodesFlg NodeIDs)
	    (SETQ Card (NC.CoerceToCard Window))
	    (SETQ LinkLabels (NC.FetchBrowserLinkLabels Card))
	    (SETQ BrowserFormat (NC.FetchBrowserFormat Card))
                                                             (* If user wants *GRAPH* format, i.e. virtual nodes 
							     eliminated, then set the flag)
	    (if (FMEMB NC.*Graph*BrowserFormat BrowserFormat)
		then (SETQ DropVirtualNodesFlg T))
	    (SETQ GraphNodes (fetch (GRAPH GRAPHNODES) of (SETQ Graph (WINDOWPROP
								    Window
								    (QUOTE GRAPH)))))
                                                             (* Create hash array if haven't already.)
	    (NC.GetBrowserHashArray Card Graph)            (* check graph node size against image box size.)
	    (NC.GraphLinkIconUpdateCheck Card Window Graph NIL)
                                                             (* These are the workhorse loops that rebuild the 
							     TONODES of each nonvirtual node.)
                                                             (* First smash all the nodeID's proplists and 
							     accumulate nodeIDs.)
	    (SETQ NodeIDs (for Node in GraphNodes bind NodeID eachtime (BLOCK)
			       when (NC.LinkIconImageObjP (fetch (GRAPHNODE NODELABEL)
								 of Node))
			       collect (NC.SmashGraphNodeIDProps (SETQ NodeID (
									 NC.CoerceToGraphNodeID
									 Node)))
					 NodeID))            (* Throw away duplicates obtained from virtual nodes.)
	    (SETQ NodeIDs (INTERSECTION NodeIDs NodeIDs))

          (* Next accumulate all linktypes on the from node's proplist using the To node's graphnodeID as prop name.
	  We do the analogous thing for backward links, but notice that we ignore backward linktypes that also appear in the 
	  list in their forward version.)


	    (for NodeID in NodeIDs bind RealCard
	       do (for Link in (NC.RetrieveToLinks (SETQ RealCard (
							       NC.CardFromBrowserNodeID NodeID)))
		       bind DestNodeID eachtime (BLOCK) when (NC.LinkLabelP Link LinkLabels)
		       when (FMEMB (SETQ DestNodeID (NC.GetBrowserNodeID Card
										 (fetch
										   (Link 
										  DestinationCard)
										    of Link)))
				       NodeIDs)
		       do (NC.UIDAddProp NodeID DestNodeID (fetch (Link Label) of Link)
					     T))
		    (for Link in (NC.RetrieveFromLinks RealCard) bind SourceNodeID
		       eachtime (BLOCK) when (AND (NC.ReverseLinkLabelP Link LinkLabels)
							  (NOT (NC.LinkLabelP Link LinkLabels)))
		       when (FMEMB (SETQ SourceNodeID (NC.GetBrowserNodeID
					   Card
					   (fetch (Link SourceCard) of Link)))
				       NodeIDs)
		       do (NC.UIDAddProp SourceNodeID NodeID (fetch (Link Label) of Link)
					     T)))
	    (for Node in GraphNodes bind NodeID OldToNodeIDs eachtime (BLOCK)
	       unless (LISTP (SETQ NodeID (fetch (GRAPHNODE NODEID) of Node)))
	       when (NC.LinkIconImageObjP (fetch (GRAPHNODE NODELABEL) of Node))
	       do                                          (* Accumulate the old NodeIDs, possibly virtual, from 
							     the TONODES list.)
		    (SETQ OldToNodeIDs (for ToNode in (fetch (GRAPHNODE TONODES)
							       of Node)
					    collect (if (EQ (CAR ToNode)
								  LINKPARAMS)
							  then (CADR ToNode)
							else ToNode)))

          (* The trick here is to use a virtual node for this ToNode if one was used before, otherwise just the ToNodeID.
	  Also throw in the label nodes that were in the TONODES list before.)


		    (replace (GRAPHNODE TONODES) of Node
		       with (NCONC (for ToNodeID on (
							 NC.ComputeBrowserSavedLinkingInfoForNode
							      NodeID)
					  by (CDDR ToNodeID) eachtime (BLOCK)
					  collect (OR (for OldToNodeID in OldToNodeIDs
							     thereis (AND (LISTP OldToNodeID)
									      (EQ (CAR ToNodeID)
										    (CAR 
										      OldToNodeID))
									      OldToNodeID))
							  (CAR ToNodeID)))
				       (for ToNodeID in OldToNodeIDs eachtime (BLOCK)
					  unless (NC.SameCardP Card (NC.CardFromBrowserNodeID
								     (NC.CoerceToGraphNodeID 
											 ToNodeID)))
					  collect ToNodeID))))
	    (NC.RebuildFromNodesInGraph GraphNodes)
	    (NC.SetBrowserLinksLegend Card (NC.MakeLinksLegend Graph Window DropVirtualNodesFlg))
	    (SHOWGRAPH Graph Window (FUNCTION NC.GraphCardLeftButtonFn)
			 (FUNCTION NC.GraphCardMiddleButtonFn)
			 NIL T)

          (* * Have to reset windowprops since SHOWGRAPH messes with them.)

                                                             (* Disable the old-style right button grapher editor 
							     menu.)
	    (WINDOWPROP Window (QUOTE RIGHTBUTTONFN)
			  (FUNCTION NC.BrowserRightButtonFn))
	    (WINDOWADDPROP Window (QUOTE REPAINTFN)
			     (FUNCTION NC.BrowserRepaintFn)
			     T)
	    (WINDOWPROP Window (QUOTE SCROLLFN)
			  (FUNCTION NC.BrowserScrollFn))
	    (WINDOWPROP Window (QUOTE RESHAPEFN)
			  (FUNCTION NC.BrowserReshapeFn))
	    (NC.InstallTitleBarButtonEventFn Window (FUNCTION NC.GraphTitleBarButtonEventFn))
	    (NC.SetSubstance Card (WINDOWPROP Window (QUOTE GRAPH)))
	    (NC.MarkCardDirty Card)
	    (NC.ClearMsg Window T))))
)
(PUTPROPS FGHPATCH042 COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (617 9707 (NC.UnconnectNodesInBrowser 627 . 3176) (NC.ConnectNodesInBrowser 3178 . 9705)
))))
STOP