NAME¶
tixForm - Geometry manager based on attachment rules
SYNOPSIS¶
tixForm option arg ?arg ...?
DESCRIPTION¶
The
tixForm command is used to communicate with the
tixForm
Geometry Manager, a geometry manager that arranges the geometry of the
children in a parent window according to attachment rules. The
tixForm
geometry manager is very flexible and powerful; it can be used to emulate all
the existing features of the Tk packer and placer geometry managers (see
pack(n),
place(n)). The
tixForm command can have any of
several forms, depending on the
option argument:
- tixForm slave ?options?
- If the first argument to tixForm is a window name
(any value starting with ``.''), then the command is processed in the same
way as tixForm configure.
- tixForm check master
- This command checks whether there is circular dependency in
the attachments of the master's slaves (see the section CIRCULAR
DEPENDENCY below). It returns the Boolean value TRUE if it
discover circular dependency and FALSE otherwise.
- tixForm configure slave ?-option value
...?
- Sets or adjusts the attachment values of the slave window
according to the -option value argument pairs.
- -b attachment
- Abbreviation for the -bottom option.
- -bottom attachment
- Specifies an attachment for the bottom edge of the slave
window. The attachment must specied according to the section
SPECIFYING ATTACHMENTS below.
- -bottomspring weight
- Specifies the weight of the spring at the bottom edge of
the slave window. See the section USING SPRINGS below.
- -bp value
- Abbreviation for the -padbottom option.
- -bs weight
- Abbreviation for the -bottomspring option.
- -fill master
- Specifies the fillings when springs are used for this
widget. The value must be x, y, both or
none.
- -in master
- Places the slave window into the specified master window.
If the slave was originally in another master window, all attachment
values with respect to the original master window are discarded. Even if
the attachment values are the same as in the original master window, they
need to be specified again. The -in flag, when needed, must appear
as the first flag after the name of the slave. Otherwise an error is
generated.
- -l attachment
- Abbreviation for the -left option.
- -left attachment
- Specifies an attachment for the left edge of the slave
window. The attachment must specied according to the section
SPECIFYING ATTACHMENTS below.
- -leftspring weight
- Specifies the weight of the spring at the left edge of the
slave window. See the section USING SPRINGS below.
- -lp value
- Abbreviation for the -padleft option.
- -ls weight
- Abbreviation for the -leftspring option.
- -padbottom value
- Specifies the amount of external padding to leave on the
bottom side of the slave. The value may have any of the forms
acceptable to Tk_GetPixels(3).
- -padleft value
- Specifies the amount of external padding to leave on the
left side of the slave.
- -padright value
- Specifies the amount of external padding to leave on the
right side of the slave.
- -padtop value
- Specifies the amount of external padding to leave on the
top side of the slave.
- -padx value
- Specifies the amount of external padding to leave on both
the left and the right sides of the slave.
- -pady value
- Specifies the amount of external padding to leave on both
the top and the bottom sides of the slave.
- -r attachment
- Abbreviation for the -right option.
- -right attachment
- Specifies an attachment for the right edge of the slave
window. The attachment must specied according to the section
SPECIFYING ATTACHMENTS below.
- -rightspring weight
- Specifies the weight of the spring at the right edge of the
slave window. See the section USING SPRINGS below.
- -rp value
- Abbreviation for the -padright option.
- -rs weight
- Abbreviation for the -rightspring option.
- -t attachment
- Abbreviation for the -top option.
- -top attachment
- Specifies an attachment for the top edge of the slave
window. The attachment must specied according to the section
SPECIFYING ATTACHMENTS below.
- -topspring weight
- Specifies the weight of the spring at the top edge of the
slave window. See the section USING SPRINGS below.
- -tp value
- Abbreviation for the -padtop option.
- -ts weight
- Abbreviation for the -topspring option.
- tixForm forget slave ?slave ...?
- Removes each of the slaves from its master and unmaps their
windows. The slaves will no longer be managed by tixForm. All attachment
values with respect to their master windows are discarded. If another
slave is attached to this slave, then the attachment of the other slave
will be changed to grid attachment based on its geometry.
- tixForm grid master ?x_size
y_size?
- When x_size and y_size are given, this
command returns the number of grids of the master window in a pair of
integers of the form { x_size y_size}. When both x_size and
y_size are given, this command changes the number of horizontal and
vertical grids on the master window.
- tixForm info slave ?option?
- Queries the attachment options of a slave window.
option can be any of the options accepted by the tixForm
configure command. If option is given, only the value of that
option is returned. Otherwise, this command returns a list whose elements
are the current configuration state of the slave given in the same
option-value form that might be specified to tixForm
configure. The first two elements in this list list are "
-in master" where master is the slave's master
window.
- tixForm slaves master
- Returns a list of all of the slaves for the master window.
The order of the slaves in the list is the same as their order in the
packing order. If master has no slaves then an empty string is
returned.
SPECIFYING ATTACHMENTS¶
One can specify an attachment for each side of a slave window managed by
tixForm. An attachment is specified in the the form "-
side {
anchor_point offset}". -
side can be one of
-top,
-bottom,
-left or
-right.
Offset is given in screen units (i.e. any of the forms acceptable to
Tk_GetPixels). A positive offset indicates shifting to a position to
the right or bottom of an anchor point. A negative offset indicates shifting
to a position to the left or top of an anchor point.
Anchor_point can be given in one of the following forms:
- Grid Attachment
- The master window is divided into a number of horizontal
and vertical grids. By default the master window is divided into 100x100
grids; the number of grids can be adjusted by the tixForm grid
command. A grid attachment anchor point is given by a % sign
followed by an integer value. For example, %0 spceifies the
first grid line (the top or left edge of the master window). %100
spceifies the last grid line (the bottom or right edge of the master
window).
- Opposite Side Attachment
- Opposite attachment specifies an anchor point located on
the opposite side of another slave widget, which must be managed by
tixForm in the same master window. An opposite attachment anchor point is
given by the name of another widget. For example, "tixForm .b -top
{.a 0}" attaches the top side of the widget .b to the
bottom of the widget .a.
- Parallel Side Attachment
- Opposite attachment specifies an anchor point located on
the same side of another slave widget, which must be managed by
tixForm in the same master window. An parallel attachment anchor point is
given by the sign & follwed by the name of another widget. For
example, "tixForm .b -top {&.a 0}" attaches the top
side of the widget .b to the top of the widget .a,
making the top sides of these two widgets at the same vertical
position in their parent window.
- No Attachment
- Specifies a side of the slave to be attached to nothing,
indicated by the keyword none. When the none anchor point is
given, the offser must be zero.
When a side of a slave is attached to {none 0}, the position of this
side is calculated by the position of the other side and the natural size
of the slave. For example, if a the left side of a widget is
attached to {%0 100}, its right side attached to {none
0}, and the natural size of the widget is 50 pixels, the
right side of the widget will be positioned at pixel {%0
149}.
When both -top and -bottom are attached to none, then
by default -top will be attached to {%0 0}. When both
-left and -right are attached to none, then by default
-left will be attached to {%0 0}.
Shifting effects can be achieved by specifying a non-zero offset with an anchor
point. In the following example, the
top side of widget
.b is
attached to the
bottom of
.a; hence
.b always appears
below
.a. Also, the left edge of
.b is attached to the
left side of
.a with a 10 pixel offest. Therefore, the
left edge of
.b is always shifted 10 pixels to the right of
.a's
left edge:
tixForm .b -left {.a 10} -top {.a 0}
ABBREVIATIONS: Certain abbreviations can be made on the attachment
specifications: First an offset of zero can be omitted. Thus, the following
two lines are equivalent:
tixForm .b -top {.a 0} -right {%100 0} tixForm .b -top {.a} -right {%100}
Also, because of the way TCL handles lists, when you omit the offset, you can
also leave out the braces. So you can further simplify the above to:
tixForm .b -top .a -right %100
In the second case, when the anchor point is omitted, the offset must be given.
A default anchor point is chosen according to the value of the offset. If the
anchor point is
0 or positive, the default anchor point %0 is used;
thus, "tixForm .b -top 15" attaches the top edge of
.b to a
position 15 pixels below the top edge of the master window. If the anchor
point is "
-0" or negative, the default anchor point
%100 is used; thus, "tixForm .a -right -2" attaches the right
edge of
.a to a position 2 pixels to the left of the master window's
right edge. An further example below shows a command with its
equivalent abbreviation. tixForm .b -top {%0 10} -bottom {%100 0} tixForm .b
-top 10 -bottom -0
USING SPRINGS¶
To be written.
TixForm starts with any slave in the list of slaves of the master window. Then
it tries to determine the position of each side of the slave.
If the attachment of a side of the slave is grid attachment, the position of the
side is readily determined.
If the attachment of this side is
none, then tixForm tries to determine
the position of the opposite side first, and then use the position of the
opposite side and the natural size of the slave to determine the position of
this side.
If the attachment is opposite or parallel widget attachments, then tixForm tries
to determine the positions of the other widget first, and then use the
positions of the other widget and the natural size of the slave determine the
position of this side. This recursive algorithmis carried on until the
positions of all slaves are determined.
CIRCULAR DEPENDENCY¶
The algorithm of tixForm will fail if a circular dependency exists in the
attachments of the slaves. For example:
tixForm .c -left .b tixForm .b -right .c
In this example, the position of the left side of
.b depends on the right
side of
.c, which in turn depends on the left side of
.b.
When a circular dependency is discovered during the execution of the tixForm
algorithm, tixForm will generate a background error and the geometry of the
slaves are undefined (and will be arbitrary). Notice that tixForm only
executes the algorithm when the specification of the slaves' attachments is
complete. Therefore, it allows intermediate states of circular dependency
during the specification of the slaves' attachments. Also, unlike the Motif
Form manager widget, tixForm defines circular dependency as "
dependency in the same dimension". Therefore, the following
code fragment will does not have circular dependency because the two widgets
do not depend on each other in the same dimension (
.b depends
.c in the horizontal dimension and
.c depends on
.b in
the vertical dimension):
tixForm .b -left .c tixForm .c -top .b
BUGS¶
Springs have not been fully implemented yet.
KEYWORDS¶
Tix(n), Form, Geometry Management