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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tkButton.h --
  3.  *
  4.  * Declarations of types and functions used to implement
  5.  * button-like widgets.
  6.  *
  7.  * Copyright (c) 1996-1998 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: tkButton.h,v 1.9.2.1 2003/04/26 02:53:46 hobbs Exp $
  13.  */
  14. #ifndef _TKBUTTON
  15. #define _TKBUTTON
  16. #ifndef _TKINT
  17. #include "tkInt.h"
  18. #endif
  19. #ifdef BUILD_tk
  20. # undef TCL_STORAGE_CLASS
  21. # define TCL_STORAGE_CLASS DLLEXPORT
  22. #endif
  23. /*
  24.  * Legal values for the "compound" field of TkButton records.
  25.  */
  26. enum compound {
  27.     COMPOUND_BOTTOM, COMPOUND_CENTER, COMPOUND_LEFT, COMPOUND_NONE,
  28. COMPOUND_RIGHT, COMPOUND_TOP
  29. };
  30. /*
  31.  * Legal values for the "state" field of TkButton records.
  32.  */
  33. enum state {
  34.     STATE_ACTIVE, STATE_DISABLED, STATE_NORMAL
  35. };
  36. /*
  37.  * Legal values for the "defaultState" field of TkButton records.
  38.  */
  39. enum defaultState {
  40.     DEFAULT_ACTIVE, DEFAULT_DISABLED, DEFAULT_NORMAL
  41. };
  42. /*
  43.  * A data structure of the following type is kept for each
  44.  * widget managed by this file:
  45.  */
  46. typedef struct {
  47.     Tk_Window tkwin; /* Window that embodies the button.  NULL
  48.  * means that the window has been destroyed. */
  49.     Display *display; /* Display containing widget.  Needed to
  50.  * free up resources after tkwin is gone. */
  51.     Tcl_Interp *interp; /* Interpreter associated with button. */
  52.     Tcl_Command widgetCmd; /* Token for button's widget command. */
  53.     int type; /* Type of widget, such as TYPE_LABEL:
  54.  * restricts operations that may be performed
  55.  * on widget.  See below for legal values. */
  56.     Tk_OptionTable optionTable; /* Table that defines configuration options
  57.  * available for this widget. */
  58.     /*
  59.      * Information about what's in the button.
  60.      */
  61.     Tcl_Obj *textPtr; /* Value of -text option: specifies text to
  62.  * display in button. */
  63.     int underline; /* Value of -underline option: specifies
  64.  * index of character to underline.  < 0 means
  65.  * don't underline anything. */
  66.     Tcl_Obj *textVarNamePtr; /* Value of -textvariable option: specifies
  67.  * name of variable or NULL.  If non-NULL,
  68.  * button displays the contents of this
  69.  * variable. */
  70.     Pixmap bitmap; /* Value of -bitmap option.  If not None,
  71.  * specifies bitmap to display and text and
  72.  * textVar are ignored. */
  73.     Tcl_Obj *imagePtr; /* Value of -image option: specifies image
  74.  * to display in window, or NULL if none.
  75.  * If non-NULL, bitmap, text, and textVarName
  76.  * are ignored.*/
  77.     Tk_Image image; /* Derived from imagePtr by calling
  78.  * Tk_GetImage, or NULL if imagePtr is NULL. */
  79.     Tcl_Obj *selectImagePtr; /* Value of -selectimage option: specifies
  80.  * image to display in window when selected,
  81.  * or NULL if none.  Ignored if imagePtr is
  82.  * NULL. */
  83.     Tk_Image selectImage; /* Derived from selectImagePtr by calling
  84.  * Tk_GetImage, or NULL if selectImagePtr
  85.  * is NULL. */
  86.     /*
  87.      * Information used when displaying widget:
  88.      */
  89.     enum state state; /* Value of -state option: specifies
  90.  * state of button for display purposes.*/
  91.     Tk_3DBorder normalBorder; /* Value of -background option: specifies
  92.  * color for background (and border) when
  93.  * window isn't active. */
  94.     Tk_3DBorder activeBorder; /* Value of -activebackground option:
  95.  * this is the color used to draw 3-D border
  96.  * and background when widget is active. */
  97.     Tcl_Obj *borderWidthPtr; /* Value of -borderWidth option: specifies
  98.  * width of border in pixels. */
  99.     int borderWidth; /* Integer value corresponding to
  100.  * borderWidthPtr.  Always >= 0. */
  101.     int relief; /* Value of -relief option: specifies 3-d
  102.  * effect for border, such as
  103.  * TK_RELIEF_RAISED. */
  104.     int overRelief; /* Value of -overrelief option: specifies a 3-d
  105.  * effect for the border, such as
  106.  * TK_RELIEF_RAISED, to be used when the mouse
  107.  * is over the button. */
  108.     int offRelief; /* Value of -offrelief option: specifies a 3-d
  109.  * effect for the border, such as
  110.  * TK_RELIEF_RAISED, to be used when a
  111.  * checkbutton or radiobutton without 
  112.  * indicator is off */
  113.     Tcl_Obj *highlightWidthPtr; /* Value of -highlightthickness option:
  114.  * specifies width in pixels of highlight to
  115.  * draw around widget when it has the focus.
  116.  * <= 0 means don't draw a highlight. */
  117.     int highlightWidth; /* Integer value corresponding to
  118.  * highlightWidthPtr.  Always >= 0. */
  119.     Tk_3DBorder highlightBorder;/* Value of -highlightbackground option:
  120.  * specifies background with which to draw 3-D
  121.  * default ring and focus highlight area when
  122.  * highlight is off. */
  123.     XColor *highlightColorPtr; /* Value of -highlightcolor option:
  124.  * specifies color for drawing traversal
  125.  * highlight. */
  126.     int inset; /* Total width of all borders, including
  127.  * traversal highlight and 3-D border.
  128.  * Indicates how much interior stuff must
  129.  * be offset from outside edges to leave
  130.  * room for borders. */
  131.     Tk_Font tkfont; /* Value of -font option: specifies font
  132.  * to use for display text. */
  133.     XColor *normalFg; /* Value of -font option: specifies foreground
  134.  * color in normal mode. */
  135.     XColor *activeFg; /* Value of -activeforeground option:
  136.  * foreground color in active mode.  NULL
  137.  * means use -foreground instead. */
  138.     XColor *disabledFg; /* Value of -disabledforeground option:
  139.  * foreground color when disabled.  NULL
  140.  * means use normalFg with a 50% stipple
  141.  * instead. */
  142.     GC normalTextGC; /* GC for drawing text in normal mode.  Also
  143.  * used to copy from off-screen pixmap onto
  144.  * screen. */
  145.     GC activeTextGC; /* GC for drawing text in active mode (NULL
  146.  * means use normalTextGC). */
  147.     GC disabledGC; /* Used to produce disabled effect for text
  148.  * and check/radio marks. */
  149.     GC stippleGC; /* Used to produce disabled stipple effect
  150.  * for images when disabled. */
  151.     Pixmap gray; /* Pixmap for displaying disabled text if
  152.  * disabledFg is NULL. */
  153.     GC copyGC; /* Used for copying information from an
  154.  * off-screen pixmap to the screen. */
  155.     Tcl_Obj *widthPtr; /* Value of -width option. */
  156.     int width; /* Integer value corresponding to widthPtr. */
  157.     Tcl_Obj *heightPtr; /* Value of -height option. */
  158.     int height; /* Integer value corresponding to heightPtr. */
  159.     Tcl_Obj *wrapLengthPtr; /* Value of -wraplength option: specifies
  160.  * line length (in pixels) at which to wrap
  161.  * onto next line.  <= 0 means don't wrap
  162.  * except at newlines. */
  163.     int wrapLength; /* Integer value corresponding to
  164.  * wrapLengthPtr. */
  165.     Tcl_Obj *padXPtr; /* Value of -padx option: specifies how many
  166.  * pixels of extra space to leave on left and
  167.  * right of text.  Ignored for bitmaps and
  168.  * images. */
  169.     int padX; /* Integer value corresponding to padXPtr. */
  170.     Tcl_Obj *padYPtr; /* Value of -padx option: specifies how many
  171.  * pixels of extra space to leave above and
  172.  * below text.  Ignored for bitmaps and
  173.  * images. */
  174.     int padY; /* Integer value corresponding to padYPtr. */
  175.     Tk_Anchor anchor; /* Value of -anchor option: specifies where
  176.  * text/bitmap should be displayed inside
  177.  * button region. */
  178.     Tk_Justify justify; /* Value of -justify option: specifies how
  179.  * to align lines of multi-line text. */
  180.     int indicatorOn; /* Value of -indicatoron option:  1 means
  181.  * draw indicator in checkbuttons and
  182.  * radiobuttons, 0 means don't draw it. */
  183.     Tk_3DBorder selectBorder; /* Value of -selectcolor option: specifies
  184.  * color for drawing indicator background, or
  185.  * perhaps widget background, when selected. */
  186.     int textWidth; /* Width needed to display text as requested,
  187.  * in pixels. */
  188.     int textHeight; /* Height needed to display text as requested,
  189.  * in pixels. */
  190.     Tk_TextLayout textLayout; /* Saved text layout information. */
  191.     int indicatorSpace; /* Horizontal space (in pixels) allocated for
  192.  * display of indicator. */
  193.     int indicatorDiameter; /* Diameter of indicator, in pixels. */
  194.     enum defaultState defaultState;
  195. /* Value of -default option, such as
  196.  * DEFAULT_NORMAL: specifies state
  197.  * of default ring for buttons (normal,
  198.  * active, or disabled).  NULL for other
  199.  * classes. */
  200.     /*
  201.      * For check and radio buttons, the fields below are used
  202.      * to manage the variable indicating the button's state.
  203.      */
  204.     Tcl_Obj *selVarNamePtr; /* Value of -variable option: specifies name
  205.  * of variable used to control selected
  206.  * state of button. */
  207.     Tcl_Obj *onValuePtr; /* Value of -offvalue option: specifies value
  208.  * to store in variable when this button is
  209.  * selected. */
  210.     Tcl_Obj *offValuePtr; /* Value of -offvalue option: specifies value
  211.  * to store in variable when this button
  212.  * isn't selected.  Used only by
  213.  * checkbuttons. */
  214.     /*
  215.      * Miscellaneous information:
  216.      */
  217.     Tk_Cursor cursor; /* Value of -cursor option: if not None,
  218.  * specifies current cursor for window. */
  219.     Tcl_Obj *takeFocusPtr; /* Value of -takefocus option;  not used in
  220.  * the C code, but used by keyboard traversal
  221.  * scripts. */
  222.     Tcl_Obj *commandPtr; /* Value of -command option: specifies script 
  223.  * to execute when button is invoked.  If
  224.  * widget is label or has no command, this
  225.  * is NULL. */
  226.     int compound; /* Value of -compound option; specifies whether
  227.  * the button should show both an image and
  228.  * text, and, if so, how. */
  229.     int repeatDelay; /* Value of -repeatdelay option; specifies
  230.  * the number of ms after which the button will
  231.  * start to auto-repeat its command. */
  232.     int repeatInterval; /* Value of -repeatinterval option; specifies
  233.  * the number of ms between auto-repeat
  234.  * invocataions of the button command. */
  235.     int flags; /* Various flags;  see below for
  236.  * definitions. */
  237. } TkButton;
  238. /*
  239.  * Possible "type" values for buttons.  These are the kinds of
  240.  * widgets supported by this file.  The ordering of the type
  241.  * numbers is significant:  greater means more features and is
  242.  * used in the code.
  243.  */
  244. #define TYPE_LABEL 0
  245. #define TYPE_BUTTON 1
  246. #define TYPE_CHECK_BUTTON 2
  247. #define TYPE_RADIO_BUTTON 3
  248. /*
  249.  * Flag bits for buttons:
  250.  *
  251.  * REDRAW_PENDING: Non-zero means a DoWhenIdle handler
  252.  * has already been queued to redraw
  253.  * this window.
  254.  * SELECTED: Non-zero means this button is selected,
  255.  * so special highlight should be drawn.
  256.  * GOT_FOCUS: Non-zero means this button currently
  257.  * has the input focus.
  258.  * BUTTON_DELETED: Non-zero needs that this button has been
  259.  * deleted, or is in the process of being
  260.  * deleted.
  261.  */
  262. #define REDRAW_PENDING (1 << 0)
  263. #define SELECTED (1 << 1)
  264. #define GOT_FOCUS (1 << 2)
  265. #define BUTTON_DELETED (1 << 3)
  266. /*
  267.  * Declaration of variables shared between the files in the button module.
  268.  */
  269. extern Tk_ClassProcs tkpButtonProcs;
  270. /*
  271.  * Declaration of procedures used in the implementation of the button
  272.  * widget. 
  273.  */
  274. #ifndef TkpButtonSetDefaults
  275. EXTERN void TkpButtonSetDefaults _ANSI_ARGS_((
  276.     Tk_OptionSpec *specPtr));
  277. #endif
  278. EXTERN void TkButtonWorldChanged _ANSI_ARGS_((
  279.     ClientData instanceData));
  280. EXTERN void TkpComputeButtonGeometry _ANSI_ARGS_((
  281.     TkButton *butPtr));
  282. EXTERN TkButton * TkpCreateButton _ANSI_ARGS_((Tk_Window tkwin));
  283. #ifndef TkpDestroyButton
  284. EXTERN void  TkpDestroyButton _ANSI_ARGS_((TkButton *butPtr));
  285. #endif
  286. #ifndef TkpDisplayButton
  287. EXTERN void TkpDisplayButton _ANSI_ARGS_((ClientData clientData));
  288. #endif
  289. EXTERN int TkInvokeButton  _ANSI_ARGS_((TkButton *butPtr));
  290. # undef TCL_STORAGE_CLASS
  291. # define TCL_STORAGE_CLASS DLLIMPORT
  292. #endif /* _TKBUTTON */