(FILECREATED "12-Aug-86 01:15:24" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH088.;8 71999 changes to: (VARS RHTPATCH088COMS) (FNS NC.ClosePropListEditor NC.OpenPropListEditor NC.EditPropList NC.PropListEditorOpenP NC.ShowLinks NC.FileBoxCollectChildren NC.LinkIconWhenCopiedFn NC.DumpNoteCardToDoc NC.DumpFileBoxToDoc NC.DumpExportableCardToDoc NC.LinkIconWhenDeletedFn NC.DelReferencesToCard NC.CloseAllPropListEditors NC.DeleteNoteCard) previous date: "11-Aug-86 17:09:02" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH088.;1) (* Copyright (c) 1986 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT RHTPATCH088COMS) (RPAQQ RHTPATCH088COMS ((* * Change to NCLINKS) (FNS NC.LinkIconWhenDeletedFn NC.DelReferencesToCard NC.LinkIconWhenCopiedFn NC.LinkIconWhenMovedFn NC.AddToLink NC.CachedAddToLink) (* * Change to NCCARDS) (FNS NC.DeleteNoteCard NC.CloseAllPropListEditors NC.ClosePropListEditor NC.OpenPropListEditor NC.PropListEditorOpenP NC.EditPropList NC.ShowLinks) (* * Change to NCDOCUMENTCARD) (FNS NC.DumpNoteCardToDoc NC.MakeDocument NC.DumpFileBoxToDoc NC.DumpExportableCardToDoc) (* * Change to NCFILEBOXCARD) (FNS NC.FileBoxCollectChildren))) (* * Change to NCLINKS) (DEFINEQ (NC.LinkIconWhenDeletedFn (LAMBDA (ImageObject Stream) (* rht: "11-Aug-86 21:53") (* * When deleting a link icon image object from a card, make sure the link information on the source and destinmation cards get updated. When deleting a link image object from a prop list editor, just inform the user that this is a useless operation.) (* * rht 11/19/84: Now handles the case when a move is in progress. True if the old link is cached on the ImageObj. Also changed so that SourceID is computed from ImageObject rather than from Stream. Similarly for the window.) (* * kirk 14Nov85: deleted use of PSA.Database) (* * fgh 5/2/86 Added code to handle deleting of links from ShowLinks editors.) (* * fgh 6/4/86 Added KLUDGE to take care of case when this is called under TEDIT.UNDO.MOVE) (* * rht 7/4/86: Now checks for readonly cards. Also passes checks for deleting from orphan card when calling NC.DeleteLink.) (* * fgh 7/14/86 Now deletes link icon directly, rather than depending on DeleteLink to do it. Sets the Don'tDeleteLinkIconFlg in the call to DeleteLink to do so.) (* * rht 8/11/86: Now computes InsideShowLinksP and lets that determine value of Don'tDelLinkIcon flg in call to NC.DeleteLink.) (LET ((Link (NC.FetchLinkFromLinkIcon ImageObject)) LinkType OldLink StkPtr SourceCard InsideShowLinksP) (if (NC.CheckForNotReadOnly (fetch (Link SourceCard) of Link) NIL "Can't delete links in ") then (COND ((IMAGEOBJPROP ImageObject (QUOTE LinkBeingMovedWithinCard)) (* TEdit is trying to delete the old link imageobj after moving within a card.) (IMAGEOBJPROP ImageObject (QUOTE LinkBeingMovedWithinCard) NIL)) ((SETQ OldLink (IMAGEOBJPROP ImageObject (QUOTE LinkBeingMoved))) (NC.DelFromLink OldLink) (NC.DelToLink OldLink) (replace (Link UID) of OldLink with -1) (IMAGEOBJPROP ImageObject (QUOTE LinkBeingMoved) NIL)) ((SETQ StkPtr (STKPOS (QUOTE TEDIT.UNDO.MOVE))) (* * Called from TEDIT.UNDO.MOVE, don't relly want to delete the links. KLUDGE because TEDIT will not call the LinkIconInsertFn later on.) (RELSTK StkPtr) NIL) (T (* * if this is reversed source/dest {i.e., a From link} inside the show links editor, then return it to its original direction) (if (AND (SETQ InsideShowLinksP (IMAGEOBJPROP ImageObject (QUOTE InsidePropListEditor))) (LISTGET (fetch (Link UserData) of Link) (QUOTE Reversed))) then (SETQ Link (create Link using Link SourceCard ←(fetch (Link DestinationCard) of Link) DestinationCard ←(fetch (Link SourceCard) of Link)))) (* * Then just delete the link) (NC.CheckForOrphanDelete (SETQ SourceCard (fetch (Link SourceCard) of Link)) (fetch (Link DestinationCard) of Link)) (NC.DeleteLink Link (NC.SameCardP SourceCard (fetch (NoteFile OrphansCard) of (fetch (Card NoteFile) of SourceCard))) (NOT InsideShowLinksP)) (create IMAGEOBJ smashing ImageObject OBJECTDATUM ←(fetch (IMAGEOBJ OBJECTDATUM) of NC.DeletedLinkImageObject) IMAGEOBJPLIST ←(fetch (IMAGEOBJ IMAGEOBJPLIST) of NC.DeletedLinkImageObject) IMAGEOBJFNS ←(fetch (IMAGEOBJ IMAGEOBJFNS) of NC.DeletedLinkImageObject) ) (replace (Link UID) of Link with -1))) else (ERROR!))))) (NC.DelReferencesToCard (LAMBDA (SourceCard LinkOrDestinationCard) (* rht: "11-Aug-86 20:16") (* The card specified by DestinationID is being deleted. Remove all references to it from the card specified by SourceCard) (* * kirk: 13Nov85: deleted use of DatabaseStream) (* * fgh 2/5/86 Added call to NC.ApplyFn) (* * rht 8/11/86: Added ShrunkenFlg so that SourceCard is reshrunk afterwards if necessary.) (LET ((ShrunkenFlg (NC.GetShrunkenWin SourceCard)) NoteCardType Substance) (if (NC.ActiveCardP SourceCard) then (SETQ NoteCardType (NC.RetrieveType SourceCard)) (SETQ Substance (NC.FetchSubstance SourceCard)) (NC.ApplyFn DeleteLinksFn SourceCard LinkOrDestinationCard) else (WITH.MONITOR (NC.FetchMonitor (fetch (Card NoteFile) of SourceCard)) (if (NC.ValidCardP (NC.GetNoteCard SourceCard)) then (SETQ NoteCardType (NC.RetrieveType SourceCard)) (SETQ Substance (NC.FetchSubstance SourceCard)) (NC.ApplyFn DeleteLinksFn SourceCard LinkOrDestinationCard) (NC.PutMainCardData SourceCard) (NC.DeactivateCard SourceCard)))) (NC.DelReferencesToCardFromGlobalList SourceCard LinkOrDestinationCard) (AND ShrunkenFlg (SHRINKW (NC.FetchWindow SourceCard)))))) (NC.LinkIconWhenCopiedFn (LAMBDA (ImageObject ToWindowStream FromTextStream ToTextStream) (* rht: "11-Aug-86 22:04") (* * 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.) (PROG ((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) (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))))) (* * If we are copying across NoteFiles, then its an error) (if (AND NewSourceCard (NOT (NC.SameNoteFileP (fetch (Card NoteFile) of SourceCard) (fetch (Card NoteFile) of NewSourceCard)))) then (NC.PrintMsg Window T "Cannot copy links between cards from different NoteFiles." (CHARACTER 13) "Copy aborted." (CHARACTER 13)) (ERROR!)) (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))) (NC.CoerceToExternalPutLinkIcon ImageObjectCopy SourceCard DestinationCard Label) (RETURN NIL)) ((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) "Tsk. Tsk." (CHARACTER 13))) (COND (InTEditCopyFlg (RETFROM (QUOTE TEDIT.COPY) NIL T)) (T (RETURN (QUOTE DON'T))))) ((AND (FMEMB Label (QUOTE (FiledCard SubBox))) (NEQ (NC.RetrieveType NewSourceCard) (QUOTE FileBox))) (* Copy from filebox to non-filebox.) (NC.PrintMsg NIL 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 NIL NIL (CONCAT "Can't copy links from non-filebox to filebox." (CHARACTER 13) "Try using 'PutCardsHere'." (CHARACTER 13))) (COND (InTEditCopyFlg (RETFROM (QUOTE TEDIT.COPY) NIL T)) (T (RETURN (QUOTE DON'T))))) ((AND (FMEMB Label (QUOTE (FiledCard SubBox))) (EQ NewSourceCard SourceCard)) (* Copy within same filebox.) (NC.PrintMsg NIL NIL (CONCAT "Can't copy links within a FileBox. Try move instead." (CHARACTER 13))) (COND (InTEditCopyFlg (RETFROM (QUOTE TEDIT.COPY) NIL T)) (T (RETURN (QUOTE DON'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 NIL NIL (CONCAT (NC.RetrieveTitle DestinationCard) " not copied: already appears as a child of " (NC.RetrieveTitle NewSourceCard) (CHARACTER 13))) (COND (InTEditCopyFlg (RETFROM (QUOTE TEDIT.COPY) NIL T)) (T (RETURN (QUOTE DON'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 NIL NIL (CONCAT "Couldn't copy " Link " because of subbox cycle." (CHARACTER 13))) (COND (InTEditCopyFlg (RETFROM (QUOTE TEDIT.COPY) NIL T)) (T (RETURN (QUOTE DON'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 NIL 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.FillInLinkIcon ImageObjectCopy (OR NewLabel Label) DestinationCard NewSourceCard (OR NewDisplayMode OldDisplayMode) (NC.LinkAtCharPos InsertPos ToTextStream)) (IMAGEOBJPROP ImageObject (QUOTE ImageObjectCopy) NIL)))) (NC.LinkIconWhenMovedFn (LAMBDA (ImageObject ToWindowStream FromTextStream ToTextStream) (* rht: "11-Aug-86 21:53") (* * 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.) (LET (Label (Link (NC.FetchLinkFromLinkIcon ImageObject)) SourceCard DestinationCard NewSourceCard NewLabel NewDisplayMode 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)) (* * If we are copying across NoteFiles, then it's an error) (if (AND NewSourceCard (NOT (NC.SameNoteFileP (fetch (Card NoteFile) of SourceCard) (fetch (Card NoteFile) of NewSourceCard)))) then (NC.PrintMsg Window T "Cannot move links between cards from different NoteFiles." (CHARACTER 13) "Move aborted." (CHARACTER 13)) (ERROR!)) (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) "Tsk. Tsk." (CHARACTER 13))) (RETFROM (QUOTE TEDIT.MOVE) NIL T)) ((NULL (NC.LinksSupportedP NewSourceCard (QUOTE (Local)))) (NC.PrintMsg Window NIL (CONCAT "Tried to move a NoteCards link icon" " to a NoteCard that" " does not support links!!." (CHARACTER 13) "Tsk. Tsk." (CHARACTER 13))) (RETFROM (QUOTE TEDIT.MOVE) NIL T)) ((AND (FMEMB Label (QUOTE (FiledCard SubBox))) (NEQ (NC.RetrieveType NewSourceCard) (QUOTE FileBox))) (* Move from filebox to non-filebox.) (NC.PrintMsg NIL 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) (SETQ NewDisplayMode (create LINKDISPLAYMODE copying OldDisplayMode SHOWTITLEFLG ← T SHOWLINKTYPEFLG ← T)) ) ((AND (NEQ (NC.RetrieveType SourceCard) (QUOTE FileBox)) (EQ (NC.RetrieveType NewSourceCard) (QUOTE FileBox))) (* Move from non-filebox to filebox.) (NC.PrintMsg NIL NIL (CONCAT "Can't move links from non-filebox to filebox." (CHARACTER 13) "Try using PutCardsHere." (CHARACTER 13))) (RETFROM (QUOTE TEDIT.MOVE) NIL T)) ((AND (EQ (NC.RetrieveType NewSourceCard) (QUOTE 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 NIL NIL (CONCAT (NC.RetrieveTitle DestinationCard) " not moved: already appears as a child of " (NC.RetrieveTitle NewSourceCard) (CHARACTER 13))) (RETFROM (QUOTE TEDIT.MOVE) NIL T)) ((AND (EQ Label (QUOTE 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 NIL NIL (CONCAT "Couldn't move " Link " because of subbox cycle." (CHARACTER 13))) (RETFROM (QUOTE TEDIT.MOVE) NIL T)) ((AND (FMEMB Label NC.SystemLinkLabels) (NOT (FMEMB Label (QUOTE (FiledCard SubBox)))) (NEQ NewSourceCard SourceCard)) (* Move of system link outside of own card.) (NC.PrintMsg NIL 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)) )) (if (EQ SourceCard NewSourceCard) then (* Moving within a card, so just reposition Link in ToLinks list.) (AND (NC.TEditBasedP SourceCard) (IMAGEOBJPROP ImageObject (QUOTE LinkBeingMovedWithinCard) Link)) (NC.AddToLink Link (NC.LinkAtCharPos InsertPos ToTextStream) T) else (IMAGEOBJPROP ImageObject (QUOTE LinkBeingMoved) Link) (NC.FillInLinkIcon ImageObject (OR NewLabel Label) DestinationCard NewSourceCard (OR NewDisplayMode OldDisplayMode) (NC.LinkAtCharPos InsertPos ToTextStream)))))) (NC.AddToLink (LAMBDA (Link LinkToInsertAfter BeingMovedFlg) (* rht: "11-Aug-86 21:39") (* * Add Link to the ToLinks of the source card) (* * rht 3/26/85: Added LinkToInsertAfter arg which is either NIL, ATEND, or a link after which to insert new link. If NIL, then insert at front of list. If ATEND then insert at end.) (* * kirk: 13Nov85: deleted second parameter (DatabaseSTream) and changed to call NC.CachedAddToLink.) (* * rht 2/14/86: Now calls NC.UncacheLinks instead of two calls to NC.SetToLinks and NC.SetFromLinks.) (* * rht 8/11/86: Added BeingMovedFlg. If non-nil, then delete instance of Link from ToLinks before inserting it in new spot.) (LET ((SourceCard (fetch (Link SourceCard) of Link))) (COND ((NC.ActiveCardP SourceCard) (NC.CachedAddToLink Link SourceCard LinkToInsertAfter BeingMovedFlg)) (T (WITH.MONITOR (NC.FetchMonitor (fetch (Card NoteFile) of SourceCard)) (NC.GetLinks SourceCard) (NC.CachedAddToLink Link SourceCard LinkToInsertAfter BeingMovedFlg) (NC.PutLinks SourceCard) (NC.UncacheLinks SourceCard))))) Link)) (NC.CachedAddToLink (LAMBDA (Link SourceCard LinkToInsertAfter BeingMovedFlg) (* rht: "11-Aug-86 21:39") (* * Add Link to the cached ToLinks of the source card) (* * rht 3/26/85: Added LinkToInsertAfter arg which is either NIL, ATEND, or a link after which to insert new link. If NIL, then insert at front of list. If ATEND then insert at end.) (* * kirk: 13Nov85: changed to use NoteFile instead of DatabaseStream) (* * kirk 15Nov85: deleted use of LinkID) (* * rht 8/11/86: Added BeingMovedFlg. If non-nil, then delete instance of Link from ToLinks before inserting it in new spot.) (LET ((ToLinks (NC.FetchToLinks SourceCard))) (if BeingMovedFlg then (* Look for and delete old instance of the link.) (if (NC.SameLinkP Link (CAR ToLinks)) then (NC.SetToLinks SourceCard (SETQ ToLinks (CDR ToLinks))) else (for RestOfToLinks on ToLinks thereis (NC.SameLinkP Link (CADR RestOfToLinks)) finally (RPLACD RestOfToLinks (CDDR RestOfToLinks))))) (COND ((AND ToLinks (type? Link LinkToInsertAfter)) (* Destructively insert after a given link.) (for RestOfToLinks on ToLinks thereis (NC.SameLinkP LinkToInsertAfter (CAR RestOfToLinks)) finally (COND (RestOfToLinks (RPLACD RestOfToLinks (CONS Link (CDR RestOfToLinks)) )) (T (NC.SetToLinks SourceCard (NCONC1 ToLinks Link)))))) ((EQ LinkToInsertAfter (QUOTE ATEND)) (* Destructively insert at the end.) (NC.SetToLinks SourceCard (NCONC1 ToLinks Link))) (T (* Stick it at the front.) (NC.SetToLinks SourceCard (CONS Link ToLinks)))) (NC.SetLinksDirtyFlg SourceCard T) Link))) ) (* * Change to NCCARDS) (DEFINEQ (NC.DeleteNoteCard (LAMBDA (Card) (* rht: "11-Aug-86 17:47") (* * Delete a single note card from a NoteFile) (* * rht 8/11/86: Now calls NC.DelReferencesToCardFromShowLinks to smash any link icons in show links menus pointing to this card.) (RESETLST (RESETSAVE (CURSOR WAITINGCURSOR)) (RESETSAVE NIL (BQUOTE (NC.SetBeingDeletedFlg , Card NIL))) (WITH.MONITOR (NC.FetchMonitor (fetch (Card NoteFile) of Card)) (LET (ToLinks FromLinks Window) (NC.SetBeingDeletedFlg Card T) (SETQ ToLinks (NC.RetrieveToLinks Card)) (SETQ FromLinks (NC.RetrieveFromLinks Card)) (NC.SetToLinks Card NIL) (NC.SetFromLinks Card NIL) (for ToLink in ToLinks eachtime (BLOCK) do (NC.DelFromLink ToLink) (NC.DelReferencesToCardFromShowLinks (fetch (Link DestinationCard) of ToLink) ToLink)) (for FromLink in FromLinks eachtime (BLOCK) do (LET ((SourceCard (fetch (Link SourceCard) of FromLink) )) (NC.DelToLink FromLink) (NC.DelReferencesToCard SourceCard Card) (NC.DelReferencesToCardFromShowLinks SourceCard FromLink))) (NC.SetStatus Card (QUOTE DELETED)) (COND ((NC.ActiveCardP Card) (NC.TurnOffDirtyFlgs Card) (SETQ Window (NC.FetchWindow Card)) (AND Window (NC.GreyCard Card)) (NC.CloseAllPropListEditors Card) (NC.QuitCard Card T T NIL T))) (NC.SetNewCardFlg Card NIL) (NC.DeactivateCard Card T)))))) (NC.CloseAllPropListEditors (LAMBDA (Card) (* rht: "11-Aug-86 19:11") (* Force all prop list editors open on card ID to close without saving changes.) (* * fgh 11/11/85: Updated to handle new Card object.) (* * rht 8/11/86: Now makes sure that proplist window gets closed.) (for AttachedWindow in (ALLATTACHEDWINDOWS (NC.FetchWindow Card)) when (WINDOWPROP AttachedWindow (QUOTE PropListEditor)) eachtime (BLOCK) do (NC.ClosePropListEditor AttachedWindow (QUOTE NoSave)) (AND (OPENWP AttachedWindow) (CLOSEW AttachedWindow))))) (NC.ClosePropListEditor (LAMBDA (Window SaveFlg) (* rht: "12-Aug-86 01:04") (* Close the prop list editor, saving or not saving the edited prop list as specified by the SaveFlg or by the user if SaveFlg is NIL) (* * fgh 11/13/85 Updated to handle Card object.) (* * fgh 6/8/86 Added call to RAPOSITIONATTACHEDWINDOWS) (* * rht 8/12/86: Now calls TEXTOBJ to get TextObj from Window.) (PROG (TextObj Answered OldPropList NewPropList MainWindow) (SETQ MainWindow (WINDOWPROP Window (QUOTE MAINWINDOW))) (DETACHWINDOW Window) (SETQ TextObj (CAR (NLSETQ (TEXTOBJ Window)))) (SETQ OldPropList (WINDOWPROP Window (QUOTE PROPERTYLIST.BEING.EDITED))) (AND TextObj (COND ((EQ SaveFlg (QUOTE Save)) (SETQ NewPropList (NC.ExtractPropList Window)) (NC.ProcessEditedPropList NewPropList OldPropList (NC.CoerceToCard MainWindow))) ((EQ SaveFlg (QUOTE NoSave))) ((EQ (WINDOWPROP Window (QUOTE PropListEditor)) (QUOTE ShowOnly))) (T (until Answered do (SELECTQ (MENU (OR (AND (BOUNDP (QUOTE NC.SavePropEditMenu)) (type? MENU NC.SavePropEditMenu) NC.SavePropEditMenu) (SETQ NC.SavePropEditMenu (create MENU ITEMS ←(QUOTE (Save% Changes Cancel% Changes)) TITLE ← "Property Edits?" CENTERFLG ← T)))) (Save% Changes (SETQ NewPropList (NC.ExtractPropList Window)) (NC.ProcessEditedPropList NewPropList OldPropList (NC.CoerceToCard MainWindow)) (SETQ Answered T)) (Cancel% Changes (SETQ Answered T)) NIL))))) (WINDOWPROP Window (QUOTE TEDIT.MENU) NIL) (WINDOWPROP Window (QUOTE TEDIT.PROPS) NIL) (WINDOWPROP Window (QUOTE PropListEditor) NIL) (WINDOWDELPROP Window (QUOTE CLOSEFN) (FUNCTION NC.ClosePropListEditor)) (COND (TextObj (replace (TEXTOBJ \DIRTY) of TextObj with NIL) (\TEDIT.QUIT (CAR (MKLIST (fetch (TEXTOBJ \WINDOW) of TextObj)))) (until (fetch (TEXTOBJ EDITFINISHEDFLG) of TextObj) do (BLOCK)))) (ADD.PROCESS (BQUOTE (PROGN (until (NULL (OPENWP , Window)) do (BLOCK)) (REPOSITIONATTACHEDWINDOWS , MainWindow))))))) (NC.OpenPropListEditor (LAMBDA (WindowOrTextStream PropList Title ShowOnlyFlg MakeImageObjFlg ShowLinksFlg) (* rht: "12-Aug-86 01:13") (* Open a property list editor above the card specified by TextStream , which is either a TextStream or a Window) (* * rht 8/11/86: Now takes ShowLinksFlg arg and passes to NC.PropListEditorOpenP so that we don't bail out if there's an open proplist not of our type.) (PROG ((Window (WINDOW.FROM.TEDIT.THING WindowOrTextStream)) (SystemProperties (QUOTE (ID Updates ItemDate LinksDate PropsDate TitleDate))) EditWindow CardUID) (* Make sure there is no prop list editor already there) (AND (NC.PropListEditorOpenP Window ShowLinksFlg) (RETURN)) (SETQ CardUID (fetch (Card UID) of (NC.CoerceToCard Window))) (* FOR each prop/value pair with LISTP value. Make a series of individual prop/value pairs corresponding to the elements of the LISTP) (SETQ PropList (for Item on PropList by (CDDR Item) join (COND ((NLISTP (CADR Item)) (LIST (create PropListItem PropertyName ←(CAR Item) Value ←(CADR Item) OriginalListFlg ← NIL AllowEditFlg ← NIL AllowSelectFlg ← NIL ButtonFn ← NIL))) (T (for Element in (CADR Item) collect (create PropListItem PropertyName ←(CAR Item) Value ← Element OriginalListFlg ← T AllowEditFlg ← NIL AllowSelectFlg ← NIL ButtonFn ← NIL)))))) (* If specified, translate all NOTECARDLINK values into Image Objects for display.) (AND MakeImageObjFlg (for Item in PropList bind LinkIcon when (type? Link (fetch (PropListItem Value) of Item)) do (replace (PropListItem Value) of Item with (SETQ LinkIcon (NC.MakeLinkIcon (fetch (PropListItem Value) of Item))) (IMAGEOBJPROP LinkIcon (QUOTE InsidePropListEditor) T)))) (* Indicate which properties can be edited by user.) (for Item in PropList do (COND ((FMEMB (fetch (PropListItem PropertyName) of Item) SystemProperties) (replace (PropListItem AllowEditFlg) of Item with T) (replace (PropListItem AllowSelectFlg) of Item with T)) (ShowOnlyFlg (replace (PropListItem AllowEditFlg) of Item with NIL) (replace (PropListItem AllowSelectFlg) of Item with T)) (T (replace (PropListItem AllowEditFlg) of Item with NIL) (replace (PropListItem AllowSelectFlg) of Item with NIL)))) (* Call the prop list editor) (ATTACHWINDOW (SETQ EditWindow (CREATEW (CREATEREGION 1000 2000 100 100) (OR Title "Edit Property List") NIL T)) Window (QUOTE TOP) (QUOTE JUSTIFY) (QUOTE LOCALCLOSE)) (WINDOWADDPROP EditWindow (QUOTE CLOSEFN) (FUNCTION FREEATTACHEDWINDOW) T) (WINDOWPROP EditWindow (QUOTE PropListEditor) (COND (ShowOnlyFlg (QUOTE ShowOnly)) (T T))) (NC.EditPropList PropList EditWindow ShowOnlyFlg) (RETURN EditWindow)))) (NC.PropListEditorOpenP (LAMBDA (Window ShowLinksFlg) (* rht: "12-Aug-86 00:08") (* Is there a prop list editor opened on this window?) (* * rht 8/11/86: Now doesn't return NIL unless there's an open proplist editor of our type.) (for AttachedWindow in (ALLATTACHEDWINDOWS Window) thereis (AND (WINDOWPROP AttachedWindow (QUOTE PropListEditor)) (LET ((ShowLinks (WINDOWPROP AttachedWindow (QUOTE ShowLinks)))) (* Check that ShowLinksFlg iff ShowLinks.) (OR (AND ShowLinksFlg ShowLinks) (AND (NULL ShowLinksFlg) (NULL ShowLinks)))))))) (NC.EditPropList (LAMBDA (propList window showOnlyFlg) (* rht: "12-Aug-86 01:12") (* * propList is a list of RECORDS of type PropListItem) (* * Edit a property list using the TEDIT menu-based editor. The var window is the window to use. If none supplied, get one from user.) (* * rht 4/11/86: Now stashes length of propList on WINDOWPROP.) (* * rht 8/12/86: Moved code to add NC.ClosePropListEditor on CLOSEFN from NC.OpenPropListEditor to here so that it can before TEDIT.DEACTIVATE.WINDOW on the CLOSEFN list.) (PROG (menuStream textObj editW button (font (FONTCREATE (QUOTE HELVETICA) 8)) (CH# 1) (ENDCH# 1)) (* Init the editList and the propFnsList) (* Create a TEDITMenu that reflects the structure of the proplist) (SETQ menuStream (\TEXTMENU.DOC.CREATE (for X in propList join (NCONC (LIST (LIST (QUOTE MB.BUTTON) (MKSTRING (fetch (PropListItem PropertyName) of X)) (OR (fetch (PropListItem ButtonFn) of X) (FUNCTION NC.EditPropButtonFN)))) (COND ((NOT (IMAGEOBJP (fetch (PropListItem Value) of X))) (COND ((fetch (PropListItem AllowEditFlg) of X) (LIST (LIST (QUOTE MB.TEXT) (CONCAT (CHARACTER 9) " [" (MKSTRING (fetch (PropListItem Value) of X)) "]" (CHARACTER 13)) font))) (T (LIST (LIST (QUOTE MB.TEXT) (CHARACTER 9) font) (LIST (QUOTE MB.INSERT) (MKSTRING (fetch (PropListItem Value) of X))) (LIST (QUOTE MB.TEXT) (CHARACTER 13) font))))) (T (LIST (LIST (QUOTE MB.TEXT) (CHARACTER 9) font) (LIST (QUOTE MB.INSERT)) (LIST (QUOTE MB.TEXT) (CHARACTER 13) font)))))))) (SETQ textObj (TEXTOBJ menuStream)) (* Go back and insert the ImageObjects into their value fields.) (SETQ CH# 0) (for prop in propList when (OR (IMAGEOBJP (fetch (PropListItem Value) of prop)) (NULL (fetch (PropListItem AllowEditFlg) of prop))) do (MBUTTON.FIND.NEXT.FIELD textObj (SETQ CH# (ADD1 CH#))) (SETQ CH# (fetch CH# of (fetch SCRATCHSEL of textObj))) (COND ((IMAGEOBJP (CADR prop)) (TEDIT.INSERT.OBJECT (fetch (PropListItem Value) of prop) menuStream CH#)))) (SETQ CH# 0) (for prop in propList do (SETQ button (MBUTTON.FIND.NEXT.BUTTON textObj (ADD1 CH#))) (SETQ CH# (CDR button)) (* If the buttonProtect flag is on, protect the button) (AND (fetch (PropListItem AllowSelectFlg) of prop) (IMAGEOBJPROP (CAR button) (QUOTE EditPropListNoDelete) T))) (* Set up window and window title) (SETQ editW (COND (window window) (T (CREATEW (GETREGION) "Edit Property List")))) (* Point to the proplist being edited so we can update it when this menu is closed. (See NC.CloseEditPropListWindow)) (WINDOWPROP editW (QUOTE PROPERTYLIST.BEING.EDITED) propList) (WINDOWPROP editW (QUOTE PROPERTYLIST.LENGTH) (LENGTH propList)) (* Set the right margin to very-far-away. Prevents stuff from wrapping around) (TEDIT.PARALOOKS textObj (QUOTE (RIGHTMARGIN 1000 TABS (50 (80 . LEFT)))) 1 (GETFILEINFO menuStream (QUOTE LENGTH))) (* Set the first tab so the fields will line up correctly) (* Set selection to the top -- make it look pretty) (replace (SELECTION SET) of (fetch (TEXTOBJ SEL) of textObj) with NIL) (TEDIT menuStream editW NIL (LIST (QUOTE MENU) (create MENU ITEMS ←(COND (showOnlyFlg (QUOTE (("Quit" (NC.ClosePropListEditor W (QUOTE NoSave)) "Quit from pointer list display."))) ) (T (QUOTE (("Add New Property" (NC.AddPropToPropList W) "Add a new property to this card's property list.") ("Delete Selected Property" (NC.DelPropFromList W) "Delete selected property from this card's property list.") ("Quit w/o Saving Changes" (NC.ClosePropListEditor W (QUOTE NoSave)) "Quit from property list edit. Changes are not saved.") ("Quit - Saving Changes" (NC.ClosePropListEditor W (QUOTE Save)) "Quit from property list editor. Save changes."))))) ))) (WINDOWADDPROP editW (QUOTE CLOSEFN) (FUNCTION NC.ClosePropListEditor) T)))) (NC.ShowLinks (LAMBDA (TextStream) (* rht: "12-Aug-86 00:00") (* Open an inspector for the links for note card specified by TextStream above the window for the note card.) (* * fgh 11/13/85 Updated to handle Card object.) (* * fgh 5/2/86 Included calls to NC.InsureLinkDisplayMode to handle litatom link display modes. Added InsdiePropListEditor and Reverse indicators to UserData field of Links in show links editor. Also added ShowLinks property onto the editor window so other functions can detect that a window is a show links window.) (* * rht 8/11/86: Now passes non-nil ShowLinksFlg to NC.OpenPropListEditor.) (LET (Links EditWindow (Card (NC.CoerceToCard (WINDOW.FROM.TEDIT.THING TextStream)))) (SETQ Links (NCONC (for Link in (NC.FetchToLinks Card) join (LIST (COND ((EQ (fetch (Link AnchorMode) of Link) (QUOTE GlobalGlobal)) "Global TO") (T "TO")) (LIST (create Link using Link DisplayMode ←(create LINKDISPLAYMODE copying ( NC.InsureLinkDisplayMode (fetch (Link DisplayMode) of Link)) SHOWTITLEFLG ← T SHOWLINKTYPEFLG ← T) UserData ←(QUOTE (InsidePropListEditor T)))))) (for Link in (NC.FetchFromLinks Card) join (LIST "FROM" (LIST (create Link using Link DisplayMode ←(create LINKDISPLAYMODE copying ( NC.InsureLinkDisplayMode (fetch (Link DisplayMode) of Link)) SHOWTITLEFLG ← T SHOWLINKTYPEFLG ← T) SourceCard ←(fetch (Link DestinationCard) of Link) DestinationCard ←(fetch (Link SourceCard) of Link) UserData ←(QUOTE (InsidePropListEditor T Reversed T))))))) ) (WINDOWPROP (SETQ EditWindow (NC.OpenPropListEditor TextStream Links "List of Links" T T T)) (QUOTE ShowLinks) T) EditWindow))) ) (* * Change to NCDOCUMENTCARD) (DEFINEQ (NC.DumpNoteCardToDoc (LAMBDA (Card DocCard DocStream SectionNum BoxNum HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks) (* rht: "11-Aug-86 20:36") (* * Dump the CardID notecard to the document card DocStream.) (* * rht 8/25/85: Fixed to handle sketch and graph cards.) (* * rht 9/16/85: Now handles cr's around titles using para leading.) (* * fgh 11/178/85 Updated to handle Card and NoteFile objects.) (* * rht 7/31/86: Now checks for card types having ExportSubstanceFn prop.) (* * rht 8/11/86: Added ShrunkenFlg so that Card is reshrunk afterwards if necessary.) (PROG ((CardStream (NC.FetchSubstance Card)) (DocObj (TEXTOBJ DocStream)) ShrunkenFlg CardObj OldLoc) (SETQ CardObj (TEXTOBJ CardStream)) (NC.AddCRIfNeeded DocStream) (SETQ OldLoc (fetch (TEXTOBJ TEXTLEN) of DocObj)) (AND (NEQ TitlesFromNoteCards (QUOTE NONE)) (NC.AppendStringToStream DocStream (CONCAT (NC.RetrieveTitle Card)) (EQ TitlesFromNoteCards (QUOTE Bold)))) (AND (FMEMB BuildBackLinks (QUOTE (ToCards ToCardsBoxes))) (NCP.LocalGlobalLink NC.DocBackPtrLinkLabel DocCard Card (QUOTE END) (QUOTE Icon))) (COND ((GREATERP (fetch (TEXTOBJ TEXTLEN) of DocObj) OldLoc) (NC.AddCRIfNeeded DocStream) (NC.ChangeParaLeading DocStream))) (COND ((NC.FetchUserDataProp Card (QUOTE SeenBefore)) (NC.PrintMsg NIL NIL (NC.RetrieveTitle Card) " only expanded once in this cycle." (CHARACTER 13)) (RETURN))) (SETQ ShrunkenFlg (NC.GetShrunkenWin Card)) (NC.SetUserDataProp DocCard (QUOTE SeenCards) (CONS Card (NC.FetchUserDataProp DocCard (QUOTE SeenCards)))) (NC.SetUserDataProp Card (QUOTE SeenBefore) T) (* * Step through list of notecard imageobjs in the card we're working on and either expand or copy or ignore each according to values of ExpandEmbeddedLinks and CopyEmbeddedLinks.) (for Object in (TEDIT.LIST.OF.OBJECTS CardObj (FUNCTION NC.LinkIconImageObjP)) bind LinkSpec LinkLabel ToCard ToCardType (LastLoc ← 1) (CurLoc ← 0) ActiveP ExpandP CopyP AlreadyExpanded eachtime (BLOCK) do ((SETQ LinkSpec (NC.FetchLinkFromLinkIcon (CAR Object))) (SETQ LinkLabel (fetch (Link Label) of LinkSpec)) (SETQ CurLoc (CADR Object)) (* Copy over any text between this obj and the last.) (COND ((ILESSP LastLoc CurLoc) (TEDIT.COPY (TEDIT.SETSEL CardStream LastLoc (IDIFFERENCE CurLoc LastLoc)) (TEDIT.SETSEL DocStream (fetch TEXTLEN of DocObj) 1 (QUOTE RIGHT))))) (SETQ LastLoc (ADD1 CurLoc)) (SETQ CopyP (OR (EQ CopyEmbeddedLinks (QUOTE ALL)) (AND (LISTP CopyEmbeddedLinks) (FMEMB LinkLabel CopyEmbeddedLinks)))) (SETQ ExpandP (OR (EQ ExpandEmbeddedLinks (QUOTE ALL)) (AND (LISTP ExpandEmbeddedLinks) (FMEMB LinkLabel ExpandEmbeddedLinks)))) (COND ((AND (SETQ AlreadyExpanded (NC.FetchUserDataProp (SETQ ToCard (fetch (Link DestinationCard) of LinkSpec)) (QUOTE SeenBefore))) ExpandP) (NC.PrintMsg NIL NIL (NC.RetrieveTitle ToCard) " only expanded once in this cycle." (CHARACTER 13)))) (COND ((OR CopyP (AND ExpandP AlreadyExpanded)) (* Copy this link.) (TEDIT.COPY (TEDIT.SETSEL CardStream CurLoc 1) (TEDIT.SETSEL DocStream (ADD1 (fetch TEXTLEN of DocObj)) 0 (QUOTE RIGHT))))) (COND ((AND ExpandP (NOT AlreadyExpanded)) (* Expand this link. Check type and make recursive call.) (SETQ ActiveP (NC.ActiveCardP ToCard)) (SETQ ToCardType (NC.RetrieveType ToCard)) (COND ((EQ ToCardType (QUOTE FileBox)) (OR ActiveP (NC.GetNoteCard ToCard)) (NC.DumpFileBoxToDoc ToCard DocCard DocStream (COND ((EQUAL SectionNum "") (CONCAT BoxNum)) (T (CONCAT SectionNum "." BoxNum))) HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks) (SETQ BoxNum (ADD1 BoxNum)) (OR ActiveP (NC.DeactivateCard ToCard))) (T (COND ((NC.TEditBasedP ToCardType) (OR ActiveP (NC.GetNoteCard ToCard)) (SETQ BoxNum (NC.DumpNoteCardToDoc ToCard DocCard DocStream SectionNum BoxNum HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks)) (OR ActiveP (NC.DeactivateCard ToCard))) ((OR (NCP.SketchBasedP ToCardType) (NCP.GraphBasedP ToCardType) (GETPROP ToCardType (QUOTE ExportSubstanceFn))) (OR ActiveP (NC.GetNoteCard ToCard)) (SETQ BoxNum (NC.DumpExportableCardToDoc ToCard DocCard DocStream SectionNum BoxNum HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks ToCardType)) (OR ActiveP (NC.DeactivateCard ToCard))) (T (NC.PrintMsg NIL NIL "Ignoring non-exportable card " (NC.RetrieveTitle ToCard) (CHARACTER 13))))))))) finally (COND ((ILESSP CurLoc (fetch TEXTLEN of CardObj)) (TEDIT.COPY (TEDIT.SETSEL CardStream LastLoc (IDIFFERENCE (fetch TEXTLEN of CardObj) CurLoc)) (TEDIT.SETSEL DocStream (ADD1 (fetch TEXTLEN of DocObj)) 0 (QUOTE RIGHT))))) (TEDIT.SETSEL DocStream (ADD1 (fetch TEXTLEN of DocObj)) 0 (QUOTE RIGHT))) (NC.SetUserDataProp Card (QUOTE SeenBefore) NIL) (AND ShrunkenFlg (SHRINKW (NC.FetchWindow Card))) (RETURN BoxNum)))) (NC.MakeDocument (LAMBDA (Card Title NoDisplayFlg CardIdentifier) (* rht: "11-Aug-86 20:32") (* * Called from a filebox's title bar. Makes a document by smashing all the descendant cards's text together. Ask user if wants numbered section headings and titles. The former are made from FileBox titles, the latter from notecard titles. Delete embedded links at the end if the user desires.) (* * rht 10/22/84: Hacked to be callable from Programmer's interface.) (* * rht 11/17/84: Checks for cancel when choosing rootID and also when setting parameters.) (* * rht 8/25/85: Now dumps sketch and graph cards as well as text cards.) (* * rht 9/16/85: Now handles cr's around titles using para leading.) (* * fgh 11/178/85 Updated to handle Card and NoteFile objects.) (* * kirk 27Jun86 Moved NC.RetrieveTitle call so does not break when user Cancels) (* * rht 7/31/86: Now checks for card types having ExportSubstanceFn prop.) (PROG (RootCard RootTitle DocWindow DocCard DocWindowOrCard DocStream HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks InspectWin WasActive RootType RootSubstanceType) (OR NoDisplayFlg (SPAWN.MOUSE)) (SETQ DocWindowOrCard (NC.MakeNoteCard (QUOTE Text) NoteFile "Document" NoDisplayFlg NIL Card)) (if NoDisplayFlg then (SETQ DocWindow NIL) (SETQ DocCard DocWindowOrCard) else (SETQ DocWindow DocWindowOrCard) (SETQ DocCard (NC.CoerceToCard DocWindow))) (* NC.MakeNoteCard either returned an Card or a window depending on NoDisplayFlg.) (SETQ RootCard (OR (NC.CoerceToCard CardIdentifier) (NC.SelectNoteCards T NIL NC.SelectingCardMenu DocWindow NIL "Please select the Note Card or File Box the document should start from."))) (if (NOT RootCard) then (NC.DeleteNoteCards Card T) (RETURN NIL)) (SETQ RootTitle (NC.RetrieveTitle RootCard)) (NC.SetTitle DocCard (CONCAT "Document from %"" RootTitle "%"")) (AND DocWindow (WINDOWPROP DocWindow (QUOTE TITLE) (NC.RetrieveTitle DocCard))) (SETQ DocStream (NC.FetchSubstance DocCard)) (* * Get MakeDocument parameters from user via inspector window.) (if (NOT NoDisplayFlg) then (SETQ InspectWin (NC.BuildMakeDocInspector DocWindow)) (TOTOPW InspectWin) (for while (OPENWP InspectWin) do (BLOCK))) (if (EQ (GETPROP (QUOTE NC.MakeDocParameters) (QUOTE --DONE--)) (QUOTE QUIT)) then (PUTPROP (QUOTE NC.MakeDocParameters) (QUOTE --DONE--) (QUOTE --CANCEL--)) (NC.DeleteNoteCards Card T) (RETURN NIL)) (SETQ HeadingsFromFileboxes (GETPROP (QUOTE NC.MakeDocParameters) (QUOTE HeadingsFromFileboxes))) (SETQ TitlesFromNoteCards (GETPROP (QUOTE NC.MakeDocParameters) (QUOTE TitlesFromNoteCards))) (SETQ BuildBackLinks (GETPROP (QUOTE NC.MakeDocParameters) (QUOTE BuildBackLinks))) (SETQ CopyEmbeddedLinks (GETPROP (QUOTE NC.MakeDocParameters) (QUOTE CopyEmbeddedLinks))) (SETQ ExpandEmbeddedLinks (GETPROP (QUOTE NC.MakeDocParameters) (QUOTE ExpandEmbeddedLinks))) (* * Call recursive routine to dump filebox.) (RESETLST (RESETSAVE (CURSOR WAITINGCURSOR)) (NC.PrintMsg DocWindow NIL "Collecting text from descendant cards ... ") (* * Clean up the SeenBefore markers placed on the cards and boxes just copied.) (RESETSAVE NIL (QUOTE (PROGN (for Card in (NC.FetchUserDataProp DocCard (QUOTE SeenCards)) do (NC.SetUserDataProp Card (QUOTE SeenBefore) NIL)) (NC.SetUserDataProp DocCard (QUOTE SeenCards) NIL)))) (* * Unbelievably kludgy hack to get around Intermezzo TEdit bug. Just insert and delete a CR.) (TEDIT.INSERT DocStream NC.CRString 1) (TEDIT.DELETE DocStream 1 1) (OR (SETQ WasActive (NC.ActiveCardP RootCard)) (NC.GetNoteCard RootCard)) (SETQ RootType (NC.RetrieveType RootCard)) (if (EQ RootType (QUOTE FileBox)) then (NC.DumpFileBoxToDoc RootCard DocCard DocStream "" HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks) else (COND ((NC.TEditBasedP RootType) (NC.DumpNoteCardToDoc RootCard DocCard DocStream "" 1 HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks)) ((OR (NCP.SketchBasedP RootType) (NCP.GraphBasedP RootType) (GETPROP RootType (QUOTE ExportSubstanceFn))) (NC.DumpExportableCardToDoc RootCard DocCard DocStream "" 1 HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks RootType)) (T (NC.PrintMsg NIL NIL "Can't make document from non-exportable card " (NC.RetrieveTitle RootCard) (CHARACTER 13))))) (OR WasActive (NC.DeactivateCard RootCard)) (NC.PrintMsg DocWindow NIL "Done!")) (COND ((NOT NoDisplayFlg) (BLOCK 250) (NC.ClearMsg DocWindow T))) (RETURN DocWindowOrCard)))) (NC.DumpFileBoxToDoc (LAMBDA (FileBoxCard DocCard DocStream CurSection HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks) (* rht: "11-Aug-86 20:35") (* * Dump the contents of FileboxID to DocStream by recursively dumping all of its children. Keep track of the section numbers in case HeadingsFromFileboxes = Numbered. Insert back pointers to the source cards and/or boxes depending on value of BuildBackpointers. Embedded links (or some subset of them) may be copied or expanded depending on the values of CopyEmbeddedLinks and ExpandEmbeddedLinks.) (* * rht 8/25/85: Fixed to handle sketch and graph cards.) (* * rht 9/16/85: Now handles cr's around titles using para leading.) (* * fgh 11/178/85 Updated to handle Card and NoteFile objects.) (* * rht 7/31/86: Now checks for card types having ExportSubstanceFn prop.) (* * rht 8/11/86: Added ShrunkenFlg so that FileBoxCard is reshrunk afterwards if necessary.) (PROG ((DocObject (TEXTOBJ DocStream)) ShrunkenFlg OldLoc) (NC.AddCRIfNeeded DocStream) (SETQ OldLoc (fetch (TEXTOBJ TEXTLEN) of DocObject)) (COND ((AND (EQ HeadingsFromFileboxes (QUOTE NumberedBold)) (NOT (ZEROP (NCHARS CurSection)))) (NC.AppendStringToStream DocStream (CONCAT CurSection " ") T))) (AND (NEQ HeadingsFromFileboxes (QUOTE NONE)) (NC.AppendStringToStream DocStream (CONCAT (NC.RetrieveTitle FileBoxCard)) T)) (AND (FMEMB BuildBackLinks (QUOTE (ToBoxes ToCardsBoxes))) (NCP.LocalGlobalLink NC.DocBackPtrLinkLabel DocCard FileBoxCard (QUOTE END) (QUOTE Icon))) (COND ((GREATERP (fetch (TEXTOBJ TEXTLEN) of DocObject) OldLoc) (NC.AddCRIfNeeded DocStream) (NC.ChangeParaLeading DocStream))) (COND ((NC.FetchUserDataProp FileBoxCard (QUOTE SeenBefore)) (NC.PrintMsg NIL NIL (NC.RetrieveTitle FileBoxCard) " only expanded once in this cycle.") (RETURN))) (SETQ ShrunkenFlg (NC.GetShrunkenWin FileBoxCard)) (NC.SetUserDataProp DocCard (QUOTE SeenCards) (CONS FileBoxCard (NC.FetchUserDataProp DocCard (QUOTE SeenCards)))) (NC.SetUserDataProp FileBoxCard (QUOTE SeenBefore) T) (for Link in (NC.FetchToLinksInOrder FileBoxCard) bind ChildCard ActiveP Type (SubSectionNum ← 1) eachtime (BLOCK) when (FMEMB (fetch (Link Label) of Link) (BQUOTE (, NC.FiledCardLinkLabel , NC.SubBoxLinkLabel))) do (SETQ ChildCard (fetch (Link DestinationCard) of Link)) (SETQ ActiveP (NC.ActiveCardP ChildCard)) (COND ((EQ (SETQ Type (NC.RetrieveType ChildCard)) (QUOTE FileBox)) (OR ActiveP (NC.GetNoteCard ChildCard)) (NC.DumpFileBoxToDoc ChildCard DocCard DocStream (COND ((EQUAL "" CurSection) (CONCAT SubSectionNum)) (T (CONCAT CurSection "." SubSectionNum))) HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks) (SETQ SubSectionNum (ADD1 SubSectionNum)) (OR ActiveP (NC.DeactivateCard ChildCard))) (T (COND ((NC.TEditBasedP Type) (OR ActiveP (NC.GetNoteCard ChildCard)) (SETQ SubSectionNum (NC.DumpNoteCardToDoc ChildCard DocCard DocStream CurSection SubSectionNum HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks)) (OR ActiveP (NC.DeactivateCard ChildCard))) ((OR (NCP.SketchBasedP Type) (NCP.GraphBasedP Type) (GETPROP Type (QUOTE ExportSubstanceFn))) (OR ActiveP (NC.GetNoteCard ChildCard)) (SETQ SubSectionNum (NC.DumpExportableCardToDoc ChildCard DocCard DocStream CurSection SubSectionNum HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks Type)) (OR ActiveP (NC.DeactivateCard ChildCard))) (T (NC.PrintMsg NIL NIL "Ignoring non-exportable card " ( NC.RetrieveTitle ChildCard) (CHARACTER 13))))))) (NC.SetUserDataProp FileBoxCard (QUOTE SeenBefore) NIL) (AND ShrunkenFlg (SHRINKW (NC.FetchWindow FileBoxCard)))))) (NC.DumpExportableCardToDoc (LAMBDA (Card DocCard DocStream SectionNum BoxNum HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks CardType) (* rht: "11-Aug-86 20:41") (* * Dump the CardID sketch or graph card to the document card DocStream.) (* * rht 9/16/85: Now handles cr's around titles using para leading.) (* * fgh 11/17/85 Updated to handle card objects and removal of SubstanceTypes.) (* * rht 7/31/86: Now can handle other card types than Graph or Sketch based ones, but they must have an appropriate fn on the ExportSubstanceFn property of the atom. That fn should return either an imageobj or a textstream.) (* * rht 8/11/86: Added ShrunkenFlg so that Card is reshrunk afterwards if necessary.) (PROG ((CardStream (NC.FetchSubstance Card)) (DocObj (TEXTOBJ DocStream)) ShrunkenFlg OldLoc ThingToInsert) (NC.AddCRIfNeeded DocStream) (SETQ OldLoc (fetch (TEXTOBJ TEXTLEN) of DocObj)) (AND (NEQ TitlesFromNoteCards (QUOTE NONE)) (NC.AppendStringToStream DocStream (CONCAT (NC.RetrieveTitle Card)) (EQ TitlesFromNoteCards (QUOTE Bold)))) (AND (FMEMB BuildBackLinks (QUOTE (ToCards ToCardsBoxes))) (NCP.LocalGlobalLink NC.DocBackPtrLinkLabel DocCard Card (QUOTE END) (create LINKDISPLAYMODE ATTACHBITMAPFLG ← T))) (COND ((GREATERP (fetch (TEXTOBJ TEXTLEN) of DocObj) OldLoc) (NC.AddCRIfNeeded DocStream) (NC.ChangeParaLeading DocStream))) (COND ((NC.FetchUserDataProp Card (QUOTE SeenBefore)) (NC.PrintMsg NIL NIL (NC.RetrieveTitle Card) " only expanded once in this cycle." (CHARACTER 13)) (RETURN))) (SETQ ShrunkenFlg (NC.GetShrunkenWin Card)) (NC.SetUserDataProp DocCard (QUOTE SeenCards) (CONS Card (NC.FetchUserDataProp DocCard (QUOTE SeenCards)))) (NC.SetUserDataProp Card (QUOTE SeenBefore) T) (* * Stick an imageobj made from the card into the document. Also might be a textstream computed by the card type's ExportSubstanceFn.) (SETQ ThingToInsert (COND ((NCP.GraphBasedP CardType) (GRAPHEROBJ CardStream)) ((NCP.SketchBasedP CardType) (MAKE.IMAGE.OBJECT.OF.SKETCH CardStream (NC.FetchRegionViewed Card) (NC.FetchScale Card))) ((LET ((ExportSubstanceFn (GETPROP CardType (QUOTE ExportSubstanceFn)))) (AND ExportSubstanceFn (APPLY* ExportSubstanceFn CardStream)))))) (AND CardStream (COND ((IMAGEOBJP ThingToInsert) (TEDIT.INSERT.OBJECT ThingToInsert DocStream)) ((TEXTSTREAMP ThingToInsert) (TEDIT.INCLUDE DocStream ThingToInsert)))) (* * Step through list of notecard imageobjs in the card we're working on and either expand or copy or ignore each according to values of ExpandEmbeddedLinks and CopyEmbeddedLinks.) (for Link in (CAR (NC.CollectReferences Card NIL NIL NIL)) bind LinkLabel ToCard ToCardType ActiveFlg ExpandFlg CopyFlg AlreadyExpanded eachtime (BLOCK) do (SETQ LinkLabel (fetch (Link Label) of Link)) (SETQ CopyFlg (OR (EQ CopyEmbeddedLinks (QUOTE ALL)) (AND (LISTP CopyEmbeddedLinks) (FMEMB LinkLabel CopyEmbeddedLinks)))) (SETQ ExpandFlg (OR (EQ ExpandEmbeddedLinks (QUOTE ALL)) (AND (LISTP ExpandEmbeddedLinks) (FMEMB LinkLabel ExpandEmbeddedLinks)))) (COND ((AND (SETQ AlreadyExpanded (NC.FetchUserDataProp (SETQ ToCard (fetch (Link DestinationCard) of Link)) (QUOTE SeenBefore))) ExpandFlg) (NC.PrintMsg NIL NIL (NC.RetrieveTitle ToCard) " only expanded once in this cycle." (CHARACTER 13)))) (COND ((OR CopyFlg (AND ExpandFlg AlreadyExpanded)) (* Copy this link.) (NCP.LocalGlobalLink LinkLabel DocCard ToCard (QUOTE END)))) (COND ((AND ExpandFlg (NOT AlreadyExpanded)) (* Expand this link. Check type and make recursive call.) (SETQ ActiveFlg (NC.ActiveCardP ToCard)) (SETQ ToCardType (NC.RetrieveType ToCard)) (COND ((EQ ToCardType (QUOTE FileBox)) (OR ActiveFlg (NC.GetNoteCard ToCard)) (NC.DumpFileBoxToDoc ToCard DocCard DocStream (COND ((EQUAL SectionNum "") (CONCAT BoxNum)) (T (CONCAT SectionNum "." BoxNum))) HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks) (SETQ BoxNum (ADD1 BoxNum)) (OR ActiveFlg (NC.DeactivateCard ToCard))) (T (COND ((NC.TEditBasedP ToCardType) (OR ActiveFlg (NC.GetNoteCard ToCard)) (SETQ BoxNum (NC.DumpNoteCardToDoc ToCard DocCard DocStream SectionNum BoxNum HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks)) (OR ActiveFlg (NC.DeactivateCard DocCard))) ((OR (NCP.SketchBasedP ToCardType) (NCP.GraphBasedP ToCardType) (GETPROP ToCardType (QUOTE ExportSubstanceFn))) (OR ActiveFlg (NC.GetNoteCard ToCard)) (SETQ BoxNum (NC.DumpExportableCardToDoc ToCard DocCard DocStream SectionNum BoxNum HeadingsFromFileboxes TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks ToCardType)) (OR ActiveFlg (NC.DeactivateCard ToCard))) (T (NC.PrintMsg NIL NIL "Ignoring non-exportable card " (NC.RetrieveTitle ToCard) (CHARACTER 13)))))))) finally (TEDIT.SETSEL DocStream (ADD1 (fetch TEXTLEN of DocObj)) 0 (QUOTE RIGHT))) (NC.SetUserDataProp Card (QUOTE SeenBefore) NIL) (AND ShrunkenFlg (SHRINKW (NC.FetchWindow Card))) (RETURN BoxNum)))) ) (* * Change to NCFILEBOXCARD) (DEFINEQ (NC.FileBoxCollectChildren (LAMBDA (WindowOrTextStream Card NewChildren NoDisplayFlg) (* rht: "12-Aug-86 00:23") (* * Ask user for new children (either cards or fileboxes) for this filebox. Check to make sure that no circularities are introduced. This code is sort of the inverse of the NC.AddParents code and thus looks quite similar.) (* * rht 10/29/84: Added NoDisplayFlg to prevent error message when no appropriate elements exist. Also now returns ID if at least one child was added, NIL otherwise.) (* * fgh 11/13/85 Updated to handle Card object.) (* * rht 7/5/86: Now checks for readonly cards.) (* * rht 8/11/86: Added code to check to make sure that another operation is not in progress on this card when this fn is called.) (LET (Window ReturnVal OperationInProgress) (COND (WindowOrTextStream (SETQ Window (WINDOW.FROM.TEDIT.THING WindowOrTextStream)))) (OR Card (SETQ Card (NC.CoerceToCard Window))) (if (NC.CheckForNotReadOnly Card Window "Can't do filing in ") then (if (SETQ OperationInProgress (NC.OperationInProgress Card)) then (* * Another interaction operation is in progress on this card and we have to interact with the user. Can't do.) (NC.PrintOperationInProgressMsg Window "Put Cards Here" OperationInProgress) else (NC.ProtectedCardOperation Card Put% Cards% Here (OR NewChildren (SETQ NewChildren (NC.SelectNoteCards NIL NIL NC.SelectingFileBoxChildrenMenu Card NIL " Please select new children."))) (COND ((NULL (AND NewChildren Card (for NewChild in NewChildren bind OneHook when ( NC.MakeChildLink NewChild Card Window) do (SETQ OneHook T) finally (RETURN OneHook)))) (OR NoDisplayFlg (NC.PrintMsg Window NIL "No appropriate NoteCards or FileBoxes chosen." (CHARACTER 13) "Hence no children added." (CHARACTER 13))) (SETQ ReturnVal NIL)) (T (SETQ ReturnVal Card))) (AND Window (GETPROMPTWINDOW Window NIL NIL T) (PROG1 (DISMISS 1000) (NC.ClearMsg Window T)))))) ReturnVal))) ) (PUTPROPS RHTPATCH088 COPYRIGHT ("Xerox Corporation" 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (1315 25799 (NC.LinkIconWhenDeletedFn 1325 . 5488) (NC.DelReferencesToCard 5490 . 7024) (NC.LinkIconWhenCopiedFn 7026 . 14695) (NC.LinkIconWhenMovedFn 14697 . 22340) (NC.AddToLink 22342 . 23615) (NC.CachedAddToLink 23617 . 25797)) (25830 44532 (NC.DeleteNoteCard 25840 . 27760) ( NC.CloseAllPropListEditors 27762 . 28547) (NC.ClosePropListEditor 28549 . 31362) ( NC.OpenPropListEditor 31364 . 35446) (NC.PropListEditorOpenP 35448 . 36260) (NC.EditPropList 36262 . 41928) (NC.ShowLinks 41930 . 44530)) (44570 69155 (NC.DumpNoteCardToDoc 44580 . 51454) ( NC.MakeDocument 51456 . 57483) (NC.DumpFileBoxToDoc 57485 . 62405) (NC.DumpExportableCardToDoc 62407 . 69153)) (69192 71917 (NC.FileBoxCollectChildren 69202 . 71915))))) STOP