gtk-0.11.0: Graphics/UI/Gtk/Layout/Alignment.chs
{-# LANGUAGE CPP #-}
-- -*-haskell-*-
-- GIMP Toolkit (GTK) Widget Alignment
--
-- Author : Axel Simon
--
-- Created: 15 May 2001
--
-- Copyright (C) 1999-2005 Axel Simon
--
-- This library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- |
-- Maintainer : gtk2hs-users@lists.sourceforge.net
-- Stability : provisional
-- Portability : portable (depends on GHC)
--
-- A widget which controls the alignment and size of its child
--
module Graphics.UI.Gtk.Layout.Alignment (
-- * Detail
--
-- | The 'Alignment' widget controls the alignment and size of its child
-- widget. It has four settings: xscale, yscale, xalign, and yalign.
--
-- The scale settings are used to specify how much the child widget should
-- expand to fill the space allocated to the 'Alignment'. The values can range
-- from 0 (meaning the child doesn't expand at all) to 1 (meaning the child
-- expands to fill all of the available space).
--
-- The align settings are used to place the child widget within the
-- available area. The values range from 0 (top or left) to 1 (bottom or
-- right). Of course, if the scale settings are both set to 1, the alignment
-- settings have no effect.
-- * Class Hierarchy
-- |
-- @
-- | 'GObject'
-- | +----'Object'
-- | +----'Widget'
-- | +----'Container'
-- | +----'Bin'
-- | +----Alignment
-- @
-- * Types
Alignment,
AlignmentClass,
castToAlignment, gTypeAlignment,
toAlignment,
-- * Constructors
alignmentNew,
-- * Methods
alignmentSet,
#if GTK_CHECK_VERSION(2,4,0)
alignmentSetPadding,
alignmentGetPadding,
#endif
-- * Attributes
alignmentXAlign,
alignmentYAlign,
alignmentXScale,
alignmentYScale,
#if GTK_CHECK_VERSION(2,4,0)
alignmentTopPadding,
alignmentBottomPadding,
alignmentLeftPadding,
alignmentRightPadding,
#endif
) where
import Control.Monad (liftM)
import System.Glib.FFI
import System.Glib.Attributes
import System.Glib.Properties
import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
{#import Graphics.UI.Gtk.Types#}
{# context lib="gtk" prefix="gtk" #}
--------------------
-- Constructors
-- | Creates a new 'Alignment'.
--
alignmentNew ::
Float -- ^ @xalign@ - the horizontal alignment of the child widget,
-- from 0 (left) to 1 (right).
-> Float -- ^ @yalign@ - the vertical alignment of the child widget,
-- from 0 (top) to 1 (bottom).
-> Float -- ^ @xscale@ - the amount that the child widget expands
-- horizontally to fill up unused space, from 0 to 1. A value
-- of 0 indicates that the child widget should never expand. A
-- value of 1 indicates that the child widget will expand to
-- fill all of the space allocated for the 'Alignment'.
-> Float -- ^ @yscale@ - the amount that the child widget expands
-- vertically to fill up unused space, from 0 to 1. The values
-- are similar to @xscale@.
-> IO Alignment
alignmentNew xalign yalign xscale yscale =
makeNewObject mkAlignment $
liftM (castPtr :: Ptr Widget -> Ptr Alignment) $
{# call unsafe alignment_new #}
(realToFrac xalign)
(realToFrac yalign)
(realToFrac xscale)
(realToFrac yscale)
--------------------
-- Methods
-- | Sets the 'Alignment' values.
--
alignmentSet :: AlignmentClass self => self
-> Float -- ^ @xalign@ - the horizontal alignment of the child widget, from 0
-- (left) to 1 (right).
-> Float -- ^ @yalign@ - the vertical alignment of the child widget, from 0
-- (top) to 1 (bottom).
-> Float -- ^ @xscale@ - the amount that the child widget expands
-- horizontally to fill up unused space, from 0 to 1. A value of 0
-- indicates that the child widget should never expand. A value of 1
-- indicates that the child widget will expand to fill all of the
-- space allocated for the 'Alignment'.
-> Float -- ^ @yscale@ - the amount that the child widget expands vertically
-- to fill up unused space, from 0 to 1. The values are similar to
-- @xscale@.
-> IO ()
alignmentSet self xalign yalign xscale yscale =
{# call alignment_set #}
(toAlignment self)
(realToFrac xalign)
(realToFrac yalign)
(realToFrac xscale)
(realToFrac yscale)
#if GTK_CHECK_VERSION(2,4,0)
-- | Sets the padding on the different sides of the widget. The padding adds
-- blank space to the sides of the widget. For instance, this can be used to
-- indent the child widget towards the right by adding padding on the left.
--
-- * Available since Gtk+ version 2.4
--
alignmentSetPadding :: AlignmentClass self => self
-> Int -- ^ @paddingTop@ - the padding at the top of the widget
-> Int -- ^ @paddingBottom@ - the padding at the bottom of the widget
-> Int -- ^ @paddingLeft@ - the padding at the left of the widget
-> Int -- ^ @paddingRight@ - the padding at the right of the widget.
-> IO ()
alignmentSetPadding self paddingTop paddingBottom paddingLeft paddingRight =
{# call gtk_alignment_set_padding #}
(toAlignment self)
(fromIntegral paddingTop)
(fromIntegral paddingBottom)
(fromIntegral paddingLeft)
(fromIntegral paddingRight)
-- | Gets the padding on the different sides of the widget. See
-- 'alignmentSetPadding'.
--
-- * Available since Gtk+ version 2.4
--
alignmentGetPadding :: AlignmentClass self => self
-> IO (Int, Int, Int, Int) -- ^ @(paddingTop, paddingBottom, paddingLeft,
-- paddingRight)@ - the padding at the top,
-- bottom, left and right of the widget.
alignmentGetPadding self =
alloca $ \paddingTopPtr ->
alloca $ \paddingBottomPtr ->
alloca $ \paddingLeftPtr ->
alloca $ \paddingRightPtr -> do
{# call gtk_alignment_get_padding #}
(toAlignment self)
paddingTopPtr
paddingBottomPtr
paddingLeftPtr
paddingRightPtr
paddingTop <- peek paddingTopPtr
paddingBottom <- peek paddingBottomPtr
paddingLeft <- peek paddingLeftPtr
paddingRight <- peek paddingRightPtr
return (fromIntegral paddingTop, fromIntegral paddingBottom
,fromIntegral paddingLeft, fromIntegral paddingRight)
#endif
--------------------
-- Attributes
-- | Horizontal position of child in available space. 0.0 is left aligned, 1.0
-- is right aligned.
--
-- Allowed values: [0,1]
--
-- Default value: 0.5
--
alignmentXAlign :: AlignmentClass self => Attr self Float
alignmentXAlign = newAttrFromFloatProperty "xalign"
-- | Vertical position of child in available space. 0.0 is top aligned, 1.0 is
-- bottom aligned.
--
-- Allowed values: [0,1]
--
-- Default value: 0.5
--
alignmentYAlign :: AlignmentClass self => Attr self Float
alignmentYAlign = newAttrFromFloatProperty "yalign"
-- | If available horizontal space is bigger than needed for the child, how
-- much of it to use for the child. 0.0 means none, 1.0 means all.
--
-- Allowed values: [0,1]
--
-- Default value: 1
--
alignmentXScale :: AlignmentClass self => Attr self Float
alignmentXScale = newAttrFromFloatProperty "xscale"
-- | If available vertical space is bigger than needed for the child, how much
-- of it to use for the child. 0.0 means none, 1.0 means all.
--
-- Allowed values: [0,1]
--
-- Default value: 1
--
alignmentYScale :: AlignmentClass self => Attr self Float
alignmentYScale = newAttrFromFloatProperty "yscale"
#if GTK_CHECK_VERSION(2,4,0)
-- | The padding to insert at the top of the widget.
--
-- Allowed values: \<= @('maxBound' :: Int)@
--
-- Default value: 0
--
alignmentTopPadding :: AlignmentClass self => Attr self Int
alignmentTopPadding = newAttrFromUIntProperty "top-padding"
-- | The padding to insert at the bottom of the widget.
--
-- Allowed values: \<= @('maxBound' :: Int)@
--
-- Default value: 0
--
alignmentBottomPadding :: AlignmentClass self => Attr self Int
alignmentBottomPadding = newAttrFromUIntProperty "bottom-padding"
-- | The padding to insert at the left of the widget.
--
-- Allowed values: \<= @('maxBound' :: Int)@
--
-- Default value: 0
--
alignmentLeftPadding :: AlignmentClass self => Attr self Int
alignmentLeftPadding = newAttrFromUIntProperty "left-padding"
-- | The padding to insert at the right of the widget.
--
-- Allowed values: \<= @('maxBound' :: Int)@
--
-- Default value: 0
--
alignmentRightPadding :: AlignmentClass self => Attr self Int
alignmentRightPadding = newAttrFromUIntProperty "right-padding"
#endif