tixForm - Geometry manager based on attachment rules
tixForm option arg ?arg ...?
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.
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
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.
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
Springs have not been fully implemented yet.
Tix(n), Form, Geometry Management