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