home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d549 / ffex.lha / FFEX / source / menu.mod < prev    next >
Text File  |  1991-09-19  |  6KB  |  200 lines

  1. IMPLEMENTATION MODULE Menu;
  2.  
  3. FROM Intuition IMPORT Menu, MenuPtr, menuEnabled, MenuItem, MenuItemPtr,
  4.               SetMenuStrip, ClearMenuStrip, WindowPtr, IntuiText,
  5.                 IntuiTextPtr, MenuItemFlags, MenuItemFlagSet,
  6.                 commWidth, ItemAddress, IDCMPFlagSet, AutoRequest;
  7.  
  8. FROM Graphics  IMPORT jam2;
  9.  
  10. FROM SYSTEM    IMPORT ADR, ADDRESS, LONGSET;
  11.  
  12. CONST
  13.   MLO=10; (* Left Menü Offset *)
  14.   PMB=64; (* Project Menü Breite *)
  15.   SMB=48; (* Setup Menü Breite *)
  16.   AMB=56; (* Action Menü Breite *)
  17.  
  18.   PIB=80+commWidth;  (* Project Item Breite          *)
  19.   SIB=120;          (* Setup Item Breite          *)
  20.   RIB=56;         (* Resolution (Sub)Items Breite *)
  21.   AIB=72;         (* Algorithm (Sub)Items Breite  *)
  22.   XIB=80+commWidth;  (* Action Item Breite         *)
  23.  
  24.   FLAGS=MenuItemFlagSet{itemText, itemEnabled, highComp};
  25.   COMFLAGS=FLAGS+MenuItemFlagSet{commSeq};
  26.   CKFLAGS =FLAGS+MenuItemFlagSet{checkIt};
  27.   CHECKED =MenuItemFlagSet{checked};
  28.   TOGGLE  =COMFLAGS+MenuItemFlagSet{menuToggle,checkIt,checked};
  29.   NOCOM   =CHAR(0);
  30.  
  31. VAR
  32.   menu : ARRAY[0..2] OF Menu;         (* Menüs: Project, Setup, Action *)
  33.   pitem: ARRAY[0..3] OF MenuItem;     (* Load,Save,About,Quit      *)
  34.   ptext: ARRAY[0..3] OF IntuiText;
  35.   sitem: ARRAY[0..2] OF MenuItem;     (* Resolution, Algorithm, Limits *)
  36.   stext: ARRAY[0..2] OF IntuiText;
  37.   ritem: ARRAY[0..2] OF MenuItem;     (* Subitems: Low, Med, High      *)
  38.   rtext: ARRAY[0..2] OF IntuiText;
  39.   aitem: ARRAY[0..2] OF MenuItem;     (* Subitems: Int16, Int32, Real  *)
  40.   atext: ARRAY[0..2] OF IntuiText;
  41.   xitem: ARRAY[0..2] OF MenuItem;     (* Title, Zoom, Render           *)
  42.   xtext: ARRAY[0..2] OF IntuiText;
  43.   MyMenu: MenuPtr;
  44.  
  45.  
  46. PROCEDURE SetMenu(VAR w:WindowPtr);
  47.   BEGIN
  48.     xitem[0].flags:=TOGGLE; (* Title Haken *)
  49.     (* Haken für Auflösung setzen *)
  50.     EXCL(ritem[0].flags,checked);
  51.     EXCL(ritem[1].flags,checked);
  52.     EXCL(ritem[2].flags,checked);
  53.     IF w^.width<=320 THEN
  54.       INCL(ritem[0].flags,checked)
  55.     ELSE
  56.       IF w^.height<=256 THEN
  57.         INCL(ritem[1].flags,checked)
  58.       ELSE
  59.         INCL(ritem[2].flags,checked)
  60.       END
  61.     END;
  62.     IF SetMenuStrip(w, MyMenu) THEN END
  63.   END SetMenu;
  64.  
  65.  
  66. PROCEDURE MenuNum(x:CARDINAL):CARDINAL;
  67. BEGIN RETURN(x MOD 020H) END MenuNum;
  68.  
  69.  
  70. PROCEDURE ItemNum(x:CARDINAL):CARDINAL;
  71. BEGIN RETURN((x DIV 020H) MOD 020H) END ItemNum;
  72.  
  73.  
  74. PROCEDURE SubNum(x:CARDINAL):CARDINAL;
  75. BEGIN RETURN(x DIV 0800H) END SubNum;
  76.  
  77.  
  78. PROCEDURE NextSelect(x:CARDINAL):CARDINAL;
  79.   VAR dummy:MenuItemPtr;
  80.   BEGIN
  81.     dummy:=ItemAddress(ADR(menu[0]),x);
  82.     RETURN dummy^.nextSelect;
  83.   END NextSelect;
  84.  
  85.  
  86. PROCEDURE InitMenu(VAR m:Menu;txt:ADDRESS;x,w:INTEGER):MenuPtr;
  87.   BEGIN
  88.     WITH m DO
  89.       leftEdge :=x;    topEdge:=0;   width:=w;
  90.       height   :=10;  menuName:=txt; flags:={menuEnabled};
  91.       firstItem:=NIL; nextMenu:=NIL; jazzX:=0;
  92.       jazzY    :=0;      beatX:=0;   beatY:=0;
  93.     END;
  94.     RETURN ADR(m);
  95.   END InitMenu;
  96.  
  97.  
  98. PROCEDURE InitItem(VAR mi:MenuItem; x,y,w,h:INTEGER;
  99.            flgs:MenuItemFlagSet; ifill:ADDRESS;
  100.            com:CHAR):MenuItemPtr;
  101.   BEGIN
  102.     WITH mi DO
  103.       leftEdge:=x;    topEdge:=y;          width:=w;
  104.       height  :=h;      flags:=flgs;     subItem:=NIL;
  105.       nextItem:=NIL; itemFill:=ifill; selectFill:=NIL;
  106.       command :=com; mutualExclude:=LONGSET{};
  107.     END;
  108.   RETURN ADR(mi);
  109. END InitItem;
  110.  
  111.  
  112. PROCEDURE InitText(VAR it:IntuiText; x,y:INTEGER; txt:ADDRESS);
  113.   BEGIN
  114.     WITH it DO
  115.       frontPen:=3;    backPen :=1;    drawMode :=jam2;
  116.       leftEdge:=x;    topEdge :=y;    iTextFont:=NIL;
  117.       iText   :=txt;  nextText:=NIL;
  118.     END
  119.   END InitText;
  120.  
  121.  
  122. BEGIN  (*** Strukturen initialisieren ***)
  123.  
  124.   MyMenu          :=InitMenu(menu[0],ADR("Project"),MLO,PMB);
  125.   menu[0].nextMenu:=InitMenu(menu[1],ADR("Setup"),2*MLO+PMB,SMB);
  126.   menu[1].nextMenu:=InitMenu(menu[2],ADR("Action"),3*MLO+PMB+SMB,AMB);
  127.  
  128.   (*** Menü Texte initialisieren ***)
  129.  
  130.   InitText(ptext[0],3,1,ADR("Open ..."));
  131.   InitText(ptext[1],3,1,ADR("Save ..."));
  132.   InitText(ptext[2],3,1,ADR("About..."));
  133.   InitText(ptext[3],3,1,ADR("Quit    "));
  134.  
  135.   InitText(stext[0],3,1,ADR("Resolution »"));
  136.   InitText(stext[1],3,1,ADR("Algorithm  »"));
  137.   InitText(stext[2],3,1,ADR("Limits...   "));
  138.  
  139.   InitText(rtext[0],3,1,ADR("  Low "));
  140.   InitText(rtext[1],3,1,ADR("  Med "));
  141.   InitText(rtext[2],3,1,ADR("  High"));
  142.  
  143.   InitText(atext[0],3,1,ADR("  Int_16"));
  144.   InitText(atext[1],3,1,ADR("  Int_32"));
  145.   InitText(atext[2],3,1,ADR("  Real  "));
  146.  
  147.   InitText(xtext[0],3,1,ADR("  Title"));
  148.   InitText(xtext[1],3,1,ADR("Zoom   "));
  149.   InitText(xtext[2],3,1,ADR("Render "));
  150.  
  151.   (*** Project-Menü-Items initialisieren ***)
  152.  
  153.   menu[0].firstItem:=InitItem(pitem[0],0,0,PIB,11,COMFLAGS,ADR(ptext[0]),"O");
  154.   pitem[0].nextItem:=InitItem(pitem[1],0,11,PIB,11,COMFLAGS,ADR(ptext[1]),"S");
  155.   pitem[1].nextItem:=InitItem(pitem[2],0,22,PIB,11,COMFLAGS,ADR(ptext[2]),"A");
  156.   pitem[2].nextItem:=InitItem(pitem[3],0,40,PIB,11,COMFLAGS,ADR(ptext[3]),"Q");
  157.  
  158.   (*** Setup-Menü-Items initialisieren ***)
  159.  
  160.   menu[1].firstItem:=InitItem(sitem[0],0,0,SIB,11,FLAGS,ADR(stext[0]),NOCOM);
  161.   sitem[0].nextItem:=InitItem(sitem[1],0,11,SIB,11,FLAGS,ADR(stext[1]),NOCOM);
  162.   sitem[1].nextItem:=InitItem(sitem[2],0,22,SIB,11,COMFLAGS,
  163.                       ADR(stext[2]),"L");
  164.  
  165.   (** Resolution Subitems **)
  166.  
  167.   sitem[0].subItem :=InitItem(ritem[0],70,8,RIB,11,CKFLAGS+CHECKED,
  168.                      ADR(rtext[0]),NOCOM);
  169.   ritem[0].nextItem:=InitItem(ritem[1],70,19,RIB,11,CKFLAGS,
  170.                    ADR(rtext[1]),NOCOM);
  171.   ritem[1].nextItem:=InitItem(ritem[2],70,30,RIB,11,CKFLAGS,
  172.                    ADR(rtext[2]),NOCOM);
  173.  
  174.   (** Algorithm Subitems **)
  175.  
  176.   sitem[1].subItem :=InitItem(aitem[0],70,8,AIB,11,CKFLAGS+CHECKED,
  177.                     ADR(atext[0]),NOCOM);
  178.   aitem[0].nextItem:=InitItem(aitem[1],70,19,AIB,11,CKFLAGS,
  179.                     ADR(atext[1]),NOCOM);
  180.   aitem[1].nextItem:=InitItem(aitem[2],70,30,AIB,11,CKFLAGS,
  181.                     ADR(atext[2]),NOCOM);
  182.  
  183.   (*** Mutual Exclude einfügen: ***)
  184.  
  185.   ritem[0].mutualExclude:=LONGSET{1,2};
  186.   ritem[1].mutualExclude:=LONGSET{0,2};
  187.   ritem[2].mutualExclude:=LONGSET{0,1};
  188.  
  189.   aitem[0].mutualExclude:=LONGSET{1,2};
  190.   aitem[1].mutualExclude:=LONGSET{0,2};
  191.   aitem[2].mutualExclude:=LONGSET{0,1};
  192.  
  193.   (*** Action Menu Items ***)
  194.  
  195.   menu[2].firstItem:=InitItem(xitem[0],0,0,XIB,11,COMFLAGS,ADR(xtext[0]),"T");
  196.   xitem[0].nextItem:=InitItem(xitem[1],0,11,XIB,11,COMFLAGS,ADR(xtext[1]),"Z");
  197.   xitem[1].nextItem:=InitItem(xitem[2],0,22,XIB,11,COMFLAGS,ADR(xtext[2]),"R");
  198.  
  199. END Menu.
  200.