DIRECTORY Cursors USING [SetCursor], IconManager, InputFocus USING [GetInputFocus, SetInputFocus], MessageWindow USING [Append, Blink, Confirm], Process USING [Detach], Rope USING [Cat], TIPUser USING [InstantiateNewTIPTable, TIPScreenCoords, TIPTable], ViewerOps USING [DestroyViewer, OpenIcon, PaintViewer, ChangeColumn], ViewerClasses, WindowManager USING [colorDisplayOn]; IconManagerImpl: PROGRAM IMPORTS Cursors, InputFocus, MessageWindow, Process, Rope, TIPUser, ViewerOps, WindowManager EXPORTS IconManager SHARES ViewerClasses = BEGIN OPEN Cursors, ViewerClasses; IconNotify: PUBLIC ViewerClasses.NotifyProc = BEGIN mx, my: INTEGER; closeOthers, switchDisplays: BOOL _ FALSE; FOR l: LIST OF REF ANY _ input, l.rest UNTIL l = NIL DO WITH l.first SELECT FROM z: TIPUser.TIPScreenCoords => [mx, ----, my] _ z^; z: ATOM => SELECT z FROM $CloseOthers => closeOthers _ TRUE; $Color => IF WindowManager.colorDisplayOn THEN ViewerOps.ChangeColumn[self, color]; $Delete => DestroyIcon[self]; $Left => ViewerOps.ChangeColumn[self, left]; $MouseMove => Cursors.SetCursor[textPointer]; $Open => ViewerOps.OpenIcon[self, closeOthers]; $Right => ViewerOps.ChangeColumn[self, right]; $Select => SelectIcon[self]; $TogglePos => ViewerOps.ChangeColumn[self, SELECT self.column FROM left => right, right => left, color => left, ENDCASE => ERROR]; ENDCASE => NULL; ENDCASE => NULL; ENDLOOP; END; IconModify: PUBLIC ViewerClasses.ModifyProc = BEGIN SELECT change FROM set => ViewerOps.PaintViewer[self, all]; kill => {selectedIcon _ NIL; ViewerOps.PaintViewer[self, all]}; ENDCASE; END; selectedIcon: PUBLIC ViewerClasses.Viewer _ NIL; DestroyIcon: PROC [icon: Viewer] = BEGIN IF icon.inhibitDestroy THEN { MessageWindow.Append["That icon cannot be destroyed.", TRUE]; MessageWindow.Blink[]; RETURN}; IF icon.link = NIL AND (icon.newVersion OR icon.newFile) THEN [] _ Process.Detach[FORK ConfirmDestroyIcon[icon]] -- fork for confirmation ELSE ViewerOps.DestroyViewer[icon]; END; ConfirmDestroyIcon: PROC [icon: Viewer] = BEGIN IF MessageWindow.Confirm[Rope.Cat["Confirm delete (and loss of edits) for icon: ", icon.name]] THEN ViewerOps.DestroyViewer[icon]; END; SelectIcon: PROC [viewer: Viewer] = BEGIN IF InputFocus.GetInputFocus[].owner#viewer THEN BEGIN InputFocus.SetInputFocus[NIL]; -- kill old so we don't smash selectedIcon selectedIcon _ viewer; InputFocus.SetInputFocus[viewer]; END; END; Open: PROC [viewer: Viewer, closeOthers: BOOL] = {ViewerOps.OpenIcon[viewer, closeOthers]}; iconTIP: PUBLIC TIPUser.TIPTable _ TIPUser.InstantiateNewTIPTable["/Indigo/CedarViewers/Viewers/Icons.tip"] ; END. ~IconManagerImpl.mesa; Edited by McGregor on August 30, 1982 10:11 am Last Edited by: Maxwell, December 7, 1982 11:11 am Κ@– "Mesa" style˜JšΟcD™DJ™2šΟk ˜ Jšœžœ ˜J˜ Jšœ žœ ˜0Jšœžœ˜-Jšœžœ ˜Jšœžœ˜Jšœžœ5˜BJšœ žœ6˜EJ˜Jšœžœ˜%J˜—Jšœž˜J˜šžœG˜NJ˜ —Jšžœ ˜Jšžœ˜J˜Jšžœžœ˜"J˜šœ žœž˜3Jšœžœ˜Jšœžœžœ˜*šžœžœžœžœžœžœžœžœžœ žœž˜PJšœ#œ ˜2šœžœžœž˜Jšœžœ˜$šœ žœž˜0J˜$—J˜J˜/J˜-J˜1J˜0J˜šœ,žœ ž˜CJ˜J˜J˜Jšžœžœ˜—Jšžœžœ˜—Jšžœžœ˜Jšžœ˜—Jšžœ˜J˜—šœ žœž˜3šžœž˜J˜)Jšœžœ$˜?Jšžœ˜—Jšžœ˜J˜—Jšœžœžœ˜0J˜šΟn œžœž˜(šžœžœ˜Jšœ7žœ˜=Jšœ˜Jšžœ˜—š žœ žœžœžœž˜=Jšœžœ˜K—Jšžœ˜#Jšžœ˜J˜—šŸœžœž˜/šžœ\˜^Jšžœ˜#—Jšžœ˜J˜—šŸ œžœž˜)šžœ)žœž˜5Jšœžœ*˜IJ˜J˜!Jšžœ˜—Jšžœ˜J˜—JšŸœžœžœ.˜[J˜šœ žœ˜"J˜JJ˜—Jšžœ˜J˜J˜—…— F