(FILECREATED " 7-Jul-85 23:45:40" {PHYLUM}<NOTECARDS>RELEASE1.2I>STYLESHEETPATCH.;2 6065   

      changes to:  (FNS STYLESHEET.CLEANUP)
		   (VARS STYLESHEETPATCHCOMS)

      previous date: " 7-Jul-85 21:36:08" {PHYLUM}<NOTECARDS>RELEASE1.2I>STYLESHEETPATCH.;1)


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

(PRETTYCOMPRINT STYLESHEETPATCHCOMS)

(RPAQQ STYLESHEETPATCHCOMS ((* * A patch to STYLESHEET to allow any WHENSELECTEDFNs on the menus to 
			       be called. Unless the old WHENSELECTEDFN returns ABORT, the given 
			       selection will be made as usual.)
			    (FNS STYLESHEET STYLESHEET.SETUP STYLESHEET.CLEANUP 
				 STYLESHEET.WHENSELECTEDFN)))
(* * A patch to STYLESHEET to allow any WHENSELECTEDFNs on the menus to be called. Unless the 
old WHENSELECTEDFN returns ABORT, the given selection will be made as usual.)

(DEFINEQ

(STYLESHEET
  (LAMBDA (STYLE)                                            (* rht: " 7-Jul-85 21:20")

          (* * Creates a window, lays out the menus in it, and waits for BACKGROUND to notify it that the the user has made 
	  all his selections and hit the DONE button. Then removes the window and returns the selections the user made.)



          (* * rht 7/7/85: No longer holds old WHENSELECTEDFNs. They're cached on a MENUPROP.)


    (OR (STYLESHEETP STYLE)
	(\ILLEGAL.ARG STYLE))
    (STYLESHEET.SETUP STYLE)
    (LET ((W (STYLESHEET.CREATE.WINDOW STYLE)                (* Lay out stylesheet of appropriate size and fill it 
							     in.)
	     ))

          (* * Wait until the user has filled everything in he needs to, and has hit the DONE button.)


      (STYLESHEET.WAIT.TILL.DONE W STYLE)

          (* * Clean things up and return user's selections.)


      (PROG1 (if (EQ (WINDOWPROP W (QUOTE HOW)
				 NIL)
		     (QUOTE ABORT))
		 then                                        (* user selected ABORT)
		      NIL
	       else (STYLESHEET.GET.SELECTIONS STYLE))
	     (STYLESHEET.CLEANUP W STYLE)))))

(STYLESHEET.SETUP
  (LAMBDA (STYLESHEET)                                       (* rht: " 7-Jul-85 21:17")

          (* * Changes the WHENSELECTEDFNs of all the menus to be the appropriate one for stylesheet menus, and returns the 
	  old WHENSELECTEDFNs. Also NILLs the SHADEDITEMS of each menu, since STYLESHEET.SHADE.SELECTIONS depends on the 
	  validity of this field. (ADDMENU should really do it -- submit AR.))



          (* * rht 7/7/85: No longer returns list of old WHENSELECTEDFNs. Now caches them on menuprop.
	  This is slightly space-problematic since we can't ever completely remove a MENUPROP from a menu.
	  There should be a REMMENUPROP.)


    (for BLOCK in (STYLE.PROP STYLESHEET (QUOTE \STYLE.BLOCKS))
       do (LET* ((MENU (fetch (STYLEBLOCK MENU) of BLOCK))
	     (WHENSELECTEDFN (fetch (MENU WHENSELECTEDFN) of MENU)))
	    (AND WHENSELECTEDFN (PUTMENUPROP MENU (QUOTE OLD.WHENSELECTEDFN)
					     WHENSELECTEDFN))
	    (replace (MENU WHENSELECTEDFN) of MENU with (FUNCTION STYLESHEET.WHENSELECTEDFN))
	    (replace (MENU SHADEDITEMS) of MENU with NIL)))))

(STYLESHEET.CLEANUP
  (LAMBDA (W STYLESHEET)                                     (* rht: " 7-Jul-85 21:50")

          (* * cleans up the WHENSELECTEDFNs in a stylesheet. And closes its window.)



          (* * rht 7/7/85: Now finds old WHENSELECTEDFNs on a menuprop of each menu.)


    (for I in (STYLE.PROP STYLESHEET (QUOTE ITEMS))
       do 

          (* * Restore the old WHENSELECTEDFNs and MENUUSERDATAs.)


	  (LET ((OLD.WHENSELECTEDFN (GETMENUPROP I (QUOTE OLD.WHENSELECTEDFN))))
	    (replace WHENSELECTEDFN of I with OLD.WHENSELECTEDFN)
	    (if OLD.WHENSELECTEDFN
		then (PUTMENUPROP I (QUOTE OLD.WHENSELECTEDFN)
				  NIL))))

          (* * Get rid of the stylesheet window)


    (CLOSEW W)))

(STYLESHEET.WHENSELECTEDFN
  (LAMBDA (ELEMENT MENU BUTTON)                              (* rht: " 7-Jul-85 21:30")

          (* * Special whenselectedfn for menus inside stylesheets. Permanently shades the selected item and records the new 
	  selection.)



          (* * rht 7/7/85: Now calls old WHENSELECTEDFN if there is one. Bail out if it returns (QUOTE ABORT))


    (LET ((BLOCK (CDR (FASSOC MENU (STYLE.PROP (WINDOWPROP (WFROMMENU MENU)
							   (QUOTE STYLESHEET))
					       (QUOTE \MENU.TO.BLOCK)))))
       SELECTIONS
       (OLD.WHENSELECTEDFN (GETMENUPROP MENU (QUOTE OLD.WHENSELECTEDFN))))
      (SETQ SELECTIONS (fetch (STYLEBLOCK SELECTIONS) of BLOCK))
      (if (OR (NULL OLD.WHENSELECTEDFN)
	      (NEQ (APPLY* OLD.WHENSELECTEDFN ELEMENT MENU BUTTON)
		   (QUOTE ABORT)))
	  then 

          (* * Modify recorded selections.)


	       (replace (STYLEBLOCK SELECTIONS) of BLOCK
		  with (SELECTQ (fetch (STYLEBLOCK FILL) of BLOCK)
				(T 

          (* * Can have 0 or 1 selection. If selected same one twice, undo the selection, else change selection.)


				   (if (EQ ELEMENT SELECTIONS)
				       then NIL
				     else ELEMENT))
				(MULTI 

          (* * Can have any number of selection. If made same selection twice, remove it; else add it to the list of 
	  selections so far.)


				       (if (FMEMB ELEMENT SELECTIONS)
					   then (REMOVE ELEMENT SELECTIONS)
					 else (CONS ELEMENT SELECTIONS)))
				(NIL 

          (* * Must have exactly one selection. Change the current selection.)


				     ELEMENT)
				(SHOULDNT)))

          (* * Display new selections.)


	       (STYLESHEET.SHADE.SELECTIONS BLOCK)))))
)
(PUTPROPS STYLESHEETPATCH COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (875 5979 (STYLESHEET 885 . 2112) (STYLESHEET.SETUP 2114 . 3327) (STYLESHEET.CLEANUP 
3329 . 4124) (STYLESHEET.WHENSELECTEDFN 4126 . 5977)))))
STOP