Documentation | InterfaceKit | LayoutAPI
SYNOPSIS
Perl
Python
# if you want a layout like this:
# A B C
# |-------------|-------------|-------------|
# | | | |
# 1 | | | |
# | | | |
# |-------------| | |
# | | | |
# 2 | | | |
# | | | |
# |-------------| | |
# | | | |
# 3 | | | |
# | | | |
# |-------------|-------------|-------------|
# first set a horizontal GroupLayout to the Window
my $layoutH = GroupLayout->new(B_HORIZONTAL);
$window->SetLayout($layoutH);
# then add a vertical GroupLayout as a child to the Window, followed by two Views
my $layoutV = GroupLayout->new(B_VERTICAL);
$window->AddChild($layoutV);
$window->AddChild($viewB);
$window->AddChild($viewC);
# finally, add three Views to the vertical TwoDimensionalLayout
$layoutV->AddView($viewA1);
$layoutV->AddView($viewA2);
$layoutV->AddView($viewA3);
DESCRIPTION
The old BeOS API handle location and size of Views using frame rectangles and resizing flags. While Haiku still supports this, it also has a layout system that allows for more complex layouts.
For more information on the Layout API, see the Haiku Book Layout API description. (As of this writing, this page does not contain very much information.)
In addition to the various objects that are part of this API, there are a number of Layout-related methods in Window and View.
OBJECTS
- LayoutContext
- LayoutContextListener
- LayoutItem
- AbstractLayoutItem
- Layout
- AbstractLayout
- CardLayout
- TwoDimensionalLayout
- ColumnRowConstraints
- Dimensions
- GridLayout
- GroupLayout
- SpaceLayoutItem
- LayoutUtils
WINDOW METHODS
AddChild
Under the BeOS API, AddChild took a View. It still
does under Haiku, but it can also take a LayoutItem instead. This version
does not take a sibling
argument.
LayoutItem is a base class whose only only API-defined descendant class is Layout, so the main purpose of this method is to create more complex layout patterns by adding sub-layouts to a Window.
Perl
Python
$window->AddChild($layout_item);
layout_item
A LayoutItem to add.
InvalidateLayout
Invalidates the layout, so it will be recalculated.
Perl
Python
$window->InvalidateLayout($descendants);
descendants
A boolean; if true, invalidate the layout for each of the child Views.
GetLayout
SetLayout
These methods do what you expect.
Perl
Python
$window->GetLayout(); $window->SetLayout($layout);
layout
A Layout object.
Layout
Layout
redoes the Window layout, if the layout is no longer valid.
Perl
Python
$window->Layout($force);
force
A boolean; if true, redoes the layout even if the layout is still valid.
VIEW METHODS
Constructor
The constructors for View and its descendants have a version that does not take a frame rectangle or resizing flags. This version is meant for use with the Layout API.
Many of these constructors also take an optional Layout object; this is used when the View will have child Views of its own.
AddChild
As with Window.AddChild
above, View has a version of
AddChild that takes a LayoutItem instead of a View.
Perl
Python
$view->AddChild($layout_item);
layout_item
A LayoutItem to add.
HeightForWidth
HasHeightForWidth
GetHeightForWidth
HasHeightForWidth
returns true if the height constraints are dependent on
the width; GetHeightForWidth
returns the height for a given width.
These can also be called as hooks.
Perl
Python
$view->HasHeightForWidth(); $view->GetHeightForWidth($width);
width
A floating point number, the width.
InvalidateLayout
IsLayoutValid
EnableLayoutInvalidation
DisableLayoutInvalidation
IsLayoutInvalidationDisabled
ResetLayoutInvalidation
Invalidates the layout.
TODO: finish this
Perl
Python
$view->InvalidateLayout($descendants); $view->IsLayoutValid(); $view->EnableLayoutInvalidation(); $view->DisableLayoutInvalidation(); $view->IsLayoutInvalidationDisabled(); $view->ResetLayoutInvalidation();
descendants
A boolean; if true, invalidate the layout for each of the child Views.
Layout
Relayout
Lays out the View.
Perl
Python
$view->Layout($force); $view->Relayout();
force
A boolean; if true, the layout will be recalculated even if it is valid.
Layout object
GetLayout
SetLayout
Gets or sets the Layout object.
SetLayout
can also be called as a hook.
Perl
Python
$view->GetLayout(); $view->SetLayout($layout);
layout
A Layout object.
LayoutContext
Gets the LayoutContext object.
Perl
Python
$view->LayoutContext();
Size and Alignment
SetExplicitSize
MinSize
ExplicitMinSize
SetExplicitMinSize
MaxSize
ExplicitMaxSize
SetExplicitMaxSize
PreferredSize
ExplicitPreferredSize
SetExplicitPreferredSize
LayoutAlignment
ExplicitAlignment
SetExplicitAlignment
THese limits are used when for calculating the size of the View. The
Explicit
getters and setters allow you to override the calculated sizes
and alignment; the other methods report which size is actually being used.
MinSize
, MaxSize
, PreferredSize
, and LayoutAlignment
can also be
called as hooks.
Perl
Python
$view->SetExplicitSize($size); $view->MinSize(); $view->ExplicitMinSize(); $view->SetExplicitMinSize($size); $view->MaxSize(); $view->ExplicitMaxSize(); $view->SetExplicitMaxSize($size); $view->PreferredSize(); $view->ExplicitPreferredSize(); $view->SetExplicitPreferredSize($size); $view->LayoutAlignment(); $view->ExplicitAlignment(); $view->SetExplicitAlignment($alignment);
VIEW HOOKS
DoLayout
Called when the View needs to recalculate its layout.
Perl
Python
$view->DoLayout();
LayoutChanged
Called when the Layout changes.
Perl
Python
$view->LayoutChanged();
LayoutInvalidated
Called when the layout is invalidated.
Perl
Python
$view->LayoutInvalidated($descendants);
descendants
A boolean; if true, the layouts of child Views should also be invalidated.