home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 4 / CD_Magazyn_EXEC_nr_4.iso / Recent / dev / c / apputil.lha / apputil / menus.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-11-04  |  1.6 KB  |  81 lines

  1. /*
  2.  * menus.c
  3.  * =======
  4.  * Menu utility functions.
  5.  *
  6.  * Copyright (C) 1999-2000 HÃ¥kan L. Younes (lorens@hem.passagen.se)
  7.  */
  8.  
  9. #include <exec/memory.h>
  10.  
  11. #include <proto/exec.h>
  12. #include <proto/gadtools.h>
  13. #include <proto/intuition.h>
  14.  
  15. #include "apputil.h"
  16.  
  17.  
  18. struct Menu *CreateLocMenusA(struct NewMenu *newMenu, APTR vi,
  19.                  struct TagItem *tagList) {
  20.   LONG i;
  21.   struct NewMenu *nm;
  22.   struct Menu *menu;
  23.  
  24.   for (i = 0; newMenu[i++].nm_Type != NM_END; ) {
  25.   }
  26.  
  27.   nm = AllocVec(i * sizeof *nm, MEMF_PUBLIC);
  28.   if (nm == NULL) {
  29.     return NULL;
  30.   }
  31.  
  32.   while (i--) {
  33.     nm[i] = newMenu[i];
  34.     if (nm[i].nm_Label != NM_BARLABEL) {
  35.       nm[i].nm_CommKey = GetLocString((ULONG)nm[i].nm_Label);
  36.       nm[i].nm_Label = nm[i].nm_CommKey + 2;
  37.       if (nm[i].nm_CommKey[0] == ' ') {
  38.     nm[i].nm_CommKey = NULL;
  39.       }
  40.     }
  41.   }
  42.  
  43.   menu = CreateMenusA(nm, tagList);
  44.   if (menu != NULL) {
  45.     if (!LayoutMenus(menu, vi, GTMN_NewLookMenus, TRUE, TAG_DONE)) {
  46.       FreeMenus(menu);
  47.       menu = NULL;
  48.     }
  49.   }
  50.  
  51.   FreeVec(nm);
  52.  
  53.   return menu;
  54. }
  55.  
  56.  
  57. struct Menu *CreateLocMenus(struct NewMenu *newMenu, APTR vi,
  58.                 ULONG tag, ...) {
  59.   return CreateLocMenusA(newMenu, vi, (struct TagItem *)&tag);
  60. }
  61.  
  62.  
  63. VOID ProcessMenuEvents(struct Window *win, UWORD menuNum) {
  64.   struct MenuItem *menuItem;
  65.   APTR userData;
  66.  
  67.   while (menuNum != MENUNULL) {
  68.     menuItem = ItemAddress(win->MenuStrip, (ULONG)menuNum);
  69.     userData = GTMENUITEM_USERDATA(menuItem);
  70.     if (userData != NULL) {
  71.       if (menuItem->Flags & CHECKIT) {
  72.     (*(CheckedMenuAction)userData)(menuItem->Flags & CHECKED);
  73.       } else {
  74.     (*(MenuAction)userData)();
  75.       }
  76.     }
  77.  
  78.     menuNum = menuItem->NextSelect;
  79.   }
  80. }
  81.