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