{-# LINE 2 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} -- -*-haskell-*- -- GIMP Toolkit (GTK) Widget SizeGroup -- -- Author : Duncan Coutts -- -- Created: 2 August 2004 -- -- Copyright (C) 2004-2005 Duncan Coutts -- -- 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) -- -- Grouping widgets so they request the same size -- module Graphics.UI.Gtk.Misc.SizeGroup ( -- * Detail -- -- | 'SizeGroup' provides a mechanism for grouping a number of widgets -- together so they all request the same amount of space. This is typically -- useful when you want a column of widgets to have the same size, but you -- can't use a 'Table' widget. -- -- In detail, the size requested for each widget in a 'SizeGroup' is the -- maximum of the sizes that would have been requested for each widget in the -- size group if they were not in the size group. The mode of the size group -- (see 'sizeGroupSetMode') determines whether this applies to the horizontal -- size, the vertical size, or both sizes. -- -- Note that size groups only affect the amount of space requested, not the -- size that the widgets finally receive. If you want the widgets in a -- 'SizeGroup' to actually be the same size, you need to pack them in such a -- way that they get the size they request and not more. For example, if you -- are packing your widgets into a table, you would not include the -- 'Graphics.UI.Gtk.Layout.Table.Fill' flag. -- -- Widgets can be part of multiple size groups; Gtk+ will compute the -- horizontal size of a widget from the horizontal requisition of all widgets -- that can be reached from the widget by a chain of size groups of type -- 'SizeGroupHorizontal' or 'SizeGroupBoth', and the vertical size from the -- vertical requisition of all widgets that can be reached from the widget by a -- chain of size groups of type 'SizeGroupVertical' or 'SizeGroupBoth'. -- * Class Hierarchy -- | -- @ -- | 'GObject' -- | +----SizeGroup -- @ -- * Types SizeGroup, SizeGroupClass, castToSizeGroup, gTypeSizeGroup, toSizeGroup, -- * Constructors sizeGroupNew, -- * Methods SizeGroupMode(..), sizeGroupSetMode, sizeGroupGetMode, sizeGroupAddWidget, sizeGroupRemoveWidget, sizeGroupSetIgnoreHidden, sizeGroupGetIgnoreHidden, -- * Attributes sizeGroupMode, sizeGroupIgnoreHidden, ) where import Control.Monad (liftM) import System.Glib.FFI import System.Glib.Attributes import Graphics.UI.Gtk.Types {-# LINE 95 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} {-# LINE 97 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} data SizeGroupMode = SizeGroupNone | SizeGroupHorizontal | SizeGroupVertical | SizeGroupBoth deriving (Enum) {-# LINE 99 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} -------------------- -- Constructors -- | Create a new 'SizeGroup'. -- sizeGroupNew :: SizeGroupMode -- ^ @mode@ - the mode for the new size group. -> IO SizeGroup sizeGroupNew mode = wrapNewGObject mkSizeGroup $ gtk_size_group_new {-# LINE 111 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} ((fromIntegral . fromEnum) mode) -------------------- -- Methods -- | Adds a widget to a 'SizeGroup'. In the future, the requisition of the -- widget will be determined as the maximum of its requisition and the -- requisition of the other widgets in the size group. Whether this applies -- horizontally, vertically, or in both directions depends on the mode of the -- size group. See 'sizeGroupSetMode'. -- sizeGroupAddWidget :: (SizeGroupClass self, WidgetClass widget) => self -> widget -- ^ @widget@ - the 'Widget' to add -> IO () sizeGroupAddWidget self widget = (\(SizeGroup arg1) (Widget arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gtk_size_group_add_widget argPtr1 argPtr2) {-# LINE 127 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} (toSizeGroup self) (toWidget widget) -- | Gets the current mode of the size group. See 'sizeGroupSetMode'. -- sizeGroupGetMode :: SizeGroupClass self => self -> IO SizeGroupMode -- ^ returns the current mode of the size group. sizeGroupGetMode self = liftM (toEnum . fromIntegral) $ (\(SizeGroup arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_size_group_get_mode argPtr1) {-# LINE 137 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} (toSizeGroup self) -- | Removes a widget from a 'SizeGroup'. -- sizeGroupRemoveWidget :: (SizeGroupClass self, WidgetClass widget) => self -> widget -- ^ @widget@ - the 'Widget' to remove -> IO () sizeGroupRemoveWidget self widget = (\(SizeGroup arg1) (Widget arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gtk_size_group_remove_widget argPtr1 argPtr2) {-# LINE 146 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} (toSizeGroup self) (toWidget widget) -- | Sets the 'SizeGroupMode' of the size group. The mode of the size group -- determines whether the widgets in the size group should all have the same -- horizontal requisition 'SizeGroupHorizontal' all have the same vertical -- requisition 'SizeGroupVertical', or should all have the same requisition -- in both directions 'SizeGroupBoth'. -- sizeGroupSetMode :: SizeGroupClass self => self -> SizeGroupMode -- ^ @mode@ - the mode to set for the size group. -> IO () sizeGroupSetMode self mode = (\(SizeGroup arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_size_group_set_mode argPtr1 arg2) {-# LINE 160 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} (toSizeGroup self) ((fromIntegral . fromEnum) mode) -- | Sets whether invisible widgets should be ignored when calculating the -- size. -- -- * Available since Gtk+ version 2.8 -- sizeGroupSetIgnoreHidden :: SizeGroupClass self => self -> Bool -- ^ @ignoreHidden@ - whether hidden widgets should be ignored when -- calculating the size -> IO () sizeGroupSetIgnoreHidden self ignoreHidden = (\(SizeGroup arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_size_group_set_ignore_hidden argPtr1 arg2) {-# LINE 175 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} (toSizeGroup self) (fromBool ignoreHidden) -- | Returns if invisible widgets are ignored when calculating the size. -- -- * Available since Gtk+ version 2.8 -- sizeGroupGetIgnoreHidden :: SizeGroupClass self => self -> IO Bool -- ^ returns @True@ if invisible widgets are ignored. sizeGroupGetIgnoreHidden self = liftM toBool $ (\(SizeGroup arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_size_group_get_ignore_hidden argPtr1) {-# LINE 187 "./Graphics/UI/Gtk/Misc/SizeGroup.chs" #-} (toSizeGroup self) -------------------- -- Attributes -- | The directions in which the size group affects the requested sizes of its -- component widgets. -- -- Default value: 'SizeGroupHorizontal' -- sizeGroupMode :: SizeGroupClass self => Attr self SizeGroupMode sizeGroupMode = newAttr sizeGroupGetMode sizeGroupSetMode -- | If @True@, hidden widgets are ignored when determining the size of the -- group. -- -- Default value: @False@ -- sizeGroupIgnoreHidden :: SizeGroupClass self => Attr self Bool sizeGroupIgnoreHidden = newAttr sizeGroupGetIgnoreHidden sizeGroupSetIgnoreHidden foreign import ccall unsafe "gtk_size_group_new" gtk_size_group_new :: (CInt -> (IO (Ptr SizeGroup))) foreign import ccall safe "gtk_size_group_add_widget" gtk_size_group_add_widget :: ((Ptr SizeGroup) -> ((Ptr Widget) -> (IO ()))) foreign import ccall unsafe "gtk_size_group_get_mode" gtk_size_group_get_mode :: ((Ptr SizeGroup) -> (IO CInt)) foreign import ccall safe "gtk_size_group_remove_widget" gtk_size_group_remove_widget :: ((Ptr SizeGroup) -> ((Ptr Widget) -> (IO ()))) foreign import ccall safe "gtk_size_group_set_mode" gtk_size_group_set_mode :: ((Ptr SizeGroup) -> (CInt -> (IO ()))) foreign import ccall safe "gtk_size_group_set_ignore_hidden" gtk_size_group_set_ignore_hidden :: ((Ptr SizeGroup) -> (CInt -> (IO ()))) foreign import ccall safe "gtk_size_group_get_ignore_hidden" gtk_size_group_get_ignore_hidden :: ((Ptr SizeGroup) -> (IO CInt))