home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
559b.lha
/
FFEX
/
source
/
menu.mod
< prev
next >
Wrap
Text File
|
1991-09-19
|
6KB
|
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.