TIP: 186 Title: Expose the Type and Modified-State of Widget Options Version: $Revision: 1.4 $ Author: Peter MacDonald Author: Peter MacDonald State: Draft Type: Project Vote: Pending Created: 16-Apr-2004 Post-History: Keywords: Tk Tcl-Version: 8.7 ~ Abstract This TIP adds a 6th (and 7th element) to each option in the output of [[''path'' '''configure''']] for Tk widgets, indicating the type and modified status of each option respectively. ~ Rationale The configure subcommand of Tk widgets provides a powerful method for introspection of widget state information. Unfortunately, two important pieces of information are currently unavailable. Namely, the type Tk is expecting for an option and the whether a user has explicitly assigned a value. The type field is valuable in automating interfaces for editing the contents of widgets. The modified field is useful in changing styles (such as in '''tk_setPalette''') where we update all widgets that are currently using default values. ~ Specification The configure subcommand for Tk widgets, when invoked with no arguments, currently dumps out all options as a list with 5 elements per-option: optName, dbName, dbClass, defValue, optValue. This TIP proposes adding up to 2 additional values: '''optType''' and '''optModified'''. * A 6th element, '''optType''', is a string representation of the type field of '''Tk_ConfigSpec''' and '''Tk_OptionSpec'''. * For widgets using the new '''Tk_OptionSpec''', a 7th appended element indicates whether an option has been set by the user. ~ Notes Perhaps '''optModified''' should be specified as an enumeration. For example: * 1 = '''USER_MODIFIED''' * 2 = '''OPTION_DATABASE''' * 3 = '''SYSTEM_DEFAULT''' * 4 = '''TABLE_DEFAULT''' In addition, as much of the Tk core is still using '''Tk_ConfigSpec''', would some form of compatibility interface make sense whereby a '''Tk_ConfigSpec''' could be used to dynamically produce a '''Tk_OptionSpec'''? (This last is out of the scope of this TIP.) Probably also need a way to change options such that the '''USER_MODIFIED''' flag does not get set. (eg. '''tk_setPalette''') ~ Changes Threre are a couple of small changes to ''tkConfig.c'' and ''tkOldConfig.c'', plus a #define of '''TK_OPTION_VALUE_SET''' in ''tk.h'' ~ Overhead/Impact Scripts currently exploiting introspection and depending upon a list length of 5 may break. ~ Reference Implementation There is a simple implementation of the above available as a patch against Tk 8.4.2[http://pdqi.com/configure.diff.gz]. It does not implement a enumerated flag for '''optModified''', and the type string lookup is rather crude. ~ Copyright This document has been placed in the public domain.