home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / MakeMenu.h < prev    next >
C/C++ Source or Header  |  1998-11-12  |  6KB  |  169 lines

  1. // $Id: MakeMenu.h,v 1.28 1998/11/12 18:01:08 zeller Exp $
  2. // Simple interface to motif menus
  3.  
  4. // Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  5. // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  6. // 
  7. // This file is part of DDD.
  8. // 
  9. // DDD is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. // 
  14. // DDD is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17. // See the GNU General Public License for more details.
  18. // 
  19. // You should have received a copy of the GNU General Public
  20. // License along with DDD -- see the file COPYING.
  21. // If not, write to the Free Software Foundation, Inc.,
  22. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. // 
  24. // DDD is the data display debugger.
  25. // For details, see the DDD World-Wide-Web page, 
  26. // `http://www.cs.tu-bs.de/softech/ddd/',
  27. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  28.  
  29. #ifndef _DDD_MakeMenu_h
  30. #define _DDD_MakeMenu_h
  31.  
  32. #include <X11/Intrinsic.h>
  33. #include "bool.h"
  34. #include "StringA.h"
  35.  
  36. // Main types
  37. typedef int MMType;
  38.  
  39. const MMType MMPush        =  0; // Create PushButton (default)
  40. const MMType MMToggle      =  1; // Create ToggleButton
  41. const MMType MMMenu        =  2; // Create CascadeButton with menu
  42. const MMType MMSeparator   =  3; // Create Separator
  43. const MMType MMLabel       =  4; // Create Label
  44. const MMType MMRadioMenu   =  5; // Create CascadeButton with RadioBox menu
  45. const MMType MMOptionMenu  =  6; // Create an option menu
  46. const MMType MMPanel       =  7; // Create a panel
  47. const MMType MMRadioPanel  =  8; // Create a panel with RadioBox menu
  48. const MMType MMButtonPanel =  9; // Like MMRadioPanel, but no radio behavior
  49. const MMType MMScale       = 10; // Create a scale
  50. const MMType MMTextField   = 11; // Create a text field
  51. const MMType MMEnterField  = 12; // Like MMTextField, but use Enter to activate
  52. const MMType MMFlatPush    = 13; // Create `flat' PushButton without shadows
  53. const MMType MMArrow       = 14; // Create an arrow button
  54. const MMType MMSpinBox     = 15; // Like MMTextField, but add two spin buttons
  55. const MMType MMComboBox    = 16; // Create a combo box
  56.  
  57. const MMType MMTypeMask    = 31; // mask to find type
  58.  
  59.  
  60. // Special attributes, to be ORed with types
  61.  
  62. typedef int MMAttr;
  63.  
  64. const MMAttr MMHelp           =   32; // Mark as help button
  65. const MMAttr MMInsensitive    =   64; // Make item insensitive
  66. const MMAttr MMUnmanaged      =  128; // Make item unmanaged
  67. const MMAttr MMUnmanagedLabel =  256; // Don't manage label (in panels)
  68. const MMAttr MMIgnore         =  512; // Don't create item
  69. const MMAttr MMVertical       = 1024; // Make panel vertical
  70. const MMAttr MMAttrMask       = ~MMTypeMask;
  71.  
  72.  
  73.  
  74. // Description data structure
  75.  
  76. struct MMDesc {
  77.     const char *name;         // Widget name
  78.     MMType type;         // Widget type
  79.     XtCallbackRec callback;     // Associated callback
  80.     MMDesc *items;         // Submenus (NULL if none)
  81.     Widget *widgetptr;           // Where to store the resulting widget
  82.     Widget widget;         // The resulting widget
  83.     Widget label;         // The resulting label
  84. };
  85.  
  86.  
  87. // Fields
  88.  
  89. /*
  90.     Type        Callback                 Items   Widget
  91.     ----------- ------------------------ ------- -------------
  92.     MMPush      XmNactivateCallback      -/-     PushButton
  93.     MMToggle    XmNvalueChangedCallback  -/-     ToggleButton
  94.     MMMenu      XmNmapCallback           items   CascadeButton
  95.     MMSeparator -/-                      -/-     Separator
  96.     MMLabel     -/-                      -/-     Label
  97. */
  98.  
  99.  
  100. // Procs
  101. typedef void (*MMItemProc)(MMDesc items[], XtPointer closure);
  102.  
  103.  
  104. // Creators
  105. Widget MMcreatePulldownMenu      (Widget parent, String name, MMDesc items[],
  106.                   ArgList args = 0, Cardinal arg = 0);
  107. Widget MMcreateRadioPulldownMenu (Widget parent, String name, MMDesc items[],
  108.                   ArgList args = 0, Cardinal arg = 0);
  109. Widget MMcreatePopupMenu         (Widget parent, String name, MMDesc items[],
  110.                   ArgList args = 0, Cardinal arg = 0);
  111. Widget MMcreateMenuBar           (Widget parent, String name, MMDesc items[],
  112.                   ArgList args = 0, Cardinal arg = 0);
  113. Widget MMcreateWorkArea          (Widget parent, String name, MMDesc items[],
  114.                   ArgList args = 0, Cardinal arg = 0);
  115. Widget MMcreatePanel             (Widget parent, String name, MMDesc items[],
  116.                   ArgList args = 0, Cardinal arg = 0);
  117. Widget MMcreateRadioPanel        (Widget parent, String name, MMDesc items[],
  118.                   ArgList args = 0, Cardinal arg = 0);
  119. Widget MMcreateButtonPanel       (Widget parent, String name, MMDesc items[],
  120.                   ArgList args = 0, Cardinal arg = 0);
  121. Widget MMcreatePushMenu          (Widget parent, String name, MMDesc items[],
  122.                   ArgList args = 0, Cardinal arg = 0);
  123.  
  124.  
  125. // Align panel items along their labels
  126. void MMadjustPanel(MMDesc items[], Dimension space = 15);
  127.  
  128. // Add callbacks
  129. void MMaddCallbacks(MMDesc items[],
  130.             XtPointer default_closure = 0,
  131.             int depth = -1);
  132. void MMaddHelpCallback(MMDesc items[], XtCallbackProc proc, int depth = -1);
  133.  
  134. // Apply PROC on all ITEMS
  135. void MMonItems(MMDesc items[], MMItemProc proc, XtPointer closure = 0,
  136.            int depth = -1);
  137.  
  138. // Add ITEMS to SHELL.  If IGNORE_SEPS is set, all separators are ignored.
  139. void MMaddItems(Widget shell, MMDesc items[], bool ignore_seps = false);
  140.  
  141. // Conveniences
  142. #define MMNoCB { 0, 0 }
  143. #define MMEnd  { 0, MMPush, MMNoCB, 0, 0, 0, 0 }
  144. #define MMSep  { "separator", MMSeparator, MMNoCB, 0, 0, 0, 0 }
  145.  
  146. // New resources
  147. #define XtNpushMenuPopupTime  "pushMenuPopupTime"
  148. #define XtCPushMenuPopupTime  "PushMenuPopupTime"
  149.  
  150. // Helpers
  151.  
  152. // Set sensitivity of W to STATE
  153. extern void set_sensitive(Widget w, bool state);
  154.  
  155. // Manage W iff STATE
  156. inline void manage_child(Widget w, bool state)
  157. {
  158.     if (w != 0)
  159.     {
  160.     if (state)
  161.         XtManageChild(w);
  162.     else
  163.         XtUnmanageChild(w);
  164.     }
  165. }
  166.  
  167. #endif // _DDD_MakeMenu_h
  168. // DON'T ADD ANYTHING BEHIND THIS #endif
  169.