FigureOps.mesa
Last Edited by: Stone, September 19, 1985 4:52:13 pm PDT
Last Edited by: Pier, February 14, 1984 10:11:13 am PST
Last Edited by: Beach, December 3, 1984 5:08:16 pm PST
DIRECTORY
MenuDefs: FROM "MenuDefs",
ObjectDefs: FROM "ObjectDefs",
GriffinViewer USING [PaintProc, DoPaint],
RefreshDefs: FROM "RefreshDefs",
GriffinDisplay USING [ClearScreen],
GriffinDefs,
GriffinGrid USING [GridOn, GridOff],
GriffinMenusInterface,
Rope USING [ROPE];
FigureOps: CEDAR PROGRAM
IMPORTS MenuDefs, GriffinDisplay, ObjectDefs,
RefreshDefs, GriffinViewer, GriffinGrid
EXPORTS GriffinMenusInterface, GriffinDefs =
BEGIN
ROPE: TYPE = Rope.ROPE;
Refresh: PUBLIC MenuDefs.MenuProc =
BEGIN
paintProc: GriffinViewer.PaintProc = {
GriffinDisplay.ClearScreen[dc];
ObjectDefs.ReplotAllObjects[dc];
};
GriffinViewer.DoPaint[paintProc];
END;
GridMenuProc: PUBLIC MenuDefs.MenuProc =
BEGIN
currentlyOn: BOOLEAN ← MenuDefs.IsSelected[item];
IF currentlyOn THEN {
GriffinGrid.GridOff[];
MenuDefs.Deselect[item];
}
ELSE {
GriffinGrid.GridOn[];
MenuDefs.Select[item];
};
END;
Merge: PUBLIC MenuDefs.MenuProc =
BEGIN OPEN ObjectDefs;
view: View ← viewMenu.view;
Mark: ObjectProc = BEGIN
IF obj.view=view THEN RETURN;
obj.view ← view;
RefreshDefs.MarkObject[obj];
END;
ForAllObjects[Mark];
RefreshDefs.RestoreScreen[];
END;
Switch: PUBLIC MenuDefs.MenuProc =
BEGIN OPEN ObjectDefs;
newView: View ← IF viewMenu.view=main THEN alternate ELSE main;
Mark: ObjectProc = TRUSTED BEGIN
WITH foo: obj SELECT FROM
menu => obj.view ← newView;
token => IF foo.tokenType#open THEN obj.view ← newView;
ENDCASE;
END;
paintProc: GriffinViewer.PaintProc = {
GriffinDisplay.ClearScreen[dc];
ObjectDefs.ReplotAllObjects[dc];
};
ForAllObjects[Mark];
SetCurrentView[newView];
GriffinViewer.DoPaint[paintProc];
END;
viewMenu: MenuDefs.MenuHandle←NIL;
ToggleFigureMenus: PUBLIC PROC = { --view menus
IF viewMenu.visible THEN MenuDefs.HideMenu[viewMenu]
ELSE MenuDefs.ShowMenu[viewMenu];
RefreshDefs.RestoreScreen[];
};
StartFigureMenus: PUBLIC PROC = {
viewMenu ← MenuDefs.CreateMenu[horizontal, [100,50], NIL];
[]←MenuDefs.AddMenuItem[viewMenu,"Refresh",Refresh];
[]←MenuDefs.AddMenuItem[viewMenu,"Grid",GridMenuProc];
[]←MenuDefs.AddMenuItem[viewMenu,"Merge",Merge];
[]←MenuDefs.AddMenuItem[viewMenu,"Switch",Switch];
};
END.