(FILECREATED "19-Nov-85 14:50:55" {QV}<NOTECARDS>1.3K>RHTPATCH006.;3 13142 changes to: (VARS RHTPATCH006COMS) (FNS NC.MakeLink NC.DeleteLink NC.HookToOrphanCard) previous date: "18-Nov-85 17:01:24" {QV}<NOTECARDS>1.3K>RHTPATCH006.;1) (* Copyright (c) 1985 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT RHTPATCH006COMS) (RPAQQ RHTPATCH006COMS ((FNS NC.DeleteLink NC.HookToOrphanCard NC.MakeLink NC.SelectNoteCards))) (DEFINEQ (NC.DeleteLink (LAMBDA (Link NoOrphanHookFlg Don'tDelLinkIconFlg) (* rht: "18-Nov-85 22:29") (* * Delete a link with the option of not putting an orphan hook in case of last filing link. Also option of not deleting link icon from the source card's substance.) (LET ((SourceCard (fetch (Link SourceCard) of Link))) (WITH.MONITOR (NC.FetchMonitor (fetch (Card NoteFile) of SourceCard)) (OR Don'tDelLinkIconFlg (NC.DelReferencesToCard SourceCard Link)) (NC.DelFromLink Link NoOrphanHookFlg) (NC.DelToLink Link) (* * This UID replacement is worrisome. Does it mean that link deletion can't be undone?) (replace (Link UID) of Link with -1))))) (NC.HookToOrphanCard (LAMBDA (Card OrphansCard) (* rht: "19-Nov-85 00:01") (* The last reference to the card has just been deleted. Hook this card to the orphan card so it doesn't get lost forever) (* * kirk: 14Nov85: deleted use of DatabaseStream and changed EQs to NC.Same*Ps) (LET ((NoteFile (fetch (Card NoteFile) of Card))) (OR OrphansCard (SETQ OrphansCard (fetch (NoteFile OrphansCard) of NoteFile))) (COND ((NC.ActiveCardP OrphansCard) (NC.MakeFilingLink OrphansCard Card (if (NC.FileBoxP Card T) then NC.SubBoxLinkLabel else NC.FiledCardLinkLabel))) (T (WITH.MONITOR (NC.FetchMonitor NoteFile) (NC.GetNoteCard OrphansCard) (NC.MakeFilingLink OrphansCard Card (if (NC.FileBoxP Card T) then NC.SubBoxLinkLabel else NC.FiledCardLinkLabel)) (NC.PutNoteCard OrphansCard) (NC.PutLinks OrphansCard) (NC.DeactivateCard OrphansCard))))))) (NC.MakeLink (LAMBDA (Window LinkLabel DestinationCard SourceCard DisplayMode AnchorMode Message NoDisplayFlg LinkToInsertAfter) (* rht: "19-Nov-85 12:02") (* * Make a link from (OR Window SourceCard) to DestinationCard with linklabel of LinkLabel) (* * rht 1/12/85: If need to create a new card, then now shows card type menu near window of SourceID.) (* * rht 1/13/85: Added extra args Message and NoDisplayFlg.) (* * rht 3/26/85: Added LinkToInsertAfter arg which should be NIL or a link to insert the new To link after. If NIL, then insert at front of ToLinks.) (* * kirk 9/23/85: took out GETPROMPTWINDOW call for asknotecardtype) (* * kirk: 14Nov85: changed NC.CoerceToID to to NC.CoerceToCard) (* * fgh 11/16/85 Changed from PROG to LET and used COND to contyrol returnmed value.) (LET (Link Type) (OR SourceCard (SETQ SourceCard (NC.CoerceToCard Window))) (OR Window (SETQ Window (NC.FetchWindow SourceCard))) (OR Message (SETQ Message "Please select the Card or Box to be linked to.")) (OR DestinationCard (SETQ DestinationCard (NC.SelectNoteCards T (FUNCTION (LAMBDA (CardID) (COND ((NEQ CardID SourceCard) T) (T (NC.PrintMsg Window T "A Card/Box cannot link to itself. " (CHARACTER 13) "Selection ignored." (CHARACTER 13)) NIL)))) NC.SelectingSingleCardMenu SourceCard NIL Message))) (COND ((EQ DestinationCard (QUOTE *New% Card*)) (SETQ DestinationCard (AND (SETQ Type (NC.AskNoteCardType (WINDOWREGION Window) )) (NC.CoerceToCard (NC.MakeNoteCard Type (fetch (Card NoteFile) of SourceCard) NIL NoDisplayFlg)))))) (COND (DestinationCard (SETQ Link (create Link UID ←(NC.MakeUID) SourceCard ← SourceCard DestinationCard ← DestinationCard AnchorMode ← AnchorMode Label ← LinkLabel DisplayMode ←(OR DisplayMode ( NC.DefaultLinkDisplayMode SourceCard)))) (NC.AddToLink Link LinkToInsertAfter) (NC.AddFromLink Link) Link) (T NIL))))) (NC.SelectNoteCards (LAMBDA (SingleCardFlg SelectionPredicate Menu InstigatingCardOrWindow ReturnLinksFlg Msg CheckForCancelFlg) (* rht: "19-Nov-85 11:55") (* Select a set of note cards or a single note card, depending on SingleCardFlg. Works by interpreting all mouse presses until a card has been chosen (if SingleCardFlg is T) or until the Done button has been pressed (if SingleCardFlg is NIL). If the mouse press occus within a Title bar of a notecard, add that note card to the selected list. Otherwise, if you are pointing into a note card, call the BUTTONEVENTFN for that note card. The Selection in Progress flag has been set, so all note card BUTTONEVENTFNs should know to ignore all presses except those that occur on link icons. Link icon presses should simply add the desination of that link to the selected note cards list.) (* * rht 8/1/84: Changed second RESETSAVE call to give NC.ClearMsg a NIL argument.) (* * rht 1/9/85: Fixed so now prints name of selected item even it's a link.) (* * rht 2/15/85: Now can backspace over last selection chosen. Added new arg Msg so that when we reprint the list, we can reprint the message as well.) (* * rht 3/23/85: Added the CheckForCancelFlg arg, which if non-nil causes Cancel to be handled differently then Done after no selections. Namely, Cancel will return the atom CANCELLED whereas Done with no selections returns NIL. If CheckForCancelFlg is NIL then NIL is returned in both cases.) (* * fgh 11/14/85 Updated to handle Card and NoteFile objects.) (* * rht 11/18/85: Fixed so able to select when InstigatingNoteFile is NIL.) (PROG (Window WinRegion Card ButtonEventFn (OldLength 0) InstigatingWindow InstigatingCard InstigatingNoteFile MenuWindow SelectedCard LinkOrID TextObj) (OR SelectionPredicate (SETQ SelectionPredicate (FUNCTION TRUE))) (SETQ NC.SelectedCards) (COND ((NC.CardP InstigatingCardOrWindow) (SETQ InstigatingWindow (NC.FetchWindow InstigatingCardOrWindow))) ((WINDOWP InstigatingCardOrWindow) (SETQ InstigatingWindow InstigatingCardOrWindow)) (T (SETQ InstigatingWindow NIL))) (SETQ InstigatingCard (NC.CoerceToCard InstigatingCardOrWindow)) (SETQ InstigatingNoteFile (AND InstigatingCard (fetch (Card NoteFile) of InstigatingCard))) (SETQ WinRegion (WINDOWREGION (OR InstigatingWindow PROMPTWINDOW))) (NC.PrintMsg InstigatingWindow T (COND (Msg (CONCAT Msg (CHARACTER 13))) (T "")) "Items selected: ") (RESETLST (RESETSAVE NIL (BQUOTE (NC.ClearMsg , InstigatingWindow T))) (RESETSAVE NC.SelectionInProgress (COND (ReturnLinksFlg (QUOTE Links)) (T T))) (RESETSAVE (ADDMENU Menu NIL (create POSITION XCOORD ←(fetch (REGION LEFT) of WinRegion) YCOORD ←(COND (InstigatingWindow (fetch (REGION TOP) of WinRegion)) (T (fetch (REGION BOTTOM) of WinRegion) )))) (LIST (QUOTE PROGN) (LIST (QUOTE DETACHWINDOW) (LIST (QUOTE WFROMMENU) Menu)) (LIST (QUOTE DELETEMENU) Menu T))) (* If there is an instigating window, make sure it and all its attachments are visible on the screen.) (COND (InstigatingWindow (ATTACHWINDOW (WFROMMENU Menu) InstigatingWindow (QUOTE TOP) (QUOTE LEFT)) (NC.MoveWindowOntoScreen InstigatingWindow))) (until (COND (SingleCardFlg (OR NC.SelectedCards (NULL NC.SelectionInProgress))) (T (NULL NC.SelectionInProgress))) do (until (MOUSESTATE LEFT)) (SETQ Window (WHICHW LASTMOUSEX LASTMOUSEY)) (AND Window (SETQ Card (NC.CardFromWindow Window))) (COND (Window (SETQ ButtonEventFn (WINDOWPROP Window (QUOTE BUTTONEVENTFN))) (COND ((AND (NOT (INSIDEP (DSPCLIPPINGREGION NIL (WINDOWPROP Window (QUOTE DSP))) (LASTMOUSEX Window) (LASTMOUSEY Window)))) (AND Card (for SelectedCard in NC.SelectedCards never (NC.SameCardP Card SelectedCard)) (SETQ NC.SelectedCards (CONS Card NC.SelectedCards)))) (T (COND (ButtonEventFn (RESETLST (COND ((AND (EQ InstigatingWindow Window) (SETQ TextObj (WINDOWPROP Window (QUOTE TEXTOBJ)))) (RESETSAVE (replace (TEXTOBJ EDITOPACTIVE) of TextObj with NIL) (LIST (FUNCTION (LAMBDA (TextObj OldValue) (replace (TEXTOBJ EDITOPACTIVE) of TextObj with OldValue))) TextObj (fetch (TEXTOBJ EDITOPACTIVE) of TextObj))))) (APPLY* ButtonEventFn Window)))))))) (COND ((IGREATERP (LENGTH NC.SelectedCards) OldLength) (COND ((EQ (CAR NC.SelectedCards) (QUOTE *Undo% Selection*)) (* Chop off two elements from the list - the indicator and the previous item.) (SETQ NC.SelectedCards (CDDR NC.SelectedCards)) (SETQ OldLength (LENGTH NC.SelectedCards)) (NC.ClearMsg InstigatingWindow NIL) (* Reprint the titles of the selections.) ) ((AND InstigatingNoteFile Card (NOT (NC.SameNoteFileP (fetch (Card NoteFile) of Card) InstigatingNoteFile))) (* Selection was not valid.) (NC.PrintMsg InstigatingWindow T "*** Invalid selection. ***" (CHARACTER 13)) (SETQ NC.SelectedCards (CDR NC.SelectedCards))) ((NULL (APPLY* SelectionPredicate (CAR NC.SelectedCards))) (* Selection was not valid.) (NC.PrintMsg InstigatingWindow T "*** Invalid selection. ***" (CHARACTER 13)) (SETQ NC.SelectedCards (CDR NC.SelectedCards))) (T (* A valid selection.) (SETQ OldLength (LENGTH NC.SelectedCards)) (NC.ClearMsg InstigatingWindow NIL))) (NC.PrintMsg InstigatingWindow NIL (COND (Msg (CONCAT Msg (CHARACTER 13))) (T "")) "Items selected: ") (for LinkOrCard in (REVERSE NC.SelectedCards) do (NC.PrintMsg InstigatingWindow NIL (NC.RetrieveTitle (COND ((type? Link LinkOrCard) (fetch (Link SourceCard) of LinkOrCard)) (T LinkOrCard))) ", ")))) (until (MOUSESTATE UP)) (TOTOPW (WFROMMENU Menu))) (* Allow TEdit to finish any outstanding Selections caused by buttoning off of the Notecard link objects) (BLOCK)) (UNTILMOUSESTATE UP) (RETURN (PROG1 (COND ((EQ NC.SelectedCards (QUOTE CANCELLED)) (COND (CheckForCancelFlg (QUOTE CANCELLED)) (T NIL))) (SingleCardFlg (CAR NC.SelectedCards)) (T (DREVERSE NC.SelectedCards))) (SETQ NC.SelectedCards)))))) ) (PUTPROPS RHTPATCH006 COPYRIGHT ("Xerox Corporation" 1985)) (DECLARE: DONTCOPY (FILEMAP (NIL (466 13060 (NC.DeleteLink 476 . 1270) (NC.HookToOrphanCard 1272 . 2481) (NC.MakeLink 2483 . 4942) (NC.SelectNoteCards 4944 . 13058))))) STOP