-- 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[]; }.