{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- t'GI.Gtk.Interfaces.CellLayout.CellLayout' is an interface to be implemented by all objects which
-- want to provide a t'GI.Gtk.Objects.TreeViewColumn.TreeViewColumn' like API for packing cells,
-- setting attributes and data funcs.
-- 
-- One of the notable features provided by implementations of
-- GtkCellLayout are attributes. Attributes let you set the properties
-- in flexible ways. They can just be set to constant values like regular
-- properties. But they can also be mapped to a column of the underlying
-- tree model with @/gtk_cell_layout_set_attributes()/@, which means that the value
-- of the attribute can change from cell to cell as they are rendered by
-- the cell renderer. Finally, it is possible to specify a function with
-- 'GI.Gtk.Interfaces.CellLayout.cellLayoutSetCellDataFunc' that is called to determine the
-- value of the attribute for each cell that is rendered.
-- 
-- = GtkCellLayouts as GtkBuildable
-- 
-- Implementations of GtkCellLayout which also implement the GtkBuildable
-- interface (t'GI.Gtk.Objects.CellView.CellView', t'GI.Gtk.Objects.IconView.IconView', t'GI.Gtk.Objects.ComboBox.ComboBox',
-- t'GI.Gtk.Objects.EntryCompletion.EntryCompletion', t'GI.Gtk.Objects.TreeViewColumn.TreeViewColumn') accept GtkCellRenderer objects
-- as \<child> elements in UI definitions. They support a custom \<attributes>
-- element for their children, which can contain multiple \<attribute>
-- elements. Each \<attribute> element has a name attribute which specifies
-- a property of the cell renderer; the content of the element is the
-- attribute value.
-- 
-- This is an example of a UI definition fragment specifying attributes:
-- >
-- ><object class="GtkCellView">
-- >  <child>
-- >    <object class="GtkCellRendererText"/>
-- >    <attributes>
-- >      <attribute name="text">0</attribute>
-- >    </attributes>
-- >  </child>"
-- ></object>
-- 
-- 
-- Furthermore for implementations of GtkCellLayout that use a t'GI.Gtk.Objects.CellArea.CellArea'
-- to lay out cells (all GtkCellLayouts in GTK+ use a GtkCellArea)
-- [cell properties][cell-properties] can also be defined in the format by
-- specifying the custom \<cell-packing> attribute which can contain multiple
-- \<property> elements defined in the normal way.
-- 
-- Here is a UI definition fragment specifying cell properties:
-- 
-- >
-- ><object class="GtkTreeViewColumn">
-- >  <child>
-- >    <object class="GtkCellRendererText"/>
-- >    <cell-packing>
-- >      <property name="align">True</property>
-- >      <property name="expand">False</property>
-- >    </cell-packing>
-- >  </child>"
-- ></object>
-- 
-- 
-- = Subclassing GtkCellLayout implementations
-- 
-- When subclassing a widget that implements t'GI.Gtk.Interfaces.CellLayout.CellLayout' like
-- t'GI.Gtk.Objects.IconView.IconView' or t'GI.Gtk.Objects.ComboBox.ComboBox', there are some considerations related
-- to the fact that these widgets internally use a t'GI.Gtk.Objects.CellArea.CellArea'.
-- The cell area is exposed as a construct-only property by these
-- widgets. This means that it is possible to e.g. do
-- 
-- 
-- === /C code/
-- >
-- >combo = g_object_new (GTK_TYPE_COMBO_BOX, "cell-area", my_cell_area, NULL);
-- 
-- 
-- to use a custom cell area with a combo box. But construct properties
-- are only initialized after instance @/init()/@
-- functions have run, which means that using functions which rely on
-- the existence of the cell area in your subclass’ @/init()/@ function will
-- cause the default cell area to be instantiated. In this case, a provided
-- construct property value will be ignored (with a warning, to alert
-- you to the problem).
-- 
-- 
-- === /C code/
-- >
-- >static void
-- >my_combo_box_init (MyComboBox *b)
-- >{
-- >  GtkCellRenderer *cell;
-- >
-- >  cell = gtk_cell_renderer_pixbuf_new ();
-- >  // The following call causes the default cell area for combo boxes,
-- >  // a GtkCellAreaBox, to be instantiated
-- >  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (b), cell, FALSE);
-- >  ...
-- >}
-- >
-- >GtkWidget *
-- >my_combo_box_new (GtkCellArea *area)
-- >{
-- >  // This call is going to cause a warning about area being ignored
-- >  return g_object_new (MY_TYPE_COMBO_BOX, "cell-area", area, NULL);
-- >}
-- 
-- 
-- If supporting alternative cell areas with your derived widget is
-- not important, then this does not have to concern you. If you want
-- to support alternative cell areas, you can do so by moving the
-- problematic calls out of @/init()/@ and into a @/constructor()/@
-- for your class.

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.Gtk.Interfaces.CellLayout
    ( 

-- * Exported types
    CellLayout(..)                          ,
    IsCellLayout                            ,
    toCellLayout                            ,


 -- * Methods
-- ** Overloaded methods #method:Overloaded methods#

#if defined(ENABLE_OVERLOADING)
    ResolveCellLayoutMethod                 ,
#endif


-- ** addAttribute #method:addAttribute#

#if defined(ENABLE_OVERLOADING)
    CellLayoutAddAttributeMethodInfo        ,
#endif
    cellLayoutAddAttribute                  ,


-- ** clear #method:clear#

#if defined(ENABLE_OVERLOADING)
    CellLayoutClearMethodInfo               ,
#endif
    cellLayoutClear                         ,


-- ** clearAttributes #method:clearAttributes#

#if defined(ENABLE_OVERLOADING)
    CellLayoutClearAttributesMethodInfo     ,
#endif
    cellLayoutClearAttributes               ,


-- ** getArea #method:getArea#

#if defined(ENABLE_OVERLOADING)
    CellLayoutGetAreaMethodInfo             ,
#endif
    cellLayoutGetArea                       ,


-- ** getCells #method:getCells#

#if defined(ENABLE_OVERLOADING)
    CellLayoutGetCellsMethodInfo            ,
#endif
    cellLayoutGetCells                      ,


-- ** packEnd #method:packEnd#

#if defined(ENABLE_OVERLOADING)
    CellLayoutPackEndMethodInfo             ,
#endif
    cellLayoutPackEnd                       ,


-- ** packStart #method:packStart#

#if defined(ENABLE_OVERLOADING)
    CellLayoutPackStartMethodInfo           ,
#endif
    cellLayoutPackStart                     ,


-- ** reorder #method:reorder#

#if defined(ENABLE_OVERLOADING)
    CellLayoutReorderMethodInfo             ,
#endif
    cellLayoutReorder                       ,


-- ** setCellDataFunc #method:setCellDataFunc#

#if defined(ENABLE_OVERLOADING)
    CellLayoutSetCellDataFuncMethodInfo     ,
#endif
    cellLayoutSetCellDataFunc               ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL

import qualified GI.GLib.Callbacks as GLib.Callbacks
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gtk.Callbacks as Gtk.Callbacks
import {-# SOURCE #-} qualified GI.Gtk.Objects.CellArea as Gtk.CellArea
import {-# SOURCE #-} qualified GI.Gtk.Objects.CellRenderer as Gtk.CellRenderer

-- interface CellLayout 
-- | Memory-managed wrapper type.
newtype CellLayout = CellLayout (SP.ManagedPtr CellLayout)
    deriving (CellLayout -> CellLayout -> Bool
(CellLayout -> CellLayout -> Bool)
-> (CellLayout -> CellLayout -> Bool) -> Eq CellLayout
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CellLayout -> CellLayout -> Bool
$c/= :: CellLayout -> CellLayout -> Bool
== :: CellLayout -> CellLayout -> Bool
$c== :: CellLayout -> CellLayout -> Bool
Eq)

instance SP.ManagedPtrNewtype CellLayout where
    toManagedPtr :: CellLayout -> ManagedPtr CellLayout
toManagedPtr (CellLayout ManagedPtr CellLayout
p) = ManagedPtr CellLayout
p

foreign import ccall "gtk_cell_layout_get_type"
    c_gtk_cell_layout_get_type :: IO B.Types.GType

instance B.Types.TypedObject CellLayout where
    glibType :: IO GType
glibType = IO GType
c_gtk_cell_layout_get_type

instance B.Types.GObject CellLayout

-- | Convert 'CellLayout' to and from 'Data.GI.Base.GValue.GValue' with 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue CellLayout where
    toGValue :: CellLayout -> IO GValue
toGValue CellLayout
o = do
        GType
gtype <- IO GType
c_gtk_cell_layout_get_type
        CellLayout -> (Ptr CellLayout -> IO GValue) -> IO GValue
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr CellLayout
o (GType
-> (GValue -> Ptr CellLayout -> IO ())
-> Ptr CellLayout
-> IO GValue
forall a. GType -> (GValue -> a -> IO ()) -> a -> IO GValue
B.GValue.buildGValue GType
gtype GValue -> Ptr CellLayout -> IO ()
forall a. GObject a => GValue -> Ptr a -> IO ()
B.GValue.set_object)
        
    fromGValue :: GValue -> IO CellLayout
fromGValue GValue
gv = do
        Ptr CellLayout
ptr <- GValue -> IO (Ptr CellLayout)
forall b. GObject b => GValue -> IO (Ptr b)
B.GValue.get_object GValue
gv :: IO (Ptr CellLayout)
        (ManagedPtr CellLayout -> CellLayout)
-> Ptr CellLayout -> IO CellLayout
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr CellLayout -> CellLayout
CellLayout Ptr CellLayout
ptr
        
    

-- | Type class for types which can be safely cast to `CellLayout`, for instance with `toCellLayout`.
class (SP.GObject o, O.IsDescendantOf CellLayout o) => IsCellLayout o
instance (SP.GObject o, O.IsDescendantOf CellLayout o) => IsCellLayout o

instance O.HasParentTypes CellLayout
type instance O.ParentTypes CellLayout = '[GObject.Object.Object]

-- | Cast to `CellLayout`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toCellLayout :: (MonadIO m, IsCellLayout o) => o -> m CellLayout
toCellLayout :: o -> m CellLayout
toCellLayout = IO CellLayout -> m CellLayout
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO CellLayout -> m CellLayout)
-> (o -> IO CellLayout) -> o -> m CellLayout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr CellLayout -> CellLayout) -> o -> IO CellLayout
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
unsafeCastTo ManagedPtr CellLayout -> CellLayout
CellLayout

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList CellLayout
type instance O.AttributeList CellLayout = CellLayoutAttributeList
type CellLayoutAttributeList = ('[ ] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveCellLayoutMethod (t :: Symbol) (o :: *) :: * where
    ResolveCellLayoutMethod "addAttribute" o = CellLayoutAddAttributeMethodInfo
    ResolveCellLayoutMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveCellLayoutMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveCellLayoutMethod "clear" o = CellLayoutClearMethodInfo
    ResolveCellLayoutMethod "clearAttributes" o = CellLayoutClearAttributesMethodInfo
    ResolveCellLayoutMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveCellLayoutMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveCellLayoutMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveCellLayoutMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveCellLayoutMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveCellLayoutMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveCellLayoutMethod "packEnd" o = CellLayoutPackEndMethodInfo
    ResolveCellLayoutMethod "packStart" o = CellLayoutPackStartMethodInfo
    ResolveCellLayoutMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveCellLayoutMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveCellLayoutMethod "reorder" o = CellLayoutReorderMethodInfo
    ResolveCellLayoutMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveCellLayoutMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveCellLayoutMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveCellLayoutMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveCellLayoutMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveCellLayoutMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveCellLayoutMethod "getArea" o = CellLayoutGetAreaMethodInfo
    ResolveCellLayoutMethod "getCells" o = CellLayoutGetCellsMethodInfo
    ResolveCellLayoutMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveCellLayoutMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveCellLayoutMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveCellLayoutMethod "setCellDataFunc" o = CellLayoutSetCellDataFuncMethodInfo
    ResolveCellLayoutMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveCellLayoutMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveCellLayoutMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveCellLayoutMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveCellLayoutMethod t CellLayout, O.MethodInfo info CellLayout p) => OL.IsLabel t (CellLayout -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#endif

-- method CellLayout::add_attribute
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "cell"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellRenderer" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellRenderer" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "attribute"
--           , argType = TBasicType TUTF8
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "an attribute on the renderer"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "column"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just "the column position on the model to get the attribute from"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_add_attribute" gtk_cell_layout_add_attribute :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    Ptr Gtk.CellRenderer.CellRenderer ->    -- cell : TInterface (Name {namespace = "Gtk", name = "CellRenderer"})
    CString ->                              -- attribute : TBasicType TUTF8
    Int32 ->                                -- column : TBasicType TInt
    IO ()

-- | Adds an attribute mapping to the list in /@cellLayout@/.
-- 
-- The /@column@/ is the column of the model to get a value from, and the
-- /@attribute@/ is the parameter on /@cell@/ to be set from the value. So for
-- example if column 2 of the model contains strings, you could have the
-- “text” attribute of a t'GI.Gtk.Objects.CellRendererText.CellRendererText' get its values from column 2.
-- 
-- /Since: 2.4/
cellLayoutAddAttribute ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> b
    -- ^ /@cell@/: a t'GI.Gtk.Objects.CellRenderer.CellRenderer'
    -> T.Text
    -- ^ /@attribute@/: an attribute on the renderer
    -> Int32
    -- ^ /@column@/: the column position on the model to get the attribute from
    -> m ()
cellLayoutAddAttribute :: a -> b -> Text -> Int32 -> m ()
cellLayoutAddAttribute a
cellLayout b
cell Text
attribute Int32
column = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr CellRenderer
cell' <- b -> IO (Ptr CellRenderer)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
cell
    CString
attribute' <- Text -> IO CString
textToCString Text
attribute
    Ptr CellLayout -> Ptr CellRenderer -> CString -> Int32 -> IO ()
gtk_cell_layout_add_attribute Ptr CellLayout
cellLayout' Ptr CellRenderer
cell' CString
attribute' Int32
column
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
cell
    CString -> IO ()
forall a. Ptr a -> IO ()
freeMem CString
attribute'
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data CellLayoutAddAttributeMethodInfo
instance (signature ~ (b -> T.Text -> Int32 -> m ()), MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) => O.MethodInfo CellLayoutAddAttributeMethodInfo a signature where
    overloadedMethod = cellLayoutAddAttribute

#endif

-- method CellLayout::clear
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_clear" gtk_cell_layout_clear :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    IO ()

-- | Unsets all the mappings on all renderers on /@cellLayout@/ and
-- removes all renderers from /@cellLayout@/.
-- 
-- /Since: 2.4/
cellLayoutClear ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> m ()
cellLayoutClear :: a -> m ()
cellLayoutClear a
cellLayout = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr CellLayout -> IO ()
gtk_cell_layout_clear Ptr CellLayout
cellLayout'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data CellLayoutClearMethodInfo
instance (signature ~ (m ()), MonadIO m, IsCellLayout a) => O.MethodInfo CellLayoutClearMethodInfo a signature where
    overloadedMethod = cellLayoutClear

#endif

-- method CellLayout::clear_attributes
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "cell"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellRenderer" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just "a #GtkCellRenderer to clear the attribute mapping on"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_clear_attributes" gtk_cell_layout_clear_attributes :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    Ptr Gtk.CellRenderer.CellRenderer ->    -- cell : TInterface (Name {namespace = "Gtk", name = "CellRenderer"})
    IO ()

-- | Clears all existing attributes previously set with
-- @/gtk_cell_layout_set_attributes()/@.
-- 
-- /Since: 2.4/
cellLayoutClearAttributes ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> b
    -- ^ /@cell@/: a t'GI.Gtk.Objects.CellRenderer.CellRenderer' to clear the attribute mapping on
    -> m ()
cellLayoutClearAttributes :: a -> b -> m ()
cellLayoutClearAttributes a
cellLayout b
cell = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr CellRenderer
cell' <- b -> IO (Ptr CellRenderer)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
cell
    Ptr CellLayout -> Ptr CellRenderer -> IO ()
gtk_cell_layout_clear_attributes Ptr CellLayout
cellLayout' Ptr CellRenderer
cell'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
cell
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data CellLayoutClearAttributesMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) => O.MethodInfo CellLayoutClearAttributesMethodInfo a signature where
    overloadedMethod = cellLayoutClearAttributes

#endif

-- method CellLayout::get_area
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TInterface Name { namespace = "Gtk" , name = "CellArea" })
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_get_area" gtk_cell_layout_get_area :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    IO (Ptr Gtk.CellArea.CellArea)

-- | Returns the underlying t'GI.Gtk.Objects.CellArea.CellArea' which might be /@cellLayout@/
-- if called on a t'GI.Gtk.Objects.CellArea.CellArea' or might be 'P.Nothing' if no t'GI.Gtk.Objects.CellArea.CellArea'
-- is used by /@cellLayout@/.
-- 
-- /Since: 3.0/
cellLayoutGetArea ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> m (Maybe Gtk.CellArea.CellArea)
    -- ^ __Returns:__ the cell area used by /@cellLayout@/,
    -- or 'P.Nothing' in case no cell area is used.
cellLayoutGetArea :: a -> m (Maybe CellArea)
cellLayoutGetArea a
cellLayout = IO (Maybe CellArea) -> m (Maybe CellArea)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe CellArea) -> m (Maybe CellArea))
-> IO (Maybe CellArea) -> m (Maybe CellArea)
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr CellArea
result <- Ptr CellLayout -> IO (Ptr CellArea)
gtk_cell_layout_get_area Ptr CellLayout
cellLayout'
    Maybe CellArea
maybeResult <- Ptr CellArea
-> (Ptr CellArea -> IO CellArea) -> IO (Maybe CellArea)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull Ptr CellArea
result ((Ptr CellArea -> IO CellArea) -> IO (Maybe CellArea))
-> (Ptr CellArea -> IO CellArea) -> IO (Maybe CellArea)
forall a b. (a -> b) -> a -> b
$ \Ptr CellArea
result' -> do
        CellArea
result'' <- ((ManagedPtr CellArea -> CellArea) -> Ptr CellArea -> IO CellArea
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr CellArea -> CellArea
Gtk.CellArea.CellArea) Ptr CellArea
result'
        CellArea -> IO CellArea
forall (m :: * -> *) a. Monad m => a -> m a
return CellArea
result''
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    Maybe CellArea -> IO (Maybe CellArea)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe CellArea
maybeResult

#if defined(ENABLE_OVERLOADING)
data CellLayoutGetAreaMethodInfo
instance (signature ~ (m (Maybe Gtk.CellArea.CellArea)), MonadIO m, IsCellLayout a) => O.MethodInfo CellLayoutGetAreaMethodInfo a signature where
    overloadedMethod = cellLayoutGetArea

#endif

-- method CellLayout::get_cells
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TGList
--                  (TInterface Name { namespace = "Gtk" , name = "CellRenderer" }))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_get_cells" gtk_cell_layout_get_cells :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    IO (Ptr (GList (Ptr Gtk.CellRenderer.CellRenderer)))

-- | Returns the cell renderers which have been added to /@cellLayout@/.
-- 
-- /Since: 2.12/
cellLayoutGetCells ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> m [Gtk.CellRenderer.CellRenderer]
    -- ^ __Returns:__ 
    --     a list of cell renderers. The list, but not the renderers has
    --     been newly allocated and should be freed with @/g_list_free()/@
    --     when no longer needed.
cellLayoutGetCells :: a -> m [CellRenderer]
cellLayoutGetCells a
cellLayout = IO [CellRenderer] -> m [CellRenderer]
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [CellRenderer] -> m [CellRenderer])
-> IO [CellRenderer] -> m [CellRenderer]
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr (GList (Ptr CellRenderer))
result <- Ptr CellLayout -> IO (Ptr (GList (Ptr CellRenderer)))
gtk_cell_layout_get_cells Ptr CellLayout
cellLayout'
    [Ptr CellRenderer]
result' <- Ptr (GList (Ptr CellRenderer)) -> IO [Ptr CellRenderer]
forall a. Ptr (GList (Ptr a)) -> IO [Ptr a]
unpackGList Ptr (GList (Ptr CellRenderer))
result
    [CellRenderer]
result'' <- (Ptr CellRenderer -> IO CellRenderer)
-> [Ptr CellRenderer] -> IO [CellRenderer]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM ((ManagedPtr CellRenderer -> CellRenderer)
-> Ptr CellRenderer -> IO CellRenderer
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr CellRenderer -> CellRenderer
Gtk.CellRenderer.CellRenderer) [Ptr CellRenderer]
result'
    Ptr (GList (Ptr CellRenderer)) -> IO ()
forall a. Ptr (GList a) -> IO ()
g_list_free Ptr (GList (Ptr CellRenderer))
result
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    [CellRenderer] -> IO [CellRenderer]
forall (m :: * -> *) a. Monad m => a -> m a
return [CellRenderer]
result''

#if defined(ENABLE_OVERLOADING)
data CellLayoutGetCellsMethodInfo
instance (signature ~ (m [Gtk.CellRenderer.CellRenderer]), MonadIO m, IsCellLayout a) => O.MethodInfo CellLayoutGetCellsMethodInfo a signature where
    overloadedMethod = cellLayoutGetCells

#endif

-- method CellLayout::pack_end
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "cell"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellRenderer" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellRenderer" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "expand"
--           , argType = TBasicType TBoolean
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "%TRUE if @cell is to be given extra space allocated to @cell_layout"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_pack_end" gtk_cell_layout_pack_end :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    Ptr Gtk.CellRenderer.CellRenderer ->    -- cell : TInterface (Name {namespace = "Gtk", name = "CellRenderer"})
    CInt ->                                 -- expand : TBasicType TBoolean
    IO ()

-- | Adds the /@cell@/ to the end of /@cellLayout@/. If /@expand@/ is 'P.False', then the
-- /@cell@/ is allocated no more space than it needs. Any unused space is
-- divided evenly between cells for which /@expand@/ is 'P.True'.
-- 
-- Note that reusing the same cell renderer is not supported.
-- 
-- /Since: 2.4/
cellLayoutPackEnd ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> b
    -- ^ /@cell@/: a t'GI.Gtk.Objects.CellRenderer.CellRenderer'
    -> Bool
    -- ^ /@expand@/: 'P.True' if /@cell@/ is to be given extra space allocated to /@cellLayout@/
    -> m ()
cellLayoutPackEnd :: a -> b -> Bool -> m ()
cellLayoutPackEnd a
cellLayout b
cell Bool
expand = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr CellRenderer
cell' <- b -> IO (Ptr CellRenderer)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
cell
    let expand' :: CInt
expand' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (Bool -> Int) -> Bool -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum) Bool
expand
    Ptr CellLayout -> Ptr CellRenderer -> CInt -> IO ()
gtk_cell_layout_pack_end Ptr CellLayout
cellLayout' Ptr CellRenderer
cell' CInt
expand'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
cell
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data CellLayoutPackEndMethodInfo
instance (signature ~ (b -> Bool -> m ()), MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) => O.MethodInfo CellLayoutPackEndMethodInfo a signature where
    overloadedMethod = cellLayoutPackEnd

#endif

-- method CellLayout::pack_start
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "cell"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellRenderer" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellRenderer" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "expand"
--           , argType = TBasicType TBoolean
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "%TRUE if @cell is to be given extra space allocated to @cell_layout"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_pack_start" gtk_cell_layout_pack_start :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    Ptr Gtk.CellRenderer.CellRenderer ->    -- cell : TInterface (Name {namespace = "Gtk", name = "CellRenderer"})
    CInt ->                                 -- expand : TBasicType TBoolean
    IO ()

-- | Packs the /@cell@/ into the beginning of /@cellLayout@/. If /@expand@/ is 'P.False',
-- then the /@cell@/ is allocated no more space than it needs. Any unused space
-- is divided evenly between cells for which /@expand@/ is 'P.True'.
-- 
-- Note that reusing the same cell renderer is not supported.
-- 
-- /Since: 2.4/
cellLayoutPackStart ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> b
    -- ^ /@cell@/: a t'GI.Gtk.Objects.CellRenderer.CellRenderer'
    -> Bool
    -- ^ /@expand@/: 'P.True' if /@cell@/ is to be given extra space allocated to /@cellLayout@/
    -> m ()
cellLayoutPackStart :: a -> b -> Bool -> m ()
cellLayoutPackStart a
cellLayout b
cell Bool
expand = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr CellRenderer
cell' <- b -> IO (Ptr CellRenderer)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
cell
    let expand' :: CInt
expand' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (Bool -> Int) -> Bool -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum) Bool
expand
    Ptr CellLayout -> Ptr CellRenderer -> CInt -> IO ()
gtk_cell_layout_pack_start Ptr CellLayout
cellLayout' Ptr CellRenderer
cell' CInt
expand'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
cell
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data CellLayoutPackStartMethodInfo
instance (signature ~ (b -> Bool -> m ()), MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) => O.MethodInfo CellLayoutPackStartMethodInfo a signature where
    overloadedMethod = cellLayoutPackStart

#endif

-- method CellLayout::reorder
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "cell"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellRenderer" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellRenderer to reorder"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "position"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "new position to insert @cell at"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_reorder" gtk_cell_layout_reorder :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    Ptr Gtk.CellRenderer.CellRenderer ->    -- cell : TInterface (Name {namespace = "Gtk", name = "CellRenderer"})
    Int32 ->                                -- position : TBasicType TInt
    IO ()

-- | Re-inserts /@cell@/ at /@position@/.
-- 
-- Note that /@cell@/ has already to be packed into /@cellLayout@/
-- for this to function properly.
-- 
-- /Since: 2.4/
cellLayoutReorder ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> b
    -- ^ /@cell@/: a t'GI.Gtk.Objects.CellRenderer.CellRenderer' to reorder
    -> Int32
    -- ^ /@position@/: new position to insert /@cell@/ at
    -> m ()
cellLayoutReorder :: a -> b -> Int32 -> m ()
cellLayoutReorder a
cellLayout b
cell Int32
position = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr CellRenderer
cell' <- b -> IO (Ptr CellRenderer)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
cell
    Ptr CellLayout -> Ptr CellRenderer -> Int32 -> IO ()
gtk_cell_layout_reorder Ptr CellLayout
cellLayout' Ptr CellRenderer
cell' Int32
position
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
cell
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data CellLayoutReorderMethodInfo
instance (signature ~ (b -> Int32 -> m ()), MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) => O.MethodInfo CellLayoutReorderMethodInfo a signature where
    overloadedMethod = cellLayoutReorder

#endif

-- method CellLayout::set_cell_data_func
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "cell_layout"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayout" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellLayout" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "cell"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellRenderer" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GtkCellRenderer" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "func"
--           , argType =
--               TInterface Name { namespace = "Gtk" , name = "CellLayoutDataFunc" }
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the #GtkCellLayoutDataFunc to use, or %NULL"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeNotified
--           , argClosure = 3
--           , argDestroy = 4
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "func_data"
--           , argType = TBasicType TPtr
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "user data for @func"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "destroy"
--           , argType =
--               TInterface Name { namespace = "GLib" , name = "DestroyNotify" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "destroy notify for @func_data"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeAsync
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_cell_layout_set_cell_data_func" gtk_cell_layout_set_cell_data_func :: 
    Ptr CellLayout ->                       -- cell_layout : TInterface (Name {namespace = "Gtk", name = "CellLayout"})
    Ptr Gtk.CellRenderer.CellRenderer ->    -- cell : TInterface (Name {namespace = "Gtk", name = "CellRenderer"})
    FunPtr Gtk.Callbacks.C_CellLayoutDataFunc -> -- func : TInterface (Name {namespace = "Gtk", name = "CellLayoutDataFunc"})
    Ptr () ->                               -- func_data : TBasicType TPtr
    FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
    IO ()

-- | Sets the t'GI.Gtk.Callbacks.CellLayoutDataFunc' to use for /@cellLayout@/.
-- 
-- This function is used instead of the standard attributes mapping
-- for setting the column value, and should set the value of /@cellLayout@/’s
-- cell renderer(s) as appropriate.
-- 
-- /@func@/ may be 'P.Nothing' to remove a previously set function.
-- 
-- /Since: 2.4/
cellLayoutSetCellDataFunc ::
    (B.CallStack.HasCallStack, MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) =>
    a
    -- ^ /@cellLayout@/: a t'GI.Gtk.Interfaces.CellLayout.CellLayout'
    -> b
    -- ^ /@cell@/: a t'GI.Gtk.Objects.CellRenderer.CellRenderer'
    -> Maybe (Gtk.Callbacks.CellLayoutDataFunc)
    -- ^ /@func@/: the t'GI.Gtk.Callbacks.CellLayoutDataFunc' to use, or 'P.Nothing'
    -> m ()
cellLayoutSetCellDataFunc :: a -> b -> Maybe CellLayoutDataFunc -> m ()
cellLayoutSetCellDataFunc a
cellLayout b
cell Maybe CellLayoutDataFunc
func = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr CellLayout
cellLayout' <- a -> IO (Ptr CellLayout)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
cellLayout
    Ptr CellRenderer
cell' <- b -> IO (Ptr CellRenderer)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
cell
    FunPtr C_CellLayoutDataFunc
maybeFunc <- case Maybe CellLayoutDataFunc
func of
        Maybe CellLayoutDataFunc
Nothing -> FunPtr C_CellLayoutDataFunc -> IO (FunPtr C_CellLayoutDataFunc)
forall (m :: * -> *) a. Monad m => a -> m a
return (Ptr Any -> FunPtr C_CellLayoutDataFunc
forall a b. Ptr a -> FunPtr b
castPtrToFunPtr Ptr Any
forall a. Ptr a
nullPtr)
        Just CellLayoutDataFunc
jFunc -> do
            FunPtr C_CellLayoutDataFunc
jFunc' <- C_CellLayoutDataFunc -> IO (FunPtr C_CellLayoutDataFunc)
Gtk.Callbacks.mk_CellLayoutDataFunc (Maybe (Ptr (FunPtr C_CellLayoutDataFunc))
-> CellLayoutDataFunc_WithClosures -> C_CellLayoutDataFunc
Gtk.Callbacks.wrap_CellLayoutDataFunc Maybe (Ptr (FunPtr C_CellLayoutDataFunc))
forall a. Maybe a
Nothing (CellLayoutDataFunc -> CellLayoutDataFunc_WithClosures
Gtk.Callbacks.drop_closures_CellLayoutDataFunc CellLayoutDataFunc
jFunc))
            FunPtr C_CellLayoutDataFunc -> IO (FunPtr C_CellLayoutDataFunc)
forall (m :: * -> *) a. Monad m => a -> m a
return FunPtr C_CellLayoutDataFunc
jFunc'
    let funcData :: Ptr ()
funcData = FunPtr C_CellLayoutDataFunc -> Ptr ()
forall a b. FunPtr a -> Ptr b
castFunPtrToPtr FunPtr C_CellLayoutDataFunc
maybeFunc
    let destroy :: FunPtr (Ptr a -> IO ())
destroy = FunPtr (Ptr a -> IO ())
forall a. FunPtr (Ptr a -> IO ())
safeFreeFunPtrPtr
    Ptr CellLayout
-> Ptr CellRenderer
-> FunPtr C_CellLayoutDataFunc
-> Ptr ()
-> FunPtr C_DestroyNotify
-> IO ()
gtk_cell_layout_set_cell_data_func Ptr CellLayout
cellLayout' Ptr CellRenderer
cell' FunPtr C_CellLayoutDataFunc
maybeFunc Ptr ()
funcData FunPtr C_DestroyNotify
forall a. FunPtr (Ptr a -> IO ())
destroy
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
cellLayout
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
cell
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data CellLayoutSetCellDataFuncMethodInfo
instance (signature ~ (b -> Maybe (Gtk.Callbacks.CellLayoutDataFunc) -> m ()), MonadIO m, IsCellLayout a, Gtk.CellRenderer.IsCellRenderer b) => O.MethodInfo CellLayoutSetCellDataFuncMethodInfo a signature where
    overloadedMethod = cellLayoutSetCellDataFunc

#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList CellLayout = CellLayoutSignalList
type CellLayoutSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif