tkMenubutton.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:8k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tkMenubutton.h --
  3.  *
  4.  * Declarations of types and functions used to implement
  5.  * the menubutton widget.
  6.  *
  7.  * Copyright (c) 1996-1997 by Sun Microsystems, Inc.
  8.  *
  9.  * See the file "license.terms" for information on usage and redistribution
  10.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11.  *
  12.  * RCS: @(#) $Id: tkMenubutton.h,v 1.8.4.1 2003/11/17 23:29:36 hobbs Exp $
  13.  */
  14. #ifndef _TKMENUBUTTON
  15. #define _TKMENUBUTTON
  16. #ifndef _TKINT
  17. #include "tkInt.h"
  18. #endif
  19. #ifndef _TKMENU
  20. #include "tkMenu.h"
  21. #endif
  22. #ifdef BUILD_tk
  23. # undef TCL_STORAGE_CLASS
  24. # define TCL_STORAGE_CLASS DLLEXPORT
  25. #endif
  26. /*
  27.  * Legal values for the "orient" field of TkMenubutton records.
  28.  */
  29. enum direction {
  30.     DIRECTION_ABOVE, DIRECTION_BELOW, DIRECTION_FLUSH, 
  31.     DIRECTION_LEFT, DIRECTION_RIGHT
  32. };
  33. /*
  34.  * Legal values for the "state" field of TkMenubutton records.
  35.  */
  36. enum state {
  37.     STATE_ACTIVE, STATE_DISABLED, STATE_NORMAL
  38. };
  39. /*
  40.  * A data structure of the following type is kept for each
  41.  * widget managed by this file:
  42.  */
  43. typedef struct {
  44.     Tk_Window tkwin; /* Window that embodies the widget.  NULL
  45.  * means that the window has been destroyed
  46.  * but the data structures haven't yet been
  47.  * cleaned up.*/
  48.     Display *display; /* Display containing widget.  Needed, among
  49.  * other things, so that resources can bee
  50.  * freed up even after tkwin has gone away. */
  51.     Tcl_Interp *interp; /* Interpreter associated with menubutton. */
  52.     Tcl_Command widgetCmd; /* Token for menubutton's widget command. */
  53.     Tk_OptionTable optionTable; /* Table that defines configuration options
  54.  * available for this widget. */
  55.     char *menuName; /* Name of menu associated with widget.
  56.  * Malloc-ed. */
  57.     /*
  58.      * Information about what's displayed in the menu button:
  59.      */
  60.     char *text; /* Text to display in button (malloc'ed)
  61.  * or NULL. */
  62.     int underline; /* Index of character to underline. */
  63.     char *textVarName; /* Name of variable (malloc'ed) or NULL.
  64.  * If non-NULL, button displays the contents
  65.  * of this variable. */
  66.     Pixmap bitmap; /* Bitmap to display or None.  If not None
  67.  * then text and textVar and underline
  68.  * are ignored. */
  69.     char *imageString; /* Name of image to display (malloc'ed), or
  70.  * NULL.  If non-NULL, bitmap, text, and
  71.  * textVarName are ignored. */
  72.     Tk_Image image; /* Image to display in window, or NULL if
  73.  * none. */
  74.     /*
  75.      * Information used when displaying widget:
  76.      */
  77.     enum state state;           /* State of button for display purposes:
  78.  * normal, active, or disabled. */
  79.     Tk_3DBorder normalBorder; /* Structure used to draw 3-D
  80.  * border and background when window
  81.  * isn't active.  NULL means no such
  82.  * border exists. */
  83.     Tk_3DBorder activeBorder; /* Structure used to draw 3-D
  84.  * border and background when window
  85.  * is active.  NULL means no such
  86.  * border exists. */
  87.     int borderWidth; /* Width of border. */
  88.     int relief; /* 3-d effect: TK_RELIEF_RAISED, etc. */
  89.     int highlightWidth; /* Width in pixels of highlight to draw
  90.  * around widget when it has the focus.
  91.  * <= 0 means don't draw a highlight. */
  92.     XColor *highlightBgColorPtr;
  93. /* Color for drawing traversal highlight
  94.  * area when highlight is off. */
  95.     XColor *highlightColorPtr; /* Color for drawing traversal highlight. */
  96.     int inset; /* Total width of all borders, including
  97.  * traversal highlight and 3-D border.
  98.  * Indicates how much interior stuff must
  99.  * be offset from outside edges to leave
  100.  * room for borders. */
  101.     Tk_Font tkfont; /* Information about text font, or NULL. */
  102.     XColor *normalFg; /* Foreground color in normal mode. */
  103.     XColor *activeFg; /* Foreground color in active mode.  NULL
  104.  * means use normalFg instead. */
  105.     XColor *disabledFg; /* Foreground color when disabled.  NULL
  106.  * means use normalFg with a 50% stipple
  107.  * instead. */
  108.     GC normalTextGC; /* GC for drawing text in normal mode. */
  109.     GC activeTextGC; /* GC for drawing text in active mode (NULL
  110.  * means use normalTextGC). */
  111.     Pixmap gray; /* Pixmap for displaying disabled text/icon if
  112.  * disabledFg is NULL. */
  113.     GC disabledGC; /* Used to produce disabled effect for text. */
  114.     GC stippleGC; /* Used to produce disabled stipple effect
  115.  * for images when disabled. */
  116.     int leftBearing; /* Distance from text origin to leftmost drawn
  117.  * pixel (positive means to right). */
  118.     int rightBearing; /* Amount text sticks right from its origin. */
  119.     char *widthString; /* Value of -width option.  Malloc'ed. */
  120.     char *heightString; /* Value of -height option.  Malloc'ed. */
  121.     int width, height; /* If > 0, these specify dimensions to request
  122.  * for window, in characters for text and in
  123.  * pixels for bitmaps.  In this case the actual
  124.  * size of the text string or bitmap is
  125.  * ignored in computing desired window size. */
  126.     int wrapLength; /* Line length (in pixels) at which to wrap
  127.  * onto next line.  <= 0 means don't wrap
  128.  * except at newlines. */
  129.     int padX, padY; /* Extra space around text or bitmap (pixels
  130.  * on each side). */
  131.     Tk_Anchor anchor; /* Where text/bitmap should be displayed
  132.  * inside window region. */
  133.     Tk_Justify justify; /* Justification to use for multi-line text. */
  134.     int textWidth; /* Width needed to display text as requested,
  135.  * in pixels. */
  136.     int textHeight; /* Height needed to display text as requested,
  137.  * in pixels. */
  138.     Tk_TextLayout textLayout; /* Saved text layout information. */
  139.     int indicatorOn; /* Non-zero means display indicator;  0 means
  140.  * don't display. */
  141.     int indicatorHeight; /* Height of indicator in pixels.  This same
  142.  * amount of extra space is also left on each
  143.  * side of the indicator. 0 if no indicator. */
  144.     int indicatorWidth; /* Width of indicator in pixels, including
  145.  * indicatorHeight in padding on each side.
  146.  * 0 if no indicator. */
  147.     /*
  148.      * Miscellaneous information:
  149.      */
  150.     int compound;               /* Value of -compound option; specifies whether
  151.                                  * the menubutton should show both an image and
  152.                                  * text, and, if so, how. */
  153.     enum direction direction; /* Direction for where to pop the menu.
  154.       * Valid directions are "above", "below",
  155.       * "left", "right", and "flush". "flush"
  156.       * means that the upper left corner of the
  157.       * menubutton is where the menu pops up.
  158.       * "above" and "below" will attempt to pop
  159.       * the menu compleletly above or below
  160.       * the menu respectively.
  161.       * "left" and "right" will pop the menu
  162.       * left or right, and the active item
  163.       * will be next to the button. */
  164.     Tk_Cursor cursor; /* Current cursor for window, or None. */
  165.     char *takeFocus; /* Value of -takefocus option;  not used in
  166.  * the C code, but used by keyboard traversal
  167.  * scripts.  Malloc'ed, but may be NULL. */
  168.     int flags; /* Various flags;  see below for
  169.  * definitions. */
  170. } TkMenuButton;
  171. /*
  172.  * Flag bits for buttons:
  173.  *
  174.  * REDRAW_PENDING: Non-zero means a DoWhenIdle handler
  175.  * has already been queued to redraw
  176.  * this window.
  177.  * POSTED: Non-zero means that the menu associated
  178.  * with this button has been posted (typically
  179.  * because of an active button press).
  180.  * GOT_FOCUS: Non-zero means this button currently
  181.  * has the input focus.
  182.  */
  183. #define REDRAW_PENDING 1
  184. #define POSTED 2
  185. #define GOT_FOCUS 4
  186. /*
  187.  * The following constants define the dimensions of the cascade indicator,
  188.  * which is displayed if the "-indicatoron" option is true.  The units for
  189.  * these options are 1/10 millimeters.
  190.  */
  191. #define INDICATOR_WIDTH 40
  192. #define INDICATOR_HEIGHT 17
  193. /*
  194.  * Declaration of variables shared between the files in the button module.
  195.  */
  196. extern Tk_ClassProcs tkpMenubuttonClass;
  197. /*
  198.  * Declaration of procedures used in the implementation of the button
  199.  * widget. 
  200.  */
  201. EXTERN void TkpComputeMenuButtonGeometry _ANSI_ARGS_((
  202.     TkMenuButton *mbPtr));
  203. EXTERN TkMenuButton * TkpCreateMenuButton _ANSI_ARGS_((Tk_Window tkwin));
  204. EXTERN void TkpDisplayMenuButton _ANSI_ARGS_((
  205.     ClientData clientData));
  206. EXTERN void  TkpDestroyMenuButton _ANSI_ARGS_((
  207.     TkMenuButton *mbPtr));
  208. EXTERN void TkMenuButtonWorldChanged _ANSI_ARGS_((
  209.     ClientData instanceData));
  210. # undef TCL_STORAGE_CLASS
  211. # define TCL_STORAGE_CLASS DLLIMPORT
  212. #endif /* _TKMENUBUTTON */