Graphics.UI.WXCore.Layout

Contents

Description

 

Synopsis

Types

data Layout

Abstract data type that represents the layout of controls in a window.

Instances

sizerFromLayout :: Window a -> Layout -> IO (Sizer ())

Create a Sizer from a Layout and a parent window.

type TabPage = (String, Bitmap (), Layout)

A tab page in a notebook: a title, a possible bitmap and a layout.

Window

windowSetLayout :: Window a -> Layout -> IO ()

Set the layout of a window (automatically calls sizerFromLayout).

layoutFromWindow :: Window a -> Layout

(primitive) Lift a basic control to a Layout.

windowReFit :: Window a -> IO ()

Fits a widget properly by calling windowReLayout on the parent frame or dialog (windowGetFrameParent).

windowReFitMinimal :: Window a -> IO ()

Fits a widget properly by calling windowReLayout on the parent frame or dialog (windowGetFrameParent).

windowReLayout :: Window a -> IO ()

Re-invoke layout algorithm to fit a window around its children. It will enlarge when the current client size is too small, but not shrink when the window is already large enough. (in contrast, windowReLayoutMinimal will also shrink a window so that it always minimally sized).

windowReLayoutMinimal :: Window a -> IO ()

Re-invoke layout algorithm to fit a window around its children. It will resize the window to its minimal acceptable size (windowFit).

Layouts

Widgets

class Widget w where

Anything in the widget class can be layed out.

Methods

widget :: w -> Layout

Create a layout from a widget.

Instances

label :: String -> Layout

(primitive) Create a static label label (= StaticText).

rule :: Int -> Int -> Layout

(primitive) A line with a given width and height

hrule :: Int -> Layout

A horizontal line with a given width.

vrule :: Int -> Layout

A vertical line with a given height.

sizer :: Sizer a -> Layout

(primitive) Create a Layout from a Sizer object.

Containers

row :: Int -> [Layout] -> Layout

Layout elements in a horizontal direction with a certain amount of space between the elements.

column :: Int -> [Layout] -> Layout

Layout elements in a vertical direction with a certain amount of space between the elements.

grid :: Int -> Int -> [[Layout]] -> Layout

(primitive) The expression (grid w h rows) creates a grid of rows. The w argument is the extra horizontal space between elements and h the extra vertical space between elements. (implemented using the FlexGrid sizer).

Only when all elements of a column have horizontal stretch (see stretch and hstretch), the entire column will stretch horizontally, and the same holds for rows with vertical stretch. When any column or row in a grid can stretch, the grid itself will also stretch in that direction and the grid will expand to fill the assigned area by default (instead of being static).

boxed :: String -> Layout -> Layout

(primitive) Create a labeled border around a layout (= StaticBox). Just like a grid, the horizontal or vertical stretch of the child layout determines the stretch and expansion mode of the box.

container :: Window a -> Layout -> Layout

(primitive) Add a container widget (for example, a Panel). Just like a grid, the horizontal or vertical stretch of the child layout determines the stretch and expansion mode of the container.

tab :: String -> Layout -> TabPage

Create a simple tab page with a certain title and layout.

imageTab :: String -> Bitmap () -> Layout -> TabPage

Create a tab page with a certain title, icon, and layout.

tabs :: Notebook a -> [TabPage] -> Layout

Create a notebook layout. The pages always need to be embedded inside a container (normally a Panel). Just like a grid, the horizontal or vertical stretch of the child layout determines the stretch and expansion mode of the notebook.

hsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout

Add a horizontal sash bar between two windows. The two integer arguments specify the width of the sash bar (5) and the initial height of the top pane respectively.

vsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout

Add a vertical sash bar between two windows. The two integer arguments specify the width of the sash bar (5) and the initial width of the left pane respectively.

Glue

glue :: Layout

An empty layout that stretchable in all directions.

hglue :: Layout

An empty layout that is horizontally stretchable.

vglue :: Layout

An empty layout that is vertically stretchable.

Whitespace

space :: Int -> Int -> Layout

(primitive) Empty layout with a given width and height.

hspace :: Int -> Layout

Horizontal space of a certain width.

vspace :: Int -> Layout

Vertical space of a certain height.

empty :: Layout

An empty layout. (see also space).

Transformers

dynamic :: Layout -> Layout

Adjust the minimal size of a control dynamically when the content changes. This is used for example to correctly layout static text or buttons when the text or label changes at runtime. This property is automatically set for StaticText, labels, and buttons.

Stretch

static :: Layout -> Layout

(primitive) The layout is not stretchable. In a grid, the row and column that contain this layout will not be resizeable. Note that a static layout can still be assigned an area that is larger than its preferred size due to grid alignment constraints. (default, except for containers like grid and boxed where it depends on the child layouts).

stretch :: Layout -> Layout

(primitive) The layout is stretchable and can be assigned a larger area in both the horizontal and vertical direction. See also combinators like fill and floatCentre.

hstretch :: Layout -> Layout

(primitive) The layout is stretchable in the horizontal direction. See also combinators like hfill and hfloatCentre.

vstretch :: Layout -> Layout

(primitive) The layout is stretchable in the vertical direction. See also combinators like vfill and vfloatCentre.

minsize :: Size -> Layout -> Layout

(primitive) Set the minimal size of a widget.

Expansion

rigid :: Layout -> Layout

(primitive) Never resize the layout, but align it in the assigned area (default, except for containers like grid and boxed where it depends on the child layouts).

shaped :: Layout -> Layout

(primitive) Expand the layout to fill the assigned area but maintain the original proportions of the layout. Note that the layout can still be aligned in a horizontal or vertical direction.

expand :: Layout -> Layout

(primitive) Expand the layout to fill the assigned area entirely, even when the original proportions can not be maintained. Note that alignment will have no effect on such layout. See also fill.

Fill

fill :: Layout -> Layout

The layout is stretchable and expands into the assigned area. (see also stretch and expand).

hfill :: Layout -> Layout

The layout is horizontally stretchable and expands into the assigned area. (see also hstretch and expand).

vfill :: Layout -> Layout

The layout is vertically stretchable and expands into the assigned area. (see also vstretch and expand).

Margin

margin :: Int -> Layout -> Layout

Add a margin of a certain width around the entire layout.

marginWidth :: Int -> Layout -> Layout

(primitive) Set the width of the margin (default is 10 pixels).

marginNone :: Layout -> Layout

(primitive) Remove the margin of a layout (default).

marginLeft :: Layout -> Layout

(primitive) Add a margin to the left.

marginTop :: Layout -> Layout

(primitive) Add a margin to the top.

marginRight :: Layout -> Layout

(primitive) Add a right margin.

marginBottom :: Layout -> Layout

(primitive) Add a margin to the bottom.

Floating alignment

floatTopLeft :: Layout -> Layout

Make the layout stretchable and align it in the top-left corner of the assigned area (default).

floatTop :: Layout -> Layout

Make the layout stretchable and align it centered on the top of the assigned area.

floatTopRight :: Layout -> Layout

Make the layout stretchable and align it to the top-right of the assigned area.

floatLeft :: Layout -> Layout

Make the layout stretchable and align it centered to the left of the assigned area.

floatCentre :: Layout -> Layout

Make the layout stretchable and align it in the center of the assigned area.

floatCenter :: Layout -> Layout

Make the layout stretchable and align it in the center of the assigned area.

floatRight :: Layout -> Layout

Make the layout stretchable and align it centered to the right of the assigned area.

floatBottomLeft :: Layout -> Layout

Make the layout stretchable and align it to the bottom-left of the assigned area.

floatBottom :: Layout -> Layout

Make the layout stretchable and align it centered on the bottom of the assigned area.

floatBottomRight :: Layout -> Layout

Make the layout stretchable and align it to the bottom-right of the assigned area.

Horizontal floating alignment

hfloatLeft :: Layout -> Layout

Make the layout horizontally stretchable and align to the left.

hfloatCentre :: Layout -> Layout

Make the layout horizontally stretchable and align to the center.

hfloatCenter :: Layout -> Layout

Make the layout horizontally stretchable and align to the center.

hfloatRight :: Layout -> Layout

Make the layout horizontally stretchable and align to the right.

Vertical floating alignment

vfloatTop :: Layout -> Layout

Make the layout vertically stretchable and align to the top.

vfloatCentre :: Layout -> Layout

Make the layout vertically stretchable and align to the center.

vfloatCenter :: Layout -> Layout

Make the layout vertically stretchable and align to the center.

vfloatBottom :: Layout -> Layout

Make the layout vertically stretchable and align to the bottom.

Alignment

centre :: Layout -> Layout

Align the layout in the center of the assigned area.

alignTopLeft :: Layout -> Layout

Align the layout in the top-left corner of the assigned area (default).

alignTop :: Layout -> Layout

Align the layout centered on the top of the assigned area.

alignTopRight :: Layout -> Layout

Align the layout to the top-right of the assigned area.

alignLeft :: Layout -> Layout

Align the layout centered to the left of the assigned area.

alignCentre :: Layout -> Layout

Align the layout in the center of the assigned area.

alignCenter :: Layout -> Layout

Align the layout in the center of the assigned area.

alignRight :: Layout -> Layout

Align the layout centered to the right of the assigned area.

alignBottomLeft :: Layout -> Layout

Align the layout to the bottom-left of the assigned area.

alignBottom :: Layout -> Layout

Align the layout centered on the bottom of the assigned area.

alignBottomRight :: Layout -> Layout

Align the layout to the bottom-right of the assigned area.

Horizontal alignment

halignLeft :: Layout -> Layout

(primitive) Align horizontally to the left when the layout is assigned to a larger area (default).

halignCentre :: Layout -> Layout

(primitive) Center horizontally when assigned to a larger area.

halignCenter :: Layout -> Layout

(primitive) Center horizontally when assigned to a larger area.

halignRight :: Layout -> Layout

(primitive) Align horizontally to the right when the layout is assigned to a larger area.

Vertical alignment

valignTop :: Layout -> Layout

(primitive) Align vertically to the top when the layout is assigned to a larger area (default).

valignCentre :: Layout -> Layout

(primitive) Center vertically when the layout is assigned to a larger area.

valignCenter :: Layout -> Layout

(primitive) Center vertically when the layout is assigned to a larger area.

valignBottom :: Layout -> Layout

(primitive) Align vertically to the bottom when the layout is assigned to a larger area.