.\"
.\" Copyright (c) 2025 Csaba Nemethi
.\"
.\" See the file "license.terms" for information on usage and redistribution
.\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
.\"
.TH tk attribtable n 9.1 "" Tk "Tk Built-in Commands"
.so man.macros
.BS
'\" Note:  do not modify the .SH NAME line immediately below!
.SH NAME
attribtable \- Create an attribute table, used to query and modify
arbitrary data attached to any widget.
.SH SYNOPSIS
\fBtk attribtable \fItableName\fR
.BE
.SH DESCRIPTION
.PP
This command creates an attribute table of the name \fItableName\fR,
implemented as a hash table and accessible as a command in the namespace of
the calling context if not fully qualified, and returns the fully qualified
name of the command just created.
.PP
An attribute table is used to query and modify arbitrary data attached to any
widget.  These data are commonly called \fIattributes\fR.
.PP
If an attribute table of the given name already exists then it is replaced
with the new one and all the attributes of all widgets set using the old table
instance will be unset.
.PP
\fBREMARK 1:\fR  When the \fItableName\fR command is deleted (via \fBrename\fR
\fItableName\fR "" or by deleting the containing namespace), all the
attributes of all widgets set using this command are automatically unset and
the underlying hash table is deleted.  This will free all the memory used by
the table.
.PP
\fBREMARK 2:\fR  When a widget is destroyed, all of its attributes set by all
attribute table commands are automatically unset.  This will free all the
memory used by the widget's attributes.
.PP
The command \fItableName\fR created by this command has the signature
.PP
.CS
\fItableName\fR \fBset\fR|\fBget\fR|\fBunset\fR|\fBclear\fR|\fBexists\fR|\fBnames\fR|\fBpathnames\fR \fIargs\fR
.CE
.PP
In the description of the supported forms below, \fIpathName\fR specifies a
widget whose attributes are being queried or modified via the \fItableName\fR
command.
.\" METHOD: set
.TP
\fItableName\fR \fBset\fR \fIpathName name value\fR ?\fIname value\fR ...?
.
Sets (i.e., adds or updates) the attributes identified by the \fIname\fR
arguments to the values given by the \fIvalue\fR arguments.  Returns an empty
string.  Example:
.RS
.PP
.CS
# Save and then change the button's text
\fBtk attribtable\fR table
table \fBset\fR .btn prevText [.btn cget -text]
\&.btn configure -text "NewText"
.CE
.RE
.\" METHOD: get
.TP
\fItableName\fR \fBget\fR \fIpathName\fR ?\fIname\fR ?\fIdefaultValue\fR??
.
If \fIname\fR is specified then returns the corresponding attribute value, or
an empty string or \fIdefaultValue\fR (if given) if no corresponding value
exists.  Otherwise returns a list consisting of all attribute names and values
of the widget \fIpathName\fR.  Example:
.RS
.PP
.CS
# Restore the button's previous text
\&.btn configure -text [table \fBget\fR .btn prevText]
.CE
.RE
.\" METHOD: unset
.TP
\fItableName\fR \fBunset\fR \fIpathName name\fR ?\fIname\fR ...?
.
Unsets the attributes identified by the \fIname\fR arguments.  Returns an
empty string.  Example:
.RS
.PP
.CS
table \fBunset\fR .btn prevText
.CE
.RE
.\" METHOD: clear
.TP
\fItableName\fR \fBclear\fR \fIpathName\fR
.
Unsets all attributes and removes \fIpathName\fR from the list of those
widgets that have attributes set via \fItableName\fR \fBset\fR.  Returns an
empty string.  Example:
.RS
.PP
.CS
table \fBclear\fR .btn
.CE
.RE
.\" METHOD: exists
.TP
\fItableName\fR \fBexists\fR \fIpathName\fR ?\fIname\fR?
.
If the optional argument is present then returns \fB1\fR if the attribute
identified by \fIname\fR exists and \fB0\fR otherwise.  Without the optional
argument the return value is \fB1\fR if the widget \fIpathName\fR has at
least one attribute set via \fItableName\fR \fBset\fR and \fB0\fR otherwise.
Example:
.RS
.PP
.CS
if [table \fBexists\fR .btn prevText] {
    # Restore the button's previous text
    \&.btn configure -text [table \fBget\fR .btn prevText]
}
.CE
.RE
.\" METHOD: names
.TP
\fItableName\fR \fBnames\fR \fIpathName\fR
.
Returns a list consisting of all attribute names of the widget
\fIpathName\fR.  Example:
.RS
.PP
.CS
puts "attribute names for .btn: [table \fBnames\fR .btn]"
.CE
.RE
.\" METHOD: pathnames
.TP
\fItableName\fR \fBpathnames\fR
.
Returns a list consisting of the path names of all widgets that have
attributes set via \fItableName\fR \fBset\fR.
Example:
.RS
.PP
.CS
puts "widgets in table: [table \fBpathnames\fR]"
.CE
.RE
.SH KEYWORDS
widget, attribute, attribute table
.\" Local Variables:
.\" mode: nroff
.\" fill-column: 78
.\" End:
