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: BOOLEAN ← TRUE
];
EntryState: TYPE = REF EntryStateRec;
EntryStateRec:
TYPE =
MONITORED
RECORD [
width: INTEGER ← 0,
xPos: INTEGER ← 0,
yPos: INTEGER ← 0,
greyed: BOOL ← FALSE,
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: BOOL ← TRUE] ;
DrawMenu:
PROC[v: Viewer, menus: ViewerMenus, context: Imager.Context, whatChanged:
REF
ANY ←
NIL];
ViewerlessAddMenu:
PROC [name: MenuName,
addBefore: MenuName ← NIL, paint: BOOL ← TRUE];
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.