(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP")
(FILECREATED " 7-Oct-88 00:45:43" {QV}<NOTECARDS>1.3LNEXT>RHTPATCH336.;1 11079  

      changes to%:  (VARS RHTPATCH336COMS))


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

(PRETTYCOMPRINT RHTPATCH336COMS)

(RPAQQ RHTPATCH336COMS ((DECLARE%: DONTCOPY (PROPS (RHTPATCH336 MAKEFILE-ENVIRONMENT)
                                                   (RHTPATCH336 FILETYPE)))
                        
                        (* ;; "Fixes bug reported by John Tang whereby links moved within a text card don't order themselves properly in ShowLinks list.")

                        
                        (* ;; "Change to NCLINKS")

                        (FNS NC.LinkIconWhenMovedFn)))
(DECLARE%: DONTCOPY 

(PUTPROPS RHTPATCH336 MAKEFILE-ENVIRONMENT (:PACKAGE "INTERLISP" :READTABLE "INTERLISP"))

(PUTPROPS RHTPATCH336 FILETYPE :TCOMPL)
)



(* ;; 
"Fixes bug reported by John Tang whereby links moved within a text card don't order themselves properly in ShowLinks list."
)




(* ;; "Change to NCLINKS")

(DEFINEQ

(NC.LinkIconWhenMovedFn
  [LAMBDA (ImageObject ToWindowStream FromTextStream ToTextStream)
                                                             (* ; "Edited  7-Oct-88 00:43 by Trigg")

    (* ;; "Called when moving 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 move, converts link type to 'Unspecified' (\, or) deletes the new 'invisible' link.  The code is very similar to NC.LinkIconWhenCopiedFn except that within-filebox moves are allowed.  Also when aborting a move, we must insert a copy of the link back to take the place of the deleted original.  This will all change when imageobj fns can return DON'T.")

    (* ;; "rht 12/12/84: Now just RETFROM's rather than doing the addprocess stuff.  Should be cleaner, but still ugly.")

    (* ;; "kirk 15Nov85: deleted use of PSA.Database")

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

    (* ;; "kirk 24Mar86: added Dave Newman patch to avoid duplicate links in sketch cards")

    (* ;; 
  "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 moves to a sketch will work.  Now checks if SourceCard = NewSourceCard in which case we're moving within a card.  Don't make a new link in that case.")

    (* ;; "rht 10/5/86: Undid change fgh 6/30/86: now allows copies of links across notefiles.")

    (* ;; "rht 11/13/86: Removed 'tsk, tsk' messages.")

    (* ;; "rht 12/16/86: Fixed calls to NC.PrintMsg to use Window arg.")

    (* ;; "rht 1/25/87: Now stashes new link created on source card's user data props for use by NC.LinkAtCharPos in case this is a copy of multiple links.")

    (* ;; "rht 7/1/87: Removed action of changing linkdisplaymode when copying system links.")

    (* ;; "rht 1/8/88: Added new condition to disallow links from cards to themselves.")

    (* ;; "rht 3/30/88: Added new condition to check that cross-file links can be followed before trying to move them.")

    (* ;; "rht 10/7/88: Made sure that LastLinkCopiedOrMoved userdataprop is set if moving links within a card.")

    (DECLARE (GLOBALVARS NC.SystemLinkLabels NC.UnspecifiedLinkLabel))
    (LET (Label (Link (NC.FetchLinkFromLinkIcon ImageObject))
                SourceCard DestinationCard NewSourceCard NewLabel OldDisplayMode
                (Window (AND ToWindowStream (WFROMDS ToWindowStream T)))
                InsertPos)
         (SETQ Label (fetch (Link Label) of Link))
         [SETQ NewSourceCard (COND
                                ((TEXTSTREAMP ToTextStream)
                                 (NC.CoerceToCard ToTextStream))
                                ((WINDOWP Window)
                                 (NC.CoerceToCard Window]
         (SETQ SourceCard (fetch (Link SourceCard) of Link))
         (SETQ DestinationCard (fetch (Link DestinationCard) of Link))
         (SETQ OldDisplayMode (fetch (Link DisplayMode) of Link))
         [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 move a NoteCards link icon" 
                                            " to a non-NoteCards stream!!." (CHARACTER 13)))
             (RETFROM 'TEDIT.MOVE NIL T))
            ([NULL (NC.LinksSupportedP NewSourceCard '(Local]
             (NC.PrintMsg Window NIL (CONCAT "Tried to move a NoteCards link icon" 
                                            " to a NoteCard that" " does not support links!!."
                                            (CHARACTER 13)))
             (RETFROM 'TEDIT.MOVE NIL T))
            ((NC.SameCardP NewSourceCard DestinationCard)
             (NC.PrintMsg Window NIL (CONCAT 
                                     "Sorry, links aren't allowed to point from cards to themselves."
                                            (CHARACTER 13)))
             (RETFROM 'TEDIT.MOVE NIL T))
            ((AND (FMEMB Label '(FiledCard SubBox))
                  (NEQ (NC.RetrieveType NewSourceCard)
                       'FileBox))                            (* ; "Move from filebox to non-filebox.")
             (NC.PrintMsg Window NIL (CONCAT 
                                           "Tried to move filedcard or subbox link to a non-filebox."
                                            (CHARACTER 13)
                                            "Link type of copy set to 'Unspecified'."
                                            (CHARACTER 13)))
             (SETQ NewLabel NC.UnspecifiedLinkLabel))
            ((AND (NEQ (NC.RetrieveType SourceCard)
                       'FileBox)
                  (EQ (NC.RetrieveType NewSourceCard)
                      'FileBox))                             (* ; "Move from non-filebox to filebox.")
             (NC.PrintMsg Window NIL (CONCAT "Can't move links from non-filebox to filebox."
                                            (CHARACTER 13)
                                            "Try using PutCardsHere."
                                            (CHARACTER 13)))
             (RETFROM 'TEDIT.MOVE NIL T))
            ([AND (EQ (NC.RetrieveType NewSourceCard)
                      'FileBox)
                  (NEQ NewSourceCard SourceCard)
                  (for Link1 in (NC.FetchToLinks NewSourceCard)
                     thereis (AND (NC.ChildLinkP Link1)
                                  (EQ DestinationCard (fetch (Link DestinationCard) of Link1]
                                                             (* ; 
                                                   "Move to a filebox already containing this child.")
             (NC.PrintMsg Window NIL (CONCAT (NC.RetrieveTitle DestinationCard)
                                            " not moved: already appears as a child of "
                                            (NC.RetrieveTitle NewSourceCard)
                                            (CHARACTER 13)))
             (RETFROM 'TEDIT.MOVE NIL T))
            ([AND (EQ Label 'SubBox)
                  (NEQ NewSourceCard SourceCard)
                  (OR (EQ NewSourceCard DestinationCard)
                      (NOT (NC.NotDaughterP DestinationCard NewSourceCard (FUNCTION NC.ChildLinkP]
                                                             (* ; "Move to a filebox causes a cycle.")
             (NC.PrintMsg Window NIL (CONCAT "Couldn't move " Link " because of subbox cycle."
                                            (CHARACTER 13)))
             (RETFROM 'TEDIT.MOVE NIL T))
            ((AND (FMEMB Label NC.SystemLinkLabels)
                  [NOT (FMEMB Label '(FiledCard SubBox]
                  (NEQ NewSourceCard SourceCard))            (* ; 
                                                           "Move 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))
            ((AND (NC.CrossFileLinkCardP DestinationCard)
                  (NOT (NC.GetCrossFileLinkDestCard DestinationCard Window)))
                                                             (* ; 
                                 "Trying to move a cross-file link, but can't get to it so bail out.")
             (RETFROM 'TEDIT.MOVE NIL T)))
         (if (EQ SourceCard NewSourceCard)
             then                                            (* ; 
                                     "Moving within a card, so just reposition Link in ToLinks list.")
                  (AND (NC.TEditBasedP SourceCard)
                       (IMAGEOBJPROP ImageObject 'LinkBeingMovedWithinCard Link))
                  (PROG1 (NC.AddToLink Link (NC.LinkAtCharPos InsertPos ToTextStream)
                                T)
                      (NC.SetUserDataProp SourceCard 'LastLinkCopiedOrMoved Link))
           else (IMAGEOBJPROP ImageObject 'LinkBeingMoved Link)
                (NC.SetUserDataProp NewSourceCard 'LastLinkCopiedOrMoved (NC.FillInLinkIcon
                                                                          ImageObject
                                                                          (OR NewLabel Label)
                                                                          DestinationCard 
                                                                          NewSourceCard 
                                                                          OldDisplayMode
                                                                          (NC.LinkAtCharPos InsertPos
                                                                                 ToTextStream])
)
(PUTPROPS RHTPATCH336 COPYRIGHT ("Xerox Corporation" 1988))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (1137 10996 (NC.LinkIconWhenMovedFn 1147 . 10994)))))
STOP