home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / m / motifpg2.zip / ch13 / xmenu7.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  3KB  |  118 lines

  1. /*
  2.  * Copyright 1989, 1992 O'Reilly and Associates, Inc.
  3.  * See ../Copyright for complete rights and liability information.
  4.  */
  5.  
  6. /*
  7.  * xmenu7.c - SimpleMenu menu
  8.  */
  9.  
  10. #include <stdio.h>
  11.  
  12. #include <X11/Intrinsic.h>
  13. #include <X11/StringDefs.h>
  14. #include <X11/bitmaps/xlogo16>
  15.  
  16. #include <X11/Xaw/MenuButton.h>
  17. #include <X11/Xaw/SimpleMenu.h>
  18. #include <X11/Xaw/SmeBSB.h>
  19. #include <X11/Xaw/SmeLine.h>
  20.  
  21. #define NUM_MENU_ITEMS 12
  22.  
  23. static String menu_entry_names[] = {
  24.   "quit",
  25.   "item1",
  26.   "item2",
  27.   "item3",
  28.   "line",
  29.   "item5",
  30.   "item6",
  31.   "item7",
  32.   "blank",
  33.   "menu1",
  34.   "menu2",
  35.   "menu3",
  36. };
  37.  
  38. static Boolean status[NUM_MENU_ITEMS];
  39. static Pixmap mark;
  40.  
  41. /* ARGSUSED */
  42. static void
  43. MenuSelect(w, client_data, garbage)
  44. Widget w;
  45. XtPointer client_data;
  46. XtPointer garbage;  /* call_data */
  47. {
  48.     int pane_num = (int) client_data;
  49.  
  50.     printf("Menu item %s has been selected.\n", XtName(w));
  51.  
  52.     if (pane_num == 0)          /* quit selected. */
  53.         exit(0);
  54.     
  55.     if (status[pane_num]) 
  56.         XtVaSetValues(w, 
  57.                 XtNleftBitmap, None,
  58.                 NULL);
  59.     else 
  60.         XtVaSetValues(w, 
  61.                 XtNleftBitmap, mark,
  62.                 NULL);
  63.  
  64.     status[pane_num] = !status[pane_num];
  65. }
  66.  
  67. void
  68. main(argc, argv)
  69. char **argv;
  70. int argc;
  71. {
  72.     XtAppContext app_context;
  73.     Widget topLevel, menu, button, entry;
  74.     int i;
  75.     Arg arglist[1];
  76.  
  77.     topLevel = XtVaAppInitialize(
  78.         &app_context,       /* Application context */
  79.         "XMenu7",           /* Application class */
  80.         NULL, 0,            /* command line option list */
  81.         &argc, argv,        /* command line args */
  82.         NULL,               /* for missing app-defaults file */
  83.         NULL);              /* terminate varargs list */
  84.  
  85.     button = XtCreateManagedWidget("menuButton", 
  86.                           menuButtonWidgetClass, topLevel,
  87.                           arglist, (Cardinal) 0);
  88.  
  89.     menu = XtCreatePopupShell("menu", simpleMenuWidgetClass, 
  90.                           button, NULL, 0);
  91.   
  92.     for (i = 0; i < NUM_MENU_ITEMS ; i++) {
  93.         String item = menu_entry_names[i];
  94.  
  95.  
  96.         if (i == 4)   /* use a line pane */
  97.             entry = XtCreateManagedWidget(item,
  98.                     smeLineObjectClass, menu,
  99.                     NULL, 0);
  100.         else if (i == 8) /* blank entry */
  101.             entry = XtCreateManagedWidget(item, smeObjectClass, menu,
  102.                     NULL, 0);
  103.         else {
  104.             entry = XtCreateManagedWidget(item, smeBSBObjectClass, 
  105.                     menu, NULL, 0);
  106.  
  107.             XtAddCallback(entry, XtNcallback, MenuSelect, (XtPointer) i);
  108.         }
  109.     }
  110.  
  111.     mark = XCreateBitmapFromData(XtDisplay(topLevel),
  112.             RootWindowOfScreen(XtScreen(topLevel)),
  113.             xlogo16_bits, xlogo16_width, xlogo16_height);
  114.  
  115.     XtRealizeWidget(topLevel);
  116.     XtAppMainLoop(app_context);
  117. }
  118.