home *** CD-ROM | disk | FTP | other *** search
- Program GadtoolsMenu;
-
- {* gadtoolsmenu.p
- ** Example showing the basic usage of the menu system with a window.
- ** Menu layout is done with GadTools, as is recommended for applications.
- **
- *}
-
- {
- Changed to use TAGS and pas2c.
- 1 Nov 1998.
-
- nils.sjoholm@mailbox.swipnet.se
- }
-
- uses Exec, Intuition, Utility, GadTools, vartags;
-
-
-
- const
-
- mynewmenu : array[0..15] of tNewMenu = (
- (nm_Type: NM_TITLE; nm_Label:'Project'; nm_CommKey: NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_ITEM; nm_Label:'Open...'; nm_CommKey:'O'; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_ITEM; nm_Label:'Save'; nm_CommKey:'S'; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_ITEM; nm_Label:nil; nm_CommKey: NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
-
- (nm_Type: NM_ITEM; nm_Label:'Print'; nm_CommKey: NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_SUB; nm_Label:'Draft'; nm_CommKey: NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_SUB; nm_Label:'NLQ'; nm_CommKey: NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_ITEM; nm_Label:nil; nm_CommKey: NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
-
- (nm_Type: NM_ITEM; nm_Label:'Quit...'; nm_CommKey:'Q'; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
-
- (nm_Type: NM_TITLE; nm_Label:'Edit'; nm_CommKey: NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_ITEM; nm_Label:'Cut'; nm_CommKey:'X'; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_ITEM; nm_Label:'Copy'; nm_CommKey:'C'; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_ITEM; nm_Label:'Paste'; nm_CommKey:'V'; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
- (nm_Type: NM_ITEM; nm_Label:nil; nm_CommKey: NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
-
- (nm_Type: NM_ITEM; nm_Label:'Undo'; nm_CommKey:'Z'; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL),
-
- (nm_Type: NM_END; nm_Label:NIL; nm_CommKey:NIL; nm_Flags:0;
- nm_MutualExclude:0; nm_UserData:NIL));
-
- var
- win : pWindow;
- myVisualInfo : Pointer;
- menuStrip : pMenu;
- msg : pMessage;
- done : boolean;
-
- Procedure Die;
- begin
- if assigned(MenuStrip) then begin
- ClearMenuStrip(win);
- FreeMenus(MenuStrip);
- end;
- if assigned(myVisualInfo) then FreeVisualInfo(myVisualInfo);
- if assigned(win) then CloseWindow(win);
- Halt(0);
- end;
-
-
-
-
- {*
- ** Watch the menus and wait for the user to select the close gadget
- ** or quit from the menus.
- *}
- PROCEDURE ProcessIDCMP;
- VAR
- IMessage : tIntuiMessage;
- IPtr : pIntuiMessage;
-
- Procedure ProcessMenu;
- var
- MenuNumber : Word;
- ItemNumber : Word;
- SubItemNumber : Word;
-
- begin
- if IMessage.Code = MENUNULL then
- Exit;
-
- MenuNumber := MenuNum(IMessage.Code);
- ItemNumber := ItemNum(IMessage.Code);
- SubItemNumber := SubNum(IMessage.Code);
-
- if (MenuNumber = 0) and (ItemNumber = 5) then done := true;
- end;
-
- begin
- IPtr := pIntuiMessage(Msg);
- IMessage := IPtr^;
- ReplyMsg(Msg);
-
- case IMessage.IClass of
- IDCMP_MENUPICK : ProcessMenu;
- IDCMP_CLOSEWINDOW : done := True;
- end;
- end;
-
- {*
- ** Open all of the required libraries and set-up the menus.
- *}
-
- begin
-
- win := OpenWindowTagList(NIL, TAGS(
- WA_Width, 400,
- WA_Activate, ltrue,
- WA_Height, 100,
- WA_CloseGadget, ltrue,
- WA_Title, Longstr('Menu Test Window'),
- WA_IDCMP, IDCMP_CLOSEWINDOW or IDCMP_MENUPICK,
- TAG_END));
-
- if win = nil then die;
-
- myVisualInfo := GetVisualInfoA(win^.WScreen,nil);
- if myVisualInfo = nil then die;
-
- {
- make the barlabels
- }
- mynewmenu[3].nm_Label := PChar(NM_BARLABEL);
- mynewmenu[7].nm_Label := PChar(NM_BARLABEL);
- mynewmenu[13].nm_Label := PChar(NM_BARLABEL);
-
- if pExecBase(_ExecBase)^.LibNode.Lib_Version >= 39 then begin
- MenuStrip := CreateMenusA(@mynewmenu, TAGS(
- GTMN_FrontPen, 1,
- TAG_END));
- end else MenuStrip := CreateMenusA(@mynewmenu,NIL);
-
- if menuStrip = nil then die;
-
- if not LayoutMenusA(menuStrip, myVisualInfo,nil) then die;
-
- if not SetMenuStrip(win,menuStrip) then die;
-
- repeat
- Msg := WaitPort(win^.UserPort);
- Msg := GetMsg(win^.UserPort);
- ProcessIDCMP;
- until done;
- die;
- end.
-
-
-