diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2018-12-25 19:55:50 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2018-12-25 19:55:50 (GMT) |
commit | ff51550ee89b473c63df78de6b2a413f21105687 (patch) | |
tree | bcdca927ed2a7b05c647b9a6bfdfd4a7ca5c730e /tk8.6/doc/ConfigWidg.3 | |
parent | 01cbf5b15ea760408c24288ccb5cf8e0af9aa299 (diff) | |
download | blt-ff51550ee89b473c63df78de6b2a413f21105687.zip blt-ff51550ee89b473c63df78de6b2a413f21105687.tar.gz blt-ff51550ee89b473c63df78de6b2a413f21105687.tar.bz2 |
update tcl/tk
Diffstat (limited to 'tk8.6/doc/ConfigWidg.3')
-rw-r--r-- | tk8.6/doc/ConfigWidg.3 | 631 |
1 files changed, 0 insertions, 631 deletions
diff --git a/tk8.6/doc/ConfigWidg.3 b/tk8.6/doc/ConfigWidg.3 deleted file mode 100644 index 92be073..0000000 --- a/tk8.6/doc/ConfigWidg.3 +++ /dev/null @@ -1,631 +0,0 @@ -'\" -'\" Copyright (c) 1990-1994 The Regents of the University of California. -'\" Copyright (c) 1994-1996 Sun Microsystems, Inc. -'\" -'\" See the file "license.terms" for information on usage and redistribution -'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. -'\" -.TH Tk_ConfigureWidget 3 4.1 Tk "Tk Library Procedures" -.so man.macros -.BS -.SH NAME -Tk_ConfigureWidget, Tk_ConfigureInfo, Tk_ConfigureValue, Tk_FreeOptions \- process configuration options for widgets -.SH SYNOPSIS -.nf -\fB#include <tk.h>\fR -.sp -int -\fBTk_ConfigureWidget(\fIinterp, tkwin, specs, argc, argv, widgRec, flags\fB)\fR -.sp -int -\fBTk_ConfigureInfo(\fIinterp, tkwin, specs, widgRec, argvName, flags\fB)\fR -.sp -int -\fBTk_ConfigureValue(\fIinterp, tkwin, specs, widgRec, argvName, flags\fB)\fR -.sp -\fBTk_FreeOptions(\fIspecs, widgRec, display, flags\fB)\fR -.SH ARGUMENTS -.AS char *widgRec in/out -.AP Tcl_Interp *interp in -Interpreter to use for returning error messages. -.AP Tk_Window tkwin in -Window used to represent widget (needed to set up X resources). -.AP "const Tk_ConfigSpec" *specs in -Pointer to table specifying legal configuration options for this -widget. -.AP int argc in -Number of arguments in \fIargv\fR. -.AP "const char" **argv in -Command-line options for configuring widget. -.AP char *widgRec in/out -Points to widget record structure. Fields in this structure get -modified by \fBTk_ConfigureWidget\fR to hold configuration information. -.AP int flags in -If non-zero, then it specifies an OR-ed combination of flags that -control the processing of configuration information. -\fBTK_CONFIG_ARGV_ONLY\fR causes the option database and defaults to be -ignored, and flag bits \fBTK_CONFIG_USER_BIT\fR and higher are used to -selectively disable entries in \fIspecs\fR. -.AP "type name" type in -The name of the type of a widget record. -.AP "field name" field in -The name of a field in records of type \fItype\fR. -.AP "const char" *argvName in -The name used on Tcl command lines to refer to a particular option -(e.g. when creating a widget or invoking the \fBconfigure\fR widget -command). If non-NULL, then information is returned only for this -option. If NULL, then information is returned for all available -options. -.AP Display *display in -Display containing widget whose record is being freed; needed in -order to free up resources. -.BE -.SH DESCRIPTION -.PP -Note: \fBTk_ConfigureWidget\fR should be replaced with the new -\fBTcl_Obj\fR based API \fBTk_SetOptions\fR. The old interface is -retained for backward compatibility. -.PP -\fBTk_ConfigureWidget\fR is called to configure various aspects of a -widget, such as colors, fonts, border width, etc. -It is intended as a convenience procedure to reduce the amount -of code that must be written in individual widget managers to -handle configuration information. -It is typically -invoked when widgets are created, and again when the \fBconfigure\fR -command is invoked for a widget. -Although intended primarily for widgets, \fBTk_ConfigureWidget\fR -can be used in other situations where \fIargc-argv\fR information -is to be used to fill in a record structure, such as configuring -graphical elements for a canvas widget or entries of a menu. -.PP -\fBTk_ConfigureWidget\fR processes -a table specifying the configuration options that are supported -(\fIspecs\fR) and a collection of command-line arguments (\fIargc\fR and -\fIargv\fR) to fill in fields of a record (\fIwidgRec\fR). -It uses the option database and defaults specified in \fIspecs\fR -to fill in fields of \fIwidgRec\fR that are not specified in \fIargv\fR. -\fBTk_ConfigureWidget\fR normally returns the value \fBTCL_OK\fR; in this -case it does not modify \fIinterp\fR. -If an error -occurs then \fBTCL_ERROR\fR is returned and \fBTk_ConfigureWidget\fR will -leave an error message in interpreter \fIinterp\fR's result in the standard Tcl -fashion. -In the event of an error return, some of the fields of \fIwidgRec\fR -could already have been set, if configuration information for them -was successfully processed before the error occurred. -The other fields will be set to reasonable initial values so that -\fBTk_FreeOptions\fR can be called for cleanup. -.PP -The \fIspecs\fR array specifies the kinds of configuration options -expected by the widget. Each of its entries specifies one configuration -option and has the following structure: -.CS -typedef struct { - int \fItype\fR; - const char *\fIargvName\fR; - const char *\fIdbName\fR; - const char *\fIdbClass\fR; - const char *\fIdefValue\fR; - int \fIoffset\fR; - int \fIspecFlags\fR; - const Tk_CustomOption *\fIcustomPtr\fR; -} \fBTk_ConfigSpec\fR; -.CE -The \fItype\fR field indicates what type of configuration option this is -(e.g. \fBTK_CONFIG_COLOR\fR for a color value, or \fBTK_CONFIG_INT\fR for -an integer value). The \fItype\fR field indicates how to use the -value of the option (more on this below). -The \fIargvName\fR field is a string such as -.QW \-font -or -.QW \-bg , -which is compared with the values in \fIargv\fR (if \fIargvName\fR is -NULL it means this is a grouped entry; see \fBGROUPED ENTRIES\fR below). The -\fIdbName\fR and \fIdbClass\fR fields are used to look up a value -for this option in the option database. The \fIdefValue\fR field -specifies a default value for this configuration option if no -value is specified in either \fIargv\fR or the option database. -\fIOffset\fR indicates where in \fIwidgRec\fR to store information -about this option, and \fIspecFlags\fR contains additional information -to control the processing of this configuration option (see FLAGS -below). -The last field, \fIcustomPtr\fR, is only used if \fItype\fR is -\fBTK_CONFIG_CUSTOM\fR; see CUSTOM OPTION TYPES below. -.PP -\fBTk_ConfigureWidget\fR first processes \fIargv\fR to see which -(if any) configuration options are specified there. \fIArgv\fR -must contain an even number of fields; the first of each pair -of fields must match the \fIargvName\fR of some entry in \fIspecs\fR -(unique abbreviations are acceptable), -and the second field of the pair contains the value for that -configuration option. If there are entries in \fIspec\fR for which -there were no matching entries in \fIargv\fR, -\fBTk_ConfigureWidget\fR uses the \fIdbName\fR and \fIdbClass\fR -fields of the \fIspecs\fR entry to probe the option database; if -a value is found, then it is used as the value for the option. -Finally, if no entry is found in the option database, the -\fIdefValue\fR field of the \fIspecs\fR entry is used as the -value for the configuration option. If the \fIdefValue\fR is -NULL, or if the \fBTK_CONFIG_DONT_SET_DEFAULT\fR bit is set in -\fIflags\fR, then there is no default value and this \fIspecs\fR entry -will be ignored if no value is specified in \fIargv\fR or the -option database. -.PP -Once a string value has been determined for a configuration option, -\fBTk_ConfigureWidget\fR translates the string value into a more useful -form, such as a color if \fItype\fR is \fBTK_CONFIG_COLOR\fR or an integer -if \fItype\fR is \fBTK_CONFIG_INT\fR. This value is then stored in the -record pointed to by \fIwidgRec\fR. This record is assumed to -contain information relevant to the manager of the widget; its exact -type is unknown to \fBTk_ConfigureWidget\fR. The \fIoffset\fR field -of each \fIspecs\fR entry indicates where in \fIwidgRec\fR to store -the information about this configuration option. You should use the -\fBTk_Offset\fR macro to generate \fIoffset\fR values (see below for -a description of \fBTk_Offset\fR). The location indicated by -\fIwidgRec\fR and \fIoffset\fR will be referred to as the -.QW target -in the descriptions below. -.PP -The \fItype\fR field of each entry in \fIspecs\fR determines what -to do with the string value of that configuration option. The -legal values for \fItype\fR, and the corresponding actions, are: -.TP -\fBTK_CONFIG_ACTIVE_CURSOR\fR -The value -must be an ASCII string identifying a cursor in a form -suitable for passing to \fBTk_GetCursor\fR. -The value is converted to a \fBTk_Cursor\fR by calling -\fBTk_GetCursor\fR and the result is stored in the target. -In addition, the resulting cursor is made the active cursor -for \fItkwin\fR by calling \fBXDefineCursor\fR. -If \fBTK_CONFIG_NULL_OK\fR is specified in \fIspecFlags\fR then the value -may be an empty string, in which case the target and \fItkwin\fR's -active cursor will be set to \fBNone\fR. -If the previous value of the target -was not \fBNone\fR, then it is freed by passing it to \fBTk_FreeCursor\fR. -.TP -\fBTK_CONFIG_ANCHOR\fR -The value must be an ASCII string identifying an anchor point in one of the ways -accepted by \fBTk_GetAnchor\fR. -The string is converted to a \fBTk_Anchor\fR by calling -\fBTk_GetAnchor\fR and the result is stored in the target. -.TP -\fBTK_CONFIG_BITMAP\fR -The value must be an ASCII string identifying a bitmap in a form -suitable for passing to \fBTk_GetBitmap\fR. The value is converted -to a \fBPixmap\fR by calling \fBTk_GetBitmap\fR and the result -is stored in the target. -If \fBTK_CONFIG_NULL_OK\fR is specified in \fIspecFlags\fR then the value -may be an empty string, in which case the target is set to \fBNone\fR. -If the previous value of the target -was not \fBNone\fR, then it is freed by passing it to \fBTk_FreeBitmap\fR. -.TP -\fBTK_CONFIG_BOOLEAN\fR -The value must be an ASCII string specifying a boolean value. Any -of the values -.QW true , -.QW yes , -.QW on , -or -.QW 1 , -or an abbreviation of one of these values, means true; -any of the values -.QW false , -.QW no , -.QW off , -or -.QW 0 , -or an abbreviation of one of these values, means false. -The target is expected to be an integer; for true values it will -be set to 1 and for false values it will be set to 0. -.TP -\fBTK_CONFIG_BORDER\fR -The value must be an ASCII string identifying a border color in a form -suitable for passing to \fBTk_Get3DBorder\fR. The value is converted -to a (\fBTk_3DBorder *\fR) by calling \fBTk_Get3DBorder\fR and the result -is stored in the target. -If \fBTK_CONFIG_NULL_OK\fR is specified in \fIspecFlags\fR then the value -may be an empty string, in which case the target will be set to NULL. -If the previous value of the target -was not NULL, then it is freed by passing it to \fBTk_Free3DBorder\fR. -.TP -\fBTK_CONFIG_CAP_STYLE\fR -The value must be -an ASCII string identifying a cap style in one of the ways -accepted by \fBTk_GetCapStyle\fR. -The string is converted to an integer value corresponding -to the cap style by calling -\fBTk_GetCapStyle\fR and the result is stored in the target. -.TP -\fBTK_CONFIG_COLOR\fR -The value must be an ASCII string identifying a color in a form -suitable for passing to \fBTk_GetColor\fR. The value is converted -to an (\fBXColor *\fR) by calling \fBTk_GetColor\fR and the result -is stored in the target. -If \fBTK_CONFIG_NULL_OK\fR is specified in \fIspecFlags\fR then the value -may be an empty string, in which case the target will be set to \fBNone\fR. -If the previous value of the target -was not NULL, then it is freed by passing it to \fBTk_FreeColor\fR. -.TP -\fBTK_CONFIG_CURSOR\fR -This option is identical to \fBTK_CONFIG_ACTIVE_CURSOR\fR except -that the new cursor is not made the active one for \fItkwin\fR. -.TP -\fBTK_CONFIG_CUSTOM\fR -This option allows applications to define new option types. -The \fIcustomPtr\fR field of the entry points to a structure -defining the new option type. -See the section \fBCUSTOM OPTION TYPES\fR below for details. -.TP -\fBTK_CONFIG_DOUBLE\fR -The value must be an ASCII floating-point number in -the format accepted by \fBstrtol\fR. The string is converted -to a \fBdouble\fR value, and the value is stored in the -target. -.TP -\fBTK_CONFIG_END\fR -Marks the end of the table. The last entry in \fIspecs\fR -must have this type; all of its other fields are ignored and it -will never match any arguments. -.TP -\fBTK_CONFIG_FONT\fR -The value must be an ASCII string identifying a font in a form -suitable for passing to \fBTk_GetFont\fR. The value is converted -to a \fBTk_Font\fR by calling \fBTk_GetFont\fR and the result -is stored in the target. -If \fBTK_CONFIG_NULL_OK\fR is specified in \fIspecFlags\fR then the value -may be an empty string, in which case the target will be set to NULL. -If the previous value of the target -was not NULL, then it is freed by passing it to \fBTk_FreeFont\fR. -.TP -\fBTK_CONFIG_INT\fR -The value must be an ASCII integer string -in the format accepted by \fBstrtol\fR (e.g. -.QW 0 -and -.QW 0x -prefixes may be used to specify octal or hexadecimal -numbers, respectively). The string is converted to an integer -value and the integer is stored in the target. -.TP -\fBTK_CONFIG_JOIN_STYLE\fR -The value must be -an ASCII string identifying a join style in one of the ways -accepted by \fBTk_GetJoinStyle\fR. -The string is converted to an integer value corresponding -to the join style by calling -\fBTk_GetJoinStyle\fR and the result is stored in the target. -.TP -\fBTK_CONFIG_JUSTIFY\fR -The value must be -an ASCII string identifying a justification method in one of the -ways accepted by \fBTk_GetJustify\fR. -The string is converted to a \fBTk_Justify\fR by calling -\fBTk_GetJustify\fR and the result is stored in the target. -.TP -\fBTK_CONFIG_MM\fR -The value must specify a screen distance in one of the forms acceptable -to \fBTk_GetScreenMM\fR. -The string is converted to double-precision floating-point distance -in millimeters and the value is stored in the target. -.TP -\fBTK_CONFIG_PIXELS\fR -The value must specify screen units in one of the forms acceptable -to \fBTk_GetPixels\fR. -The string is converted to an integer distance in pixels and the -value is stored in the target. -.TP -\fBTK_CONFIG_RELIEF\fR -The value must be an ASCII string identifying a relief in a form -suitable for passing to \fBTk_GetRelief\fR. The value is converted -to an integer relief value by calling \fBTk_GetRelief\fR and the result -is stored in the target. -.TP -\fBTK_CONFIG_STRING\fR -A copy -of the value is made by allocating memory space with -\fBTcl_Alloc\fR and copying the value into the dynamically-allocated -space. A pointer to the new string is stored in the target. -If \fBTK_CONFIG_NULL_OK\fR is specified in \fIspecFlags\fR then the value -may be an empty string, in which case the target will be set to NULL. -If the previous value of the target was not NULL, then it is -freed by passing it to \fBTcl_Free\fR. -.TP -\fBTK_CONFIG_SYNONYM\fR -This \fItype\fR value identifies special entries in \fIspecs\fR that -are synonyms for other entries. If an \fIargv\fR value matches the -\fIargvName\fR of a \fBTK_CONFIG_SYNONYM\fR entry, the entry is not used -directly. Instead, \fBTk_ConfigureWidget\fR searches \fIspecs\fR -for another entry whose \fIargvName\fR is the same as the \fIdbName\fR -field in the \fBTK_CONFIG_SYNONYM\fR entry; this new entry is used just -as if its \fIargvName\fR had matched the \fIargv\fR value. The -synonym mechanism allows multiple \fIargv\fR values to be used for -a single configuration option, such as -.QW \-background -and -.QW \-bg . -.TP -\fBTK_CONFIG_UID\fR -The value is translated to a \fBTk_Uid\fR -(by passing it to \fBTk_GetUid\fR). The resulting value -is stored in the target. -If \fBTK_CONFIG_NULL_OK\fR is specified in \fIspecFlags\fR and the value -is an empty string then the target will be set to NULL. -.TP -\fBTK_CONFIG_WINDOW\fR -The value must be a window path name. It is translated to a -\fBTk_Window\fR token and the token is stored in the target. -.SH "GROUPED ENTRIES" -.PP -In some cases it is useful to generate multiple resources from -a single configuration value. For example, a color name might -be used both to generate the background color for a widget (using -\fBTK_CONFIG_COLOR\fR) and to generate a 3-D border to draw around the -widget (using \fBTK_CONFIG_BORDER\fR). In cases like this it is possible -to specify that several consecutive entries in \fIspecs\fR are to -be treated as a group. The first entry is used to determine a value -(using its \fIargvName\fR, \fIdbName\fR, -\fIdbClass\fR, and \fIdefValue\fR fields). The value will be processed -several times (one for each entry in the group), generating multiple -different resources and modifying multiple targets within \fIwidgRec\fR. -Each of the entries after the first must have a NULL value in its -\fIargvName\fR field; this indicates that the entry is to be grouped -with the entry that precedes it. Only the \fItype\fR and \fIoffset\fR -fields are used from these follow-on entries. -.SH "FLAGS" -.PP -The \fIflags\fR argument passed to \fBTk_ConfigureWidget\fR is used -in conjunction with the \fIspecFlags\fR fields in the entries of \fIspecs\fR -to provide additional control over the processing of configuration -options. These values are used in three different ways as -described below. -.PP -First, if the \fIflags\fR argument to \fBTk_ConfigureWidget\fR has -the \fBTK_CONFIG_ARGV_ONLY\fR bit set (i.e., \fIflags\fR | \fBTK_CONFIG_ARGV_ONLY\fR != 0), -then the option database and -\fIdefValue\fR fields are not used. In this case, if an entry in -\fIspecs\fR does not match a field in \fIargv\fR then nothing happens: -the corresponding target is not modified. This feature is useful -when the goal is to modify certain configuration options while -leaving others in their current state, such as when a \fBconfigure\fR -widget command is being processed. -.PP -Second, the \fIspecFlags\fR field of an entry in \fIspecs\fR may be used -to control the processing of that entry. Each \fIspecFlags\fR -field may consists of an OR-ed combination of the following values: -.TP -\fBTK_CONFIG_COLOR_ONLY\fR -If this bit is set then the entry will only be considered if the -display for \fItkwin\fR has more than one bit plane. If the display -is monochromatic then this \fIspecs\fR entry will be ignored. -.TP -\fBTK_CONFIG_MONO_ONLY\fR -If this bit is set then the entry will only be considered if the -display for \fItkwin\fR has exactly one bit plane. If the display -is not monochromatic then this \fIspecs\fR entry will be ignored. -.TP -\fBTK_CONFIG_NULL_OK\fR -This bit is only relevant for some types of entries (see the -descriptions of the various entry types above). -If this bit is set, it indicates that an empty string value -for the field is acceptable and if it occurs then the -target should be set to NULL or \fBNone\fR, depending -on the type of the target. -This flag is typically used to allow a -feature to be turned off entirely, e.g. set a cursor value to -\fBNone\fR so that a window simply inherits its parent's cursor. -If this bit is not set then empty strings are processed as strings, -which generally results in an error. -.TP -\fBTK_CONFIG_DONT_SET_DEFAULT\fR -If this bit is one, it means that the \fIdefValue\fR field of the -entry should only be used for returning the default value in -\fBTk_ConfigureInfo\fR. -In calls to \fBTk_ConfigureWidget\fR no default will be supplied -for entries with this flag set; it is assumed that the -caller has already supplied a default value in the target location. -This flag provides a performance optimization where it is expensive -to process the default string: the client can compute the default -once, save the value, and provide it before calling -\fBTk_ConfigureWidget\fR. -.TP -\fBTK_CONFIG_OPTION_SPECIFIED\fR -This bit is -deprecated. It used to be set and cleared by \fBTk_ConfigureWidget\fR -so that callers could detect what entries were specified in -\fIargv\fR, but it was removed because it was inherently -thread-unsafe. Code that wishes to detect what options were specified -should use \fBTk_SetOptions\fR instead. -.PP -The \fBTK_CONFIG_MONO_ONLY\fR and \fBTK_CONFIG_COLOR_ONLY\fR flags are typically -used to specify different default values for -monochrome and color displays. This is done by creating two -entries in \fIspecs\fR that are identical except for their -\fIdefValue\fR and \fIspecFlags\fR fields. One entry should have -the value \fBTK_CONFIG_MONO_ONLY\fR in its \fIspecFlags\fR and the -default value for monochrome displays in its \fIdefValue\fR; the -other entry should have the value \fBTK_CONFIG_COLOR_ONLY\fR in -its \fIspecFlags\fR and the appropriate \fIdefValue\fR for -color displays. -.PP -Third, it is possible to use \fIflags\fR and \fIspecFlags\fR -together to selectively disable some entries. This feature is -not needed very often. It is useful in cases where several -similar kinds of widgets are implemented in one place. It allows -a single \fIspecs\fR table to be created with all the configuration -options for all the widget types. When processing a particular -widget type, only entries relevant to that type will be used. This -effect is achieved by setting the high-order bits (those in positions -equal to or greater than \fBTK_CONFIG_USER_BIT\fR) in \fIspecFlags\fR -values or in \fIflags\fR. In order for a particular entry in -\fIspecs\fR to be used, its high-order bits must match exactly -the high-order bits of the \fIflags\fR value passed to -\fBTk_ConfigureWidget\fR. If a \fIspecs\fR table is being used -for N different widget types, then N of the high-order bits will -be used. Each \fIspecs\fR entry will have one of more of those -bits set in its \fIspecFlags\fR field to indicate the widget types -for which this entry is valid. When calling \fBTk_ConfigureWidget\fR, -\fIflags\fR will have a single one of these bits set to select the -entries for the desired widget type. For a working example of -this feature, see the code in tkButton.c. -.SH TK_OFFSET -.PP -The \fBTk_Offset\fR macro is provided as a safe way of generating -the \fIoffset\fR values for entries in Tk_ConfigSpec structures. -It takes two arguments: the name of a type of record, and the -name of a field in that record. It returns the byte offset of -the named field in records of the given type. -.SH TK_CONFIGUREINFO -.PP -The \fBTk_ConfigureInfo\fR procedure may be used to obtain -information about one or all of the options for a given widget. -Given a token for a window (\fItkwin\fR), a table describing the -configuration options for a class of widgets (\fIspecs\fR), a -pointer to a widget record containing the current information for -a widget (\fIwidgRec\fR), and a NULL \fIargvName\fR argument, -\fBTk_ConfigureInfo\fR generates a string describing all of the -configuration options for the window. The string is placed -in interpreter \fIinterp\fR's result. Under normal circumstances -it returns \fBTCL_OK\fR; if an error occurs then it returns \fBTCL_ERROR\fR -and the interpreter's result will contain an error message. -.PP -If \fIargvName\fR is NULL, then the value left in -the interpreter's result by \fBTk_ConfigureInfo\fR -consists of a list of one or more entries, each of which describes -one configuration option (i.e. one entry in \fIspecs\fR). Each -entry in the list will contain either two or five values. If the -corresponding entry in \fIspecs\fR has type \fBTK_CONFIG_SYNONYM\fR, then -the list will contain two values: the \fIargvName\fR for the entry -and the \fIdbName\fR (synonym name). Otherwise the list will contain -five values: \fIargvName\fR, \fIdbName\fR, \fIdbClass\fR, \fIdefValue\fR, -and current value. The current value is computed from the appropriate -field of \fIwidgRec\fR by calling procedures like \fBTk_NameOfColor\fR. -.PP -If the \fIargvName\fR argument to \fBTk_ConfigureInfo\fR is non-NULL, -then it indicates a single option, and information is returned only -for that option. The string placed in the interpreter's result will be -a list containing two or five values as described above; this will -be identical to the corresponding sublist that would have been returned -if \fIargvName\fR had been NULL. -.PP -The \fIflags\fR argument to \fBTk_ConfigureInfo\fR is used to restrict -the \fIspecs\fR entries to consider, just as for \fBTk_ConfigureWidget\fR. -.SH TK_CONFIGUREVALUE -.PP -\fBTk_ConfigureValue\fR takes arguments similar to \fBTk_ConfigureInfo\fR; -instead of returning a list of values, it just returns the current value -of the option given by \fIargvName\fR (\fIargvName\fR must not be NULL). -The value is returned in interpreter \fIinterp\fR's result and \fBTCL_OK\fR is -normally returned as the procedure's result. -If an error occurs in \fBTk_ConfigureValue\fR (e.g., \fIargvName\fR is -not a valid option name), \fBTCL_ERROR\fR is returned and an error message -is left in the interpreter's result. -This procedure is typically called to implement \fBcget\fR widget -commands. -.SH TK_FREEOPTIONS -.PP -The \fBTk_FreeOptions\fR procedure may be invoked during widget cleanup -to release all of the resources associated with configuration options. -It scans through \fIspecs\fR and for each entry corresponding to a -resource that must be explicitly freed (e.g. those with -type \fBTK_CONFIG_COLOR\fR), it frees the resource in the widget record. -If the field in the widget record does not refer to a resource (e.g. -it contains a null pointer) then no resource is freed for that -entry. -After freeing a resource, \fBTk_FreeOptions\fR sets the -corresponding field of the widget record to null. -.SH "CUSTOM OPTION TYPES" -.PP -Applications can extend the built-in configuration types with additional -configuration types by writing procedures to parse and print options -of the a type and creating a structure pointing to those procedures: -.CS -typedef struct Tk_CustomOption { - Tk_OptionParseProc *\fIparseProc\fR; - Tk_OptionPrintProc *\fIprintProc\fR; - ClientData \fIclientData\fR; -} \fBTk_CustomOption\fR; - -typedef int \fBTk_OptionParseProc\fR( - ClientData \fIclientData\fR, - Tcl_Interp *\fIinterp\fR, - Tk_Window \fItkwin\fR, - char *\fIvalue\fR, - char *\fIwidgRec\fR, - int \fIoffset\fR); - -typedef const char *\fBTk_OptionPrintProc\fR( - ClientData \fIclientData\fR, - Tk_Window \fItkwin\fR, - char *\fIwidgRec\fR, - int \fIoffset\fR, - Tcl_FreeProc **\fIfreeProcPtr\fR); -.CE -The Tk_CustomOption structure contains three fields, which are pointers -to the two procedures and a \fIclientData\fR value to be passed to those -procedures when they are invoked. The \fIclientData\fR value typically -points to a structure containing information that is needed by the -procedures when they are parsing and printing options. -.PP -The \fIparseProc\fR procedure is invoked by -\fBTk_ConfigureWidget\fR to parse a string and store the resulting -value in the widget record. -The \fIclientData\fR argument is a copy of the \fIclientData\fR -field in the Tk_CustomOption structure. -The \fIinterp\fR argument points to a Tcl interpreter used for -error reporting. \fITkwin\fR is a copy of the \fItkwin\fR argument -to \fBTk_ConfigureWidget\fR. The \fIvalue\fR argument is a string -describing the value for the option; it could have been specified -explicitly in the call to \fBTk_ConfigureWidget\fR or it could -come from the option database or a default. -\fIValue\fR will never be a null pointer but it may point to -an empty string. -\fIRecordPtr\fR is the same as the \fIwidgRec\fR argument to -\fBTk_ConfigureWidget\fR; it points to the start of the widget -record to modify. -The last argument, \fIoffset\fR, gives the offset in bytes from the start -of the widget record to the location where the option value is to -be placed. The procedure should translate the string to whatever -form is appropriate for the option and store the value in the widget -record. It should normally return \fBTCL_OK\fR, but if an error occurs -in translating the string to a value then it should return \fBTCL_ERROR\fR -and store an error message in interpreter \fIinterp\fR's result. -.PP -The \fIprintProc\fR procedure is called -by \fBTk_ConfigureInfo\fR to produce a string value describing an -existing option. -Its \fIclientData\fR, \fItkwin\fR, \fIwidgRec\fR, and \fIoffset\fR -arguments all have the same meaning as for Tk_OptionParseProc -procedures. -The \fIprintProc\fR procedure should examine the option whose value -is stored at \fIoffset\fR in \fIwidgRec\fR, produce a string describing -that option, and return a pointer to the string. -If the string is stored in dynamically-allocated memory, then -the procedure must set \fI*freeProcPtr\fR to the address of -a procedure to call to free the string's memory; \fBTk_ConfigureInfo\fR -will call this procedure when it is finished with the string. -If the result string is stored in static memory then \fIprintProc\fR -need not do anything with the \fIfreeProcPtr\fR argument. -.PP -Once \fIparseProc\fR and \fIprintProc\fR have been defined and a -Tk_CustomOption structure has been created for them, options of this -new type may be manipulated with Tk_ConfigSpec entries whose \fItype\fR -fields are \fBTK_CONFIG_CUSTOM\fR and whose \fIcustomPtr\fR fields point -to the Tk_CustomOption structure. -.SH EXAMPLES -.PP -Although the explanation of \fBTk_ConfigureWidget\fR is fairly -complicated, its actual use is pretty straightforward. -The easiest way to get started is to copy the code -from an existing widget. -The library implementation of frames -(tkFrame.c) has a simple configuration table, and the library -implementation of buttons (tkButton.c) has a much more complex -table that uses many of the fancy \fIspecFlags\fR mechanisms. -.SH "SEE ALSO" -Tk_SetOptions(3) -.SH KEYWORDS -anchor, bitmap, boolean, border, cap style, color, configuration options, -cursor, custom, double, font, integer, join style, justify, millimeters, -pixels, relief, synonym, uid |