home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _564f6d93219a3cd45cf94a7e18b1cd45 < prev    next >
Text File  |  2004-06-01  |  9KB  |  258 lines

  1. /*
  2.  * tkScale.h --
  3.  *
  4.  *    Declarations of types and functions used to implement
  5.  *    the scale widget.
  6.  *
  7.  * Copyright (c) 1996 by Sun Microsystems, Inc.
  8.  * Copyright (c) 1999-2000 by Scriptics Corporation.
  9.  *
  10.  * See the file "license.terms" for information on usage and redistribution
  11.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12.  *
  13.  * RCS: @(#) $Id: tkScale.h,v 1.8 2000/04/14 08:33:16 hobbs Exp $
  14.  */
  15.  
  16. #ifndef _TKSCALE
  17. #define _TKSCALE
  18.  
  19. #ifndef _TK
  20. #include "tk.h"
  21. #endif
  22. #include "tkVMacro.h"
  23.  
  24. #ifdef BUILD_tk
  25. # undef TCL_STORAGE_CLASS
  26. # define TCL_STORAGE_CLASS DLLEXPORT
  27. #endif
  28.  
  29. /*
  30.  * Legal values for the "orient" field of TkScale records.
  31.  */
  32.  
  33. enum orient {
  34.     ORIENT_HORIZONTAL, ORIENT_VERTICAL
  35. };
  36.  
  37. /*
  38.  * Legal values for the "state" field of TkScale records.
  39.  */
  40.  
  41. enum state {
  42.     STATE_ACTIVE, STATE_DISABLED, STATE_NORMAL
  43. };
  44.  
  45. /*
  46.  * A data structure of the following type is kept for each scale
  47.  * widget managed by this file:
  48.  */
  49.  
  50. typedef struct TkScale {
  51.     Tk_Window tkwin;        /* Window that embodies the scale.  NULL
  52.                  * means that the window has been destroyed
  53.                  * but the data structures haven't yet been
  54.                  * cleaned up.*/
  55.     Display *display;        /* Display containing widget.  Used, among
  56.                  * other things, so that resources can be
  57.                  * freed even after tkwin has gone away. */
  58.     Tcl_Interp *interp;        /* Interpreter associated with scale. */
  59.     Tcl_Command widgetCmd;    /* Token for scale's widget command. */
  60.     Tk_OptionTable optionTable;    /* Table that defines configuration options
  61.                  * available for this widget. */
  62.     enum orient orient;        /* Orientation for window (vertical or
  63.                  * horizontal). */
  64.     int width;            /* Desired narrow dimension of scale,
  65.                  * in pixels. */
  66.     int length;            /* Desired long dimension of scale,
  67.                  * in pixels. */
  68.     double value;        /* Current value of scale. */
  69.     Tcl_Obj *varNamePtr;    /* Name of variable or NULL.
  70.                  * If non-NULL, scale's value tracks
  71.                  * the contents of this variable and
  72.                  * vice versa. */
  73.     double fromValue;        /* Value corresponding to left or top of
  74.                  * scale. */
  75.     double toValue;        /* Value corresponding to right or bottom
  76.                  * of scale. */
  77.     double tickInterval;    /* Distance between tick marks;
  78.                  * 0 means don't display any tick marks. */
  79.     double resolution;        /* If > 0, all values are rounded to an
  80.                  * even multiple of this value. */
  81.     int digits;            /* Number of significant digits to print
  82.                  * in values.  0 means we get to choose the
  83.                  * number based on resolution and/or the
  84.                  * range of the scale. */
  85.     char format[10];        /* Sprintf conversion specifier computed from
  86.                  * digits and other information. */
  87.     double bigIncrement;    /* Amount to use for large increments to
  88.                  * scale value.  (0 means we pick a value). */
  89.     Tcl_Obj *command;        /* Command prefix to use when invoking Tcl
  90.                  * commands because the scale value changed.
  91.                  * NULL means don't invoke commands. */
  92.     int repeatDelay;        /* How long to wait before auto-repeating
  93.                  * on scrolling actions (in ms). */
  94.     int repeatInterval;        /* Interval between autorepeats (in ms). */
  95.     char *label;        /* Label to display above or to right of
  96.                  * scale;  NULL means don't display a label. */
  97.     int labelLength;        /* Number of non-NULL chars. in label. */
  98.     enum state state;        /* Values are active, normal, or disabled.
  99.                  * Value of scale cannot be changed when
  100.                  * disabled. */
  101.  
  102.     /*
  103.      * Information used when displaying widget:
  104.      */
  105.  
  106.     int borderWidth;        /* Width of 3-D border around window. */
  107.     Tk_3DBorder bgBorder;    /* Used for drawing slider and other
  108.                  * background areas. */
  109.     Tk_3DBorder activeBorder;    /* For drawing the slider when active. */
  110.     int sliderRelief;        /* Is slider to be drawn raised, sunken,
  111.                  * etc. */
  112.     XColor *troughColorPtr;    /* Color for drawing trough. */
  113.     GC troughGC;        /* For drawing trough. */
  114.     GC copyGC;            /* Used for copying from pixmap onto screen. */
  115.     Tk_Font tkfont;        /* Information about text font, or NULL. */
  116.     XColor *textColorPtr;    /* Color for drawing text. */
  117.     GC textGC;            /* GC for drawing text in normal mode. */
  118.     int relief;            /* Indicates whether window as a whole is
  119.                  * raised, sunken, or flat. */
  120.     int highlightWidth;        /* Width in pixels of highlight to draw
  121.                  * around widget when it has the focus.
  122.                  * <= 0 means don't draw a highlight. */
  123.     Tk_3DBorder highlightBorder;/* Value of -highlightbackground option:
  124.                  * specifies background with which to draw 3-D
  125.                  * default ring and focus highlight area when
  126.                  * highlight is off. */
  127.     XColor *highlightColorPtr;    /* Color for drawing traversal highlight. */
  128.     int inset;            /* Total width of all borders, including
  129.                  * traversal highlight and 3-D border.
  130.                  * Indicates how much interior stuff must
  131.                  * be offset from outside edges to leave
  132.                  * room for borders. */
  133.     int sliderLength;        /* Length of slider, measured in pixels along
  134.                  * long dimension of scale. */
  135.     int showValue;        /* Non-zero means to display the scale value
  136.                  * below or to the left of the slider;    zero
  137.                  * means don't display the value. */
  138.  
  139.     /*
  140.      * Layout information for horizontal scales, assuming that window
  141.      * gets the size it requested:
  142.      */
  143.  
  144.     int horizLabelY;        /* Y-coord at which to draw label. */
  145.     int horizValueY;        /* Y-coord at which to draw value text. */
  146.     int horizTroughY;        /* Y-coord of top of slider trough. */
  147.     int horizTickY;        /* Y-coord at which to draw tick text. */
  148.     /*
  149.      * Layout information for vertical scales, assuming that window
  150.      * gets the size it requested:
  151.      */
  152.  
  153.     int vertTickRightX;        /* X-location of right side of tick-marks. */
  154.     int vertValueRightX;    /* X-location of right side of value string. */
  155.     int vertTroughX;        /* X-location of scale's slider trough. */
  156.     int vertLabelX;        /* X-location of origin of label. */
  157.  
  158.     /*
  159.      * Miscellaneous information:
  160.      */
  161.  
  162.     int fontHeight;        /* Height of scale font. */
  163.     Tk_Cursor cursor;        /* Current cursor for window, or None. */
  164.     Tcl_Obj *takeFocusPtr;    /* Value of -takefocus option;    not used in
  165.                  * the C code, but used by keyboard traversal
  166.                  * scripts.  May be NULL. */
  167.     int flags;            /* Various flags;  see below for
  168.                  * definitions. */
  169. } TkScale;
  170.  
  171. /*
  172.  * Flag bits for scales:
  173.  *
  174.  * REDRAW_SLIDER -        1 means slider (and numerical readout) need
  175.  *                to be redrawn.
  176.  * REDRAW_OTHER -        1 means other stuff besides slider and value
  177.  *                need to be redrawn.
  178.  * REDRAW_ALL -            1 means the entire widget needs to be redrawn.
  179.  * REDRAW_PENDING -        1 means any sort of redraw is pending
  180.  * ACTIVE -            1 means the widget is active (the mouse is
  181.  *                in its window).
  182.  * INVOKE_COMMAND -        1 means the scale's command needs to be
  183.  *                invoked during the next redisplay (the
  184.  *                value of the scale has changed since the
  185.  *                last time the command was invoked).
  186.  * SETTING_VAR -        1 means that the associated variable is
  187.  *                being set by us, so there's no need for
  188.  *                ScaleVarProc to do anything.
  189.  * NEVER_SET -            1 means that the scale's value has never
  190.  *                been set before (so must invoke -command and
  191.  *                set associated variable even if the value
  192.  *                doesn't appear to have changed).
  193.  * GOT_FOCUS -            1 means that the focus is currently in
  194.  *                this widget.
  195.  * SCALE_DELETED -        1 means the scale widget is being deleted
  196.  */
  197.  
  198. #define REDRAW_SLIDER        (1<<0)
  199. #define REDRAW_OTHER        (1<<1)
  200. #define REDRAW_ALL        (REDRAW_OTHER|REDRAW_SLIDER)
  201. #define REDRAW_PENDING        (1<<2)
  202. #define ACTIVE            (1<<3)
  203. #define INVOKE_COMMAND        (1<<4)
  204. #define SETTING_VAR        (1<<5)
  205. #define NEVER_SET        (1<<6)
  206. #define GOT_FOCUS        (1<<7)
  207. #define SCALE_DELETED        (1<<8)
  208.  
  209. /*
  210.  * Symbolic values for the active parts of a slider.  These are
  211.  * the values that may be returned by the ScaleElement procedure.
  212.  */
  213.  
  214. #define OTHER        0
  215. #define TROUGH1        1
  216. #define SLIDER        2
  217. #define TROUGH2        3
  218.  
  219. /*
  220.  * Space to leave between scale area and text, and between text and
  221.  * edge of window.
  222.  */
  223.  
  224. #define SPACING 2
  225.  
  226. /*
  227.  * How many characters of space to provide when formatting the
  228.  * scale's value:
  229.  */
  230.  
  231. #define PRINT_CHARS 150
  232.  
  233. /*
  234.  * Declaration of procedures used in the implementation of the scale
  235.  * widget. 
  236.  */
  237.  
  238. EXTERN void        TkEventuallyRedrawScale _ANSI_ARGS_((TkScale *scalePtr,
  239.                 int what));
  240. EXTERN double        TkRoundToResolution _ANSI_ARGS_((TkScale *scalePtr,
  241.                 double value));
  242. EXTERN TkScale *    TkpCreateScale _ANSI_ARGS_((Tk_Window tkwin));
  243. EXTERN void        TkpDestroyScale _ANSI_ARGS_((TkScale *scalePtr));
  244. EXTERN void        TkpDisplayScale _ANSI_ARGS_((ClientData clientData));
  245. EXTERN int        TkpScaleElement _ANSI_ARGS_((TkScale *scalePtr,
  246.                  int x, int y));
  247. EXTERN void        TkScaleSetValue _ANSI_ARGS_((TkScale *scalePtr,
  248.                 double value, int setVar, int invokeCommand));
  249. EXTERN double        TkScalePixelToValue _ANSI_ARGS_((TkScale *scalePtr,
  250.                 int x, int y));
  251. EXTERN int        TkScaleValueToPixel _ANSI_ARGS_((TkScale *scalePtr,
  252.                 double value));
  253.  
  254. # undef TCL_STORAGE_CLASS
  255. # define TCL_STORAGE_CLASS DLLIMPORT
  256.  
  257. #endif /* _TKSCALE */
  258.