Portability | portable (depends on GHC) |
---|---|
Stability | provisional |
Maintainer | gtk2hs-users@lists.sourceforge.net |
Safe Haskell | Safe-Infered |
Base class for box containers
- data Box
- class ContainerClass o => BoxClass o
- castToBox :: GObjectClass obj => obj -> Box
- gTypeBox :: GType
- toBox :: BoxClass o => o -> Box
- data Packing
- = PackRepel
- | PackGrow
- | PackNatural
- boxPackStart :: (BoxClass self, WidgetClass child) => self -> child -> Packing -> Int -> IO ()
- boxPackEnd :: (BoxClass self, WidgetClass child) => self -> child -> Packing -> Int -> IO ()
- boxPackStartDefaults :: (BoxClass self, WidgetClass widget) => self -> widget -> IO ()
- boxPackEndDefaults :: (BoxClass self, WidgetClass widget) => self -> widget -> IO ()
- boxGetHomogeneous :: BoxClass self => self -> IO Bool
- boxSetHomogeneous :: BoxClass self => self -> Bool -> IO ()
- boxGetSpacing :: BoxClass self => self -> IO Int
- boxSetSpacing :: BoxClass self => self -> Int -> IO ()
- boxReorderChild :: (BoxClass self, WidgetClass child) => self -> child -> Int -> IO ()
- boxQueryChildPacking :: (BoxClass self, WidgetClass child) => self -> child -> IO (Packing, Int, PackType)
- boxSetChildPacking :: (BoxClass self, WidgetClass child) => self -> child -> Packing -> Int -> PackType -> IO ()
- boxSpacing :: BoxClass self => Attr self Int
- boxHomogeneous :: BoxClass self => Attr self Bool
- boxChildPacking :: (BoxClass self, WidgetClass child) => child -> Attr self Packing
- boxChildPadding :: (BoxClass self, WidgetClass child) => child -> Attr self Int
- boxChildPackType :: (BoxClass self, WidgetClass child) => child -> Attr self PackType
- boxChildPosition :: (BoxClass self, WidgetClass child) => child -> Attr self Int
Detail
Box
is an abstract widget which encapsulates functionality for a
particular kind of container, one that organizes a variable number of
widgets into a rectangular area. Box
currently has two derived classes,
HBox
and VBox
.
The rectangular area of a Box
is organized into either a single row or
a single column of child widgets depending upon whether the box is of type
HBox
or VBox
, respectively. Thus, all children of a Box
are allocated
one dimension in common, which is the height of a row, or the width of a
column.
Box
uses a notion of packing. Packing refers to adding widgets with
reference to a particular position in a Container
. For a Box
, there are
two reference positions: the start and the end of the box. For a VBox
,
the start is defined as the top of the box and the end is defined as the
bottom. For a HBox
the start is defined as the left side and the end is
defined as the right side.
Use repeated calls to boxPackStart
to pack widgets into a Box
from
start to end. Use boxPackEnd
to add widgets from end to start. You may
intersperse these calls and add widgets from both ends of the same Box
.
Besides adding widgets at the start or the end of a box, you can also
specify the padding around each widget (in pixels) and a Packing
parameter that denotes how to fill up unused space.
The functions boxPackStartDefaults
or boxPackEndDefaults
are a convenient way to pack widgets into a Box
without specifying
these extra paramters.
While the right amount of padding around each widget is a matter of
appearance, the Packing
paramter specifies the way the widgets in
the container behave when the window is resized and thereby affect
the usability. Hence, once you have created a window, you should resize
it and see if the widgets behave as expected. The Packing
parameter of
each child widget determines how excess space is used by that particular
widget. See the description of Packing
for a detailed explanaition.
Because Box
is a Container
, you may also use
containerAdd
to insert widgets into
the box, and they will be packed as if with boxPackStartDefaults
. Use
containerRemove
to remove widgets
from the Box
.
Use boxSetHomogeneous
to specify whether or not all children of the
Box
are forced to get the same amount of space. Note that the
Packing
options PackNatural
and PackRepel
coincide if space is
allotted homogeneously.
Use boxSetSpacing
to determine how much space will be minimally placed
between all children in the Box
.
Use boxReorderChild
to move a Box
child to a different place in the
box.
Use boxSetChildPacking
to reset the expand, fill, and padding
attributes of any Box
child. Use boxQueryChildPacking
to query these
fields.
Class Hierarchy
|GObject
| +----Object
| +----Widget
| +----Container
| +----Box | +----ButtonBox
| +----VBox
| +----HBox
Types
class ContainerClass o => BoxClass o Source
castToBox :: GObjectClass obj => obj -> BoxSource
Packing parameters of a widget
- The
Packing
parameter determines how the child behaves in the horizontal or vertical way in anHBox
orVBox
, respectively.PackNatural
means the child is as big as it reqests. It will stay at the start of the end of aBox
if there is more space available. All children packed withPackRepel
will be padded on both sides with additional space.PackGrow
will increase the size of a widget so that it covers the available space. A menu bar, for instance, should always stay at the top of a window and should only occupy as little space as possible. Hence it should be packed at the start of aVBox
with the packing optionPackNatural
. The working area of a window (e.g. the text area in an editor) should expand when the window is resized. Here the packing optionPackGrow
is the right choice and it is irrelevant whether the main area is inserted at the start or the end of a box. FinallyPackRepel
is most useful in a window where no widget can make use of excess space. Examples include a dialog box without list boxes or text fields.
Methods
:: (BoxClass self, WidgetClass child) | |
=> self | |
-> child |
|
-> Packing | |
-> Int |
|
-> IO () |
Adds the child
widget to the box, packed with reference to the start of
the box. The
child
is packed after any other child packed with reference to the start
of the box.
:: (BoxClass self, WidgetClass child) | |
=> self | |
-> child |
|
-> Packing | |
-> Int |
|
-> IO () |
Adds the child
widget to the box, packed with reference to the end of
the box. The
child
is packed after (away from end of) any other child packed with
reference to the end of the box.
Note that
for boxPackEnd
the PackNatural
option will move a child to the right in
an HBox
or to the bottom in an VBox
if there is more space availble.
:: (BoxClass self, WidgetClass widget) | |
=> self | |
-> widget |
|
-> IO () |
Like boxPackStart
but uses the default parameters PackRepel
and 0 for
padding.
:: (BoxClass self, WidgetClass widget) | |
=> self | |
-> widget |
|
-> IO () |
Like boxPackEnd
but uses the default parameters PackRepel
and 0 for
padding.
Returns whether the box is homogeneous (all children are the same size).
See boxSetHomogeneous
.
:: BoxClass self | |
=> self | |
-> Bool |
|
-> IO () |
Sets the homogeneous property, controlling whether or not all children of the box are given equal space
Retrieves the standard spacing between widgets.
Set the standard spacing between two children.
This space is in addition to the padding parameter that is given for each child.
:: (BoxClass self, WidgetClass child) | |
=> self | |
-> child |
|
-> Int |
|
-> IO () |
Moves child
to a new position
in the list of box
children. The list
contains both widgets packed PackStart
as well as widgets packed
PackEnd
, in the order that these widgets were added to the box.
A widget's position in the box children list determines where the widget is packed into the box. A child widget at some position in the list will be packed just after all other widgets of the same packing type that appear earlier in the list.
:: (BoxClass self, WidgetClass child) | |
=> self | |
-> child |
|
-> Packing | |
-> Int | padding |
-> PackType | packType |
-> IO () |
Sets the way child
is packed into the box.
Attributes
boxSpacing :: BoxClass self => Attr self IntSource
The amount of space between children.
Allowed values: >= 0
Default value: 0
boxHomogeneous :: BoxClass self => Attr self BoolSource
Whether the children should all be the same size.
Default value: False
Child Attributes
boxChildPacking :: (BoxClass self, WidgetClass child) => child -> Attr self PackingSource
The packing style of the child.
Default value: PackGrow
boxChildPadding :: (BoxClass self, WidgetClass child) => child -> Attr self IntSource
Extra space to put between the child and its neighbors, in pixels.
Allowed values: <= (
maxBound
:: Int)
Default value: 0
boxChildPackType :: (BoxClass self, WidgetClass child) => child -> Attr self PackTypeSource
boxChildPosition :: (BoxClass self, WidgetClass child) => child -> Attr self IntSource
The index of the child in the parent.
Allowed values: >= -1
Default value: 0