(FILECREATED "21-Jan-87 18:13:39" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH183.;3 9055   

      changes to:  (FNS NC.LinkIconWhenCopiedFn)
		   (VARS RHTPATCH183COMS)

      previous date: "21-Jan-87 17:50:56" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH183.;1)


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

(PRETTYCOMPRINT RHTPATCH183COMS)

(RPAQQ RHTPATCH183COMS ((* * Fix to bug #394: I&R no longer making DELETE ME link substitutes.)
			  (* * Change to NCLINKS)
			  (FNS NC.LinkIconWhenCopiedFn)))
(* * Fix to bug #394: I&R no longer making DELETE ME link substitutes.)

(* * Change to NCLINKS)

(DEFINEQ

(NC.LinkIconWhenCopiedFn
  (LAMBDA (ImageObject ToWindowStream FromTextStream ToTextStream)
                                                             (* rht: "21-Jan-87 18:13")

          (* * Called when copying a link icon from FromTextStream to ToWindowStream. Sets the necessary link information up 
	  for card corresponding to ToWindowStream.)



          (* * rht 11/18/84: Major hacking. Now checks for all sorts of illegal cases. Either goes ahead with copy, converts 
	  link type to "Unspecified", or deletes the new "invisible" link. The latter will change when imageobj fns can 
	  return DON'T.)



          (* * rht 12/12/84: now does RETFROM instead of adding processes to delete imageobj's. This is cleaner, but still 
	  ugly.)



          (* * rht 3/25/85: Fixed to handle copies within a sketch card. That is indicated by nullity of the two textstream 
	  args.)



          (* * rht 3/24/86: Changed call to NC.CoerceToID to NC.CoerceToCard)



          (* * fgh 6/30/86 Now ERROR! out of attempt to copy between NoteFiles)



          (* * rht 7/14/86: Reversed order of tests for WINDOWP and TEXTSTREAMP in computation of NewSourceCard.)



          (* * rht 8/11/86: Now only resets NewSourceCard if it was NIL so that copies to a sketch will work.)



          (* * rht 10/5/86: Undid change fgh 6/30/86: now allows copies of links across notefiles. Also handles illegal 
	  copies differently. Rather than RETFROM'ing or ERROR!'ing, it puts in a DELETE ME imageobj.)



          (* * rht 12/16/86: Now passes Window to NC.GetCrossFileLinkDestCard.)



          (* * rht 1/21/87: Now handles attempt to copy to non-NoteCards stream differently than other illegalities.)


    (DECLARE (GLOBALVARS NC.CopyCrossFileLinksMode NC.DELETEMEImageObjDatum NC.SystemLinkLabels 
			     NC.UnspecifiedLinkLabel NC.NewCrossFileLinksTwoWayFlg))
    (LET ((Link (NC.FetchLinkFromLinkIcon ImageObject))
	  (ImageObjectCopy (IMAGEOBJPROP ImageObject (QUOTE ImageObjectCopy)))
	  (InTEditCopyFlg (COND
			    ((STKPOS (QUOTE TEDIT.COPY))
			      T)))
	  (Window (AND ToWindowStream (WFROMDS ToWindowStream T)))
	  SourceCard DestinationCard NewSourceCard NewLabel NewDisplayMode OldDisplayMode Label 
	  InsertPos IllegalCopyFlg ExternalCopyFlg)
         (SETQ Label (fetch (Link Label) of Link))
         (SETQ SourceCard (fetch (Link SourceCard) of Link))
         (SETQ DestinationCard (fetch (Link DestinationCard) of Link))
         (SETQ OldDisplayMode (fetch (Link DisplayMode) of Link))
         (SETQ NewSourceCard (COND
	     ((TEXTSTREAMP ToTextStream)
	       (NC.CoerceToCard ToTextStream))
	     ((WINDOWP Window)
	       (NC.CoerceToCard Window))))
         (COND
	   ((AND (NULL NewSourceCard)
		   (NULL FromTextStream)
		   (NULL ToTextStream))                    (* We must be moving within a sketch.)
	     (SETQ NewSourceCard SourceCard))
	   ((TEXTSTREAMP ToTextStream)                     (* If it's a text copy, then compute position to 
							     insert link at.)
	     (SETQ InsertPos (NC.CharPosFromTextObject (TEXTOBJ ToTextStream)))))
         (COND
	   ((NULL NewSourceCard)                           (* Trying to copy to a non NoteCard stream)
	     (NC.PrintMsg Window NIL (CONCAT "Tried to copy a NoteCards link icon" 
						 " to a non-NoteCards stream."
						 (CHARACTER 13)))
	     (SETQ ExternalCopyFlg T))
	   ((NULL (NC.LinksSupportedP NewSourceCard (QUOTE (Local))))
	     (NC.PrintMsg Window NIL (CONCAT "Tried to copy a NoteCards link icon" 
						 " to a NoteCard that"
						 " does not support links!!."
						 (CHARACTER 13)))
	     (SETQ IllegalCopyFlg T))
	   ((AND (FMEMB Label (QUOTE (FiledCard SubBox)))
		   (NEQ (NC.RetrieveType NewSourceCard)
			  (QUOTE FileBox)))                (* Copy from filebox to non-filebox.)
	     (NC.PrintMsg Window NIL (CONCAT 
				       "Tried to copy filedcard or subbox link to a non-filebox."
						 (CHARACTER 13)
						 "Link type of copy set to 'Unspecified'."
						 (CHARACTER 13)))
	     (SETQ NewLabel NC.UnspecifiedLinkLabel)
	     (SETQ NewDisplayMode (create LINKDISPLAYMODE
				       copying OldDisplayMode SHOWTITLEFLG ← T SHOWLINKTYPEFLG ← T))
	     )
	   ((AND (NEQ (NC.RetrieveType SourceCard)
			  (QUOTE FileBox))
		   (EQ (NC.RetrieveType NewSourceCard)
			 (QUOTE FileBox)))                 (* Copy from non-filebox to filebox.)
	     (NC.PrintMsg Window NIL (CONCAT "Can't copy links from non-filebox to filebox."
						 (CHARACTER 13)
						 "Try using 'PutCardsHere'."
						 (CHARACTER 13)))
	     (SETQ IllegalCopyFlg T))
	   ((AND (FMEMB Label (QUOTE (FiledCard SubBox)))
		   (EQ NewSourceCard SourceCard))          (* Copy within same filebox.)
	     (NC.PrintMsg Window NIL (CONCAT 
					  "Can't copy links within a FileBox.  Try move instead."
						 (CHARACTER 13)))
	     (SETQ IllegalCopyFlg T))
	   ((AND (EQ (NC.RetrieveType NewSourceCard)
			 (QUOTE FileBox))
		   (for Link1 in (NC.FetchToLinks NewSourceCard)
		      thereis (AND (NC.ChildLinkP Link1)
				       (EQ DestinationCard (fetch (Link DestinationCard)
								of Link1)))))
                                                             (* Copy to a filebox already containing this child.)
	     (NC.PrintMsg Window NIL (CONCAT (NC.RetrieveTitle DestinationCard)
						 " not copied: already appears as a child of "
						 (NC.RetrieveTitle NewSourceCard)
						 (CHARACTER 13)))
	     (SETQ IllegalCopyFlg T))
	   ((AND (EQ Label (QUOTE SubBox))
		   (OR (EQ NewSourceCard DestinationCard)
			 (NOT (NC.NotDaughterP DestinationCard NewSourceCard
						   (FUNCTION NC.ChildLinkP)))))
                                                             (* Copy to a filebox causes a cycle.)
	     (NC.PrintMsg Window NIL (CONCAT "Couldn't copy " Link " because of subbox cycle."
						 (CHARACTER 13)))
	     (SETQ IllegalCopyFlg T))
	   ((AND (FMEMB Label NC.SystemLinkLabels)
		   (NOT (FMEMB Label (QUOTE (FiledCard SubBox))))
		   (NEQ NewSourceCard SourceCard))         (* Copy of system link outside of own card.)
	     (NC.PrintMsg Window NIL (CONCAT "Tried to copy system link." (CHARACTER 13)
						 "Link type of copy set to 'Unspecified'."
						 (CHARACTER 13)))
	     (SETQ NewLabel NC.UnspecifiedLinkLabel)
	     (SETQ NewDisplayMode (create LINKDISPLAYMODE
				       copying OldDisplayMode SHOWTITLEFLG ← T SHOWLINKTYPEFLG ← T))
	     )
	   ((NC.CrossFileLinkCardP DestinationCard)        (* Copy of a cross-file link.)
	     (if (NOT (NC.ActiveCardP DestinationCard))
		 then (NC.GetNoteCard DestinationCard))
                                                             (* If it's to be two-way, then make a fresh 
							     CrossFileLinkCard.)
	     (if (OR (EQ NC.CopyCrossFileLinksMode (QUOTE TWOWAY))
			 (AND (NULL NC.CopyCrossFileLinksMode)
				NC.NewCrossFileLinksTwoWayFlg))
		 then (SETQ DestinationCard (NC.GetCrossFileLinkDestCard DestinationCard Window)
			  ))
	     (OR DestinationCard (SETQ IllegalCopyFlg T))))
         (COND
	   (IllegalCopyFlg (IMAGEOBJPROP ImageObjectCopy (QUOTE OBJECTDATUM)
					   NC.DELETEMEImageObjDatum)
			   (NC.SetUserDataProp SourceCard (QUOTE NeedsCleaningFlg)
						 T))
	   (ExternalCopyFlg (NC.CoerceToExternalPutLinkIcon ImageObjectCopy SourceCard 
							      DestinationCard (OR NewLabel Label)))
	   (T (NC.FillInLinkIcon ImageObjectCopy (OR NewLabel Label)
				   DestinationCard NewSourceCard (OR NewDisplayMode OldDisplayMode)
				   (NC.LinkAtCharPos InsertPos ToTextStream)
				   NC.CopyCrossFileLinksMode)))
         (IMAGEOBJPROP ImageObject (QUOTE ImageObjectCopy)
			 NIL))))
)
(PUTPROPS RHTPATCH183 COPYRIGHT ("Xerox Corporation" 1987))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (627 8973 (NC.LinkIconWhenCopiedFn 637 . 8971)))))
STOP