-- Compiler ControllerMenus/n
-- m. stone December 2, 1981 11:17 PM
-- Tiberi November 4, 1979 5:41 PM
-- implementing module for griffin file controller menus
DIRECTORY ControllerDefs: FROM "ControllerDefs"
USING [CurrentStyleRecord, CurrentFontDescriptor],
MenuDefs: FROM "MenuDefs",
RefreshDefs: FROM "RefreshDefs",
GriffinFontDefs: FROM "GriffinFontDefs",
StyleDefs: FROM "StyleDefs",
ObjectDefs: FROM "ObjectDefs",
ControllerMenuDefs: FROM "ControllerMenuDefs",
GriffinMemoryDefs: FROM "GriffinMemoryDefs",
PointDefs: FROM "PointDefs",
StringDefs: FROM "StringDefs";
--------------------------------------------------------------------
--------------------------------------------------------------------
ControllerMenus: PROGRAM
IMPORTS StringDefs, MenuDefs, ControllerDefs,
GriffinMemoryDefs, RefreshDefs, GriffinFontDefs, PointDefs
EXPORTS ControllerMenuDefs =
BEGIN
colorMenu: PUBLIC MenuDefs.MenuHandle←NIL;
lineColorMenu: PUBLIC MenuDefs.MenuHandle←NIL;
textMenu: PUBLIC MenuDefs.MenuHandle←NIL;
charMenu: PUBLIC MenuDefs.MenuHandle←NIL;
fontMenu: PUBLIC MenuDefs.MenuHandle←NIL;
centerMenu: PUBLIC MenuDefs.MenuHandle←NIL;
thickMenu: PUBLIC MenuDefs.MenuHandle←NIL;
colorControlMenu: PUBLIC MenuDefs.MenuHandle←NIL;
maxFontNameLength: CARDINAL = 128;
InitCaptionMenu: PUBLIC PROCEDURE =
BEGIN
default: MenuDefs.MenuItemHandle;
textMenu ← MenuDefs.CreateMenu[vertical, [350,150], NIL];
default ← MenuDefs.AddMenuItem[textMenu,"0 d",TextDir];
[]←MenuDefs.AddMenuItem[textMenu,"90 d",TextDir];
[]←MenuDefs.AddMenuItem[textMenu,"180 d",TextDir];
[]←MenuDefs.AddMenuItem[textMenu,"270 d",TextDir];
MenuDefs.BugItem[default];
charMenu ← MenuDefs.CreateMenu[vertical, [350,250], NIL];
default ← MenuDefs.AddMenuItem[charMenu,"0 char d",CharDir];
[]←MenuDefs.AddMenuItem[charMenu,"90 char d",CharDir];
[]←MenuDefs.AddMenuItem[charMenu,"180 char d",CharDir];
[]←MenuDefs.AddMenuItem[charMenu,"270 char d",CharDir];
MenuDefs.BugItem[default];
fontMenu ← MenuDefs.CreateMenu[vertical, [240,250], NIL];
GriffinFontDefs.ForAllFonts[do: AddFontName];
centerMenu ← MenuDefs.CreateMenu[vertical, [250,150], NIL];
default ← MenuDefs.AddMenuItem [centerMenu, "left", SetCenter];
[]←MenuDefs.AddMenuItem [centerMenu, "centered", SetCenter];
[]←MenuDefs.AddMenuItem [centerMenu, "right", SetCenter];
MenuDefs.BugItem[default];
END;
InitColorMenu: PUBLIC PROCEDURE =
BEGIN
default: MenuDefs.MenuItemHandle;
colorMenu ← MenuDefs.CreateMenu[vertical, [180,200], "Areas"];
[]←MenuDefs.AddMenuItem[colorMenu,"black",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"dk brown",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"brown",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"tan",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"maroon",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"dk red",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"red",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"orange",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"dk yellow",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"yellow",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"lt yellow",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"dk green",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"green",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"lt green",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"dk blue",ColorType];
[] ← MenuDefs.AddMenuItem[colorMenu,"blue",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"lt blue",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"dk aqua",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"aqua",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"cyan",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"dk purple",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"purple",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"violet",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"magenta",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"pink",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"dk grey",ColorType];
default←MenuDefs.AddMenuItem[colorMenu,"grey",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"lt grey",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"pale grey",ColorType];
[]←MenuDefs.AddMenuItem[colorMenu,"white",ColorType];
MenuDefs.BugItem[default];
lineColorMenu ← MenuDefs.CreateMenu[vertical, [100,200], "Lines"];
default←MenuDefs.AddMenuItem[lineColorMenu,"black",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"dk brown",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"brown",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"tan",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"maroon",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"dk red",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"red",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"orange",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"dk yellow",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"yellow",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"lt yellow",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"dk green",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"green",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"lt green",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"dk blue",ColorType];
[] ← MenuDefs.AddMenuItem[lineColorMenu,"blue",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"lt blue",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"dk aqua",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"aqua",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"cyan",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"dk purple",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"purple",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"violet",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"magenta",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"pink",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"dk grey",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"grey",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"lt grey",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"pale grey",ColorType];
[]←MenuDefs.AddMenuItem[lineColorMenu,"white",ColorType];
MenuDefs.BugItem[default];
END;
InitShapeMenu: PUBLIC PROCEDURE =
BEGIN
default: MenuDefs.MenuItemHandle;
colorControlMenu ← MenuDefs.CreateMenu[vertical, [100,160], NIL];
[]←MenuDefs.AddMenuItem[colorControlMenu, "Outlined", ColorControl];
[]←MenuDefs.AddMenuItem[colorControlMenu, "Filled", ColorControl];
default←MenuDefs.AddMenuItem[colorControlMenu, "Both", ColorControl];
MenuDefs.BugItem[default];
thickMenu ← MenuDefs.CreateMenu[vertical, [50,200], NIL];
[]←MenuDefs.AddMenuItem [thickMenu, "1 pt", SetThickness];
default ←MenuDefs.AddMenuItem [thickMenu, "2 pt", SetThickness];
[]←MenuDefs.AddMenuItem [thickMenu, "3 pt", SetThickness];
[]←MenuDefs.AddMenuItem [thickMenu, "4 pt", SetThickness];
MenuDefs.BugItem[default];
END;
DisplayCaptionMenu: PUBLIC PROCEDURE =
BEGIN
MenuDefs.ShowMenu[textMenu];
MenuDefs.ShowMenu[charMenu];
MenuDefs.ShowMenu[fontMenu];
MenuDefs.ShowMenu[centerMenu];
RefreshDefs.RestoreScreen[];
END;
UnDisplayCaptionMenu: PUBLIC PROCEDURE =
BEGIN
MenuDefs.HideMenu[textMenu];
MenuDefs.HideMenu[charMenu];
MenuDefs.HideMenu[fontMenu];
MenuDefs.HideMenu[centerMenu];
RefreshDefs.RestoreScreen[];
END;
DisplayColorMenu: PUBLIC PROCEDURE =
BEGIN
MenuDefs.ShowMenu[lineColorMenu];
MenuDefs.ShowMenu[colorMenu];
RefreshDefs.RestoreScreen[];
END;
UnDisplayColorMenu: PUBLIC PROCEDURE =
BEGIN
MenuDefs.HideMenu[colorMenu];
MenuDefs.HideMenu[lineColorMenu];
RefreshDefs.RestoreScreen[];
END;
DisplayShapeMenu: PUBLIC PROCEDURE =
BEGIN
MenuDefs.ShowMenu[colorControlMenu];
MenuDefs.ShowMenu[thickMenu];
RefreshDefs.RestoreScreen[];
END;
UnDisplayShapeMenu: PUBLIC PROCEDURE =
BEGIN OPEN MenuDefs;
MenuDefs.HideMenu[colorControlMenu];
MenuDefs.HideMenu[thickMenu];
RefreshDefs.RestoreScreen[];
END;
ColorControl: MenuDefs.MenuProc =
BEGIN OPEN StyleDefs,StringDefs,StringDefs,MenuDefs;
string: STRING ← MenuDefs.MenuString[item];
style: StyleDefs.StyleHandle ← ControllerDefs.CurrentStyleRecord [];
SelectOnly[item];
SELECT TRUE FROM
EqualStrings[string, "Outlined"] =>
BEGIN
style.outlined ← TRUE;
style.filled ← FALSE;
END;
EqualStrings[string, "Filled"] =>
BEGIN
style.filled ← TRUE;
style.outlined ← FALSE;
END;
EqualStrings[string, "Both"] =>
BEGIN
style.outlined ← TRUE;
style.filled ← TRUE;
END;
ENDCASE => ERROR;
END;
ColorType: MenuDefs.MenuProc =
BEGIN OPEN StyleDefs,StringDefs,StringDefs;
string: STRING ← MenuDefs.MenuString[item];
color: Color;
color ← SELECT TRUE FROM
EqualStrings[string, "black"] => [0,0,0],
EqualStrings[string, "dk brown"] => [7,255,59],
EqualStrings[string, "brown"] => [7,255,118],
EqualStrings[string, "tan"] => [0,131,217],
EqualStrings[string, "maroon"] => [234,255,79],
EqualStrings[string, "dk red"] => [0,255,160],
EqualStrings[string, "red"] => [0,255,255],
EqualStrings[string, "orange"] => [10,255,255],
EqualStrings[string, "dk yellow"] => [25,255,255],
EqualStrings[string, "yellow"] => [40,255,255],
EqualStrings[string, "lt yellow"] => [40,190,255],
EqualStrings[string, "dk green"] => [71,255,59],
EqualStrings[string, "green"] => [76,255,255],
EqualStrings[string, "lt green"] => [71,193,255],
EqualStrings[string, "dk blue"] => [150,255,170],
EqualStrings[string, "blue"] => [148,255,255],
EqualStrings[string, "lt blue"] => [141,150,255],
EqualStrings[string, "dk aqua"] => [107,255,98],
EqualStrings[string, "aqua"] => [107,224,255],
EqualStrings[string, "cyan"] => [120,255,255],
EqualStrings[string, "dk purple"] => [178,255,178],
EqualStrings[string, "purple"] => [170,224,255],
EqualStrings[string, "violet"] => [170,131,255],
EqualStrings[string, "magenta"] => [200,255,255],
EqualStrings[string, "pink"] => [206,170,255],
EqualStrings[string, "dk grey"] => [0,0,40],
EqualStrings[string, "grey"] => [0,0,120],
EqualStrings[string, "lt grey"] => [0,0,200],
EqualStrings[string, "pale grey"] => [0,0,230],
EqualStrings[string, "white"] => [0,0,255],
ENDCASE => ERROR;
IF MenuDefs.WhichMenu[item]=colorMenu
THEN ControllerDefs.CurrentStyleRecord [].fillcolor ← color
ELSE ControllerDefs.CurrentStyleRecord [].color ← color;
MenuDefs.SelectOnly[item];
END;
TextDir: MenuDefs.MenuProc =
BEGIN OPEN StyleDefs, StringDefs;
string: STRING ← MenuDefs.MenuString[item];
ControllerDefs.CurrentStyleRecord [].orientation
← SELECT TRUE FROM
EqualStrings[string,"0 d"] => Orientation [or0],
EqualStrings[string,"90 d"] => Orientation [or90],
EqualStrings[string,"180 d"] => Orientation [or180],
EqualStrings[string,"270 d"] => Orientation [or270],
ENDCASE => ERROR;
MenuDefs.SelectOnly[item];
END;
CharDir: MenuDefs.MenuProc =
BEGIN OPEN StyleDefs, GriffinFontDefs, StringDefs;
string: STRING ← MenuDefs.MenuString[item];
ControllerDefs.CurrentFontDescriptor [].rotation
← SELECT TRUE FROM
EqualStrings[string,"0 char d"] => Rot0Degrees,
EqualStrings[string,"90 char d"] => Rot90Degrees,
EqualStrings[string,"180 char d"] => Rot180Degrees,
EqualStrings[string,"270 char d"] => Rot270Degrees,
ENDCASE => ERROR;
MenuDefs.SelectOnly[item];
END;
AddFontName: PROCEDURE[font: GriffinFontDefs.FontDescriptorHandle] =
BEGIN OPEN StringDefs;
alreadyThere: BOOLEAN ← FALSE;
string: STRING ← [maxFontNameLength];
IsEqual: MenuDefs.MenuProc=
BEGIN
IF EquivalentStrings[string, MenuDefs.MenuString[item]]
THEN alreadyThere ← TRUE;
END;
AppendString[to: string, from: font.name];
AppendDecimal[string, font.points];
SELECT font.face FROM
3 => AppendString[to: string, from: "BI"];
2 => AppendString[to: string, from: "B"];
1 => AppendString[to: string, from: "I"];
ENDCASE;
MenuDefs.ForAllMenuItems[fontMenu, IsEqual];
IF alreadyThere THEN RETURN;
MenuDefs.BugItem[MenuDefs.AddMenuItem[fontMenu, string, SetFont]];
END;
SetFont: MenuDefs.MenuProc =
BEGIN OPEN MenuDefs, StringDefs, ControllerDefs, GriffinFontDefs;
cfd: FontDescriptorHandle ← CurrentFontDescriptor[];
string: STRING ← [maxFontNameLength];
temp: STRING ← [maxFontNameLength];
i,j: CARDINAL;
AppendString[string, MenuString[item]];
temp.length ← 0;
FOR i ← 0, i+1 UNTIL i=string.length OR string[i] IN ['0..'9] DO temp[i] ← string[i];
temp.length ← temp.length+1;
ENDLOOP;
GriffinMemoryDefs.FreeString [cfd.name];
cfd.name ← GriffinMemoryDefs.AllocateString [string.length];
AppendString [cfd.name, temp];
--i is at start of points and face
temp.length ← 0;
j ← 0;
UNTIL i=string.length
OR string[i]='I OR string[i]='i
OR string[i]='B OR string[i]='b DO
temp[j] ← string[i];
i ← i+1; j← j+1;
temp.length ← temp.length+1;
ENDLOOP;
cfd.points ← StringToDecimal[temp];
SELECT string.length-i FROM
1 => {IF string[i]='b OR string[i]='B THEN cfd.face ← 2;
IF string[i]='i OR string[i]='I THEN cfd.face ← 1};
2 => cfd.face ← 3; --a bit ad hoc
ENDCASE => cfd.face ← 0;
MenuDefs.SelectOnly[item];
END;
SetCenter: MenuDefs.MenuProc =
BEGIN OPEN StringDefs;
string: STRING ← MenuDefs.MenuString[item];
ControllerDefs.CurrentStyleRecord [].anchor
← SELECT TRUE FROM
EqualStrings[string,"left"] => left,
EqualStrings[string,"centered"] => center,
EqualStrings[string,"right"] => right,
ENDCASE => ERROR;
MenuDefs.SelectOnly[item];
END;
SetThickness: MenuDefs.MenuProc =
BEGIN OPEN StringDefs, PointDefs;
string: STRING ← MenuDefs.MenuString[item];
ControllerDefs.CurrentStyleRecord [].width
← SELECT TRUE FROM
EqualStrings[string,"1 pt"] => ScrValToObjVal[1],
EqualStrings[string,"2 pt"] => ScrValToObjVal[2],
EqualStrings[string,"3 pt"] => ScrValToObjVal[3],
EqualStrings[string,"4 pt"] => ScrValToObjVal[4],
ENDCASE => ERROR;
MenuDefs.SelectOnly[item];
END;
END.