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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1990-1994 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: ConfigWidg.3,v 1.8.2.1 2003/10/06 22:15:17 dgp Exp $
  9. '" 
  10. .so man.macros
  11. .TH Tk_ConfigureWidget 3 4.1 Tk "Tk Library Procedures"
  12. .BS
  13. .SH NAME
  14. Tk_ConfigureWidget, Tk_ConfigureInfo, Tk_ConfigureValue, Tk_FreeOptions - process configuration options for widgets
  15. .SH SYNOPSIS
  16. .nf
  17. fB#include <tk.h>fR
  18. .sp
  19. int
  20. fBTk_ConfigureWidget(fIinterp, tkwin, specs, argc, argv, widgRec, flagsfB)fR
  21. .sp
  22. int
  23. fBTk_ConfigureInfo(fIinterp, tkwin, specs, widgRec, argvName, flagsfB)fR
  24. .sp
  25. int
  26. fBTk_ConfigureValue(fIinterp, tkwin, specs, widgRec, argvName, flagsfB)fR
  27. .sp
  28. fBTk_FreeOptions(fIspecs, widgRec, display, flagsfB)fR
  29. .SH ARGUMENTS
  30. .AS Tk_ConfigSpec *widgRec in/out
  31. .AP Tcl_Interp *interp in
  32. Interpreter to use for returning error messages.
  33. .AP Tk_Window tkwin in
  34. Window used to represent widget (needed to set up X resources).
  35. .AP Tk_ConfigSpec *specs in
  36. Pointer to table specifying legal configuration options for this
  37. widget.
  38. .AP int argc in
  39. Number of arguments in fIargvfR.
  40. .AP "CONST char" **argv in
  41. Command-line options for configuring widget.
  42. .AP char *widgRec in/out
  43. Points to widget record structure.  Fields in this structure get
  44. modified by fBTk_ConfigureWidgetfR to hold configuration information.
  45. .AP int flags in
  46. If non-zero, then it specifies an OR-ed combination of flags that
  47. control the processing of configuration information.
  48. TK_CONFIG_ARGV_ONLY causes the option database and defaults to be
  49. ignored, and flag bits TK_CONFIG_USER_BIT and higher are used to
  50. selectively disable entries in fIspecsfR.
  51. .AP "type name" type in
  52. The name of the type of a widget record.
  53. .AP "field name" field in
  54. The name of a field in records of type fItypefR.
  55. .AP "CONST char" *argvName in
  56. The name used on Tcl command lines to refer to a particular option
  57. (e.g. when creating a widget or invoking the fBconfigurefR widget
  58. command).  If non-NULL, then information is returned only for this
  59. option.  If NULL, then information is returned for all available
  60. options.
  61. .AP Display *display in
  62. Display containing widget whose record is being freed;  needed in
  63. order to free up resources.
  64. .BE
  65. .SH DESCRIPTION
  66. .VS 8.1 
  67. .PP 
  68. Note: fBTk_ConfigureWidgetfP should be replaced with the new
  69. fBTcl_ObjfP based API fBTk_SetOptionsfP.  The old interface is
  70. retained for backward compatibility.
  71. .VE 
  72. .PP
  73. fBTk_ConfigureWidgetfR is called to configure various aspects of a
  74. widget, such as colors, fonts, border width, etc.
  75. It is intended as a convenience procedure to reduce the amount
  76. of code that must be written in individual widget managers to
  77. handle configuration information.
  78. It is typically
  79. invoked when widgets are created, and again when the fBconfigurefR
  80. command is invoked for a widget.
  81. Although intended primarily for widgets, fBTk_ConfigureWidgetfR
  82. can be used in other situations where fIargc-argvfR information
  83. is to be used to fill in a record structure, such as configuring
  84. graphical elements for a canvas widget or entries of a menu.
  85. .PP
  86. fBTk_ConfigureWidgetfR processes
  87. a table specifying the configuration options that are supported
  88. (fIspecsfR) and a collection of command-line arguments (fIargcfR and
  89. fIargvfR) to fill in fields of a record (fIwidgRecfR).
  90. It uses the option database and defaults specified in fIspecsfR
  91. to fill in fields of fIwidgRecfR that are not specified in fIargvfR.
  92. fBTk_ConfigureWidgetfR normally returns the value TCL_OK; in this
  93. case it does not modify fIinterpfR.
  94. If an error
  95. occurs then TCL_ERROR is returned and fBTk_ConfigureWidgetfR will
  96. leave an error message in fIinterp->resultfR in the standard Tcl
  97. fashion.
  98. In the event of an error return, some of the fields of fIwidgRecfR
  99. could already have been set, if configuration information for them
  100. was successfully processed before the error occurred.
  101. The other fields will be set to reasonable initial values so that
  102. fBTk_FreeOptionsfR can be called for cleanup.
  103. .PP
  104. The fIspecsfR array specifies the kinds of configuration options
  105. expected by the widget.  Each of its entries specifies one configuration
  106. option and has the following structure:
  107. .CS
  108. typedef struct {
  109. int fItypefR;
  110. char *fIargvNamefR;
  111. char *fIdbNamefR;
  112. char *fIdbClassfR;
  113. char *fIdefValuefR;
  114. int fIoffsetfR;
  115. int fIspecFlagsfR;
  116. Tk_CustomOption *fIcustomPtrfR;
  117. } Tk_ConfigSpec;
  118. .CE
  119. The fItypefR field indicates what type of configuration option this is
  120. (e.g. TK_CONFIG_COLOR for a color value, or TK_CONFIG_INT for
  121. an integer value).  The fItypefR field indicates how to use the
  122. value of the option (more on this below).
  123. The fIargvNamefR field is a string such as ``-font'' or ``-bg'',
  124. which is compared with the values in fIargvfR (if fIargvNamefR is
  125. NULL it means this is a grouped entry;  see GROUPED ENTRIES below).  The
  126. fIdbNamefR and fIdbClassfR fields are used to look up a value
  127. for this option in the option database.  The fIdefValuefR field
  128. specifies a default value for this configuration option if no
  129. value is specified in either fIargvfR or the option database.
  130. fIOffsetfR indicates where in fIwidgRecfR to store information
  131. about this option, and fIspecFlagsfR contains additional information
  132. to control the processing of this configuration option (see FLAGS
  133. below).
  134. The last field, fIcustomPtrfR, is only used if fItypefR is
  135. TK_CONFIG_CUSTOM;  see CUSTOM OPTION TYPES below.
  136. .PP
  137. fBTk_ConfigureWidgetfR first processes fIargvfR to see which
  138. (if any) configuration options are specified there.  fIArgvfR
  139. must contain an even number of fields;  the first of each pair
  140. of fields must match the fIargvNamefR of some entry in fIspecsfR
  141. (unique abbreviations are acceptable),
  142. and the second field of the pair contains the value for that
  143. configuration option.  If there are entries in fIspecfR for which
  144. there were no matching entries in fIargvfR,
  145. fBTk_ConfigureWidgetfR uses the fIdbNamefR and fIdbClassfR
  146. fields of the fIspecsfR entry to probe the option database;  if
  147. a value is found, then it is used as the value for the option.
  148. Finally, if no entry is found in the option database, the
  149. fIdefValuefR field of the fIspecsfR entry is used as the
  150. value for the configuration option.  If the fIdefValuefR is
  151. NULL, or if the TK_CONFIG_DONT_SET_DEFAULT bit is set in
  152. fIflagsfR, then there is no default value and this fIspecsfR entry
  153. will be ignored if no value is specified in fIargvfR or the
  154. option database.
  155. .PP
  156. Once a string value has been determined for a configuration option,
  157. fBTk_ConfigureWidgetfR translates the string value into a more useful
  158. form, such as a color if fItypefR is TK_CONFIG_COLOR or an integer
  159. if fItypefR is TK_CONFIG_INT.  This value is then stored in the
  160. record pointed to by fIwidgRecfR.  This record is assumed to
  161. contain information relevant to the manager of the widget;  its exact
  162. type is unknown to fBTk_ConfigureWidgetfR.  The fIoffsetfR field
  163. of each fIspecsfR entry indicates where in fIwidgRecfR to store
  164. the information about this configuration option.  You should use the
  165. fBTk_OffsetfR macro to generate fIoffsetfR values (see below for
  166. a description of fBTk_OffsetfR).  The location indicated by
  167. fIwidgRecfR and fIoffsetfR will be referred to as the ``target''
  168. in the descriptions below.
  169. .PP
  170. The fItypefR field of each entry in fIspecsfR determines what
  171. to do with the string value of that configuration option.  The
  172. legal values for fItypefR, and the corresponding actions, are:
  173. .TP
  174. fBTK_CONFIG_ACTIVE_CURSORfR
  175. The value
  176. must be an ASCII string identifying a cursor in a form
  177. suitable for passing to fBTk_GetCursorfR. 
  178. The value is converted to a fBTk_CursorfR by calling
  179. fBTk_GetCursorfR and the result is stored in the target.
  180. In addition, the resulting cursor is made the active cursor
  181. for fItkwinfR by calling fBXDefineCursorfR.
  182. If TK_CONFIG_NULL_OK is specified in fIspecFlagsfR then the value
  183. may be an empty string, in which case the target and fItkwinfR's
  184. active cursor will be set to fBNonefR.
  185. If the previous value of the target
  186. wasn't fBNonefR, then it is freed by passing it to fBTk_FreeCursorfR.
  187. .TP
  188. fBTK_CONFIG_ANCHORfR
  189. The value must be an ASCII string identifying an anchor point in one of the ways
  190. accepted by fBTk_GetAnchorfR.
  191. The string is converted to a fBTk_AnchorfR by calling
  192. fBTk_GetAnchorfR and the result is stored in the target.
  193. .TP
  194. fBTK_CONFIG_BITMAPfR
  195. The value must be an ASCII string identifying a bitmap in a form
  196. suitable for passing to fBTk_GetBitmapfR.  The value is converted
  197. to a fBPixmapfR by calling fBTk_GetBitmapfR and the result
  198. is stored in the target.
  199. If TK_CONFIG_NULL_OK is specified in fIspecFlagsfR then the value
  200. may be an empty string, in which case the target is set to fBNonefR.
  201. If the previous value of the target
  202. wasn't fBNonefR, then it is freed by passing it to fBTk_FreeBitmapfR.
  203. .TP
  204. fBTK_CONFIG_BOOLEANfR
  205. The value must be an ASCII string specifying a boolean value.  Any
  206. of the values ``true'', ``yes'', ``on'', or ``1'',
  207. or an abbreviation of one of these values, means true;
  208. any of the values ``false'', ``no'', ``off'', or ``0'', or an abbreviation of
  209. one of these values, means false.
  210. The target is expected to be an integer;  for true values it will
  211. be set to 1 and for false values it will be set to 0.
  212. .TP
  213. fBTK_CONFIG_BORDERfR
  214. The value must be an ASCII string identifying a border color in a form
  215. suitable for passing to fBTk_Get3DBorderfR.  The value is converted
  216. to a (fBTk_3DBorder *fR) by calling fBTk_Get3DBorderfR and the result
  217. is stored in the target.
  218. If TK_CONFIG_NULL_OK is specified in fIspecFlagsfR then the value
  219. may be an empty string, in which case the target will be set to NULL.
  220. If the previous value of the target
  221. wasn't NULL, then it is freed by passing it to fBTk_Free3DBorderfR.
  222. .TP
  223. fBTK_CONFIG_CAP_STYLEfR
  224. The value must be
  225. an ASCII string identifying a cap style in one of the ways
  226. accepted by fBTk_GetCapStylefR.
  227. The string is converted to an integer value corresponding
  228. to the cap style by calling
  229. fBTk_GetCapStylefR and the result is stored in the target.
  230. .TP
  231. fBTK_CONFIG_COLORfR
  232. The value must be an ASCII string identifying a color in a form
  233. suitable for passing to fBTk_GetColorfR.  The value is converted
  234. to an (fBXColor *fR) by calling fBTk_GetColorfR and the result
  235. is stored in the target.
  236. If TK_CONFIG_NULL_OK is specified in fIspecFlagsfR then the value
  237. may be an empty string, in which case the target will be set to fBNonefR.
  238. If the previous value of the target
  239. wasn't NULL, then it is freed by passing it to fBTk_FreeColorfR.
  240. .TP
  241. fBTK_CONFIG_CURSORfR
  242. This option is identical to fBTK_CONFIG_ACTIVE_CURSORfR except
  243. that the new cursor is not made the active one for fItkwinfR.
  244. .TP
  245. fBTK_CONFIG_CUSTOMfR
  246. This option allows applications to define new option types.
  247. The fIcustomPtrfR field of the entry points to a structure
  248. defining the new option type.
  249. See the section CUSTOM OPTION TYPES below for details.
  250. .TP
  251. fBTK_CONFIG_DOUBLEfR
  252. The value must be an ASCII floating-point number in
  253. the format accepted by fBstrtolfR.  The string is converted
  254. to a fBdoublefR value, and the value is stored in the
  255. target.
  256. .TP
  257. fBTK_CONFIG_ENDfR
  258. Marks the end of the table.  The last entry in fIspecsfR
  259. must have this type;  all of its other fields are ignored and it
  260. will never match any arguments.
  261. .TP
  262. fBTK_CONFIG_FONTfR
  263. The value must be an ASCII string identifying a font in a form
  264. suitable for passing to fBTk_GetFontfR.  The value is converted
  265. to a fBTk_FontfR by calling fBTk_GetFontfR and the result
  266. is stored in the target.
  267. If TK_CONFIG_NULL_OK is specified in fIspecFlagsfR then the value
  268. may be an empty string, in which case the target will be set to NULL.
  269. If the previous value of the target
  270. wasn't NULL, then it is freed by passing it to fBTk_FreeFontfR.
  271. .TP
  272. fBTK_CONFIG_INTfR
  273. The value must be an ASCII integer string
  274. in the format accepted by fBstrtolfR (e.g. ``0''
  275. and ``0x'' prefixes may be used to specify octal or hexadecimal
  276. numbers, respectively).  The string is converted to an integer
  277. value and the integer is stored in the target.
  278. .TP
  279. fBTK_CONFIG_JOIN_STYLEfR
  280. The value must be
  281. an ASCII string identifying a join style in one of the ways
  282. accepted by fBTk_GetJoinStylefR.
  283. The string is converted to an integer value corresponding
  284. to the join style by calling
  285. fBTk_GetJoinStylefR and the result is stored in the target.
  286. .TP
  287. fBTK_CONFIG_JUSTIFYfR
  288. The value must be
  289. an ASCII string identifying a justification method in one of the
  290. ways accepted by fBTk_GetJustifyfR.
  291. The string is converted to a fBTk_JustifyfR by calling
  292. fBTk_GetJustifyfR and the result is stored in the target.
  293. .TP
  294. fBTK_CONFIG_MMfR
  295. The value must specify a screen distance in one of the forms acceptable
  296. to fBTk_GetScreenMMfR.
  297. The string is converted to double-precision floating-point distance
  298. in millimeters and the value is stored in the target.
  299. .TP
  300. fBTK_CONFIG_PIXELSfR
  301. The value must specify screen units in one of the forms acceptable
  302. to fBTk_GetPixelsfR.
  303. The string is converted to an integer distance in pixels and the
  304. value is stored in the target.
  305. .TP
  306. fBTK_CONFIG_RELIEFfR
  307. The value must be an ASCII string identifying a relief in a form
  308. suitable for passing to fBTk_GetRelieffR.  The value is converted
  309. to an integer relief value by calling fBTk_GetRelieffR and the result
  310. is stored in the target.
  311. .TP
  312. fBTK_CONFIG_STRINGfR
  313. A copy
  314. of the value is made by allocating memory space with
  315. fBmallocfR and copying the value into the dynamically-allocated
  316. space.  A pointer to the new string is stored in the target.
  317. If TK_CONFIG_NULL_OK is specified in fIspecFlagsfR then the value
  318. may be an empty string, in which case the target will be set to NULL.
  319. If the previous value of the target wasn't NULL, then it is
  320. freed by passing it to fBfreefR.
  321. .TP
  322. fBTK_CONFIG_SYNONYMfR
  323. This fItypefR value identifies special entries in fIspecsfR that
  324. are synonyms for other entries.  If an fIargvfR value matches the
  325. fIargvNamefR of a TK_CONFIG_SYNONYM entry, the entry isn't used
  326. directly. Instead, fBTk_ConfigureWidgetfR searches fIspecsfR
  327. for another entry whose fIargvNamefR is the same as the fIdbNamefR
  328. field in the TK_CONFIG_SYNONYM entry;  this new entry is used just
  329. as if its fIargvNamefR had matched the fIargvfR value.  The
  330. synonym mechanism allows multiple fIargvfR values to be used for
  331. a single configuration option, such as ``-background'' and ``-bg''.
  332. .TP
  333. fBTK_CONFIG_UIDfR
  334. The value is translated to a fBTk_UidfR
  335. (by passing it to fBTk_GetUidfR).  The resulting value
  336. is stored in the target.
  337. If TK_CONFIG_NULL_OK is specified in fIspecFlagsfR and the value
  338. is an empty string then the target will be set to NULL.
  339. .TP
  340. fBTK_CONFIG_WINDOWfR
  341. The value must be a window path name.  It is translated to a
  342. fBTk_WindowfR token and the token is stored in the target.
  343. .SH "GROUPED ENTRIES"
  344. .PP
  345. In some cases it is useful to generate multiple resources from
  346. a single configuration value.  For example, a color name might
  347. be used both to generate the background color for a widget (using
  348. TK_CONFIG_COLOR) and to generate a 3-D border to draw around the
  349. widget (using TK_CONFIG_BORDER).  In cases like this it is possible
  350. to specify that several consecutive entries in fIspecsfR are to
  351. be treated as a group.  The first entry is used to determine a value
  352. (using its fIargvNamefR, fIdbNamefR,
  353. fIdbClassfR, and fIdefValuefR fields).  The value will be processed
  354. several times (one for each entry in the group), generating multiple
  355. different resources and modifying multiple targets within fIwidgRecfR.
  356. Each of the entries after the first must have a NULL value in its
  357. fIargvNamefR field;  this indicates that the entry is to be grouped
  358. with the entry that precedes it.  Only the fItypefR and fIoffsetfR
  359. fields are used from these follow-on entries.
  360. .SH "FLAGS"
  361. .PP
  362. The fIflagsfR argument passed to fBTk_ConfigureWidgetfR is used
  363. in conjunction with the fIspecFlagsfR fields in the entries of fIspecsfR
  364. to provide additional control over the processing of configuration
  365. options.  These values are used in three different ways as
  366. described below.
  367. .PP
  368. First, if the fIflagsfR argument to fBTk_ConfigureWidgetfR has
  369. the TK_CONFIG_ARGV_ONLY bit set (i.e., fIflagsfR | TK_CONFIG_ARGV_ONLY != 0),
  370. then the option database and
  371. fIdefValuefR fields are not used.  In this case, if an entry in
  372. fIspecsfR doesn't match a field in fIargvfR then nothing happens:
  373. the corresponding target isn't modified.  This feature is useful
  374. when the goal is to modify certain configuration options while
  375. leaving others in their current state, such as when a fBconfigurefR
  376. widget command is being processed.
  377. .PP
  378. Second, the fIspecFlagsfR field of an entry in fIspecsfR may be used
  379. to control the processing of that entry.  Each fIspecFlagsfR
  380. field may consists of an OR-ed combination of the following values:
  381. .TP
  382. fBTK_CONFIG_COLOR_ONLYfR
  383. If this bit is set then the entry will only be considered if the
  384. display for fItkwinfR has more than one bit plane.  If the display
  385. is monochromatic then this fIspecsfR entry will be ignored.
  386. .TP
  387. fBTK_CONFIG_MONO_ONLYfR
  388. If this bit is set then the entry will only be considered if the
  389. display for fItkwinfR has exactly one bit plane.  If the display
  390. is not monochromatic then this fIspecsfR entry will be ignored.
  391. .TP
  392. fBTK_CONFIG_NULL_OKfR
  393. This bit is only relevant for some types of entries (see the
  394. descriptions of the various entry types above).
  395. If this bit is set, it indicates that an empty string value
  396. for the field is acceptable and if it occurs then the
  397. target should be set to NULL or fBNonefR, depending
  398. on the type of the target.
  399. This flag is typically used to allow a
  400. feature to be turned off entirely, e.g. set a cursor value to
  401. fBNonefR so that a window simply inherits its parent's cursor.
  402. If this bit isn't set then empty strings are processed as strings,
  403. which generally results in an error.
  404. .TP
  405. fBTK_CONFIG_DONT_SET_DEFAULTfR
  406. If this bit is one, it means that the fIdefValuefR field of the
  407. entry should only be used for returning the default value in
  408. fBTk_ConfigureInfofR.
  409. In calls to fBTk_ConfigureWidgetfR no default will be supplied
  410. for entries with this flag set;  it is assumed that the
  411. caller has already supplied a default value in the target location.
  412. This flag provides a performance optimization where it is expensive
  413. to process the default string:  the client can compute the default
  414. once, save the value, and provide it before calling
  415. fBTk_ConfigureWidgetfR.
  416. .TP
  417. fBTK_CONFIG_OPTION_SPECIFIEDfR
  418. This bit is set and cleared by fBTk_ConfigureWidgetfR.  Whenever
  419. fBTk_ConfigureWidgetfR returns, this bit will be set in all the
  420. entries where a value was specified in fIargvfR.
  421. It will be zero in all other entries.
  422. This bit provides a way for clients to determine which values
  423. actually changed in a call to fBTk_ConfigureWidgetfR.
  424. .PP
  425. The TK_CONFIG_MONO_ONLY and TK_CONFIG_COLOR_ONLY flags are typically
  426. used to specify different default values for
  427. monochrome and color displays.  This is done by creating two
  428. entries in fIspecsfR that are identical except for their
  429. fIdefValuefR and fIspecFlagsfR fields.  One entry should have
  430. the value TK_CONFIG_MONO_ONLY in its fIspecFlagsfR and the
  431. default value for monochrome displays in its fIdefValuefR;  the
  432. other entry entry should have the value TK_CONFIG_COLOR_ONLY in
  433. its fIspecFlagsfR and the appropriate fIdefValuefR for
  434. color displays.
  435. .PP
  436. Third, it is possible to use fIflagsfR and fIspecFlagsfR
  437. together to selectively disable some entries.  This feature is
  438. not needed very often.  It is useful in cases where several
  439. similar kinds of widgets are implemented in one place.  It allows
  440. a single fIspecsfR table to be created with all the configuration
  441. options for all the widget types.  When processing a particular
  442. widget type, only entries relevant to that type will be used.  This
  443. effect is achieved by setting the high-order bits (those in positions
  444. equal to or greater than TK_CONFIG_USER_BIT) in fIspecFlagsfR
  445. values or in fIflagsfR.  In order for a particular entry in
  446. fIspecsfR to be used, its high-order bits must match exactly
  447. the high-order bits of the fIflagsfR value passed to
  448. fBTk_ConfigureWidgetfR.  If a fIspecsfR table is being used
  449. for N different widget types, then N of the high-order bits will
  450. be used.  Each fIspecsfR entry will have one of more of those
  451. bits set in its fIspecFlagsfR field to indicate the widget types
  452. for which this entry is valid.  When calling fBTk_ConfigureWidgetfR,
  453. fIflagsfR will have a single one of these bits set to select the
  454. entries for the desired widget type.  For a working example of
  455. this feature, see the code in tkButton.c.
  456. .SH TK_OFFSET
  457. .PP
  458. The fBTk_OffsetfR macro is provided as a safe way of generating
  459. the fIoffsetfR values for entries in Tk_ConfigSpec structures.
  460. It takes two arguments:  the name of a type of record, and the
  461. name of a field in that record.  It returns the byte offset of
  462. the named field in records of the given type.
  463. .SH TK_CONFIGUREINFO
  464. .PP
  465. The fBTk_ConfigureInfofR procedure may be used to obtain
  466. information about one or all of the options for a given widget.
  467. Given a token for a window (fItkwinfR), a table describing the
  468. configuration options for a class of widgets (fIspecsfR), a
  469. pointer to a widget record containing the current information for
  470. a widget (fIwidgRecfR), and a NULL fIargvNamefR argument,
  471. fBTk_ConfigureInfofR generates a string describing all of the
  472. configuration options for the window.  The string is placed
  473. in fIinterp->resultfR.  Under normal circumstances
  474. it returns TCL_OK;  if an error occurs then it returns TCL_ERROR
  475. and fIinterp->resultfR contains an error message.
  476. .PP
  477. If fIargvNamefR is NULL, then the value left in
  478. fIinterp->resultfR by fBTk_ConfigureInfofR
  479. consists of a list of one or more entries, each of which describes
  480. one configuration option (i.e. one entry in fIspecsfR).  Each
  481. entry in the list will contain either two or five values.  If the
  482. corresponding entry in fIspecsfR has type TK_CONFIG_SYNONYM, then
  483. the list will contain two values:  the fIargvNamefR for the entry
  484. and the fIdbNamefR (synonym name).  Otherwise the list will contain
  485. five values:  fIargvNamefR, fIdbNamefR, fIdbClassfR, fIdefValuefR,
  486. and current value.  The current value is computed from the appropriate
  487. field of fIwidgRecfR by calling procedures like fBTk_NameOfColorfR.
  488. .PP
  489. If the fIargvNamefR argument to fBTk_ConfigureInfofR is non-NULL,
  490. then it indicates a single option, and information is returned only
  491. for that option.  The string placed in fIinterp->resultfR will be
  492. a list containing two or five values as described above;  this will
  493. be identical to the corresponding sublist that would have been returned
  494. if fIargvNamefR had been NULL.
  495. .PP
  496. The fIflagsfR argument to fBTk_ConfigureInfofR is used to restrict
  497. the fIspecsfR entries to consider, just as for fBTk_ConfigureWidgetfR.
  498. .SH TK_CONFIGUREVALUE
  499. .PP
  500. fBTk_ConfigureValuefR takes arguments similar to fBTk_ConfigureInfofR;
  501. instead of returning a list of values, it just returns the current value
  502. of the option given by fIargvNamefR (fIargvNamefR must not be NULL).
  503. The value is returned in fIinterp->resultfR and TCL_OK is
  504. normally returned as the procedure's result.
  505. If an error occurs in fBTk_ConfigureValuefR (e.g., fIargvNamefR is
  506. not a valid option name), TCL_ERROR is returned and an error message
  507. is left in fIinterp->resultfR.
  508. This procedure is typically called to implement fBcgetfR widget
  509. commands.
  510. .SH TK_FREEOPTIONS
  511. .PP
  512. The fBTk_FreeOptionsfR procedure may be invoked during widget cleanup
  513. to release all of the resources associated with configuration options.
  514. It scans through fIspecsfR and for each entry corresponding to a
  515. resource that must be explicitly freed (e.g. those with
  516. type TK_CONFIG_COLOR), it frees the resource in the widget record.
  517. If the field in the widget record doesn't refer to a resource (e.g.
  518. it contains a null pointer) then no resource is freed for that
  519. entry.
  520. After freeing a resource, fBTk_FreeOptionsfR sets the
  521. corresponding field of the widget record to null.
  522. .SH "CUSTOM OPTION TYPES"
  523. .PP
  524. Applications can extend the built-in configuration types with additional
  525. configuration types by writing procedures to parse and print options
  526. of the a type and creating a structure pointing to those procedures:
  527. .CS
  528. typedef struct Tk_CustomOption {
  529. Tk_OptionParseProc *fIparseProcfR;
  530. Tk_OptionPrintProc *fIprintProcfR;
  531. ClientData fIclientDatafR;
  532. } Tk_CustomOption;
  533. typedef int Tk_OptionParseProc(
  534. ClientData fIclientDatafR,
  535. Tcl_Interp *fIinterpfR,
  536. Tk_Window fItkwinfR,
  537. char *fIvaluefR,
  538. char *fIwidgRecfR,
  539. int fIoffsetfR);
  540. typedef char *Tk_OptionPrintProc(
  541. ClientData fIclientDatafR,
  542. Tk_Window fItkwinfR,
  543. char *fIwidgRecfR,
  544. int fIoffsetfR,
  545. Tcl_FreeProc **fIfreeProcPtrfR);
  546. .CE
  547. The Tk_CustomOption structure contains three fields, which are pointers
  548. to the two procedures and a fIclientDatafR value to be passed to those
  549. procedures when they are invoked.  The fIclientDatafR value typically
  550. points to a structure containing information that is needed by the
  551. procedures when they are parsing and printing options.
  552. .PP
  553. The fIparseProcfR procedure is invoked by
  554. fBTk_ConfigureWidgetfR to parse a string and store the resulting
  555. value in the widget record.
  556. The fIclientDatafR argument is a copy of the fIclientDatafR
  557. field in the Tk_CustomOption structure.
  558. The fIinterpfR argument points to a Tcl interpreter used for
  559. error reporting.  fITkwinfR is a copy of the fItkwinfR argument
  560. to fBTk_ConfigureWidgetfR.  The fIvaluefR argument is a string
  561. describing the value for the option;  it could have been specified
  562. explicitly in the call to fBTk_ConfigureWidgetfR or it could
  563. come from the option database or a default.
  564. fIValuefR will never be a null pointer but it may point to
  565. an empty string.
  566. fIRecordPtrfR is the same as the fIwidgRecfR argument to
  567. fBTk_ConfigureWidgetfR;  it points to the start of the widget
  568. record to modify.
  569. The last argument, fIoffsetfR, gives the offset in bytes from the start
  570. of the widget record to the location where the option value is to
  571. be placed.  The procedure should translate the string to whatever
  572. form is appropriate for the option and store the value in the widget
  573. record.  It should normally return TCL_OK, but if an error occurs
  574. in translating the string to a value then it should return TCL_ERROR
  575. and store an error message in fIinterp->resultfR.
  576. .PP
  577. The fIprintProcfR procedure is called
  578. by fBTk_ConfigureInfofR to produce a string value describing an
  579. existing option.
  580. Its fIclientDatafR, fItkwinfR, fIwidgRecfR, and fIoffsetfR
  581. arguments all have the same meaning as for Tk_OptionParseProc
  582. procedures.
  583. The fIprintProcfR procedure should examine the option whose value
  584. is stored at fIoffsetfR in fIwidgRecfR, produce a string describing
  585. that option, and return a pointer to the string.
  586. If the string is stored in dynamically-allocated memory, then
  587. the procedure must set fI*freeProcPtrfR to the address of
  588. a procedure to call to free the string's memory;  fBTk_ConfigureInfofR
  589. will call this procedure when it is finished with the string.
  590. If the result string is stored in static memory then fIprintProcfR
  591. need not do anything with the fIfreeProcPtrfR argument.
  592. .PP
  593. Once fIparseProcfR and fIprintProcfR have been defined and a
  594. Tk_CustomOption structure has been created for them, options of this
  595. new type may be manipulated with Tk_ConfigSpec entries whose fItypefR
  596. fields are TK_CONFIG_CUSTOM and whose fIcustomPtrfR fields point
  597. to the Tk_CustomOption structure.
  598. .SH EXAMPLES
  599. .PP
  600. Although the explanation of fBTk_ConfigureWidgetfR is fairly
  601. complicated, its actual use is pretty straightforward.
  602. The easiest way to get started is to copy the code
  603. from an existing widget.
  604. The library implementation of frames
  605. (tkFrame.c) has a simple configuration table, and the library
  606. implementation of buttons (tkButton.c) has a much more complex
  607. table that uses many of the fancy fIspecFlagsfR mechanisms.
  608. .SH "SEE ALSO"
  609. Tk_SetOptions(3)
  610. .SH KEYWORDS
  611. anchor, bitmap, boolean, border, cap style, color, configuration options,
  612. cursor, custom, double, font, integer, join style, justify, millimeters,
  613. pixels, relief, synonym, uid