frpnow-gtk3-0.2.0: Program GUIs with GTK3 and frpnow!

Copyright(c) George Steel 2017
LicenseBSD3
Maintainergeorge.steel@gmail.org
Safe HaskellNone
LanguageHaskell2010

Control.FRPNow.GTK.Containers

Contents

Description

EDSL for widget layouts ussing GTK container widgets.

Containers containing single children are created by actions taking the child widget as their last parameter, allowing for easy composition using =<<. Containers taking multiple children take their contents as a reader monad which runs over the newly-created widget, allowing packing commands to insert children of heterogeneous types, possibly with options. As all container-creation actions run in MonadIO, nesting containers can be done inline with standard monadic composition.

Given the wiegets foo, bar, baz, where foo supports scrolling (such as a TreeView) we can create a simple layout as follows

layout <- createVBox 0 $ do
    bstretch =<< createFrame ShadowIn =<< createScrolledWindow foo
    bpack <=< createHBox 0 $ do
        bpack bar
        bspacer
        bpack =<< set' [attr := val] baz

Synopsis

Documentation

clearChildren :: (MonadIO m, ContainerClass w) => w -> m () Source #

Destroys all children in a container, leaving it empty

set' :: MonadIO m => [AttrOp w] -> w -> m w Source #

Sets aattributes on a widget and returns the widget. Useful for setting attributes inline in a composition chain.

Box

createHBox :: MonadIO m => Int -> ReaderT HBox IO a -> m HBox Source #

Creates an HBox with a given spacing and fills it using the reader.

createVBox :: MonadIO m => Int -> ReaderT VBox IO a -> m VBox Source #

Creates a VBox with a given spacing and fills it using the reader.

bpack :: (WidgetClass w, BoxClass b) => w -> ReaderT b IO () Source #

Inserts a witget into the enclosing box as its natural size.

bstretch :: (WidgetClass w, BoxClass b) => w -> ReaderT b IO () Source #

Inserts a widget into the enclosing box with rubber length (takes all excess space).

bspacer :: BoxClass b => ReaderT b IO () Source #

Inserts an expanding spacer into a box

Grid

createGrid :: MonadIO m => Int -> Int -> ReaderT Grid IO () -> m Grid Source #

Creates a Grid (with the given x and y spacing) and fills it using the reader.

gcell :: (WidgetClass w, GridClass g) => (Int, Int) -> w -> ReaderT g IO () Source #

Inserts a widget into the enclosing Grid at the given (x,y) position.

gcellspan :: (WidgetClass w, GridClass g) => (Int, Int) -> (Int, Int) -> w -> ReaderT g IO () Source #

Inserts a widget into the enclosign Grid spanning several cells, with position fiven by the first srgument and size given by the second.

Stack

createStack :: MonadIO m => ReaderT Stack IO () -> m Stack Source #

Creates a Stack and fills it using the reader.

stackElem :: WidgetClass w => Text -> w -> ReaderT Stack IO () Source #

Adds an element to the enclosing Stack with the given key.

stackElemTitled :: WidgetClass w => Text -> Text -> w -> ReaderT Stack IO () Source #

Adds an element to the enclosing Stack with the given key and title.

createStackSwitcher :: MonadIO m => Stack -> m StackSwitcher Source #

Creates a StackSwitcher for a given Stack

Notebook

createNotebook :: MonadIO m => ReaderT Notebook IO a -> m Notebook Source #

Createa a Notebook and fills it using the reader.

nbpage :: WidgetClass w => Text -> w -> ReaderT Notebook IO () Source #

Add a tab to the enclosing Notebook with the given title

Scrolling

createScrolledWindow :: (MonadIO m, WidgetClass w) => w -> m ScrolledWindow Source #

Creates a ScrolledWindow around a widget supporting scrolling natively.

createScrolledViewport :: (MonadIO m, WidgetClass w) => w -> m ScrolledWindow Source #

Creates a ScrolledWindow and Vieqwport around a widget not supporting scrollign such as a Box or Grid.

Misc

createFrame :: (MonadIO m, WidgetClass w) => ShadowType -> w -> m Frame Source #

Creates a frame around a widget with a given shadow type

createExpander :: (MonadIO m, WidgetClass w) => Text -> Bool -> w -> m Expander Source #

Creates an Expander around a given widget. The Text and Bool parameters control the label of the expander and whether it starts expanded.

createHPaned :: (MonadIO m, WidgetClass w1, WidgetClass w2) => w1 -> w2 -> m HPaned Source #

Creates an HPaned contsing two other widgets.

createVPaned :: (MonadIO m, WidgetClass w1, WidgetClass w2) => w1 -> w2 -> m VPaned Source #

Creates a VPaned containing two other widgets.