(FILECREATED " 7-Aug-86 23:46:40" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH046.;9 15962  

      changes to:  (FNS NC.LinkIconDisplayFn NC.LinkIconImageBoxFn NC.FetchLinkIconAttachedBitMap)
		   (VARS RHTPATCH046COMS)

      previous date: "10-May-86 18:56:46" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH046.;6)


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

(PRETTYCOMPRINT RHTPATCH046COMS)

(RPAQQ RHTPATCH046COMS ((* * New vars for NCLINKS)
			  (GLOBALVARS NC.LinkIconBorderWidth NC.LinkIconSpaceOuterY 
				      NC.LinkIconSpaceInnerY NC.LinkIconSpaceOuterX 
				      NC.LinkIconSpaceInnerX)
			  (INITVARS (NC.LinkIconBorderWidth 1)
				    (NC.LinkIconSpaceOuterY 2)
				    (NC.LinkIconSpaceInnerY 1)
				    (NC.LinkIconSpaceOuterX 2)
				    (NC.LinkIconSpaceInnerX 0))
			  (* * Changes to NCLINKS)
			  (FNS NC.LinkIconDisplayFn NC.LinkIconImageBoxFn)
			  (* * New functions for NCUTILITIES)
			  (FNS NC.DrawInnerBox)
			  (* * New stuff for NCCARDS)
			  (FNS NC.MakeTypeIconBitMapSet)
			  (GLOBALVARS NC.DefaultLinkIconAttachedBitMapHeights)
			  (INITVARS (NC.DefaultLinkIconAttachedBitMapHeights (QUOTE (11 13 15 17 18 
											19 20 21 23 
											25))))
			  (* * Changes to NCCARDS)
			  (FNS NC.FetchLinkIconAttachedBitMap)))
(* * New vars for NCLINKS)

(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS NC.LinkIconBorderWidth NC.LinkIconSpaceOuterY NC.LinkIconSpaceInnerY 
	    NC.LinkIconSpaceOuterX NC.LinkIconSpaceInnerX)
)

(RPAQ? NC.LinkIconBorderWidth 1)

(RPAQ? NC.LinkIconSpaceOuterY 2)

(RPAQ? NC.LinkIconSpaceInnerY 1)

(RPAQ? NC.LinkIconSpaceOuterX 2)

(RPAQ? NC.LinkIconSpaceInnerX 0)
(* * Changes to NCLINKS)

(DEFINEQ

(NC.LinkIconDisplayFn
  (LAMBDA (ImageObj ImageStream STREAMTYPE TEXTSTREAM SCALE)
                                                             (* rht: " 7-Aug-86 23:43")

          (* * Display a link icon)



          (* * rht 11/13/84: Made width of box lines also scale dependent.)



          (* * rht 12/4/84: Hacked so type-dependent icons come out optionally to left of text.)



          (* * rht 2/9/85: Changed to use new display mode format.)



          (* * fgh 2/5/86 Added call to NC.FetchLinkIconAttachedBitMap)



          (* * rht & fgh 5/9/86: Massive hacking to display coords, etc.)



          (* * fgh 5/9/86 Added DSPFONT kludge after TypeIcon BITBLT to get around bug in PRESS BITBLT.
	  Bug reported as AR %#5630.0)



          (* * rht 5/10/86: Rearranged order of expressions a bit and added arg to call to NC.FetchLinkIconAttachedBitMap in 
	  order to get a bitmap with correct height for the box we're drawing.)



          (* * rht 8/7/86: Now passes Scale argument to NC.FetchLinkIconAttachedBitMap. Also uses the Title and Label args if
	  non-nil. If not, then recomputes them more sensibly.)


    (RESETLST (RESETSAVE NIL (BQUOTE (DSPFONT , (DSPFONT NC.LinkIconFont ImageStream)
						      , ImageStream)))
		(PROG ((Scale (DSPSCALE NIL ImageStream))
			 (Link (NC.FetchLinkFromLinkIcon ImageObj))
			 Font Left Bottom ShowTitleFlg LinkDisplayMode AttachBitmapFlg DisplayType 
			 Window Card Title Label BoxWidth BoxHeight ImageBox TypeIcon 
			 ScaledBitmapWidth ScaledBorderWidth ScaledSpaceInnerX ScaledSpaceOuterX 
			 ScaledSpaceOuterY)
		        (SETQ Font (DSPFONT NIL ImageStream))

          (* * Determine what type of Display to do)


		        (SETQ DisplayType (fetch (Link DisplayMode) of Link))
		        (SETQ Card (if (EQ (SETQ ShowTitleFlg (fetch (LINKDISPLAYMODE
										 SHOWTITLEFLG)
									 of DisplayType))
						 (QUOTE SOURCE))
					 then (fetch (Link SourceCard) of Link)
				       else (fetch (Link DestinationCard) of Link)))
		        (SETQ LinkDisplayMode (fetch (LINKDISPLAYMODE SHOWLINKTYPEFLG)
						   of DisplayType))
		        (SETQ AttachBitmapFlg (fetch (LINKDISPLAYMODE ATTACHBITMAPFLG)
						   of DisplayType))
		        (SETQ Title (if (AND ShowTitleFlg (OR (NEQ ShowTitleFlg
									     (QUOTE FLOAT))
								      NC.LinkIconShowTitleFlg))
					  then (NC.RetrieveTitle Card)
					else NIL))
		        (SETQ Label (AND (COND
					       ((EQ LinkDisplayMode (QUOTE FLOAT))
						 NC.LinkIconShowLinkTypeFlg)
					       (T LinkDisplayMode))
					     (fetch (Link Label) of Link)))

          (* * Get the image box info for this icon)


		        (SETQ ImageBox (OR (IMAGEOBJPROP ImageObj (QUOTE BOUNDBOX))
					       (NC.LinkIconImageBoxFn ImageObj ImageStream NIL NIL 
									NIL DisplayType Title Label)))

          (* * Make temporaries of scaled vars.)


		        (SETQ ScaledBorderWidth (TIMES Scale NC.LinkIconBorderWidth))
		        (SETQ ScaledSpaceInnerX (TIMES Scale NC.LinkIconSpaceInnerX))
		        (SETQ ScaledSpaceOuterX (TIMES Scale NC.LinkIconSpaceOuterX))
		        (SETQ ScaledSpaceOuterY (TIMES Scale NC.LinkIconSpaceOuterY))

          (* * Compute all the size values.)


		        (SETQ Bottom (PLUS (DIFFERENCE (DSPYPOSITION NIL ImageStream)
							     (fetch (IMAGEBOX YDESC)
								of ImageBox))
					       ScaledSpaceOuterY))
		        (SETQ BoxHeight (DIFFERENCE (fetch (IMAGEBOX YSIZE) of ImageBox)
							(PLUS ScaledSpaceOuterY ScaledSpaceOuterY)))
		        (SETQ TypeIcon (AND (COND
						  ((EQ AttachBitmapFlg (QUOTE FLOAT))
						    NC.LinkIconAttachBitmapFlg)
						  (T AttachBitmapFlg))
                                                             (* The adding of Scale to BoxHeight is a kludge that 
							     works. Just BoxHeight would make alot more sense.)
						(NC.FetchLinkIconAttachedBitMap Card
										  (PLUS Scale 
											BoxHeight)
										  Scale)))
		        (SETQ ScaledBitmapWidth (if TypeIcon
						      then (TIMES Scale (BITMAPWIDTH TypeIcon))
						    else 0))
		        (SETQ Left (PLUS (DSPXPOSITION NIL ImageStream)
					     ScaledSpaceOuterX))
		        (SETQ BoxWidth (DIFFERENCE (fetch (IMAGEBOX XSIZE) of ImageBox)
						       (PLUS ScaledSpaceOuterX ScaledSpaceOuterX 
							       ScaledBitmapWidth)))

          (* * Put out the icon bitmap for the appropriate type.)


		        (COND
			  (TypeIcon (BITBLT TypeIcon 0 0 ImageStream Left Bottom)

          (* DSPFONT is a kludge to get around bug in PRESS BITBLT which sets the width of a space char to NIL.
	  Bug reported as AR %#5630.0)


				    (DSPFONT Font ImageStream)))
		        (if (AND TypeIcon (NOT (OR Label Title)))
			    then                           (* Quit because just a typeicon)
				   (RETURN))

          (* * Enter the appropriate text.)


		        (DSPXPOSITION (PLUS Left (if TypeIcon
							 then ScaledBitmapWidth
						       else ScaledBorderWidth)
						ScaledSpaceInnerX)
					ImageStream)
		        (DSPYPOSITION (PLUS Bottom ScaledBorderWidth (TIMES Scale 
									   NC.LinkIconSpaceInnerY)
						(FONTDESCENT Font))
					ImageStream)
		        (if (OR Label Title)
			    then (PRIN1 " " ImageStream))
		        (AND Label (PRIN1 (CONCAT "<" Label ">")
					      ImageStream))
		        (AND Label Title (PRIN1 " " ImageStream))
		        (AND Title (PRIN1 Title ImageStream))

          (* * Draw the box.)


		        (NC.DrawInnerBox (PLUS Left ScaledBitmapWidth)
					   Bottom BoxWidth BoxHeight ScaledBorderWidth NIL 
					   ImageStream TypeIcon)))))

(NC.LinkIconImageBoxFn
  (LAMBDA (ImageObj ImageStream CurrentX RightMargin DummyArg DisplayType Title Label)
                                                             (* rht: " 7-Aug-86 23:43")

          (* * rht 9/20/84: Now scales result before returning by proper amount depending on stream type.
	  e.g. for PRESS and INTERPRESS.)



          (* * rht 11/13/84: In computation of XSIZE, extra width is figured using characters in the font, "nn", rather than 
	  absolute pixel count.)



          (* * rht 2/9/85: Now uses new displaymode format.)



          (* * rht 5/9/86: Note that RightMargin non-nil signals a TEdit stream.)



          (* * rht & fgh 5/9/86: Massive hacking to display coords, etc.)



          (* * rht 5/10/86: Rearranged order of expressions a bit and added arg to call to NC.FetchLinkIconAttachedBitMap in 
	  order to get a bitmap with correct height for the box we're drawing.)



          (* * rht 8/7/86: Now passes Scale argument to NC.FetchLinkIconAttachedBitMap. Also uses the Title and Label args if
	  non-nil. If not, then recomputes them more sensibly.)


    (LET ((Link (NC.FetchLinkFromLinkIcon ImageObj))
	  (Scale (DSPSCALE NIL ImageStream))
	  Card FONT TypeIcon Label Title ShowTitleFlg AttachBitmapFlg LinkDisplayMode StringWidth 
	  YSize)
         (RESETLST (RESETSAVE NIL (BQUOTE (DSPFONT , (DSPFONT NC.LinkIconFont ImageStream)
							   , ImageStream)))
		     (SETQ FONT (DSPFONT NIL ImageStream)))
         (OR DisplayType (SETQ DisplayType (fetch (Link DisplayMode) of Link)))
         (SETQ Card (if (EQ (SETQ ShowTitleFlg (fetch (LINKDISPLAYMODE SHOWTITLEFLG)
							  of DisplayType))
				  (QUOTE SOURCE))
			  then (fetch (Link SourceCard) of Link)
			else (fetch (Link DestinationCard) of Link)))
         (SETQ LinkDisplayMode (fetch (LINKDISPLAYMODE SHOWLINKTYPEFLG) of DisplayType))
         (SETQ AttachBitmapFlg (fetch (LINKDISPLAYMODE ATTACHBITMAPFLG) of DisplayType))
         (OR Title (SETQ Title (if (AND ShowTitleFlg (OR (NEQ ShowTitleFlg (QUOTE
									    FLOAT))
								   NC.LinkIconShowTitleFlg))
				       then (NC.RetrieveTitle Card)
				     else NIL)))
         (OR Label (SETQ Label (AND (COND
					    ((EQ LinkDisplayMode (QUOTE FLOAT))
					      NC.LinkIconShowLinkTypeFlg)
					    (T LinkDisplayMode))
					  (fetch (Link Label) of Link))))
         (SETQ TotalEdgeSpaceY (TIMES Scale (PLUS NC.LinkIconBorderWidth NC.LinkIconSpaceOuterY 
							NC.LinkIconSpaceInnerY)))
         (SETQ YSize (PLUS TotalEdgeSpaceY TotalEdgeSpaceY (FONTHEIGHT FONT)))
         (SETQ TypeIcon (AND (COND
				   ((EQ AttachBitmapFlg (QUOTE FLOAT))
				     NC.LinkIconAttachBitmapFlg)
				   (T AttachBitmapFlg))      (* The adding of Scale to result of BoxHeight 
							     calculation is a kludge that works.
							     Just BoxHeight would make alot more sense.)
				 (NC.FetchLinkIconAttachedBitMap Card
								   (PLUS Scale
									   (DIFFERENCE
									     YSize
									     (PLUS 
									   NC.LinkIconSpaceOuterY 
									   NC.LinkIconSpaceOuterY)))
								   Scale)))
         (SETQ StringWidth (COND
	     ((OR Label Title)
	       (STRINGWIDTH (CONCAT "  " (COND
					  (Label (CONCAT "<" Label ">"))
					  (T ""))
					(COND
					  ((AND Label Title)
					    " ")
					  (T ""))
					(OR Title ""))
			      FONT))
	     ((NOT TypeIcon)
	       (STRINGWIDTH "  " FONT))
	     (T 0)))
         (create IMAGEBOX
		   XSIZE ←(PLUS StringWidth (TIMES Scale 2 (PLUS NC.LinkIconSpaceOuterX 
								       NC.LinkIconSpaceInnerX))
				  (TIMES Scale (if TypeIcon
						     then (PLUS NC.LinkIconBorderWidth
								    (BITMAPWIDTH TypeIcon))
						   else (PLUS NC.LinkIconBorderWidth 
								  NC.LinkIconBorderWidth))))
		   YSIZE ← YSize
		   YDESC ←(COND
		     (RightMargin                            (* This is in a TEdittextstream)
				  (PLUS (FONTDESCENT FONT)
					  TotalEdgeSpaceY))
		     (T 0))
		   XKERN ← 0))))
)
(* * New functions for NCUTILITIES)

(DEFINEQ

(NC.DrawInnerBox
  (LAMBDA (Left Bottom Width Height LineWidth Operation ImageStream SkipLeftEdgeFlg)
                                                             (* rht: " 9-May-86 18:36")

          (* * Draw a box that fits exactly inside the region given. Omit the left edge if SkipLeftEdgeFlg non-nil.)


    (LET ((HalfBorderWidth (FIX (TIMES LineWidth .5)))
	  (Top (PLUS Bottom Height))
	  (Right (PLUS Left Width))
	  (Offset (if (EVENP LineWidth)
		      then -1
		    else 0)))
         (LET ((InnerLeft (PLUS Left HalfBorderWidth Offset))
	       (InnerBottom (PLUS Bottom HalfBorderWidth Offset))
	       (InnerRight (DIFFERENCE Right HalfBorderWidth))
	       (InnerTop (DIFFERENCE Top HalfBorderWidth)))
	      (if (EVENP LineWidth)
		  then (SETQ InnerBottom (SUB1 InnerBottom)))
	      (DRAWLINE Left InnerBottom Right InnerBottom LineWidth Operation ImageStream)
	      (DRAWLINE InnerRight Bottom InnerRight Top LineWidth Operation ImageStream)
	      (DRAWLINE Right InnerTop Left InnerTop LineWidth Operation ImageStream)
	      (OR SkipLeftEdgeFlg (DRAWLINE InnerLeft Top InnerLeft Bottom LineWidth Operation 
						ImageStream))))))
)
(* * New stuff for NCCARDS)

(DEFINEQ

(NC.MakeTypeIconBitMapSet
  (LAMBDA (Bitmap Heights)                                   (* rht: "10-May-86 18:44")

          (* * Create a prop list of pairs of Height and scaled copies of Bitmap having that height.)


    (LET ((OriginalHeight (BITMAPHEIGHT Bitmap)))
         (OR (for Height in Heights join (LIST Height (SCALEBITMAP Bitmap
									       (FQUOTIENT Height 
										   OriginalHeight))))
	       Bitmap))))
)
(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS NC.DefaultLinkIconAttachedBitMapHeights)
)

(RPAQ? NC.DefaultLinkIconAttachedBitMapHeights (QUOTE (11 13 15 17 18 19 20 21 23 25)))
(* * Changes to NCCARDS)

(DEFINEQ

(NC.FetchLinkIconAttachedBitMap
  (LAMBDA (Card ScaledHeightToMatch Scale)                   (* rht: " 7-Aug-86 18:00")

          (* * Return the default link icon attached bit map corresponding to Card)



          (* * fgh 2/5/86 First created.)



          (* * rht 5/10/86: Now takes special action if BitMapVal is a list. In that case, it should be an ordered prop list 
	  of heights and bitmaps. We take the one closest in height to HeightToMatch.)



          (* * rht 8/7/86: Now converts single bitmap to list of bitmaps of different heights if necessary.
	  Also now takes Scale argument.)


    (LET ((BitMapVal (fetch (Card LinkIconAttachedBitMap) of Card)))
         (if (BITMAPP BitMapVal)
	     then (replace (NoteCardType LinkIconAttachedBitMap) of (NC.CardTypeRecord
									    (NC.FetchType Card))
		       with (SETQ BitMapVal (NC.MakeTypeIconBitMapSet BitMapVal 
							  NC.DefaultLinkIconAttachedBitMapHeights))))
         (if (LISTP BitMapVal)
	     then (OR ScaledHeightToMatch (SETQ ScaledHeightToMatch 0))
		    (OR Scale (SETQ Scale 1))
		    (LET (BitMap)
		         (for X on BitMapVal by (CDDR X)
			    do (LET ((ScaledHeight (TIMES Scale (CAR X))))
				      (if (OR (NULL BitMap)
						  (LEQ ScaledHeight ScaledHeightToMatch))
					  then (SETQ BitMap (CADR X))
					elseif (GREATERP ScaledHeight ScaledHeightToMatch)
					  then (RETURN))))
		     BitMap)))))
)
(PUTPROPS RHTPATCH046 COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1696 12243 (NC.LinkIconDisplayFn 1706 . 7866) (NC.LinkIconImageBoxFn 7868 . 12241)) (
12286 13553 (NC.DrawInnerBox 12296 . 13551)) (13588 14072 (NC.MakeTypeIconBitMapSet 13598 . 14070)) (
14287 15880 (NC.FetchLinkIconAttachedBitMap 14297 . 15878)))))
STOP