DIRECTORY Cursors USING [SetCursor], InputFocus USING [GetInputFocus, SetInputFocus], Menus USING [FindEntry, MenuEntry], MessageWindow USING [Append, Blink, Confirm], Process USING [Detach], Rope USING [Cat], TIPUser USING [InstantiateNewTIPTable, TIPScreenCoords, TIPTable], ViewerOps USING [DestroyViewer, OpenIcon, PaintViewer, ChangeColumn, SaveViewer], ViewerClasses USING [ModifyProc, NotifyProc, Viewer], ViewerPrivate USING [], ViewerTools USING [SelPosRec, SetSelection], WindowManager USING [colorDisplayOn]; IconManagerImpl: CEDAR PROGRAM IMPORTS Cursors, InputFocus, Menus, MessageWindow, Process, Rope, TIPUser, ViewerOps, ViewerTools, WindowManager EXPORTS ViewerPrivate SHARES Menus = BEGIN OPEN Cursors, ViewerClasses; IconNotify: PUBLIC ViewerClasses.NotifyProc = { 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 => [mouseX: mx, mouseY: my] _ z^; z: ATOM => SELECT z FROM $OpenDesktop, $ResetDesktop => { IF self.class.flavor = $DeskTop THEN self.class.notify[self, input]; RETURN}; $SetInputFocus => SELECT self.class.flavor FROM $Text => ViewerTools.SetSelection[self, NEW[ViewerTools.SelPosRec_[]]]; $Typescript, $Chat => ViewerTools.SetSelection[self]; ENDCASE; $CloseOthers => closeOthers _ TRUE; $Color => IF WindowManager.colorDisplayOn THEN ViewerOps.ChangeColumn[self, color]; $Delete => DestroyIcon[self]; $Save => { entry: Menus.MenuEntry = Menus.FindEntry[self.menu, "Save"]; MessageWindow.Append["Saving icon . . . ", TRUE]; IF entry = NIL THEN ViewerOps.SaveViewer[self] ELSE entry.proc[self]; MessageWindow.Append["done."]}; $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; }; IconModify: PUBLIC ViewerClasses.ModifyProc = { SELECT change FROM set => ViewerOps.PaintViewer[self, all]; kill => {selectedIcon _ NIL; ViewerOps.PaintViewer[self, all]}; ENDCASE; }; selectedIcon: PUBLIC ViewerClasses.Viewer _ NIL; DestroyIcon: PROC [icon: Viewer] = { 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 TRUSTED {Process.Detach[FORK ConfirmDestroyIcon[icon]]} -- fork for confirmation ELSE ViewerOps.DestroyViewer[icon]; }; ConfirmDestroyIcon: PROC [icon: Viewer] = { IF MessageWindow.Confirm[Rope.Cat["Confirm delete (and loss of edits) for icon: ", icon.name]] THEN ViewerOps.DestroyViewer[icon]; }; SelectIcon: PROC [viewer: Viewer] = { IF InputFocus.GetInputFocus[].owner#viewer THEN { InputFocus.SetInputFocus[NIL]; -- kill old so we don't smash selectedIcon selectedIcon _ viewer; InputFocus.SetInputFocus[viewer]; }; }; Open: PROC [viewer: Viewer, closeOthers: BOOL] = {ViewerOps.OpenIcon[viewer, closeOthers]}; iconTIP: PUBLIC TIPUser.TIPTable _ TIPUser.InstantiateNewTIPTable["Icons.tip"]; END. φIconManagerImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. McGregor on August 30, 1982 10:11 am Maxwell, January 28, 1983 3:09 pm Russ Atkinson, November 18, 1983 1:27 pm Doug Wyatt, April 14, 1985 11:49:47 pm PST ΚΨ– "Mesa" style˜codešœ™Kšœ Οmœ1™