home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / m / master12.zip / mastering / Newapp / MenuCB.c < prev    next >
C/C++ Source or Header  |  1992-08-19  |  4KB  |  173 lines

  1. /* MenuCB.c -- This file contains MenuCB(), a general-purpose callback
  2.                routine used for processing menu commands.  */
  3.  
  4. #include "Global.h"
  5. #include "Menu.h"
  6.  
  7. void MenuCB (w, client_data, call_data) 
  8.      Widget    w;        /*  widget id        */
  9.      XtPointer    client_data;    /*  data from application   */
  10.      XtPointer    call_data;    /*  data from widget class  */
  11. {
  12.  
  13.   Widget         button;
  14.  
  15.   int      i;
  16.  
  17.   /* Some menu commands may not return immediately, so update 
  18.      the display to prevent the application from looking dead. */
  19.   XmUpdateDisplay(topLevel);
  20.  
  21.   switch ((int)client_data)
  22.     {
  23.     case MENU_File_Open:
  24.       printf("File: Open!\n");
  25.       break;
  26.     case MENU_File_New:
  27.       printf("File: New!\n");
  28.       break;
  29.     case MENU_File_Print:
  30.       printf("File: Print!\n");
  31.       break;
  32.     case MENU_File_Save:
  33.       printf("File: Save!\n");
  34.       break;
  35.     case MENU_File_SaveAs:
  36.       printf("File: Save As!\n");
  37.       break;
  38.     case MENU_File_Exit:
  39.       XtManageChild (exitDialog);
  40.       break;
  41.         
  42.     case MENU_Edit_Undo:
  43.       printf("Edit: Undo!\n");
  44.       break;
  45.     case MENU_Edit_Cut:
  46.       printf("Edit: Cut!\n");
  47.       break;
  48.     case MENU_Edit_Copy:
  49.       printf("Edit: Copy!\n");
  50.       break;
  51.     case MENU_Edit_Paste:
  52.       printf("Edit: Paste!\n");
  53.       break;
  54.     case MENU_Edit_Clear:
  55.       printf("Edit: Clear!\n");
  56.       break;
  57.     case MENU_Edit_Delete:
  58.       printf("Edit: Delete!\n");
  59.       break;
  60.     case MENU_Printer_Switch:
  61.        printf("Printer switch\n");
  62.        break;
  63.  
  64.     case MENU_View_AsOne:
  65.     case MENU_View_AsTwo:
  66.     case MENU_View_AsThree:
  67.       /* This MenuCB() routine is called twice each time a choice is
  68.      made from the View menu: First for the toggle being unset, then
  69.      for the toggle being set.  Therefore, a response is needed only
  70.      if the toggle is set and it isn't already the current view.  */
  71.  
  72.       if (XmToggleButtonGadgetGetState(w) && (int)client_data != currentView)
  73.     {
  74.       switch ((int)client_data)
  75.         {
  76.         case MENU_View_AsOne:
  77.           printf("View: As One!\n");
  78.           break;
  79.         case MENU_View_AsTwo:
  80.           printf("View: As Two!\n");
  81.           break;
  82.         case MENU_View_AsThree:
  83.           printf("View: As Three!\n");
  84.           break;
  85.         }
  86.       currentView = (int)client_data;
  87.     }
  88.       break;
  89.  
  90.     case MENU_checkbox_A:
  91.     case MENU_checkbox_B:
  92.     case MENU_checkbox_C:
  93.       printf("Enhancement: ");
  94.       switch ((int)client_data)
  95.     {
  96.     case MENU_checkbox_A:
  97.       printf("Underline");
  98.       break;
  99.     case MENU_checkbox_B:
  100.       printf("Bold");
  101.       break;
  102.     case MENU_checkbox_C:
  103.       printf("Italic");
  104.       break;
  105.     }
  106.       if (XmToggleButtonGadgetGetState(w))
  107.     printf(" on");
  108.       else
  109.     printf(" off");
  110.       printf("!\n");
  111.       break;
  112.  
  113.     case MENU_radio_1:
  114.     case MENU_radio_2:
  115.     case MENU_radio_3:
  116.       /* Enforce radio behavior by clearing all three toggles,
  117.      then setting the toggle just chosen (w). */
  118.       XmToggleButtonGadgetSetState (opt1Toggle, False, False);
  119.       XmToggleButtonGadgetSetState (opt2Toggle, False, False);
  120.       XmToggleButtonGadgetSetState (opt3Toggle, False, False);
  121.       XmToggleButtonGadgetSetState (w,          True,  False);
  122.  
  123.       /* Behavior for the current choice goes here.  If the option
  124.      was already selected, nothing happens. */
  125.  
  126.       if (currentOption != (int)client_data)
  127.     {
  128.       currentOption = (int)client_data;
  129.  
  130.       switch (currentOption)
  131.         {
  132.         case MENU_radio_1:
  133.           printf("Enhancements: Switched to 8-point font!\n");
  134.           break;
  135.         case MENU_radio_2:
  136.           printf("Enhancements: Switched to 12-point font!\n");
  137.           break;
  138.         case MENU_radio_3:
  139.           printf("Enhancements: Switched to 16-point font!\n");
  140.           break;
  141.         }
  142.     }
  143.       break;
  144.       
  145.     case MENU_Help_OnItem:
  146.       printf("Help: On Item!\n");
  147.       break;
  148.     case MENU_Help_OnApplication:
  149.       printf("Help: On Application!\n");
  150.       break;
  151.     case MENU_Help_OnHelp:
  152.       printf("Help: On Help!\n");
  153.       break;
  154.     case MENU_Help_Index:
  155.       printf("Help: Index!\n");
  156.       break;
  157.     case MENU_Help_Tutorial:
  158.       printf("Help: Tutorial!\n");
  159.       break;
  160.     case MENU_Help_OnVersion:
  161.       printf("Help: On Version!\n");
  162.       break;
  163.       
  164.     default:
  165.       /* A client_data was received for which 
  166.      there is no case setup to handle */
  167.       printf ("Unknown client_data in MenuCB(): %d\n",client_data);
  168.       break;
  169.     }
  170.   
  171. }
  172.  
  173.