MenusPrivate.mesa; Written by S. McGregor
Edited by McGregor on July 21, 1983 10:43 am
Last Edited by: Maxwell, December 17, 1982 9:59 am
Last Edited by: Pausch, August 17, 1983 4:38 pm
Last Edited by: Wyatt, October 19, 1983 3:21 pm
DIRECTORY
Imager USING [Context],
Menus USING [Entry, Menu, MenuName, Trigger],
Process USING [Milliseconds],
TIPUser USING [TIPScreenCoords],
ViewerClasses USING [Viewer];
MenusPrivate: CEDAR DEFINITIONS
= BEGIN OPEN Menus;
Viewer: TYPE = ViewerClasses.Viewer;
menuHLeading: INTEGER = 5; -- white space before first entry
menuHSpace: INTEGER = 12; -- white space between entries
ViewerMenus: TYPE = REF ViewerMenusRec;
ViewerMenusRec: TYPE = RECORD [
x, y: INTEGER ← 0, -- lower-left corner of entire menu area of viewer, relative to the viewer
w, h: INTEGER ← 0, -- width and height of entire menu area of viewer
list: LIST OF ViewerMenu ← NIL,
inverted: EntryState ← NIL
];
ViewerMenu: TYPE = REF ViewerMenuRec;
ViewerMenuRec: TYPE = RECORD [
commonData: Menu, -- data common to all instances of the menu
entries: LIST OF EntryState ← NIL,
active: BOOLEANTRUE
];
EntryState: TYPE = REF EntryStateRec;
EntryStateRec: TYPE = MONITORED RECORD [
width: INTEGER ← 0,
xPos: INTEGER ← 0,
yPos: INTEGER ← 0,
greyed: BOOLFALSE,
guardState: GuardState ← armed,
commonData: Entry ← NIL
];
GuardState: TYPE = { guarded, arming, armed };
armingTime: Process.Milliseconds = 100; -- cover removal time.
armedTime: Process.Milliseconds = 5000; -- unguarded interval.
TIPScreenCoords: TYPE = TIPUser.TIPScreenCoords;
MarkMenu: PROC[menus: ViewerMenus, parent: Viewer, mousePos: TIPScreenCoords];
Called when the mouse is pressed down over a menu to do the proper inverse-video stuff.
HitMenu: PROC[menus: ViewerMenus, parent: Viewer, mousePos: TIPScreenCoords, trigger: Trigger];
ClearMenu: PROC[menus: ViewerMenus, parent: Viewer, paint: BOOLTRUE] ;
DrawMenu: PROC[v: Viewer, menus: ViewerMenus, context: Imager.Context, whatChanged: REF ANYNIL];
ViewerlessAddMenu: PROC [name: MenuName,
addBefore: MenuName ← NIL, paint: BOOLTRUE];
provided for convenience of BuildWindowMenus in WindowManagerImpl
RecomputeMenus: PROC[v: Viewer] RETURNS[heightDelta: INTEGER];
ReComputeWindowMenus: PROC [v: Viewer, guard: BOOL, color: BOOL];
this will reset all fields in the data structure, including position and size of each entry.
END.