manpagez: man pages & more
man Tk_InitOptions(3)
Home | html | info | man
Tk_SetOptions(3)             Tk Library Procedures            Tk_SetOptions(3)

______________________________________________________________________________


NAME

       Tk_CreateOptionTable, Tk_DeleteOptionTable, Tk_InitOptions,
       Tk_SetOptions, Tk_FreeSavedOptions, Tk_RestoreSavedOptions,
       Tk_GetOptionValue,  Tk_GetOptionInfo, Tk_FreeConfigOptions, Tk_Offset -
       process configuration options


SYNOPSIS

       #include <tk.h>

       Tk_OptionTable
       Tk_CreateOptionTable(interp, templatePtr)

       Tk_DeleteOptionTable(optionTable)

       int
       Tk_InitOptions(interp, recordPtr, optionTable, tkwin)

       int
       Tk_SetOptions(interp, recordPtr, optionTable, objc, objv, tkwin, savePtr, maskPtr)

       Tk_FreeSavedOptions(savedPtr)

       Tk_RestoreSavedOptions(savedPtr)

       Tcl_Obj *
       Tk_GetOptionValue(interp, recordPtr, optionTable, namePtr, tkwin)

       Tcl_Obj *
       Tk_GetOptionInfo(interp, recordPtr, optionTable, namePtr, tkwin)

       Tk_FreeConfigOptions(recordPtr, optionTable, tkwin)

       int
       Tk_Offset(type, field)


ARGUMENTS

       Tcl_Interp *interp (in)                     A Tcl interpreter.  Most
                                                   procedures use this only
                                                   for returning error
                                                   messages; if it is NULL
                                                   then no error messages are
                                                   returned.  For
                                                   Tk_CreateOptionTable the
                                                   value cannot be NULL; it
                                                   gives the interpreter in
                                                   which the option table will
                                                   be used.

       const Tk_OptionSpec *templatePtr (in)       Points to an array of
                                                   static information that
                                                   describes the configuration
                                                   options that are supported.
                                                   Used to build a
                                                   Tk_OptionTable.  The
                                                   information pointed to by
                                                   this argument must exist
                                                   for the lifetime of the
                                                   Tk_OptionTable.

       Tk_OptionTable optionTable (in)             Token for an option table.
                                                   Must have been returned by
                                                   a previous call to
                                                   Tk_CreateOptionTable.

       char *recordPtr (in/out)                    Points to structure in
                                                   which values of
                                                   configuration options are
                                                   stored; fields of this
                                                   record are modified by
                                                   procedures such as
                                                   Tk_SetOptions and read by
                                                   procedures such as
                                                   Tk_GetOptionValue.

       Tk_Window tkwin (in)                        For options such as
                                                   TK_OPTION_COLOR, this
                                                   argument indicates the
                                                   window in which the option
                                                   will be used.  If
                                                   optionTable uses no window-
                                                   dependent options, then a
                                                   NULL value may be supplied
                                                   for this argument.

       int objc (in)                               Number of values in objv.

       Tcl_Obj *const *objv (in)                   Command-line arguments for
                                                   setting configuring
                                                   options.

       Tk_SavedOptions *savePtr (out)              If not NULL, the structure
                                                   pointed to by this argument
                                                   is filled in with the old
                                                   values of any options that
                                                   were modified and old
                                                   values are restored
                                                   automatically if an error
                                                   occurs in Tk_SetOptions.

       int *maskPtr (out)                          If not NULL, the word
                                                   pointed to by maskPtr is
                                                   filled in with the bit-wise
                                                   OR of the typeMask fields
                                                   for the options that were
                                                   modified.

       Tk_SavedOptions *savedPtr (in/out)          Points to a structure
                                                   previously filled in by
                                                   Tk_SetOptions with old
                                                   values of modified options.

       Tcl_Obj *namePtr (in)                       The value of this object is
                                                   the name of a particular
                                                   option.  If NULL is passed
                                                   to Tk_GetOptionInfo then
                                                   information is returned for
                                                   all options.  Must not be
                                                   NULL when Tk_GetOptionValue
                                                   is called.

       type name type (in)                         The name of the type of a
                                                   record.

       field name field (in)                       The name of a field in
                                                   records of type type.
______________________________________________________________________________


DESCRIPTION

       These procedures handle most of the details of parsing configuration
       options such as those for Tk widgets.  Given a description of what
       options are supported, these procedures handle all the details of
       parsing options and storing their values into a C structure associated
       with the widget or object. The procedures were designed primarily for
       widgets in Tk, but they can also be used for other kinds of objects
       that have configuration options.  In the rest of this manual page
       "widget" will be used to refer to the object whose options are being
       managed; in practice the object may not actually be a widget.  The term
       "widget record" is used to refer to the C-level structure in which
       information about a particular widget or object is stored.

       Note that the easiest way to learn how to use these procedures is to
       look at a working example.  In Tk, the simplest example is the code
       that implements the button family of widgets, which is in tkButton.c.
       Other examples are in tkSquare.c and tkMenu.c.

       In order to use these procedures, the code that implements the widget
       must contain a static array of Tk_OptionSpec structures. This is a
       template that describes the various options supported by that class of
       widget; there is a separate template for each kind of widget.  The
       template contains information such as the name of each option, its
       type, its default value, and where the value of the option is stored in
       the widget record.  See TEMPLATES below for more detail.

       In order to process configuration options efficiently, the static
       template must be augmented with additional information that is
       available only at runtime.  The procedure Tk_CreateOptionTable creates
       this dynamic information from the template and returns a Tk_OptionTable
       token that describes both the static and dynamic information.  All of
       the other procedures, such as Tk_SetOptions, take a Tk_OptionTable
       token as argument.  Typically, Tk_CreateOptionTable is called the first
       time that a widget of a particular class is created and the resulting
       Tk_OptionTable is used in the future for all widgets of that class.  A
       Tk_OptionTable may be used only in a single interpreter, given by the
       interp argument to Tk_CreateOptionTable.  When an option table is no
       longer needed Tk_DeleteOptionTable should be called to free all of its
       resources.  All of the option tables for a Tcl interpreter are freed
       automatically if the interpreter is deleted.

       Tk_InitOptions is invoked when a new widget is created to set the
       default values.  Tk_InitOptions is passed a token for an option table
       (optionTable) and a pointer to a widget record (recordPtr), which is
       the C structure that holds information about this widget.
       Tk_InitOptions uses the information in the option table to choose an
       appropriate default for each option, then it stores the default value
       directly into the widget record, overwriting any information that was
       already present in the widget record.  Tk_InitOptions normally returns
       TCL_OK.  If an error occurred while setting the default values (e.g.,
       because a default value was erroneous) then TCL_ERROR is returned and
       an error message is left in interp's result if interp is not NULL. For
       any widget's configuration option that has TK_OPTION_DONT_SET_DEFAULT
       set in its flags field, the above initialization is fully skipped, see
       below.

       Tk_SetOptions is invoked to modify configuration options based on
       information specified in a Tcl command.  The command might be one that
       creates a new widget, or a command that modifies options on an existing
       widget.  The objc and objv arguments describe the values of the
       arguments from the Tcl command.  Objv must contain an even number of
       objects: the first object of each pair gives the name of an option and
       the second object gives the new value for that option.  Tk_SetOptions
       looks up each name in optionTable, checks that the new value of the
       option conforms to the type in optionTable, and stores the value of the
       option into the widget record given by recordPtr.  Tk_SetOptions
       normally returns TCL_OK.  If an error occurred (such as an unknown
       option name or an illegal option value) then TCL_ERROR is returned and
       an error message is left in interp's result if interp is not NULL.

       Tk_SetOptions has two additional features.  First, if the maskPtr
       argument is not NULL then it points to an integer value that is filled
       in with information about the options that were modified.  For each
       option in the template passed to Tk_CreateOptionTable there is a
       typeMask field.  The bits of this field are defined by the code that
       implements the widget; for example, each bit might correspond to a
       particular configuration option.  Alternatively, bits might be used
       functionally.  For example, one bit might be used for redisplay: all
       options that affect the widget's display, such that changing the option
       requires the widget to be redisplayed, might have that bit set.
       Another bit might indicate that the geometry of the widget must be
       recomputed, and so on.  Tk_SetOptions OR's together the typeMask fields
       from all the options that were modified and returns this value at
       *maskPtr; the caller can then use this information to optimize itself
       so that, for example, it does not redisplay the widget if the modified
       options do not affect the widget's appearance.

       The second additional feature of Tk_SetOptions has to do with error
       recovery.  If an error occurs while processing configuration options,
       this feature makes it possible to restore all the configuration options
       to their previous values.  Errors can occur either while processing
       options in Tk_SetOptions or later in the caller.  In many cases the
       caller does additional processing after Tk_SetOptions returns; for
       example, it might use an option value to set a trace on a variable and
       may detect an error if the variable is an array instead of a scalar.
       Error recovery is enabled by passing in a non-NULL value for the
       savePtr argument to Tk_SetOptions; this should be a pointer to an
       uninitialized Tk_SavedOptions structure on the caller's stack.
       Tk_SetOptions overwrites the structure pointed to by savePtr with
       information about the old values of any options modified by the
       procedure.  If Tk_SetOptions returns successfully, the caller uses the
       structure in one of two ways.  If the caller completes its processing
       of the new options without any errors, then it must pass the structure
       to Tk_FreeSavedOptions so that the old values can be freed.  If the
       caller detects an error in its processing of the new options, then it
       should pass the structure to Tk_RestoreSavedOptions, which will copy
       the old values back into the widget record and free the new values.  If
       Tk_SetOptions detects an error then it automatically restores any
       options that had already been modified and leaves *savePtr in an empty
       state: the caller need not call either Tk_FreeSavedOptions or
       Tk_RestoreSavedOptions.  If the savePtr argument to Tk_SetOptions is
       NULL then Tk_SetOptions frees each old option value immediately when it
       sets a new value for the option.  In this case, if an error occurs in
       the third option, the old values for the first two options cannot be
       restored.

       Tk_GetOptionValue returns the current value of a configuration option
       for a particular widget.  The namePtr argument contains the name of an
       option; Tk_GetOptionValue uses optionTable to lookup the option and
       extract its value from the widget record pointed to by recordPtr, then
       it returns an object containing that value.  If an error occurs (e.g.,
       because namePtr contains an unknown option name) then NULL is returned
       and an error message is left in interp's result unless interp is NULL.

       Tk_GetOptionInfo returns information about configuration options in a
       form suitable for configure widget commands.  If the namePtr argument
       is not NULL, it points to an object that gives the name of a
       configuration option; Tk_GetOptionInfo returns an object containing a
       list with five elements, which are the name of the option, the name and
       class used for the option in the option database, the default value for
       the option, and the current value for the option.  If the namePtr
       argument is NULL, then Tk_GetOptionInfo returns information about all
       options in the form of a list of lists; each sublist describes one
       option.  Synonym options are handled differently depending on whether
       namePtr is NULL: if namePtr is NULL then the sublist for each synonym
       option has only two elements, which are the name of the option and the
       name of the other option that it refers to; if namePtr is non-NULL and
       names a synonym option then the object returned is the five-element
       list for the other option that the synonym refers to.  If an error
       occurs (e.g., because namePtr contains an unknown option name) then
       NULL is returned and an error message is left in interp's result unless
       interp is NULL.

       Tk_FreeConfigOptions must be invoked when a widget is deleted.  It
       frees all of the resources associated with any of the configuration
       options defined in recordPtr by optionTable.

       The Tk_Offset macro is provided as a safe way of generating the
       objOffset and internalOffset values for entries in Tk_OptionSpec
       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.


TEMPLATES

       The array of Tk_OptionSpec structures passed to Tk_CreateOptionTable
       via its templatePtr argument describes the configuration options
       supported by a particular class of widgets.  Each structure specifies
       one configuration option and has the following fields:
              typedef struct {
                  Tk_OptionType type;
                  const char *optionName;
                  const char *dbName;
                  const char *dbClass;
                  const char *defValue;
                  int objOffset;
                  int internalOffset;
                  int flags;
                  const void *clientData;
                  int typeMask;
              } Tk_OptionSpec;
       The type field indicates what kind of configuration option this is
       (e.g. TK_OPTION_COLOR for a color value, or TK_OPTION_INT for an
       integer value).  Type determines how the value of the option is parsed
       (more on this below).  The optionName field is a string such as -font
       or -bg; it is the name used for the option in Tcl commands and passed
       to procedures via the objc or namePtr arguments.  The dbName and
       dbClass fields are used by Tk_InitOptions to look up a default value
       for this option in the option database; if dbName is NULL then the
       option database is not used by Tk_InitOptions for this option.  The
       defValue field specifies a default value for this configuration option
       if no value is specified in the option database.  The objOffset and
       internalOffset fields indicate where to store the value of this option
       in widget records (more on this below); values for the objOffset and
       internalOffset fields should always be generated with the Tk_Offset
       macro.  The flags field contains additional information to control the
       processing of this configuration option (see below for details).
       ClientData provides additional type-specific data needed by certain
       types.  For instance, for TK_OPTION_COLOR types, clientData is a string
       giving the default value to use on monochrome displays.  See the
       descriptions of the different types below for details.  The last field,
       typeMask, is used by Tk_SetOptions to return information about which
       options were modified; see the description of Tk_SetOptions above for
       details.

       When Tk_InitOptions and Tk_SetOptions store the value of an option into
       the widget record, they can do it in either of two ways.  If the
       objOffset field of the Tk_OptionSpec is greater than or equal to zero,
       then the value of the option is stored as a (Tcl_Obj *) at the location
       in the widget record given by objOffset.  If the internalOffset field
       of the Tk_OptionSpec is greater than or equal to zero, then the value
       of the option is stored in a type-specific internal form at the
       location in the widget record given by internalOffset.  For example, if
       the option's type is TK_OPTION_INT then the internal form is an
       integer.  If the objOffset or internalOffset field is negative then the
       value is not stored in that form.  At least one of the offsets must be
       greater than or equal to zero.

       The flags field consists of one or more bits ORed together. The
       following flags are supported:

       TK_OPTION_NULL_OK
              If this bit is set for an option then an empty string will be
              accepted as the value for the option and the resulting internal
              form will be a NULL pointer, a zero value, or None, depending on
              the type of the option.  If the flag is not set then empty
              strings will result in errors.  TK_OPTION_NULL_OK is typically
              used to allow a feature to be turned off entirely, e.g. set a
              cursor value to None so that a window simply inherits its
              parent's cursor.  Not all option types support the
              TK_OPTION_NULL_OK flag; for those that do, there is an explicit
              indication of that fact in the descriptions below.

       TK_OPTION_DONT_SET_DEFAULT
              If this bit is set for an option then no default value will be
              set in Tk_InitOptions for this option. Neither the option
              database, nor any system default value, nor optionTable are used
              to give a default value to this option. Instead it is assumed
              that the caller has already supplied a default value in the
              widget code.

              The type field of each Tk_OptionSpec structure determines how to
              parse the value of that configuration option. The legal value
              for type, and the corresponding actions, are described below.
              If the type requires a tkwin value to be passed into procedures
              like Tk_SetOptions, or if it uses the clientData field of the
              Tk_OptionSpec, then it is indicated explicitly; if not
              mentioned, the type requires neither tkwin nor clientData.

       TK_OPTION_ANCHOR
              The value must be a standard anchor position such as ne or
              center.  The internal form is a Tk_Anchor value like the ones
              returned by Tk_GetAnchorFromObj.

       TK_OPTION_BITMAP
              The value must be a standard Tk bitmap name. The internal form
              is a Pixmap token like the ones returned by
              Tk_AllocBitmapFromObj.  This option type requires tkwin to be
              supplied to procedures such as Tk_SetOptions, and it supports
              the TK_OPTION_NULL_OK flag.

       TK_OPTION_BOOLEAN
              The value must be a standard boolean value such as true or no.
              The internal form is an integer with value 0 or 1.  Note that if
              the objOffset field is not used, information about the original
              value of this option will be lost.

       TK_OPTION_BORDER
              The value must be a standard color name such as red or #ff8080.
              The internal form is a Tk_3DBorder token like the ones returned
              by Tk_Alloc3DBorderFromObj.  This option type requires tkwin to
              be supplied to procedures such as Tk_SetOptions, and it supports
              the TK_OPTION_NULL_OK flag.

       TK_OPTION_COLOR
              The value must be a standard color name such as red or #ff8080.
              The internal form is an (XColor *) token like the ones returned
              by Tk_AllocColorFromObj.  This option type requires tkwin to be
              supplied to procedures such as Tk_SetOptions, and it supports
              the TK_OPTION_NULL_OK flag.

       TK_OPTION_CURSOR
              The value must be a standard cursor name such as cross or @foo.
              The internal form is a Tk_Cursor token like the ones returned by
              Tk_AllocCursorFromObj.  This option type requires tkwin to be
              supplied to procedures such as Tk_SetOptions, and when the
              option is set the cursor for the window is changed by calling
              XDefineCursor.  This option type also supports the
              TK_OPTION_NULL_OK flag.

       TK_OPTION_CUSTOM
              This option allows applications to define new option types.  The
              clientData field of the entry points to a structure defining the
              new option type.  See the section CUSTOM OPTION TYPES below for
              details.

       TK_OPTION_DOUBLE
              The string value must be a floating-point number in the format
              accepted by strtol.  The internal form is a C double value.
              This option type supports the TK_OPTION_NULL_OK flag; if a NULL
              value is set, the internal representation is set to zero.

       TK_OPTION_END
              Marks the end of the template.  There must be a Tk_OptionSpec
              structure with type TK_OPTION_END at the end of each template.
              If the clientData field of this structure is not NULL, then it
              points to an additional array of Tk_OptionSpec's, which is
              itself terminated by another TK_OPTION_END entry.  Templates may
              be chained arbitrarily deeply.  This feature allows common
              options to be shared by several widget classes.

       TK_OPTION_FONT
              The value must be a standard font name such as Times 16.  The
              internal form is a Tk_Font handle like the ones returned by
              Tk_AllocFontFromObj.  This option type requires tkwin to be
              supplied to procedures such as Tk_SetOptions, and it supports
              the TK_OPTION_NULL_OK flag.

       TK_OPTION_INT
              The string value must be an integer in the format accepted by
              strtol (e.g. 0 and 0x prefixes may be used to specify octal or
              hexadecimal numbers, respectively).  The internal form is a C
              int value.

       TK_OPTION_JUSTIFY
              The value must be a standard justification value such as left.
              The internal form is a Tk_Justify like the values returned by
              Tk_GetJustifyFromObj.

       TK_OPTION_PIXELS
              The value must specify a screen distance such as 2i or 6.4.  The
              internal form is an integer value giving a distance in pixels,
              like the values returned by Tk_GetPixelsFromObj.  Note that if
              the objOffset field is not used, information about the original
              value of this option will be lost.  See OBJOFFSET VS.
              INTERNALOFFSET below for details.  This option type supports the
              TK_OPTION_NULL_OK flag; if a NULL value is set, the internal
              representation is set to INT_MIN.

       TK_OPTION_RELIEF
              The value must be standard relief such as raised.  The internal
              form is an integer relief value such as TK_RELIEF_RAISED.  This
              option type supports the TK_OPTION_NULL_OK flag; if a NULL value
              is set, the internal representation is set to TK_RELIEF_NULL.

       TK_OPTION_STRING
              The value may be any string.  The internal form is a (char *)
              pointer that points to a dynamically allocated copy of the
              value.  This option type supports the TK_OPTION_NULL_OK flag.

       TK_OPTION_STRING_TABLE
              For this type, clientData is a pointer to an array of strings
              suitable for passing to Tcl_GetIndexFromObj.  The value must be
              one of the strings in the table, or a unique abbreviation of one
              of the strings.  The internal form is an integer giving the
              index into the table of the matching string, like the return
              value from Tcl_GetStringFromObj.  This option type supports the
              TK_OPTION_NULL_OK flag; if a NULL value is set, the internal
              representation is set to -1.

       TK_OPTION_SYNONYM
              This type is used to provide alternative names for an option
              (for example, -bg is often used as a synonym for -background).
              The clientData field is a string that gives the name of another
              option in the same table.  Whenever the synonym option is used,
              the information from the other option will be used instead.

       TK_OPTION_WINDOW
              The value must be a window path name.  The internal form is a
              Tk_Window token for the window.  This option type requires tkwin
              to be supplied to procedures such as Tk_SetOptions (in order to
              identify the application), and it supports the TK_OPTION_NULL_OK
              flag.


STORAGE MANAGEMENT ISSUES

       If a field of a widget record has its offset stored in the objOffset or
       internalOffset field of a Tk_OptionSpec structure then the procedures
       described here will handle all of the storage allocation and resource
       management issues associated with the field.  When the value of an
       option is changed, Tk_SetOptions (or Tk_FreeSavedOptions) will
       automatically free any resources associated with the old value, such as
       Tk_Fonts for TK_OPTION_FONT options or dynamically allocated memory for
       TK_OPTION_STRING options.  For an option stored as an object using the
       objOffset field of a Tk_OptionSpec, the widget record shares the object
       pointed to by the objv value from the call to Tk_SetOptions.  The
       reference count for this object is incremented when a pointer to it is
       stored in the widget record and decremented when the option is
       modified.  When the widget is deleted Tk_FreeConfigOptions should be
       invoked; it will free the resources associated with all options and
       decrement reference counts for any objects.

       However, the widget code is responsible for storing NULL or None in all
       pointer and token fields before invoking Tk_InitOptions.  This is
       needed to allow proper cleanup in the rare case where an error occurs
       in Tk_InitOptions.


OBJOFFSET VS. INTERNALOFFSET

       In most cases it is simplest to use the internalOffset field of a
       Tk_OptionSpec structure and not the objOffset field.  This makes the
       internal form of the value immediately available to the widget code so
       the value does not have to be extracted from an object each time it is
       used.  However, there are two cases where the objOffset field is
       useful.  The first case is for TK_OPTION_PIXELS options.  In this case,
       the internal form is an integer pixel value that is valid only for a
       particular screen.  If the value of the option is retrieved, it will be
       returned as a simple number.  For example, after the command .b
       configure -borderwidth 2m, the command .b configure -borderwidth might
       return 7, which is the integer pixel value corresponding to 2m.
       Unfortunately, this loses the original screen-independent value. Thus
       for TK_OPTION_PIXELS options it is better to use the objOffset field.
       In this case the original value of the option is retained in the object
       and can be returned when the option is retrieved.  In most cases it is
       convenient to use the internalOffset field as well, so that the integer
       value is immediately available for use in the widget code
       (alternatively, Tk_GetPixelsFromObj can be used to extract the integer
       value from the object whenever it is needed).  Note that the problem of
       losing information on retrievals exists only for TK_OPTION_PIXELS
       options.

       The second reason to use the objOffset field is in order to implement
       new types of options not supported by these procedures.  To implement a
       new type of option, you can use TK_OPTION_STRING as the type in the
       Tk_OptionSpec structure and set the objOffset field but not the
       internalOffset field.  Then, after calling Tk_SetOptions, convert the
       object to internal form yourself.

       Ttk widgets do not support the internalOffset machinery.  Option values
       of Ttk widgets are always stored as (Tcl_Obj *), meaning that the
       objOffset field must be used.


CUSTOM OPTION TYPES

       Applications can extend the built-in configuration types with
       additional configuration types by writing procedures to parse, print,
       free, and restore saved copies of the type and creating a structure
       pointing to those procedures:
              typedef struct Tk_ObjCustomOption {
                  const char *name;
                  Tk_CustomOptionSetProc *setProc;
                  Tk_CustomOptionGetProc *getProc;
                  Tk_CustomOptionRestoreProc *restoreProc;
                  Tk_CustomOptionFreeProc *freeProc;
                  ClientData clientData;
              } Tk_ObjCustomOption;

              typedef int Tk_CustomOptionSetProc(
                  ClientData clientData,
                  Tcl_Interp *interp,
                  Tk_Window tkwin,
                  Tcl_Obj **valuePtr,
                  char *recordPtr,
                  int internalOffset,
                  char *saveInternalPtr,
                  int flags);

              typedef Tcl_Obj *Tk_CustomOptionGetProc(
                  ClientData clientData,
                  Tk_Window tkwin,
                  char *recordPtr,
                  int internalOffset);

              typedef void Tk_CustomOptionRestoreProc(
                  ClientData clientData,
                  Tk_Window tkwin,
                  char *internalPtr,
                  char *saveInternalPtr);

              typedef void Tk_CustomOptionFreeProc(
                  ClientData clientData,
                  Tk_Window tkwin,
                  char *internalPtr);

       The Tk_ObjCustomOption structure contains six fields: a name for the
       custom option type; pointers to the four procedures; and a clientData
       value to be passed to those procedures when they are invoked.  The
       clientData value typically points to a structure containing information
       that is needed by the procedures when they are parsing and printing
       options.  RestoreProc and freeProc may be NULL, indicating that no
       function should be called for those operations.

       The setProc procedure is invoked by Tk_SetOptions to convert a Tcl_Obj
       into an internal representation and store the resulting value in the
       widget record.  The arguments are:

              clientData
                     A copy of the clientData field in the Tk_ObjCustomOption
                     structure.

              interp A pointer to a Tcl interpreter, used for error reporting.

              Tkwin  A copy of the tkwin argument to Tk_SetOptions

              valuePtr
                     A pointer to a reference to a Tcl_Obj describing the new
                     value for the option; it could have been specified
                     explicitly in the call to Tk_SetOptions or it could come
                     from the option database or a default.  If the objOffset
                     for the option is non-negative (the option value is
                     stored as a (Tcl_Obj *) in the widget record), the
                     Tcl_Obj pointer referenced by valuePtr is the pointer
                     that will be stored at the objOffset for the option.
                     SetProc may modify the value if necessary; for example,
                     setProc may change the value to NULL to support the
                     TK_OPTION_NULL_OK flag.

              recordPtr
                     A pointer to the start of the widget record to modify.

              internalOffset
                     Offset in bytes from the start of the widget record to
                     the location where the internal representation of the
                     option value is to be placed.

              saveInternalPtr
                     A pointer to storage allocated in a Tk_SavedOptions
                     structure for the internal representation of the original
                     option value.  Before setting the option to its new
                     value, setProc should set the value referenced by
                     saveInternalPtr to the original value of the option in
                     order to support Tk_RestoreSavedOptions.

              flags  A copy of the flags field in the Tk_OptionSpec structure
                     for the option

       SetProc returns a standard Tcl result: TCL_OK to indicate successful
       processing, or TCL_ERROR to indicate a failure of any kind.  An error
       message may be left in the Tcl interpreter given by interp in the case
       of an error.

       The getProc procedure is invoked by Tk_GetOptionValue and
       Tk_GetOptionInfo to retrieve a Tcl_Obj representation of the internal
       representation of an option.  The clientData argument is a copy of the
       clientData field in the Tk_ObjCustomOption structure.  Tkwin is a copy
       of the tkwin argument to Tk_GetOptionValue or Tk_GetOptionInfo.
       RecordPtr is a pointer to the beginning of the widget record to query.
       InternalOffset is the offset in bytes from the beginning of the widget
       record to the location where the internal representation of the option
       value is stored.  GetProc must return a pointer to a Tcl_Obj
       representing the value of the option.

       The restoreProc procedure is invoked by Tk_RestoreSavedOptions to
       restore a previously saved internal representation of a custom option
       value.  The clientData argument is a copy of the clientData field in
       the Tk_ObjCustomOption structure.  Tkwin is a copy of the tkwin
       argument to Tk_GetOptionValue or Tk_GetOptionInfo.  InternalPtr is a
       pointer to the location where internal representation of the option
       value is stored.  SaveInternalPtr is a pointer to the saved value.
       RestoreProc must copy the value from saveInternalPtr to internalPtr to
       restore the value.  RestoreProc need not free any memory associated
       with either internalPtr or saveInternalPtr; freeProc will be invoked to
       free that memory if necessary.  RestoreProc has no return value.

       The freeProc procedure is invoked by Tk_SetOptions and
       Tk_FreeSavedOptions to free any storage allocated for the internal
       representation of a custom option.  The clientData argument is a copy
       of the clientData field in the Tk_ObjCustomOption structure.  Tkwin is
       a copy of the tkwin argument to Tk_GetOptionValue or Tk_GetOptionInfo.
       InternalPtr is a pointer to the location where the internal
       representation of the option value is stored.  The freeProc must free
       any storage associated with the option.  FreeProc has no return value.


KEYWORDS

       anchor, bitmap, boolean, border, color, configuration option, cursor,
       double, font, integer, justify, pixels, relief, screen distance,
       synonym

Tk                                    8.1                     Tk_SetOptions(3)

tk 8.6.15 - Generated Wed Dec 4 11:49:45 CST 2024
© manpagez.com 2000-2024
Individual documents may contain additional copyright information.