-- IconNut.mesa April 6, 1982 11:40 am
-- Implemented by Gifford, March 1982
DIRECTORY
Icons USING[IconFlavor],
Menus USING[Menu, MenuProc, CreateMenu, InsertMenuEntry],
Nut: TYPE USING [Register, CreateProc],
Rope: TYPE USING [Equal, Substr, Find, ROPE],
ViewerClasses: TYPE USING [ViewerClass, ViewerClassRec, Viewer, ViewerFlavor],
ViewerMenus,
ViewerOps: TYPE USING [RegisterViewerClass, SetMenu, CreateViewer];
IconNut: PROGRAM
IMPORTS Menus, Nut, Rope, ViewerMenus, ViewerOps = {
defaultMenu: Menus.Menu← Menus.CreateMenu[];
MakeDefaultMenu: PROC =
BEGIN
Menus.InsertMenuEntry[defaultMenu, "Destroy", MyDestroyProc];
Menus.InsertMenuEntry[defaultMenu, "<-->", ViewerMenus.Move];
Menus.InsertMenuEntry[defaultMenu, "Grow", ViewerMenus.Grow];
Menus.InsertMenuEntry[defaultMenu, "Close", ViewerMenus.Close];
END;
MyDestroyProc: Menus.MenuProc =
{ViewerMenus.Destroy[parent]};
MyCreateProc: Nut.CreateProc =
BEGIN
domainName: Rope.ROPE← defaultLabel.Substr[2, defaultLabel.Find[":", 2]-2]; -- *** temp hack
v: ViewerClasses.Viewer;
-- select icon / viewerclass dependent on domain
vc: ViewerClasses.ViewerFlavor← SELECT TRUE FROM
domainName.Equal["Musical Event"] => $Music,
domainName.Equal["TV Guide"] => $TVGuide,
domainName.Equal["Transportation Schedule"] => $Transportation,
domainName.Equal["Msg"] => $Msg,
domainName.Equal["Movie Listing"] => $Movies,
domainName.Equal["Organization"] => $Organization,
domainName.Equal["Person"] => $Person,
domainName.Equal["Map"] => $Map,
domainName.Equal["Notes"] => $Notes,
domainName.Equal["Lecture"] => $Lecture,
ENDCASE => $Container;
IF nutType=queryer THEN vc← $Query;
v← ViewerOps.CreateViewer[flavor: vc, name: defaultLabel, paint: FALSE];
ViewerOps.SetMenu[v, defaultMenu];
RETURN[v]
END;
Init: PROC = {
-- set up the world
-- create a new type of viewer for images
ViewerOps.RegisterViewerClass[flavor: $Music, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[records]]]];
ViewerOps.RegisterViewerClass[flavor: $TVGuide, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[filecabinet]]]];
ViewerOps.RegisterViewerClass[flavor: $Transportation, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[calculator]]]];
ViewerOps.RegisterViewerClass[flavor: $Msg, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[inoutbasket]]]];
ViewerOps.RegisterViewerClass[flavor: $Movies, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[proofreader]]]];
ViewerOps.RegisterViewerClass[flavor: $Organization, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[inoutletter]]]];
ViewerOps.RegisterViewerClass[flavor: $Person, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[magnifier]]]];
ViewerOps.RegisterViewerClass[flavor: $Map, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[formspad]]]];
ViewerOps.RegisterViewerClass[flavor: $Notes, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[recorder]]]];
ViewerOps.RegisterViewerClass[flavor: $Lecture, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[printer]]]];
ViewerOps.RegisterViewerClass[flavor: $Query, class:
NEW[ViewerClasses.ViewerClassRec← [icon: Icons.IconFlavor[help]]]];
-- register us as a nut!
Nut.Register[domain: "Musical Event", create: MyCreateProc];
Nut.Register[domain: "TV Guide", create: MyCreateProc];
Nut.Register[domain: "Transportation Schedule", create: MyCreateProc];
Nut.Register[domain: "Msg", create: MyCreateProc];
Nut.Register[domain: "Movie Listing", create: MyCreateProc];
Nut.Register[domain: "Organization", create: MyCreateProc];
Nut.Register[domain: "Person", create: MyCreateProc];
Nut.Register[domain: "Map", create: MyCreateProc];
Nut.Register[domain: "Notes", create: MyCreateProc];
Nut.Register[domain: "Lecture", create: MyCreateProc];
};
-- start trap does it all.
MakeDefaultMenu[];
Init[];
}.