home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1991-09-19 | 6.2 KB | 200 lines |
- IMPLEMENTATION MODULE Menu;
-
- FROM Intuition IMPORT Menu, MenuPtr, menuEnabled, MenuItem, MenuItemPtr,
- SetMenuStrip, ClearMenuStrip, WindowPtr, IntuiText,
- IntuiTextPtr, MenuItemFlags, MenuItemFlagSet,
- commWidth, ItemAddress, IDCMPFlagSet, AutoRequest;
-
- FROM Graphics IMPORT jam2;
-
- FROM SYSTEM IMPORT ADR, ADDRESS, LONGSET;
-
- CONST
- MLO=10; (* Left Menü Offset *)
- PMB=64; (* Project Menü Breite *)
- SMB=48; (* Setup Menü Breite *)
- AMB=56; (* Action Menü Breite *)
-
- PIB=80+commWidth; (* Project Item Breite *)
- SIB=120; (* Setup Item Breite *)
- RIB=56; (* Resolution (Sub)Items Breite *)
- AIB=72; (* Algorithm (Sub)Items Breite *)
- XIB=80+commWidth; (* Action Item Breite *)
-
- FLAGS=MenuItemFlagSet{itemText, itemEnabled, highComp};
- COMFLAGS=FLAGS+MenuItemFlagSet{commSeq};
- CKFLAGS =FLAGS+MenuItemFlagSet{checkIt};
- CHECKED =MenuItemFlagSet{checked};
- TOGGLE =COMFLAGS+MenuItemFlagSet{menuToggle,checkIt,checked};
- NOCOM =CHAR(0);
-
- VAR
- menu : ARRAY[0..2] OF Menu; (* Menüs: Project, Setup, Action *)
- pitem: ARRAY[0..3] OF MenuItem; (* Load,Save,About,Quit *)
- ptext: ARRAY[0..3] OF IntuiText;
- sitem: ARRAY[0..2] OF MenuItem; (* Resolution, Algorithm, Limits *)
- stext: ARRAY[0..2] OF IntuiText;
- ritem: ARRAY[0..2] OF MenuItem; (* Subitems: Low, Med, High *)
- rtext: ARRAY[0..2] OF IntuiText;
- aitem: ARRAY[0..2] OF MenuItem; (* Subitems: Int16, Int32, Real *)
- atext: ARRAY[0..2] OF IntuiText;
- xitem: ARRAY[0..2] OF MenuItem; (* Title, Zoom, Render *)
- xtext: ARRAY[0..2] OF IntuiText;
- MyMenu: MenuPtr;
-
-
- PROCEDURE SetMenu(VAR w:WindowPtr);
- BEGIN
- xitem[0].flags:=TOGGLE; (* Title Haken *)
- (* Haken für Auflösung setzen *)
- EXCL(ritem[0].flags,checked);
- EXCL(ritem[1].flags,checked);
- EXCL(ritem[2].flags,checked);
- IF w^.width<=320 THEN
- INCL(ritem[0].flags,checked)
- ELSE
- IF w^.height<=256 THEN
- INCL(ritem[1].flags,checked)
- ELSE
- INCL(ritem[2].flags,checked)
- END
- END;
- IF SetMenuStrip(w, MyMenu) THEN END
- END SetMenu;
-
-
- PROCEDURE MenuNum(x:CARDINAL):CARDINAL;
- BEGIN RETURN(x MOD 020H) END MenuNum;
-
-
- PROCEDURE ItemNum(x:CARDINAL):CARDINAL;
- BEGIN RETURN((x DIV 020H) MOD 020H) END ItemNum;
-
-
- PROCEDURE SubNum(x:CARDINAL):CARDINAL;
- BEGIN RETURN(x DIV 0800H) END SubNum;
-
-
- PROCEDURE NextSelect(x:CARDINAL):CARDINAL;
- VAR dummy:MenuItemPtr;
- BEGIN
- dummy:=ItemAddress(ADR(menu[0]),x);
- RETURN dummy^.nextSelect;
- END NextSelect;
-
-
- PROCEDURE InitMenu(VAR m:Menu;txt:ADDRESS;x,w:INTEGER):MenuPtr;
- BEGIN
- WITH m DO
- leftEdge :=x; topEdge:=0; width:=w;
- height :=10; menuName:=txt; flags:={menuEnabled};
- firstItem:=NIL; nextMenu:=NIL; jazzX:=0;
- jazzY :=0; beatX:=0; beatY:=0;
- END;
- RETURN ADR(m);
- END InitMenu;
-
-
- PROCEDURE InitItem(VAR mi:MenuItem; x,y,w,h:INTEGER;
- flgs:MenuItemFlagSet; ifill:ADDRESS;
- com:CHAR):MenuItemPtr;
- BEGIN
- WITH mi DO
- leftEdge:=x; topEdge:=y; width:=w;
- height :=h; flags:=flgs; subItem:=NIL;
- nextItem:=NIL; itemFill:=ifill; selectFill:=NIL;
- command :=com; mutualExclude:=LONGSET{};
- END;
- RETURN ADR(mi);
- END InitItem;
-
-
- PROCEDURE InitText(VAR it:IntuiText; x,y:INTEGER; txt:ADDRESS);
- BEGIN
- WITH it DO
- frontPen:=3; backPen :=1; drawMode :=jam2;
- leftEdge:=x; topEdge :=y; iTextFont:=NIL;
- iText :=txt; nextText:=NIL;
- END
- END InitText;
-
-
- BEGIN (*** Strukturen initialisieren ***)
-
- MyMenu :=InitMenu(menu[0],ADR("Project"),MLO,PMB);
- menu[0].nextMenu:=InitMenu(menu[1],ADR("Setup"),2*MLO+PMB,SMB);
- menu[1].nextMenu:=InitMenu(menu[2],ADR("Action"),3*MLO+PMB+SMB,AMB);
-
- (*** Menü Texte initialisieren ***)
-
- InitText(ptext[0],3,1,ADR("Open ..."));
- InitText(ptext[1],3,1,ADR("Save ..."));
- InitText(ptext[2],3,1,ADR("About..."));
- InitText(ptext[3],3,1,ADR("Quit "));
-
- InitText(stext[0],3,1,ADR("Resolution »"));
- InitText(stext[1],3,1,ADR("Algorithm »"));
- InitText(stext[2],3,1,ADR("Limits... "));
-
- InitText(rtext[0],3,1,ADR(" Low "));
- InitText(rtext[1],3,1,ADR(" Med "));
- InitText(rtext[2],3,1,ADR(" High"));
-
- InitText(atext[0],3,1,ADR(" Int_16"));
- InitText(atext[1],3,1,ADR(" Int_32"));
- InitText(atext[2],3,1,ADR(" Real "));
-
- InitText(xtext[0],3,1,ADR(" Title"));
- InitText(xtext[1],3,1,ADR("Zoom "));
- InitText(xtext[2],3,1,ADR("Render "));
-
- (*** Project-Menü-Items initialisieren ***)
-
- menu[0].firstItem:=InitItem(pitem[0],0,0,PIB,11,COMFLAGS,ADR(ptext[0]),"O");
- pitem[0].nextItem:=InitItem(pitem[1],0,11,PIB,11,COMFLAGS,ADR(ptext[1]),"S");
- pitem[1].nextItem:=InitItem(pitem[2],0,22,PIB,11,COMFLAGS,ADR(ptext[2]),"A");
- pitem[2].nextItem:=InitItem(pitem[3],0,40,PIB,11,COMFLAGS,ADR(ptext[3]),"Q");
-
- (*** Setup-Menü-Items initialisieren ***)
-
- menu[1].firstItem:=InitItem(sitem[0],0,0,SIB,11,FLAGS,ADR(stext[0]),NOCOM);
- sitem[0].nextItem:=InitItem(sitem[1],0,11,SIB,11,FLAGS,ADR(stext[1]),NOCOM);
- sitem[1].nextItem:=InitItem(sitem[2],0,22,SIB,11,COMFLAGS,
- ADR(stext[2]),"L");
-
- (** Resolution Subitems **)
-
- sitem[0].subItem :=InitItem(ritem[0],70,8,RIB,11,CKFLAGS+CHECKED,
- ADR(rtext[0]),NOCOM);
- ritem[0].nextItem:=InitItem(ritem[1],70,19,RIB,11,CKFLAGS,
- ADR(rtext[1]),NOCOM);
- ritem[1].nextItem:=InitItem(ritem[2],70,30,RIB,11,CKFLAGS,
- ADR(rtext[2]),NOCOM);
-
- (** Algorithm Subitems **)
-
- sitem[1].subItem :=InitItem(aitem[0],70,8,AIB,11,CKFLAGS+CHECKED,
- ADR(atext[0]),NOCOM);
- aitem[0].nextItem:=InitItem(aitem[1],70,19,AIB,11,CKFLAGS,
- ADR(atext[1]),NOCOM);
- aitem[1].nextItem:=InitItem(aitem[2],70,30,AIB,11,CKFLAGS,
- ADR(atext[2]),NOCOM);
-
- (*** Mutual Exclude einfügen: ***)
-
- ritem[0].mutualExclude:=LONGSET{1,2};
- ritem[1].mutualExclude:=LONGSET{0,2};
- ritem[2].mutualExclude:=LONGSET{0,1};
-
- aitem[0].mutualExclude:=LONGSET{1,2};
- aitem[1].mutualExclude:=LONGSET{0,2};
- aitem[2].mutualExclude:=LONGSET{0,1};
-
- (*** Action Menu Items ***)
-
- menu[2].firstItem:=InitItem(xitem[0],0,0,XIB,11,COMFLAGS,ADR(xtext[0]),"T");
- xitem[0].nextItem:=InitItem(xitem[1],0,11,XIB,11,COMFLAGS,ADR(xtext[1]),"Z");
- xitem[1].nextItem:=InitItem(xitem[2],0,22,XIB,11,COMFLAGS,ADR(xtext[2]),"R");
-
- END Menu.
-