[ Previous |
Next |
Contents |
Glossary |
Home |
Search ]
Motif 2.1 Programmer's Guide
Managing Geometry Using Form
Form is a container widget that provides the most
comprehensive facilities for controlling the layout of children. Constraints
are placed on children of the Form to define attachments for each of the
child's four sides. These attachments can be to the Form, to another
child widget or gadget, to a relative position within the Form, or to the
initial position of the child. The attachments determine the layout behavior
of the Form when resizing occurs. Form is a subclass of BulletinBoard, so the
resources and general geometry policies of BulletinBoard apply to Form as
well.
Each child has 17 Form constraint resources, four for each side of the
child and one, XmNresizable, that applies to the child as a whole. Following
is a description of XmNresizable and the constraint resources that apply to
the top side of a child:
XmNresizableThis Boolean resource specifies whether or not a child's request for
a new size is (conditionally) granted by the Form. If this resource is set to
True, the request is granted if possible. If this resource is set to False,
the request is always refused.
If a child has both left and right attachments, its width is completely
controlled by the Form, regardless of the value of the child's
XmNresizable resource. Similarly, if a child has both top and bottom
attachments, its height is completely controlled by the Form, regardless of
the value of the child's XmNresizable resource. If a child has a left or
right attachment but not both, the child's XmNwidth is used in setting
its width if the value of the child's XmNresizable resource is True.
These conditions are also true for top and bottom attachments, with height
acting like width.
XmNtopAttachmentSpecifies attachment of the top side of the child. It can have the
following values:
XmATTACH_NONEDo not attach the top side of the child. If XmNbottomAttachment is also
XmATTACH_NONE, this value is ignored and the child is given a default top
attachment.
XmATTACH_FORMAttach the top side of the child to the top side of the Form.
XmATTACH_OPPOSITE_FORMAttach the top side of the child to the bottom side of the Form.
XmNtopOffset can be used to determine the visibility of the child.
XmATTACH_WIDGETAttach the top side of the child to the bottom side of the widget or
gadget specified in the XmNtopWidget resource. If XmNtopWidget is NULL,
XmATTACH_WIDGET is replaced by XmATTACH_FORM, and the child is attached to the
top side of the Form.
XmATTACH_OPPOSITE_WIDGETAttach the top side of the child to the top side of the widget or gadget
specified in the XmNtopWidget resource.
XmATTACH_POSITIONAttach the top side of the child to a position that is relative to the top
side of the Form and in proportion to the height of the Form. This position is
determined by the XmNtopPosition and XmNfractionBase resources.
XmATTACH_SELFAttach the top side of the child to a position that is proportional to the
current y value of the child divided by the height of the Form. This position
is determined by the XmNtopPosition and XmNfractionBase resources.
XmNtopPosition is set to a value proportional to the current y value of the
child divided by the height of the Form.
XmNtopOffsetSpecifies the constant offset between the top side of the child and the
object to which it is attached. The relationship established remains,
regardless of any resizing operations that occur.
XmNtopPositionThis resource is used to determine the position of the top side of the
child when the child's XmNtopAttachment is set to XmATTACH_POSITION. In
this case, the position of the top side of the child is relative to the top
side of the Form and is a fraction of the height of the Form. This fraction is
the value of the child's XmNtopPosition resource divided by the value of
the Form's XmNfractionBase. For example, if the child's
XmNtopPosition is 50, the Form's XmNfractionBase is 100, and the
Form's height is 200, the position of the top side of the child is 100.
XmNtopWidgetSpecifies the widget or gadget to which the top side of the child is
attached. This resource is used if XmNtopAttachment is set to either
XmATTACH_WIDGET or XmATTACH_OPPOSITE_WIDGET.
These constraint resources interact with the following resources of the
Form itself:
XmNfractionBaseSpecifies the denominator used in calculating the relative position of a
child widget using XmATTACH_POSITION constraints. The value must not be 0.
If the value of a child's XmNleftAttachment (or XmNrightAttachment) is
XmATTACH_POSITION, the position of the left (or right) side of the child is
relative to the left side of the Form and is a fraction of the width of the
Form. This fraction is the value of the child's XmNleftPosition (or
XmNrightPosition) resource divided by the value of the Form's
XmNfractionBase.
If the value of a child's XmNtopAttachment (or XmNbottomAttachment) is
XmATTACH_POSITION, the position of the top (or bottom) side of the child is
relative to the top side of the Form and is a fraction of the height of the
Form. This fraction is the value of the child's XmNtopPosition (or
XmNbottomPosition) resource divided by the value of the Form's
XmNfractionBase.
XmNhorizontalSpacingSpecifies the offset for right and left attachments.
XmNrubberPositioningIndicates the default near (left) and top attachments for a child of the
Form.
Note: |
Whether this resource actually applies to the left or right side of the
child and its attachment may depend on the value of the XmNstringDirection
resource.) |
The default left attachment is applied whenever initialization or
XtSetValues leaves the child without either a left or right attachment. The
default top attachment is applied whenever initialization or XtSetValues
leaves the child without either a top or bottom attachment.
If this Boolean resource is set to False, XmNleftAttachment and
XmNtopAttachment default to XmATTACH_FORM, XmNleftOffset defaults to the
current x value of the left side of the child, and XmNtopOffset defaults to
the current y value of the child. The effect is to position the child
according to its absolute distance from the left or top side of the Form.
If this resource is set to True, XmNleftAttachment and XmNtopAttachment
default to XmATTACH_POSITION, XmNleftPosition defaults to a value proportional
to the current x value of the left side of the child divided by the width of
the Form, and XmNtopPosition defaults to a value proportional to the current y
value of the child divided by the height of the Form. The effect is to
position the child relative to the left or top side of the Form and in
proportion to the width or height of the Form.
XmNverticalSpacingSpecifies the offset for top and bottom attachments.
Following are some important considerations in using a Form:
Every child must have an attachment on either the left or the right. If
initialization or XtSetValues leaves a widget without such an attachment, the
result depends upon the value of XmNrubberPositioning.
If XmNrubberPositioning is False, the child is given an XmNleftAttachment
of XmATTACH_FORM and an XmNleftOffset equal to its current x value.
If XmNrubberPositioning is True, the child is given an XmNleftAttachment of
XmATTACH_POSITION and an XmNleftPosition proportional to the current x value
divided by the width of the Form.
In either case, if the child has not been previously given an x value, its
x value is taken to be 0, which places the child at the left side of the Form.
If you want to create a child without any attachments, and then later (for
example, after creating and managing it, but before realizing it) give it a
right attachment using XtSetValues, you must set its XmNleftAttachment to
XmATTACH_NONE at the same time.
The XmNresizable resource controls only whether a geometry request by the
child will be granted. It has no effect on whether the child's size can
be changed because of changes in geometry of the Form or of other children.
Every child has a preferred width, based on geometry requests it makes
(whether they are granted or not).
If a child has attachments on both the left and the right sides, its width
is completely controlled by the Form. It can be shrunk below its preferred
width or enlarged above it, if necessary, due to other constraints. In
addition, the child's geometry requests to change its own width may be
refused.
If a child has attachments on only its left or right side, it will always
be at its preferred width (if resizable, otherwise at is current width). This
may cause it to be clipped by the Form or by other children.
If a child's left (or right) attachment is set to XmATTACH_SELF, its
corresponding left (or right) offset is forced to 0. The attachment is then
changed to XmATTACH_POSITION, with a position that corresponds to the x value
of the child's left (or right) edge. To fix the position of a side at a
specific x value, use XmATTACH_FORM or XmATTACH_OPPOSITE_FORM with the x value
as the left (or right) offset.
Unmapping a child has no effect on the Form except that the child is not
mapped.
Unmanaging a child unmaps it. If no other child is attached to it, or if
all children attached to it and all children recursively attached to them are
also all unmanaged, all of those children are treated as if they did not exist
in determining the size of the Form.
When using XtSetValues to change the XmNx resource of a child, you must
simultaneously set its left attachment to either XmATTACH_SELF or
XmATTACH_NONE. Otherwise, the request is not granted. If XmNresizable is
False, the request is granted only if the child's size can remain the
same.
A left (or right) attachment of XmATTACH_WIDGET, where XmNleftWidget (or
XmNrightWidget) is NULL, acts like an attachment of XmATTACH_FORM.
If an attachment is made to a widget that is not a child of the Form, but
an ancestor of the widget is a child of the Form, the attachment is made to
the ancestor.
All these considerations are true of top and bottom attachments as well,
with top acting like left, bottom acting like right, y acting like x, and
height acting like width.
[ Previous |
Next |
Contents |
Glossary |
Home |
Search ]