(FILECREATED "29-Mar-86 23:49:45" {PHYLUM}<SHRAGER>LISP>WINNER.;2 10784
changes to: (FNS WM:WINDOW-NAME WM:WINDOW-TYPE)
(VARS WINNERCOMS)
previous date: "29-Mar-86 22:50:16" {PHYLUM}<SHRAGER>LISP>WINNER.;1)
(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT WINNERCOMS)
(RPAQQ WINNERCOMS ((VARS WM:*WINDOW-TYPE-LOCS*)
(FNS WM:ADD-WINDOW-TO-OFF-SCREEN-LIST WM:GET-OFF-SCREEN-LOC WM:GET-ON-SCREEN-LOC
WM:KILL-AND-SWAP-IN WM:MOVE-WINDOW-OFF-SCREEN WM:MOVE-WINDOW-ON-SCREEN
WM:OFF-SCREEN-WINDOWS-OF-TYPE WM:REMEMEBER
WM:REMOVE-WINDOW-FROM-OFF-SCREEN-LIST WM:RETRIEVE-WINDOW WM:SWAP-OUT
WM:UPDATE-LOCS-ON-MOVE WM:WINDOW-NAME WM:WINDOW-TYPE)
(P (SETQ WM:*WINDOW-TYPE-LOCS* NIL)
[PUSH WindowMenuCommands (QUOTE (SwapOut (QUOTE WM:SWAP-OUT)
"Swaps a window out and puts one of the same type in."
(SUBITEMS ("Put Out" (QUOTE
WM:MOVE-WINDOW-OFF-SCREEN
)
"Puts a new window of an old type off screen."
)
("Kill" (QUOTE
WM:KILL-AND-SWAP-IN
)
"Closes this window and gets one from offscreen."
)
("Remember" (QUOTE
WM:UPDATE-LOCS-ON-MOVE
)
"Remember where windows of this type go."
]
(PUSH BackgroundMenuCommands (QUOTE ("Retrieve" (QUOTE (WM:RETRIEVE-WINDOW))
"Get an off screen window.")))
(SETQ WindowMenu NIL)
(SETQ BackgroundMenu NIL))))
(RPAQQ WM:*WINDOW-TYPE-LOCS* ((FILEBROWSER (444 347 570 453)
(2444 2347 570 453)
({WINDOW}#53,162320 {WINDOW}#54,5554))
(TEDIT (206 19 645 595)
(2206 2019 645 595)
NIL)))
(DEFINEQ
(WM:ADD-WINDOW-TO-OFF-SCREEN-LIST
[LAMBDA (W) (* Jeff.Shrager "27-Mar-86 12:51")
(LET* ((L (ASSOC (WM:WINDOW-TYPE W)
WM:*WINDOW-TYPE-LOCS*))
(WLIST (CADDDR L)))
(OR (MEMB W WLIST)
(RPLACA (CDDDR L)
(CONS W WLIST])
(WM:GET-OFF-SCREEN-LOC
[LAMBDA (W) (* Jeff.Shrager "27-Mar-86 11:41")
(CADDR (ASSOC (WM:WINDOW-TYPE W)
WM:*WINDOW-TYPE-LOCS*])
(WM:GET-ON-SCREEN-LOC
[LAMBDA (W) (* Jeff.Shrager "27-Mar-86 11:40")
(CADR (ASSOC (WM:WINDOW-TYPE W)
WM:*WINDOW-TYPE-LOCS*])
(WM:KILL-AND-SWAP-IN
[LAMBDA (W) (* Jeff.Shrager "29-Mar-86 22:48")
(CLOSEW W)
(LET [(NAMES (for W in (WM:OFF-SCREEN-WINDOWS-OF-TYPE (WM:WINDOW-TYPE W))
collect (CONS (WM:WINDOW-NAME W)
W]
(COND
[(CDR NAMES)
(WM:MOVE-WINDOW-ON-SCREEN (CDR (MENU (create MENU
ITEMS ← NAMES]
(NAMES (WM:MOVE-WINDOW-ON-SCREEN (CDAR NAMES])
(WM:MOVE-WINDOW-OFF-SCREEN
[LAMBDA (W) (* Jeff.Shrager "27-Mar-86 12:47")
(SHAPEW W (WM:GET-OFF-SCREEN-LOC W))
(WM:ADD-WINDOW-TO-OFF-SCREEN-LIST W])
(WM:MOVE-WINDOW-ON-SCREEN
[LAMBDA (W) (* Jeff.Shrager "27-Mar-86 12:49")
(SHAPEW W (WM:GET-ON-SCREEN-LOC W))
(WM:REMOVE-WINDOW-FROM-OFF-SCREEN-LIST W])
(WM:OFF-SCREEN-WINDOWS-OF-TYPE
[LAMBDA (WTYPE) (* Jeff.Shrager "27-Mar-86 12:47")
(CADDDR (ASSOC WTYPE WM:*WINDOW-TYPE-LOCS*])
(WM:REMEMEBER
[LAMBDA NIL (* Jeff.Shrager "27-Mar-86 13:06")
(WM:UPDATE-LOCS-ON-MOVE (WM:WINDOW-TYPE (WW))
(WINDOWREGION (WW])
(WM:REMOVE-WINDOW-FROM-OFF-SCREEN-LIST
[LAMBDA (W) (* Jeff.Shrager "27-Mar-86 12:55")
(LET* ((L (ASSOC (WM:WINDOW-TYPE W)
WM:*WINDOW-TYPE-LOCS*))
(WLIST (CADDDR L)))
(AND (MEMB W WLIST)
(RPLACA (CDDDR L)
(REMOVE W WLIST])
(WM:RETRIEVE-WINDOW
[LAMBDA NIL (* Jeff.Shrager "28-Mar-86 09:45")
(LET [(WTYPE (AND WM:*WINDOW-TYPE-LOCS* (MENU (create MENU
ITEMS ←(for I in WM:*WINDOW-TYPE-LOCS*
collect (CAR I]
(AND WTYPE (LET [(NAMES (for W in (WM:OFF-SCREEN-WINDOWS-OF-TYPE WTYPE)
collect (CONS (WM:WINDOW-NAME W)
W]
(AND NAMES (WM:MOVE-WINDOW-ON-SCREEN (COND
((NULL (CDR NAMES))
(CDAR NAMES))
(T (CDR (MENU (create MENU
ITEMS ← NAMES])
(WM:SWAP-OUT
[LAMBDA (W) (* Jeff.Shrager "28-Mar-86 11:22")
(LET* [(NAMES (for W in (WM:OFF-SCREEN-WINDOWS-OF-TYPE (WM:WINDOW-TYPE W))
collect (CONS (WM:WINDOW-NAME W)
W)))
(REPLACEMENT (AND NAMES (COND
((NULL (CDR NAMES))
(CDAR NAMES))
(T (CDR (MENU (create MENU
ITEMS ← NAMES]
(WM:MOVE-WINDOW-OFF-SCREEN W)
(AND REPLACEMENT (WM:MOVE-WINDOW-ON-SCREEN REPLACEMENT])
(WM:UPDATE-LOCS-ON-MOVE
[LAMBDA (W) (* Jeff.Shrager "28-Mar-86 09:38")
(LET* ((WINDOW-TYPE (WM:WINDOW-TYPE W))
(NEW-REGION (WINDOWREGION W))
(LOC (ASSOC WINDOW-TYPE WM:*WINDOW-TYPE-LOCS*)))
[COND
((NULL LOC)
(SETQ LOC (LIST WINDOW-TYPE NIL NIL NIL))
(SETQ WM:*WINDOW-TYPE-LOCS* (CONS LOC WM:*WINDOW-TYPE-LOCS*]
(* * The locs entry is of the form (TYPE ON-SCREEN-LOC OFF-SCREEN-LOC
LIST-OF-OFF-SCREEN-WINDOWS) the off screen location is the same as the on
screen location plus 2000.0)
(RPLACA (CDR LOC)
NEW-REGION)
(* * Make sure this is constructed anew so that smashing it doesn't fuck up the
window.)
(RPLACA (CDDR LOC)
(LIST (IPLUS 2000 (CAR NEW-REGION))
(IPLUS 2000 (CADR NEW-REGION))
(CADDR NEW-REGION)
(CADDDR NEW-REGION])
(WM:WINDOW-NAME
[LAMBDA (W) (* Jeff.Shrager "29-Mar-86 23:45")
(SELECTQ (WM:WINDOW-TYPE W)
(TEDIT (WINDOWPROP W (QUOTE TITLE)))
(FILEBROWSER (FETCHFIELD (QUOTE (FILEBROWSER 14 POINTER))
(WINDOWPROP W (QUOTE FILEBROWSER))))
NIL])
(WM:WINDOW-TYPE
[LAMBDA (W) (* Jeff.Shrager "29-Mar-86 23:35")
(COND
((EQ (QUOTE \TEDIT.SHRINK.ICONCREATE)
(WINDOWPROP W (QUOTE ICONFN)))
(QUOTE TEDIT))
((WINDOWPROP W (QUOTE FILEBROWSER))
(QUOTE FILEBROWSER])
)
(SETQ WM:*WINDOW-TYPE-LOCS* NIL)
[PUSH WindowMenuCommands (QUOTE (SwapOut (QUOTE WM:SWAP-OUT)
"Swaps a window out and puts one of the same type in."
(SUBITEMS ("Put Out" (QUOTE WM:MOVE-WINDOW-OFF-SCREEN)
"Puts a new window of an old type off screen."
)
("Kill" (QUOTE WM:KILL-AND-SWAP-IN)
"Closes this window and gets one from offscreen."
)
("Remember" (QUOTE WM:UPDATE-LOCS-ON-MOVE)
"Remember where windows of this type go."]
(PUSH BackgroundMenuCommands (QUOTE ("Retrieve" (QUOTE (WM:RETRIEVE-WINDOW))
"Get an off screen window.")))
(SETQ WindowMenu NIL)
(SETQ BackgroundMenu NIL)
(PUTPROPS WINNER COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL (3386 9531 (WM:ADD-WINDOW-TO-OFF-SCREEN-LIST 3396 . 3755) (WM:GET-OFF-SCREEN-LOC 3757 .
3970) (WM:GET-ON-SCREEN-LOC 3972 . 4182) (WM:KILL-AND-SWAP-IN 4184 . 4765) (WM:MOVE-WINDOW-OFF-SCREEN
4767 . 4992) (WM:MOVE-WINDOW-ON-SCREEN 4994 . 5222) (WM:OFF-SCREEN-WINDOWS-OF-TYPE 5224 . 5411) (
WM:REMEMEBER 5413 . 5623) (WM:REMOVE-WINDOW-FROM-OFF-SCREEN-LIST 5625 . 5994) (WM:RETRIEVE-WINDOW 5996
. 7039) (WM:SWAP-OUT 7041 . 7768) (WM:UPDATE-LOCS-ON-MOVE 7770 . 8860) (WM:WINDOW-NAME 8862 . 9211) (
WM:WINDOW-TYPE 9213 . 9529)))))
STOP