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 / xmenu3.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  4KB  |  140 lines

  1. /*
  2.  * Copyright 1989, 1992 O'Reilly and Associates, Inc.
  3.  * See ../Copyright for complete rights and liability information.
  4.  */
  5.  
  6.  
  7. /* 
  8.  *  xmenu3.c - pulldown menu invoked with MenuButton widget
  9.  */
  10.  
  11. /*
  12.  *  So that we can use fprintf:
  13.  */
  14. #include <stdio.h>
  15.  
  16. /* 
  17.  * Standard Toolkit include files:
  18.  */
  19. #include <X11/Intrinsic.h>
  20. #include <X11/StringDefs.h>
  21.  
  22. #include <X11/Shell.h>
  23.  
  24. /*
  25.  * Public include files for widgets used in this file.
  26.  */
  27. #include <X11/Xaw/Command.h>
  28. #include <X11/Xaw/MenuButton.h>
  29. #include <X11/Xaw/Box.h>
  30. #include <X11/Xaw/Label.h>
  31.  
  32. Widget pshell;
  33.  
  34. /*
  35.  * quit button callback function
  36.  */
  37. /* ARGSUSED */
  38. void Quit(w, client_data, call_data)
  39. Widget w;
  40. XtPointer client_data, call_data;
  41.     exit(0); 
  42. }
  43.  
  44. /*
  45.  * menu pane button callback function
  46.  */
  47. /* ARGSUSED */
  48. void PaneChosen(w, client_data, call_data)
  49. Widget w;
  50. XtPointer client_data;  /* cast to pane_number */
  51. XtPointer call_data;    /* unused */
  52.     int pane_number = (int) client_data;
  53.     printf("Pane %d chosen.\n", pane_number);
  54.     /* popdown the parent of the parent (pshell) */
  55.     XtPopdown(pshell);
  56. }
  57.  
  58. main(argc, argv)
  59. int argc;
  60. char **argv;
  61. {
  62.     XtAppContext app_context;
  63.     Widget topLevel, box, pressme, quit, menulabel, menubox, menupane[10];
  64.     int i;
  65.     String buf[50];
  66.  
  67.     XtSetLanguageProc(NULL, (XtLanguageProc)NULL, NULL);
  68.  
  69.     topLevel = XtVaAppInitialize(
  70.         &app_context,       /* Application context */
  71.         "XMenu3",           /* application class name */
  72.         NULL, 0,            /* command line option list */
  73.         &argc, argv,        /* command line args */
  74.         NULL,               /* for missing app-defaults file */
  75.         NULL);              /* terminate varargs list */
  76.  
  77.     box = XtCreateManagedWidget(
  78.         "box",      /* widget name */
  79.         boxWidgetClass, /* widget class */
  80.         topLevel,       /* parent widget*/
  81.         NULL,       /* argument list*/
  82.         0           /* arglist size */
  83.         );
  84.  
  85.     quit = XtCreateManagedWidget(
  86.         "quit",         /* widget name */
  87.         commandWidgetClass,     /* widget class */
  88.         box,            /* parent widget*/
  89.         NULL,           /* argument list*/
  90.         0               /* arglist size */
  91.         );
  92.  
  93.     pressme = XtVaCreateManagedWidget(
  94.         "pressme",          /* widget name   */
  95.         menuButtonWidgetClass,  /* widget class */
  96.         box,            /* parent widget*/
  97.         XtNmenuName, "pshell",
  98.         NULL);
  99.  
  100.     pshell = XtCreatePopupShell(
  101.         "pshell",        /* widget name */
  102.         transientShellWidgetClass, /* widget class */
  103.         pressme,        /* parent widget */
  104.         NULL,            /* argument list */
  105.         0            /* arglist size */
  106.         );
  107.  
  108.     menubox = XtCreateManagedWidget(
  109.         "menubox",              /* widget name   */
  110.         boxWidgetClass,         /* widget class */
  111.         pshell,                 /* parent widget*/
  112.         NULL,                   /* argument list*/
  113.         0                   /* arglist size */
  114.     );
  115.     
  116.     menulabel = XtCreateManagedWidget(
  117.         "menulabel",            /* widget name   */
  118.         labelWidgetClass,       /* widget class */
  119.         menubox,                /* parent widget*/
  120.         NULL,                   /* argument list*/
  121.         0                   /* arglist size */
  122.         );
  123.  
  124.     for (i = 0; i < 10; i++) {
  125.       sprintf(buf, "menupane%d", i);
  126.       menupane[i] = XtCreateManagedWidget(buf,   /* widget name   */
  127.                     commandWidgetClass, menubox, NULL, 0);
  128.  
  129.       XtAddCallback(menupane[i], XtNcallback, PaneChosen, i);
  130.     }
  131.  
  132.     XtAddCallback(quit, XtNcallback, Quit, NULL);
  133.  
  134.     XtRealizeWidget(topLevel);
  135.  
  136.     XtAppMainLoop(app_context);
  137. }
  138.