219 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * tkMenubutton.h --
 | |
|  *
 | |
|  *	Declarations of types and functions used to implement
 | |
|  *	the menubutton widget.
 | |
|  *
 | |
|  * Copyright (c) 1996-1997 by Sun Microsystems, Inc.
 | |
|  *
 | |
|  * See the file "license.terms" for information on usage and redistribution
 | |
|  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 | |
|  *
 | |
|  * SCCS: @(#) tkMenubutton.h 1.3 97/04/11 11:24:15
 | |
|  */
 | |
| 
 | |
| #ifndef _TKMENUBUTTON
 | |
| #define _TKMENUBUTTON
 | |
| 
 | |
| #ifndef _TKINT
 | |
| #include "tkInt.h"
 | |
| #endif
 | |
| 
 | |
| #ifdef BUILD_tk
 | |
| # undef TCL_STORAGE_CLASS
 | |
| # define TCL_STORAGE_CLASS DLLEXPORT
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * A data structure of the following type is kept for each
 | |
|  * widget managed by this file:
 | |
|  */
 | |
| 
 | |
| typedef struct {
 | |
|     Tk_Window tkwin;		/* Window that embodies the widget.  NULL
 | |
| 				 * means that the window has been destroyed
 | |
| 				 * but the data structures haven't yet been
 | |
| 				 * cleaned up.*/
 | |
|     Display *display;		/* Display containing widget.  Needed, among
 | |
| 				 * other things, so that resources can bee
 | |
| 				 * freed up even after tkwin has gone away. */
 | |
|     Tcl_Interp *interp;		/* Interpreter associated with menubutton. */
 | |
|     Tcl_Command widgetCmd;	/* Token for menubutton's widget command. */
 | |
|     char *menuName;		/* Name of menu associated with widget.
 | |
| 				 * Malloc-ed. */
 | |
| 
 | |
|     /*
 | |
|      * Information about what's displayed in the menu button:
 | |
|      */
 | |
| 
 | |
|     char *text;			/* Text to display in button (malloc'ed)
 | |
| 				 * or NULL. */
 | |
|     int underline;		/* Index of character to underline. */
 | |
|     char *textVarName;		/* Name of variable (malloc'ed) or NULL.
 | |
| 				 * If non-NULL, button displays the contents
 | |
| 				 * of this variable. */
 | |
|     Pixmap bitmap;		/* Bitmap to display or None.  If not None
 | |
| 				 * then text and textVar and underline
 | |
| 				 * are ignored. */
 | |
|     char *imageString;		/* Name of image to display (malloc'ed), or
 | |
| 				 * NULL.  If non-NULL, bitmap, text, and
 | |
| 				 * textVarName are ignored. */
 | |
|     Tk_Image image;		/* Image to display in window, or NULL if
 | |
| 				 * none. */
 | |
| 
 | |
|     /*
 | |
|      * Information used when displaying widget:
 | |
|      */
 | |
| 
 | |
|     Tk_Uid state;		/* State of button for display purposes:
 | |
| 				 * normal, active, or disabled. */
 | |
|     Tk_3DBorder normalBorder;	/* Structure used to draw 3-D
 | |
| 				 * border and background when window
 | |
| 				 * isn't active.  NULL means no such
 | |
| 				 * border exists. */
 | |
|     Tk_3DBorder activeBorder;	/* Structure used to draw 3-D
 | |
| 				 * border and background when window
 | |
| 				 * is active.  NULL means no such
 | |
| 				 * border exists. */
 | |
|     int borderWidth;		/* Width of border. */
 | |
|     int relief;			/* 3-d effect: TK_RELIEF_RAISED, etc. */
 | |
|     int highlightWidth;		/* Width in pixels of highlight to draw
 | |
| 				 * around widget when it has the focus.
 | |
| 				 * <= 0 means don't draw a highlight. */
 | |
|     XColor *highlightBgColorPtr;
 | |
| 				/* Color for drawing traversal highlight
 | |
| 				 * area when highlight is off. */
 | |
|     XColor *highlightColorPtr;	/* Color for drawing traversal highlight. */
 | |
|     int inset;			/* Total width of all borders, including
 | |
| 				 * traversal highlight and 3-D border.
 | |
| 				 * Indicates how much interior stuff must
 | |
| 				 * be offset from outside edges to leave
 | |
| 				 * room for borders. */
 | |
|     Tk_Font tkfont;		/* Information about text font, or NULL. */
 | |
|     XColor *normalFg;		/* Foreground color in normal mode. */
 | |
|     XColor *activeFg;		/* Foreground color in active mode.  NULL
 | |
| 				 * means use normalFg instead. */
 | |
|     XColor *disabledFg;		/* Foreground color when disabled.  NULL
 | |
| 				 * means use normalFg with a 50% stipple
 | |
| 				 * instead. */
 | |
|     GC normalTextGC;		/* GC for drawing text in normal mode. */
 | |
|     GC activeTextGC;		/* GC for drawing text in active mode (NULL
 | |
| 				 * means use normalTextGC). */
 | |
|     Pixmap gray;		/* Pixmap for displaying disabled text/icon if
 | |
| 				 * disabledFg is NULL. */
 | |
|     GC disabledGC;		/* Used to produce disabled effect.  If
 | |
| 				 * disabledFg isn't NULL, this GC is used to
 | |
| 				 * draw button text or icon.  Otherwise
 | |
| 				 * text or icon is drawn with normalGC and
 | |
| 				 * this GC is used to stipple background
 | |
| 				 * across it. */
 | |
|     int leftBearing;		/* Distance from text origin to leftmost drawn
 | |
| 				 * pixel (positive means to right). */
 | |
|     int rightBearing;		/* Amount text sticks right from its origin. */
 | |
|     char *widthString;		/* Value of -width option.  Malloc'ed. */
 | |
|     char *heightString;		/* Value of -height option.  Malloc'ed. */
 | |
|     int width, height;		/* If > 0, these specify dimensions to request
 | |
| 				 * for window, in characters for text and in
 | |
| 				 * pixels for bitmaps.  In this case the actual
 | |
| 				 * size of the text string or bitmap is
 | |
| 				 * ignored in computing desired window size. */
 | |
|     int wrapLength;		/* Line length (in pixels) at which to wrap
 | |
| 				 * onto next line.  <= 0 means don't wrap
 | |
| 				 * except at newlines. */
 | |
|     int padX, padY;		/* Extra space around text or bitmap (pixels
 | |
| 				 * on each side). */
 | |
|     Tk_Anchor anchor;		/* Where text/bitmap should be displayed
 | |
| 				 * inside window region. */
 | |
|     Tk_Justify justify;		/* Justification to use for multi-line text. */
 | |
|     int textWidth;		/* Width needed to display text as requested,
 | |
| 				 * in pixels. */
 | |
|     int textHeight;		/* Height needed to display text as requested,
 | |
| 				 * in pixels. */
 | |
|     Tk_TextLayout textLayout;	/* Saved text layout information. */
 | |
|     int indicatorOn;		/* Non-zero means display indicator;  0 means
 | |
| 				 * don't display. */
 | |
|     int indicatorHeight;	/* Height of indicator in pixels.  This same
 | |
| 				 * amount of extra space is also left on each
 | |
| 				 * side of the indicator. 0 if no indicator. */
 | |
|     int indicatorWidth;		/* Width of indicator in pixels, including
 | |
| 				 * indicatorHeight in padding on each side.
 | |
| 				 * 0 if no indicator. */
 | |
| 
 | |
|     /*
 | |
|      * Miscellaneous information:
 | |
|      */
 | |
| 
 | |
|     Tk_Uid direction;		/* Direction for where to pop the menu.
 | |
|     				 * Valid directions are "above", "below",
 | |
|     				 * "left", "right", and "flush". "flush"
 | |
|     				 * means that the upper left corner of the
 | |
|     				 * menubutton is where the menu pops up.
 | |
|     				 * "above" and "below" will attempt to pop
 | |
|     				 * the menu compleletly above or below
 | |
|     				 * the menu respectively.
 | |
|     				 * "left" and "right" will pop the menu
 | |
|     				 * left or right, and the active item
 | |
|     				 * will be next to the button. */
 | |
|     Tk_Cursor cursor;		/* Current cursor for window, or None. */
 | |
|     char *takeFocus;		/* Value of -takefocus option;  not used in
 | |
| 				 * the C code, but used by keyboard traversal
 | |
| 				 * scripts.  Malloc'ed, but may be NULL. */
 | |
|     int flags;			/* Various flags;  see below for
 | |
| 				 * definitions. */
 | |
| #ifdef SCM_CODE
 | |
|     char *env;			/*  -textvariable environment */
 | |
| #endif
 | |
| } TkMenuButton;
 | |
| 
 | |
| /*
 | |
|  * Flag bits for buttons:
 | |
|  *
 | |
|  * REDRAW_PENDING:		Non-zero means a DoWhenIdle handler
 | |
|  *				has already been queued to redraw
 | |
|  *				this window.
 | |
|  * POSTED:			Non-zero means that the menu associated
 | |
|  *				with this button has been posted (typically
 | |
|  *				because of an active button press).
 | |
|  * GOT_FOCUS:			Non-zero means this button currently
 | |
|  *				has the input focus.
 | |
|  */
 | |
| 
 | |
| #define REDRAW_PENDING		1
 | |
| #define POSTED			2
 | |
| #define GOT_FOCUS		4
 | |
| 
 | |
| /*
 | |
|  * The following constants define the dimensions of the cascade indicator,
 | |
|  * which is displayed if the "-indicatoron" option is true.  The units for
 | |
|  * these options are 1/10 millimeters.
 | |
|  */
 | |
| 
 | |
| #define INDICATOR_WIDTH		40
 | |
| #define INDICATOR_HEIGHT	17
 | |
| 
 | |
| /*
 | |
|  * Declaration of variables shared between the files in the button module.
 | |
|  */
 | |
| 
 | |
| extern TkClassProcs tkpMenubuttonClass;
 | |
| 
 | |
| /*
 | |
|  * Declaration of procedures used in the implementation of the button
 | |
|  * widget. 
 | |
|  */
 | |
| 
 | |
| EXTERN void		TkpComputeMenuButtonGeometry _ANSI_ARGS_((
 | |
| 			    TkMenuButton *mbPtr));
 | |
| EXTERN TkMenuButton *	TkpCreateMenuButton _ANSI_ARGS_((Tk_Window tkwin));
 | |
| EXTERN void		TkpDisplayMenuButton _ANSI_ARGS_((
 | |
| 			    ClientData clientData));
 | |
| EXTERN void 		TkpDestroyMenuButton _ANSI_ARGS_((
 | |
| 			    TkMenuButton *mbPtr));
 | |
| EXTERN void		TkMenuButtonWorldChanged _ANSI_ARGS_((
 | |
| 			    ClientData instanceData));
 | |
| 
 | |
| # undef TCL_STORAGE_CLASS
 | |
| # define TCL_STORAGE_CLASS DLLIMPORT
 | |
| 
 | |
| #endif /* _TKMENUBUTTON */
 |