IconManagerImpl.mesa
Copyright © 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
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: BOOLFALSE;
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.