-- Compiler GriffinMain/n -- m.stone November 14, 1980 1:44 PM -- Tiberi December 12, 1979 12:00 PM -- Last Edited by: Stone, November 14, 1983 3:11 pm DIRECTORY GriffinDefs: FROM "GriffinDefs", PointDefs: FROM "PointDefs", RefreshDefs: FROM "RefreshDefs", MenuDefs: FROM "MenuDefs", GriffinMenusInterface, Rope USING[ROPE, Equal]; GriffinMain: PROGRAM IMPORTS GriffinDefs, MenuDefs, RefreshDefs, Rope EXPORTS GriffinDefs, GriffinMenusInterface = BEGIN OPEN GriffinDefs, PointDefs,RefreshDefs; X: CARDINAL = PointDefs.X; Y: CARDINAL = PointDefs.Y; ROPE: TYPE=Rope.ROPE; topMenu: PUBLIC MenuDefs.MenuHandle_NIL; messageMenu: MenuDefs.MenuHandle_NIL; messageItem: MenuDefs.MenuItemHandle_NIL; ToggleShowMenu: PUBLIC MenuDefs.MenuProc = BEGIN OPEN MenuDefs, GriffinDefs; UpdateMenu: PROCEDURE[menu: MenuHandle, show: BOOLEAN] = BEGIN IF show THEN BEGIN ShowMenu[menu]; END ELSE BEGIN HideMenu[menu]; END; END; UpdateItem: PROCEDURE[item: MenuItemHandle] = BEGIN IF IsSelected[item] THEN Deselect[item] ELSE Select[item]; END; UpdateBoth: PROCEDURE[menu: MenuHandle, item: MenuItemHandle] = BEGIN UpdateItem[item]; UpdateMenu[menu, IsSelected[item]]; END; string: ROPE = MenuString[item]; SELECT TRUE FROM Rope.Equal[string, "Edit"] => BEGIN IF IsSelected[item] THEN BEGIN item: MenuItemHandle; item _ FindItemByString[editMenu,"Spline Type"]; IF IsSelected[item] THEN BugItem[item]; END; UpdateItem[item]; UpdateMenu[editMenu, IsSelected[item]]; UpdateMenu[shapeMenu, IsSelected[item]]; END; Rope.Equal[string, "Objects"] => UpdateBoth[objectMenu, item]; Rope.Equal[string, "Style"] => BEGIN IF IsSelected[item] THEN BEGIN item: MenuItemHandle; item _ FindItemByString[GriffinDefs.styleMenu,"Text Style"]; IF IsSelected[item] THEN BugItem[item]; item _ FindItemByString[GriffinDefs.styleMenu,"Color Style"]; IF IsSelected[item] THEN BugItem[item]; item _ FindItemByString[GriffinDefs.styleMenu,"Shape Style"]; IF IsSelected[item] THEN BugItem[item]; END; UpdateBoth[styleMenu, item]; END; Rope.Equal[string, "Files"] => UpdateBoth[filesMenu, item]; Rope.Equal[string, "Transform"] => UpdateBoth[xformMenu, item]; Rope.Equal[string, "Overlap"] => UpdateBoth[overlapMenu, item]; Rope.Equal[string, "View"] => UpdateBoth[viewMenu, item]; ENDCASE=> ERROR; RestoreScreen[]; END; FindItemByString: PROCEDURE[menu: MenuDefs.MenuHandle,string: ROPE] RETURNS [mitem: MenuDefs.MenuItemHandle]= BEGIN OPEN MenuDefs; IsItem: MenuProc = BEGIN IF Rope.Equal[MenuString[item],string] THEN mitem _ item; END; ForAllMenuItems[menu,IsItem]; END; UserMessage: PUBLIC SIGNAL [string: ROPE] = CODE; HideMessage: MenuDefs.MenuProc = { MenuDefs.HideMenu[messageMenu]; RestoreScreen[]; }; ShowUserMessage: PUBLIC PROCEDURE[string: ROPE] = BEGIN MenuDefs.SetMenuString[messageItem, string]; MenuDefs.ShowMenu[messageMenu]; MenuDefs.HighlightMenuItem[messageItem]; RestoreScreen[]; END; --Procedure so can catch all init errors StartMainMenus: PUBLIC PROCEDURE = BEGIN topMenu _ MenuDefs.CreateMenu[horizontal, [100,30], NIL]; []_MenuDefs.AddMenuItem[topMenu,"Edit",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Objects",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Style",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Files",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Transform",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Overlap",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"View",ToggleShowMenu]; messageMenu _ MenuDefs.CreateMenu[vertical, [150, 400], NIL]; messageItem _ MenuDefs.AddMenuItem[messageMenu, "Aborted.", HideMessage]; topMenu.visible _ TRUE; END; END.