    {-# LINE 2 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}
    -- -*-haskell-*-
    -- GIMP Toolkit (GTK) Widget RadioToolButton
    --
    -- Author : Duncan Coutts
    --
    -- Created: 7 April 2005
    --
    -- Copyright (C) 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)
    --
    -- A toolbar item that contains a radio button
    --
    -- * Module available since Gtk+ version 2.4
    --
    module Graphics.UI.Gtk.MenuComboToolbar.RadioToolButton (
    -- * Detail
    --
    -- | A 'RadioToolButton' is a 'ToolItem' that contains a radio button, that
    -- is, a button that is part of a group of toggle buttons where only one button
    -- can be active at a time.
    --
    -- Use 'radioToolButtonNew' to create a new 'RadioToolButton'. use
    -- 'radioToolButtonNewFromWidget' to create a new 'RadioToolButton' that is
    -- part of the same group as an existing 'RadioToolButton'. Use
    -- 'radioToolButtonNewFromStock' or 'radioToolButtonNewWithStockFromWidget' to
    -- create a new 'RadioToolButton' containing a stock item.

    -- * Class Hierarchy
    -- |
    -- @
    -- | 'GObject'
    -- | +----'Object'
    -- | +----'Widget'
    -- | +----'Container'
    -- | +----'Bin'
    -- | +----'ToolItem'
    -- | +----'ToolButton'
    -- | +----'ToggleToolButton'
    -- | +----RadioToolButton
    -- @

    -- * Types
      RadioToolButton,
      RadioToolButtonClass,
      castToRadioToolButton, gTypeRadioToolButton,
      toRadioToolButton,

    -- * Constructors
      radioToolButtonNew,
      radioToolButtonNewFromStock,
      radioToolButtonNewFromWidget,
      radioToolButtonNewWithStockFromWidget,

    -- * Methods
      radioToolButtonGetGroup,
      radioToolButtonSetGroup,

    -- * Attributes
      radioToolButtonGroup,

      ) where

    import Control.Monad (liftM)

    import System.Glib.FFI
    import System.Glib.UTFString
    import System.Glib.GList
    import System.Glib.Attributes
    import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
    import Graphics.UI.Gtk.Types
    {-# LINE 87 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}
    import Graphics.UI.Gtk.General.StockItems

    {-# LINE 90 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}

    --------------------
    -- Constructors

    -- | Creates a new 'RadioToolButton', creating a new group.
    --
    radioToolButtonNew :: IO RadioToolButton
    radioToolButtonNew :: IO RadioToolButton
    radioToolButtonNew =
      (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    forall {a}.
    (ForeignPtr RadioToolButton -> RadioToolButton, FinalizerPtr a)
    mkRadioToolButton (IO (Ptr RadioToolButton) -> IO RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall a b. (a -> b) -> a -> b
    $
      (Ptr ToolItem -> Ptr RadioToolButton)
    -> IO (Ptr ToolItem) -> IO (Ptr RadioToolButton)
    forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
    liftM (Ptr ToolItem -> Ptr RadioToolButton
    forall a b. Ptr a -> Ptr b
    castPtr :: Ptr ToolItem -> Ptr RadioToolButton) (IO (Ptr ToolItem) -> IO (Ptr RadioToolButton))
    -> IO (Ptr ToolItem) -> IO (Ptr RadioToolButton)
    forall a b. (a -> b) -> a -> b
    $
      Ptr () -> IO (Ptr ToolItem)
    gtk_radio_tool_button_new
    {-# LINE 102 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}
        nullPtr

    -- | Creates a new 'RadioToolButton', creating a new group. The new
    -- 'RadioToolButton' will contain an icon and label from the stock item
    -- indicated by @stockId@.
    --
    radioToolButtonNewFromStock ::
        StockId -- ^ @stockId@ - the name of a stock item
     -> IO RadioToolButton
    radioToolButtonNewFromStock :: StockId -> IO RadioToolButton
    radioToolButtonNewFromStock StockId
    stockId =
      (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    forall {a}.
    (ForeignPtr RadioToolButton -> RadioToolButton, FinalizerPtr a)
    mkRadioToolButton (IO (Ptr RadioToolButton) -> IO RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall a b. (a -> b) -> a -> b
    $
      (Ptr ToolItem -> Ptr RadioToolButton)
    -> IO (Ptr ToolItem) -> IO (Ptr RadioToolButton)
    forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
    liftM (Ptr ToolItem -> Ptr RadioToolButton
    forall a b. Ptr a -> Ptr b
    castPtr :: Ptr ToolItem -> Ptr RadioToolButton) (IO (Ptr ToolItem) -> IO (Ptr RadioToolButton))
    -> IO (Ptr ToolItem) -> IO (Ptr RadioToolButton)
    forall a b. (a -> b) -> a -> b
    $
      StockId -> (CString -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall s a. GlibString s => s -> (CString -> IO a) -> IO a
    forall a. StockId -> (CString -> IO a) -> IO a
    withUTFString StockId
    stockId ((CString -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem))
    -> (CString -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. (a -> b) -> a -> b
    $ \CString
    stockIdPtr ->
      Ptr () -> CString -> IO (Ptr ToolItem)
    gtk_radio_tool_button_new_from_stock
    {-# LINE 116 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}
        nullPtr
        CString
    stockIdPtr

    -- | Creates a new 'RadioToolButton' adding it to the same group as
    -- the group to which @groupMember@ belongs.
    --
    radioToolButtonNewFromWidget :: RadioToolButtonClass groupMember =>
        groupMember -- ^ @groupMember@ - a member of an existing radio group,
                           -- to which the new radio tool button will be added.
     -> IO RadioToolButton
    radioToolButtonNewFromWidget :: forall groupMember.
    RadioToolButtonClass groupMember =>
    groupMember -> IO RadioToolButton
    radioToolButtonNewFromWidget groupMember
    group =
      (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    forall {a}.
    (ForeignPtr RadioToolButton -> RadioToolButton, FinalizerPtr a)
    mkRadioToolButton (IO (Ptr RadioToolButton) -> IO RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall a b. (a -> b) -> a -> b
    $
      (Ptr ToolItem -> Ptr RadioToolButton)
    -> IO (Ptr ToolItem) -> IO (Ptr RadioToolButton)
    forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
    liftM (Ptr ToolItem -> Ptr RadioToolButton
    forall a b. Ptr a -> Ptr b
    castPtr :: Ptr ToolItem -> Ptr RadioToolButton) (IO (Ptr ToolItem) -> IO (Ptr RadioToolButton))
    -> IO (Ptr ToolItem) -> IO (Ptr RadioToolButton)
    forall a b. (a -> b) -> a -> b
    $
      (\(RadioToolButton ForeignPtr RadioToolButton
    arg1) -> ForeignPtr RadioToolButton
    -> (Ptr RadioToolButton -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr RadioToolButton
    arg1 ((Ptr RadioToolButton -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem))
    -> (Ptr RadioToolButton -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. (a -> b) -> a -> b
    $ \Ptr RadioToolButton
    argPtr1 ->Ptr RadioToolButton -> IO (Ptr ToolItem)
    gtk_radio_tool_button_new_from_widget Ptr RadioToolButton
    argPtr1)
    {-# LINE 130 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}
        (toRadioToolButton group)

    -- | Creates a new 'RadioToolButton' adding it to the same group as the group
    -- to which @groupMember@ belongs. The new 'RadioToolButton' will contain an
    -- icon and label from the stock item indicated by @stockId@.
    --
    radioToolButtonNewWithStockFromWidget :: RadioToolButtonClass groupMember =>
        groupMember -- ^ @groupMember@ - a member of an existing radio group,
                           -- to which the new radio tool button will be added.
     -> StockId -- ^ @stockId@ - the name of a stock item
     -> IO RadioToolButton
    radioToolButtonNewWithStockFromWidget :: forall groupMember.
    RadioToolButtonClass groupMember =>
    groupMember -> StockId -> IO RadioToolButton
    radioToolButtonNewWithStockFromWidget groupMember
    group StockId
    stockId =
      (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    forall {a}.
    (ForeignPtr RadioToolButton -> RadioToolButton, FinalizerPtr a)
    mkRadioToolButton (IO (Ptr RadioToolButton) -> IO RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall a b. (a -> b) -> a -> b
    $
      (Ptr ToolItem -> Ptr RadioToolButton)
    -> IO (Ptr ToolItem) -> IO (Ptr RadioToolButton)
    forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
    liftM (Ptr ToolItem -> Ptr RadioToolButton
    forall a b. Ptr a -> Ptr b
    castPtr :: Ptr ToolItem -> Ptr RadioToolButton) (IO (Ptr ToolItem) -> IO (Ptr RadioToolButton))
    -> IO (Ptr ToolItem) -> IO (Ptr RadioToolButton)
    forall a b. (a -> b) -> a -> b
    $
      StockId -> (CString -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall s a. GlibString s => s -> (CString -> IO a) -> IO a
    forall a. StockId -> (CString -> IO a) -> IO a
    withUTFString StockId
    stockId ((CString -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem))
    -> (CString -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. (a -> b) -> a -> b
    $ \CString
    stockIdPtr ->
      (\(RadioToolButton ForeignPtr RadioToolButton
    arg1) CString
    arg2 -> ForeignPtr RadioToolButton
    -> (Ptr RadioToolButton -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr RadioToolButton
    arg1 ((Ptr RadioToolButton -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem))
    -> (Ptr RadioToolButton -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. (a -> b) -> a -> b
    $ \Ptr RadioToolButton
    argPtr1 ->Ptr RadioToolButton -> CString -> IO (Ptr ToolItem)
    gtk_radio_tool_button_new_with_stock_from_widget Ptr RadioToolButton
    argPtr1 CString
    arg2)
    {-# LINE 146 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}
        (toRadioToolButton group)
        CString
    stockIdPtr

    --------------------
    -- Methods

    -- | Returns the radio button group @button@ belongs to.
    --
    radioToolButtonGetGroup :: RadioToolButtonClass self => self
     -> IO [RadioToolButton] -- ^ returns the group the button belongs to.
    radioToolButtonGetGroup :: forall self.
    RadioToolButtonClass self =>
    self -> IO [RadioToolButton]
    radioToolButtonGetGroup self
    self =
      (\(RadioToolButton ForeignPtr RadioToolButton
    arg1) -> ForeignPtr RadioToolButton
    -> (Ptr RadioToolButton -> IO (Ptr ())) -> IO (Ptr ())
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr RadioToolButton
    arg1 ((Ptr RadioToolButton -> IO (Ptr ())) -> IO (Ptr ()))
    -> (Ptr RadioToolButton -> IO (Ptr ())) -> IO (Ptr ())
    forall a b. (a -> b) -> a -> b
    $ \Ptr RadioToolButton
    argPtr1 ->Ptr RadioToolButton -> IO (Ptr ())
    gtk_radio_tool_button_get_group Ptr RadioToolButton
    argPtr1)
    {-# LINE 158 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}
        (toRadioToolButton self)
      IO (Ptr ())
    -> (Ptr () -> IO [Ptr RadioToolButton]) -> IO [Ptr RadioToolButton]
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= Ptr () -> IO [Ptr RadioToolButton]
    forall a. Ptr () -> IO [Ptr a]
    readGSList
      IO [Ptr RadioToolButton]
    -> ([Ptr RadioToolButton] -> IO [RadioToolButton])
    -> IO [RadioToolButton]
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= (Ptr RadioToolButton -> IO RadioToolButton)
    -> [Ptr RadioToolButton] -> IO [RadioToolButton]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
    mapM (\Ptr RadioToolButton
    elemPtr -> (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    -> IO (Ptr RadioToolButton) -> IO RadioToolButton
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr RadioToolButton -> RadioToolButton,
     FinalizerPtr RadioToolButton)
    forall {a}.
    (ForeignPtr RadioToolButton -> RadioToolButton, FinalizerPtr a)
    mkRadioToolButton (Ptr RadioToolButton -> IO (Ptr RadioToolButton)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr RadioToolButton
    elemPtr))

    -- | Adds @button@ to @group@, removing it from the group it belonged to
    -- before.
    --
    radioToolButtonSetGroup :: RadioToolButtonClass self => self
     -> RadioToolButton -- ^ @groupMember@ - a member of an existing radio group,
                        -- to which the radio tool button will be added.
     -> IO ()
    radioToolButtonSetGroup :: forall self.
    RadioToolButtonClass self =>
    self -> RadioToolButton -> IO ()
    radioToolButtonSetGroup self
    self RadioToolButton
    group =
      (\(RadioToolButton ForeignPtr RadioToolButton
    arg1) -> ForeignPtr RadioToolButton
    -> (Ptr RadioToolButton -> IO (Ptr ())) -> IO (Ptr ())
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr RadioToolButton
    arg1 ((Ptr RadioToolButton -> IO (Ptr ())) -> IO (Ptr ()))
    -> (Ptr RadioToolButton -> IO (Ptr ())) -> IO (Ptr ())
    forall a b. (a -> b) -> a -> b
    $ \Ptr RadioToolButton
    argPtr1 ->Ptr RadioToolButton -> IO (Ptr ())
    gtk_radio_tool_button_get_group Ptr RadioToolButton
    argPtr1) RadioToolButton
    group IO (Ptr ()) -> (Ptr () -> IO ()) -> IO ()
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= \Ptr ()
    groupGSList ->
      (\(RadioToolButton ForeignPtr RadioToolButton
    arg1) Ptr ()
    arg2 -> ForeignPtr RadioToolButton
    -> (Ptr RadioToolButton -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr RadioToolButton
    arg1 ((Ptr RadioToolButton -> IO ()) -> IO ())
    -> (Ptr RadioToolButton -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr RadioToolButton
    argPtr1 ->Ptr RadioToolButton -> Ptr () -> IO ()
    gtk_radio_tool_button_set_group Ptr RadioToolButton
    argPtr1 Ptr ()
    arg2)
    {-# LINE 172 "./Graphics/UI/Gtk/MenuComboToolbar/RadioToolButton.chs" #-}
        (toRadioToolButton self)
        Ptr ()
    groupGSList

    --------------------
    -- Properties

    -- | Sets a new group for a radio tool button.
    --
    radioToolButtonGroup :: RadioToolButtonClass self => ReadWriteAttr self [RadioToolButton] RadioToolButton
    radioToolButtonGroup :: forall self.
    RadioToolButtonClass self =>
    ReadWriteAttr self [RadioToolButton] RadioToolButton
    radioToolButtonGroup = (self -> IO [RadioToolButton])
    -> (self -> RadioToolButton -> IO ())
    -> ReadWriteAttr self [RadioToolButton] RadioToolButton
    forall o a b.
    (o -> IO a) -> (o -> b -> IO ()) -> ReadWriteAttr o a b
    newAttr
      self -> IO [RadioToolButton]
    forall self.
    RadioToolButtonClass self =>
    self -> IO [RadioToolButton]
    radioToolButtonGetGroup
      self -> RadioToolButton -> IO ()
    forall self.
    RadioToolButtonClass self =>
    self -> RadioToolButton -> IO ()
    radioToolButtonSetGroup

    foreign import ccall safe "gtk_radio_tool_button_new"
      gtk_radio_tool_button_new :: ((Ptr ()) -> (IO (Ptr ToolItem)))

    foreign import ccall safe "gtk_radio_tool_button_new_from_stock"
      gtk_radio_tool_button_new_from_stock :: ((Ptr ()) -> ((Ptr CChar) -> (IO (Ptr ToolItem))))

    foreign import ccall safe "gtk_radio_tool_button_new_from_widget"
      gtk_radio_tool_button_new_from_widget :: ((Ptr RadioToolButton) -> (IO (Ptr ToolItem)))

    foreign import ccall safe "gtk_radio_tool_button_new_with_stock_from_widget"
      gtk_radio_tool_button_new_with_stock_from_widget :: ((Ptr RadioToolButton) -> ((Ptr CChar) -> (IO (Ptr ToolItem))))

    foreign import ccall unsafe "gtk_radio_tool_button_get_group"
      gtk_radio_tool_button_get_group :: ((Ptr RadioToolButton) -> (IO (Ptr ())))

    foreign import ccall safe "gtk_radio_tool_button_set_group"
      gtk_radio_tool_button_set_group :: ((Ptr RadioToolButton) -> ((Ptr ()) -> (IO ())))