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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  *  tkEntry.h --
  3.  *  
  4.  *  This module defined the structures for the Entry & SpinBox widgets.
  5.  *
  6.  * See the file "license.terms" for information on usage and redistribution
  7.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  8.  *
  9.  *  Copyright (c) 2002 Apple Computer, Inc.
  10.  *
  11.  */
  12. #ifndef _TKENTRY
  13. #define _TKENTRY
  14. #ifndef _TKINT
  15. #include "tkInt.h"
  16. #endif
  17. #ifdef BUILD_tk
  18. # undef TCL_STORAGE_CLASS
  19. # define TCL_STORAGE_CLASS DLLEXPORT
  20. #endif
  21. enum EntryType {
  22.     TK_ENTRY, TK_SPINBOX
  23. };
  24. /*
  25.  * A data structure of the following type is kept for each Entry
  26.  * widget managed by this file:
  27.  */
  28. typedef struct {
  29.     Tk_Window tkwin; /* Window that embodies the entry. NULL
  30.  * means that the window has been destroyed
  31.  * but the data structures haven't yet been
  32.  * cleaned up.*/
  33.     Display *display; /* Display containing widget.  Used, among
  34.  * other things, so that resources can be
  35.  * freed even after tkwin has gone away. */
  36.     Tcl_Interp *interp; /* Interpreter associated with entry. */
  37.     Tcl_Command widgetCmd; /* Token for entry's widget command. */
  38.     Tk_OptionTable optionTable; /* Table that defines configuration options
  39.  * available for this widget. */
  40.     enum EntryType type; /* Specialized type of Entry widget */
  41.     /*
  42.      * Fields that are set by widget commands other than "configure".
  43.      */
  44.      
  45.     CONST char *string; /* Pointer to storage for string;
  46.  * NULL-terminated;  malloc-ed. */
  47.     int insertPos; /* Character index before which next typed
  48.  * character will be inserted. */
  49.     /*
  50.      * Information about what's selected, if any.
  51.      */
  52.     int selectFirst; /* Character index of first selected
  53.  * character (-1 means nothing selected. */
  54.     int selectLast; /* Character index just after last selected
  55.  * character (-1 means nothing selected. */
  56.     int selectAnchor; /* Fixed end of selection (i.e. "select to"
  57.  * operation will use this as one end of the
  58.  * selection). */
  59.     /*
  60.      * Information for scanning:
  61.      */
  62.     int scanMarkX; /* X-position at which scan started (e.g.
  63.  * button was pressed here). */
  64.     int scanMarkIndex; /* Character index of character that was at
  65.  * left of window when scan started. */
  66.     /*
  67.      * Configuration settings that are updated by Tk_ConfigureWidget.
  68.      */
  69.     Tk_3DBorder normalBorder; /* Used for drawing border around whole
  70.  * window, plus used for background. */
  71.     Tk_3DBorder disabledBorder; /* Used for drawing  border around whole
  72.  * window in disabled state, plus used for
  73.  * background. */
  74.     Tk_3DBorder readonlyBorder; /* Used for drawing  border around whole
  75.  * window in readonly state, plus used for
  76.  * background. */
  77.     int borderWidth; /* Width of 3-D border around window. */
  78.     Tk_Cursor cursor; /* Current cursor for window, or None. */
  79.     int exportSelection; /* Non-zero means tie internal entry selection
  80.  * to X selection. */
  81.     Tk_Font tkfont; /* Information about text font, or NULL. */
  82.     XColor *fgColorPtr; /* Text color in normal mode. */
  83.     XColor *dfgColorPtr; /* Text color in disabled mode. */
  84.     XColor *highlightBgColorPtr;/* Color for drawing traversal highlight
  85.  * area when highlight is off. */
  86.     XColor *highlightColorPtr; /* Color for drawing traversal highlight. */
  87.     int highlightWidth; /* Width in pixels of highlight to draw
  88.  * around widget when it has the focus.
  89.  * <= 0 means don't draw a highlight. */
  90.     Tk_3DBorder insertBorder; /* Used to draw vertical bar for insertion
  91.  * cursor. */
  92.     int insertBorderWidth; /* Width of 3-D border around insert cursor. */
  93.     int insertOffTime; /* Number of milliseconds cursor should spend
  94.  * in "off" state for each blink. */
  95.     int insertOnTime; /* Number of milliseconds cursor should spend
  96.  * in "on" state for each blink. */
  97.     int insertWidth; /* Total width of insert cursor. */
  98.     Tk_Justify justify; /* Justification to use for text within
  99.  * window. */
  100.     int relief; /* 3-D effect: TK_RELIEF_RAISED, etc. */
  101.     Tk_3DBorder selBorder; /* Border and background for selected
  102.  * characters. */
  103.     int selBorderWidth; /* Width of border around selection. */
  104.     XColor *selFgColorPtr; /* Foreground color for selected text. */
  105.     int state;         /* Normal or disabled.  Entry is read-only
  106.  * when disabled. */
  107.     char *textVarName; /* Name of variable (malloc'ed) or NULL.
  108.  * If non-NULL, entry's string tracks the
  109.  * contents of this variable and vice versa. */
  110.     char *takeFocus; /* Value of -takefocus option;  not used in
  111.  * the C code, but used by keyboard traversal
  112.  * scripts.  Malloc'ed, but may be NULL. */
  113.     int prefWidth; /* Desired width of window, measured in
  114.  * average characters. */
  115.     char *scrollCmd; /* Command prefix for communicating with
  116.  * scrollbar(s).  Malloc'ed.  NULL means
  117.  * no command to issue. */
  118.     char *showChar; /* Value of -show option.  If non-NULL, first
  119.  * character is used for displaying all
  120.  * characters in entry.  Malloc'ed.
  121.  * This is only used by the Entry widget. */
  122.     /*
  123.      * Fields whose values are derived from the current values of the
  124.      * configuration settings above.
  125.      */
  126.     CONST char *displayString; /* String to use when displaying.  This may
  127.  * be a pointer to string, or a pointer to
  128.  * malloced memory with the same character
  129.  * length as string but whose characters
  130.  * are all equal to showChar. */
  131.     int numBytes; /* Length of string in bytes. */
  132.     int numChars; /* Length of string in characters.  Both
  133.  * string and displayString have the same
  134.  * character length, but may have different
  135.  * byte lengths due to being made from
  136.  * different UTF-8 characters. */
  137.     int numDisplayBytes; /* Length of displayString in bytes. */
  138.     int inset; /* Number of pixels on the left and right
  139.  * sides that are taken up by XPAD, borderWidth
  140.  * (if any), and highlightWidth (if any). */
  141.     Tk_TextLayout textLayout; /* Cached text layout information. */
  142.     int layoutX, layoutY; /* Origin for layout. */
  143.     int leftX; /* X position at which character at leftIndex
  144.  * is drawn (varies depending on justify). */
  145.     int leftIndex; /* Character index of left-most character
  146.  * visible in window. */
  147.     Tcl_TimerToken insertBlinkHandler;
  148. /* Timer handler used to blink cursor on and
  149.  * off. */
  150.     GC textGC; /* For drawing normal text. */
  151.     GC selTextGC; /* For drawing selected text. */
  152.     GC highlightGC; /* For drawing traversal highlight. */
  153.     int avgWidth; /* Width of average character. */
  154.     int xWidth; /* Extra width to reserve for widget.
  155.  * Used by spinboxes for button space. */
  156.     int flags; /* Miscellaneous flags;  see below for
  157.  * definitions. */
  158.     int validate;               /* Non-zero means try to validate */
  159.     char *validateCmd;          /* Command prefix to use when invoking
  160.  * validate command.  NULL means don't
  161.  * invoke commands.  Malloc'ed. */
  162.     char *invalidCmd; /* Command called when a validation returns 0
  163.  * (successfully fails), defaults to {}. */
  164. } Entry;
  165. /*
  166.  * A data structure of the following type is kept for each spinbox
  167.  * widget managed by this file:
  168.  */
  169. typedef struct {
  170.     Entry entry; /* A pointer to the generic entry structure.
  171.  * This must be the first element of the
  172.  * Spinbox. */
  173.     /*
  174.      * Spinbox specific configuration settings.
  175.      */
  176.     Tk_3DBorder activeBorder; /* Used for drawing border around active
  177.  * buttons. */
  178.     Tk_3DBorder buttonBorder; /* Used for drawing border around buttons. */
  179.     Tk_Cursor bCursor; /* cursor for buttons, or None. */
  180.     int bdRelief; /* 3-D effect: TK_RELIEF_RAISED, etc. */
  181.     int buRelief; /* 3-D effect: TK_RELIEF_RAISED, etc. */
  182.     char *command; /* Command to invoke for spin buttons.
  183.  * NULL means no command to issue. */
  184.     /*
  185.      * Spinbox specific fields for use with configuration settings above.
  186.      */
  187.     int wrap; /* whether to wrap around when spinning */
  188.     int selElement; /* currently selected control */
  189.     int curElement; /* currently mouseover control */
  190.     int repeatDelay; /* repeat delay */
  191.     int repeatInterval; /* repeat interval */
  192.     double fromValue; /* Value corresponding to left/top of dial */
  193.     double toValue; /* Value corresponding to right/bottom
  194.  * of dial */
  195.     double increment; /* If > 0, all values are rounded to an
  196.  * even multiple of this value. */
  197.     char *formatBuf; /* string into which to format value.
  198.  * Malloc'ed. */
  199.     char *reqFormat; /* Sprintf conversion specifier used for the
  200.  * value that the users requests. Malloc'ed. */
  201.     char *valueFormat; /* Sprintf conversion specifier used for
  202.  * the value. */
  203.     char digitFormat[10]; /* Sprintf conversion specifier computed from
  204.  * digits and other information; used for
  205.  * the value. */
  206.     char *valueStr; /* Values List. Malloc'ed. */
  207.     Tcl_Obj *listObj; /* Pointer to the list object being used */
  208.     int eIndex; /* Holds the current index into elements */
  209.     int nElements; /* Holds the current count of elements */
  210. } Spinbox;
  211. /*
  212.  * Assigned bits of "flags" fields of Entry structures, and what those
  213.  * bits mean:
  214.  *
  215.  * REDRAW_PENDING: Non-zero means a DoWhenIdle handler has
  216.  * already been queued to redisplay the entry.
  217.  * BORDER_NEEDED: Non-zero means 3-D border must be redrawn
  218.  * around window during redisplay.  Normally
  219.  * only text portion needs to be redrawn.
  220.  * CURSOR_ON: Non-zero means insert cursor is displayed at
  221.  * present.  0 means it isn't displayed.
  222.  * GOT_FOCUS: Non-zero means this window has the input
  223.  * focus.
  224.  * UPDATE_SCROLLBAR: Non-zero means scrollbar should be updated
  225.  * during next redisplay operation.
  226.  * GOT_SELECTION: Non-zero means we've claimed the selection.
  227.  * ENTRY_DELETED: This entry has been effectively destroyed.
  228.  * VALIDATING: Non-zero means we are in a validateCmd
  229.  * VALIDATE_VAR: Non-zero means we are attempting to validate
  230.  * the entry's textvariable with validateCmd
  231.  * VALIDATE_ABORT: Non-zero if validatecommand signals an abort
  232.  * for current procedure and make no changes
  233.  * ENTRY_VAR_TRACED: Non-zero if a var trace is set.
  234.  */
  235. #define REDRAW_PENDING 1
  236. #define BORDER_NEEDED 2
  237. #define CURSOR_ON 4
  238. #define GOT_FOCUS 8
  239. #define UPDATE_SCROLLBAR 0x10
  240. #define GOT_SELECTION 0x20
  241. #define ENTRY_DELETED           0x40
  242. #define VALIDATING              0x80
  243. #define VALIDATE_VAR            0x100
  244. #define VALIDATE_ABORT          0x200
  245. #define ENTRY_VAR_TRACED        0x400
  246. /*
  247.  * The following enum is used to define a type for the -state option
  248.  * of the Entry widget.  These values are used as indices into the 
  249.  * string table below.
  250.  */
  251. enum state {
  252.     STATE_DISABLED, STATE_NORMAL, STATE_READONLY
  253. };
  254. /* 
  255.  * This is the element index corresponding to the strings in selElementNames.
  256.  * If you modify them, you must modify the numbers here.
  257.  */
  258.  
  259. enum selelement {
  260.     SEL_NONE, SEL_BUTTONDOWN, SEL_BUTTONUP, SEL_NULL, SEL_ENTRY
  261. };
  262. /*
  263.  * Declaration of procedures used in the implementation of the native side
  264.  * of the Entry widget. 
  265.  */
  266. int TkpDrawEntryBorderAndFocus(Entry *entryPtr, Drawable d, int isSpinbox);
  267. int TkpDrawSpinboxButtons(Spinbox *sbPtr, Drawable d);
  268. # undef TCL_STORAGE_CLASS
  269. # define TCL_STORAGE_CLASS DLLIMPORT
  270. #endif /* _TKBUTTON */