<> <> <> <> 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.