{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.Gtk.Objects.TreeSelection
    ( 

-- * Exported types
    TreeSelection(..)                       ,
    TreeSelectionK                          ,
    toTreeSelection                         ,
    noTreeSelection                         ,


 -- * Methods
-- ** treeSelectionCountSelectedRows
    treeSelectionCountSelectedRows          ,


-- ** treeSelectionGetMode
    treeSelectionGetMode                    ,


-- ** treeSelectionGetSelected
    treeSelectionGetSelected                ,


-- ** treeSelectionGetSelectedRows
    treeSelectionGetSelectedRows            ,


-- ** treeSelectionGetTreeView
    treeSelectionGetTreeView                ,


-- ** treeSelectionIterIsSelected
    treeSelectionIterIsSelected             ,


-- ** treeSelectionPathIsSelected
    treeSelectionPathIsSelected             ,


-- ** treeSelectionSelectAll
    treeSelectionSelectAll                  ,


-- ** treeSelectionSelectIter
    treeSelectionSelectIter                 ,


-- ** treeSelectionSelectPath
    treeSelectionSelectPath                 ,


-- ** treeSelectionSelectRange
    treeSelectionSelectRange                ,


-- ** treeSelectionSelectedForeach
    treeSelectionSelectedForeach            ,


-- ** treeSelectionSetMode
    treeSelectionSetMode                    ,


-- ** treeSelectionSetSelectFunction
    treeSelectionSetSelectFunction          ,


-- ** treeSelectionUnselectAll
    treeSelectionUnselectAll                ,


-- ** treeSelectionUnselectIter
    treeSelectionUnselectIter               ,


-- ** treeSelectionUnselectPath
    treeSelectionUnselectPath               ,


-- ** treeSelectionUnselectRange
    treeSelectionUnselectRange              ,




 -- * Properties
-- ** Mode
    TreeSelectionModePropertyInfo           ,
    constructTreeSelectionMode              ,
    getTreeSelectionMode                    ,
    setTreeSelectionMode                    ,




 -- * Signals
-- ** Changed
    TreeSelectionChangedCallback            ,
    TreeSelectionChangedCallbackC           ,
    TreeSelectionChangedSignalInfo          ,
    afterTreeSelectionChanged               ,
    mkTreeSelectionChangedCallback          ,
    noTreeSelectionChangedCallback          ,
    onTreeSelectionChanged                  ,
    treeSelectionChangedCallbackWrapper     ,
    treeSelectionChangedClosure             ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gtk.Types
import GI.Gtk.Callbacks
import qualified GI.GLib as GLib
import qualified GI.GObject as GObject

newtype TreeSelection = TreeSelection (ForeignPtr TreeSelection)
foreign import ccall "gtk_tree_selection_get_type"
    c_gtk_tree_selection_get_type :: IO GType

type instance ParentTypes TreeSelection = TreeSelectionParentTypes
type TreeSelectionParentTypes = '[GObject.Object]

instance GObject TreeSelection where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_gtk_tree_selection_get_type
    

class GObject o => TreeSelectionK o
instance (GObject o, IsDescendantOf TreeSelection o) => TreeSelectionK o

toTreeSelection :: TreeSelectionK o => o -> IO TreeSelection
toTreeSelection = unsafeCastTo TreeSelection

noTreeSelection :: Maybe TreeSelection
noTreeSelection = Nothing

-- signal TreeSelection::changed
type TreeSelectionChangedCallback =
    IO ()

noTreeSelectionChangedCallback :: Maybe TreeSelectionChangedCallback
noTreeSelectionChangedCallback = Nothing

type TreeSelectionChangedCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkTreeSelectionChangedCallback :: TreeSelectionChangedCallbackC -> IO (FunPtr TreeSelectionChangedCallbackC)

treeSelectionChangedClosure :: TreeSelectionChangedCallback -> IO Closure
treeSelectionChangedClosure cb = newCClosure =<< mkTreeSelectionChangedCallback wrapped
    where wrapped = treeSelectionChangedCallbackWrapper cb

treeSelectionChangedCallbackWrapper ::
    TreeSelectionChangedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
treeSelectionChangedCallbackWrapper _cb _ _ = do
    _cb 

onTreeSelectionChanged :: (GObject a, MonadIO m) => a -> TreeSelectionChangedCallback -> m SignalHandlerId
onTreeSelectionChanged obj cb = liftIO $ connectTreeSelectionChanged obj cb SignalConnectBefore
afterTreeSelectionChanged :: (GObject a, MonadIO m) => a -> TreeSelectionChangedCallback -> m SignalHandlerId
afterTreeSelectionChanged obj cb = connectTreeSelectionChanged obj cb SignalConnectAfter

connectTreeSelectionChanged :: (GObject a, MonadIO m) =>
                               a -> TreeSelectionChangedCallback -> SignalConnectMode -> m SignalHandlerId
connectTreeSelectionChanged obj cb after = liftIO $ do
    cb' <- mkTreeSelectionChangedCallback (treeSelectionChangedCallbackWrapper cb)
    connectSignalFunPtr obj "changed" cb' after

-- VVV Prop "mode"
   -- Type: TInterface "Gtk" "SelectionMode"
   -- Flags: [PropertyReadable,PropertyWritable]

getTreeSelectionMode :: (MonadIO m, TreeSelectionK o) => o -> m SelectionMode
getTreeSelectionMode obj = liftIO $ getObjectPropertyEnum obj "mode"

setTreeSelectionMode :: (MonadIO m, TreeSelectionK o) => o -> SelectionMode -> m ()
setTreeSelectionMode obj val = liftIO $ setObjectPropertyEnum obj "mode" val

constructTreeSelectionMode :: SelectionMode -> IO ([Char], GValue)
constructTreeSelectionMode val = constructObjectPropertyEnum "mode" val

data TreeSelectionModePropertyInfo
instance AttrInfo TreeSelectionModePropertyInfo where
    type AttrAllowedOps TreeSelectionModePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint TreeSelectionModePropertyInfo = (~) SelectionMode
    type AttrBaseTypeConstraint TreeSelectionModePropertyInfo = TreeSelectionK
    type AttrGetType TreeSelectionModePropertyInfo = SelectionMode
    type AttrLabel TreeSelectionModePropertyInfo = "TreeSelection::mode"
    attrGet _ = getTreeSelectionMode
    attrSet _ = setTreeSelectionMode
    attrConstruct _ = constructTreeSelectionMode

type instance AttributeList TreeSelection = TreeSelectionAttributeList
type TreeSelectionAttributeList = ('[ '("mode", TreeSelectionModePropertyInfo)] :: [(Symbol, *)])

data TreeSelectionChangedSignalInfo
instance SignalInfo TreeSelectionChangedSignalInfo where
    type HaskellCallbackType TreeSelectionChangedSignalInfo = TreeSelectionChangedCallback
    connectSignal _ = connectTreeSelectionChanged

type instance SignalList TreeSelection = TreeSelectionSignalList
type TreeSelectionSignalList = ('[ '("changed", TreeSelectionChangedSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method TreeSelection::count_selected_rows
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TInt32
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_count_selected_rows" gtk_tree_selection_count_selected_rows :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    IO Int32


treeSelectionCountSelectedRows ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    m Int32
treeSelectionCountSelectedRows _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_tree_selection_count_selected_rows _obj'
    touchManagedPtr _obj
    return result

-- method TreeSelection::get_mode
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "SelectionMode"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_get_mode" gtk_tree_selection_get_mode :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    IO CUInt


treeSelectionGetMode ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    m SelectionMode
treeSelectionGetMode _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_tree_selection_get_mode _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

-- method TreeSelection::get_selected
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "model", argType = TInterface "Gtk" "TreeModel", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_get_selected" gtk_tree_selection_get_selected :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr (Ptr TreeModel) ->                  -- model : TInterface "Gtk" "TreeModel"
    Ptr TreeIter ->                         -- iter : TInterface "Gtk" "TreeIter"
    IO CInt


treeSelectionGetSelected ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    m (Bool,TreeModel,TreeIter)
treeSelectionGetSelected _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    model <- allocMem :: IO (Ptr (Ptr TreeModel))
    iter <- callocBoxedBytes 32 :: IO (Ptr TreeIter)
    result <- gtk_tree_selection_get_selected _obj' model iter
    let result' = (/= 0) result
    model' <- peek model
    model'' <- (newObject TreeModel) model'
    iter' <- (wrapBoxed TreeIter) iter
    touchManagedPtr _obj
    freeMem model
    return (result', model'', iter')

-- method TreeSelection::get_selected_rows
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "model", argType = TInterface "Gtk" "TreeModel", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TGList (TInterface "Gtk" "TreePath")
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_get_selected_rows" gtk_tree_selection_get_selected_rows :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr (Ptr TreeModel) ->                  -- model : TInterface "Gtk" "TreeModel"
    IO (Ptr (GList (Ptr TreePath)))


treeSelectionGetSelectedRows ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    m ([TreePath],TreeModel)
treeSelectionGetSelectedRows _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    model <- allocMem :: IO (Ptr (Ptr TreeModel))
    result <- gtk_tree_selection_get_selected_rows _obj' model
    checkUnexpectedReturnNULL "gtk_tree_selection_get_selected_rows" result
    result' <- unpackGList result
    result'' <- mapM (wrapBoxed TreePath) result'
    g_list_free result
    model' <- peek model
    model'' <- (newObject TreeModel) model'
    touchManagedPtr _obj
    freeMem model
    return (result'', model'')

-- method TreeSelection::get_tree_view
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "TreeView"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_get_tree_view" gtk_tree_selection_get_tree_view :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    IO (Ptr TreeView)


treeSelectionGetTreeView ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    m TreeView
treeSelectionGetTreeView _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_tree_selection_get_tree_view _obj'
    checkUnexpectedReturnNULL "gtk_tree_selection_get_tree_view" result
    result' <- (newObject TreeView) result
    touchManagedPtr _obj
    return result'

-- method TreeSelection::iter_is_selected
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_iter_is_selected" gtk_tree_selection_iter_is_selected :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr TreeIter ->                         -- iter : TInterface "Gtk" "TreeIter"
    IO CInt


treeSelectionIterIsSelected ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreeIter ->                             -- iter
    m Bool
treeSelectionIterIsSelected _obj iter = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let iter' = unsafeManagedPtrGetPtr iter
    result <- gtk_tree_selection_iter_is_selected _obj' iter'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr iter
    return result'

-- method TreeSelection::path_is_selected
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_path_is_selected" gtk_tree_selection_path_is_selected :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr TreePath ->                         -- path : TInterface "Gtk" "TreePath"
    IO CInt


treeSelectionPathIsSelected ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreePath ->                             -- path
    m Bool
treeSelectionPathIsSelected _obj path = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let path' = unsafeManagedPtrGetPtr path
    result <- gtk_tree_selection_path_is_selected _obj' path'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr path
    return result'

-- method TreeSelection::select_all
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_select_all" gtk_tree_selection_select_all :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    IO ()


treeSelectionSelectAll ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    m ()
treeSelectionSelectAll _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_tree_selection_select_all _obj'
    touchManagedPtr _obj
    return ()

-- method TreeSelection::select_iter
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_select_iter" gtk_tree_selection_select_iter :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr TreeIter ->                         -- iter : TInterface "Gtk" "TreeIter"
    IO ()


treeSelectionSelectIter ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreeIter ->                             -- iter
    m ()
treeSelectionSelectIter _obj iter = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let iter' = unsafeManagedPtrGetPtr iter
    gtk_tree_selection_select_iter _obj' iter'
    touchManagedPtr _obj
    touchManagedPtr iter
    return ()

-- method TreeSelection::select_path
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_select_path" gtk_tree_selection_select_path :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr TreePath ->                         -- path : TInterface "Gtk" "TreePath"
    IO ()


treeSelectionSelectPath ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreePath ->                             -- path
    m ()
treeSelectionSelectPath _obj path = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let path' = unsafeManagedPtrGetPtr path
    gtk_tree_selection_select_path _obj' path'
    touchManagedPtr _obj
    touchManagedPtr path
    return ()

-- method TreeSelection::select_range
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "start_path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "end_path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "start_path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "end_path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_select_range" gtk_tree_selection_select_range :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr TreePath ->                         -- start_path : TInterface "Gtk" "TreePath"
    Ptr TreePath ->                         -- end_path : TInterface "Gtk" "TreePath"
    IO ()


treeSelectionSelectRange ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreePath ->                             -- start_path
    TreePath ->                             -- end_path
    m ()
treeSelectionSelectRange _obj start_path end_path = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let start_path' = unsafeManagedPtrGetPtr start_path
    let end_path' = unsafeManagedPtrGetPtr end_path
    gtk_tree_selection_select_range _obj' start_path' end_path'
    touchManagedPtr _obj
    touchManagedPtr start_path
    touchManagedPtr end_path
    return ()

-- method TreeSelection::selected_foreach
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "func", argType = TInterface "Gtk" "TreeSelectionForeachFunc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeCall, argClosure = 2, argDestroy = -1, transfer = TransferNothing},Arg {argName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "func", argType = TInterface "Gtk" "TreeSelectionForeachFunc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeCall, argClosure = 2, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_selected_foreach" gtk_tree_selection_selected_foreach :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    FunPtr TreeSelectionForeachFuncC ->     -- func : TInterface "Gtk" "TreeSelectionForeachFunc"
    Ptr () ->                               -- data : TBasicType TVoid
    IO ()


treeSelectionSelectedForeach ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreeSelectionForeachFunc ->             -- func
    m ()
treeSelectionSelectedForeach _obj func = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    func' <- mkTreeSelectionForeachFunc (treeSelectionForeachFuncWrapper Nothing func)
    let data_ = nullPtr
    gtk_tree_selection_selected_foreach _obj' func' data_
    safeFreeFunPtr $ castFunPtrToPtr func'
    touchManagedPtr _obj
    return ()

-- method TreeSelection::set_mode
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "type", argType = TInterface "Gtk" "SelectionMode", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "type", argType = TInterface "Gtk" "SelectionMode", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_set_mode" gtk_tree_selection_set_mode :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    CUInt ->                                -- type : TInterface "Gtk" "SelectionMode"
    IO ()


treeSelectionSetMode ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    SelectionMode ->                        -- type
    m ()
treeSelectionSetMode _obj type_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let type_' = (fromIntegral . fromEnum) type_
    gtk_tree_selection_set_mode _obj' type_'
    touchManagedPtr _obj
    return ()

-- method TreeSelection::set_select_function
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "func", argType = TInterface "Gtk" "TreeSelectionFunc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, transfer = TransferNothing},Arg {argName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "destroy", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "func", argType = TInterface "Gtk" "TreeSelectionFunc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_set_select_function" gtk_tree_selection_set_select_function :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    FunPtr TreeSelectionFuncC ->            -- func : TInterface "Gtk" "TreeSelectionFunc"
    Ptr () ->                               -- data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- destroy : TInterface "GLib" "DestroyNotify"
    IO ()


treeSelectionSetSelectFunction ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreeSelectionFunc ->                    -- func
    m ()
treeSelectionSetSelectFunction _obj func = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    func' <- mkTreeSelectionFunc (treeSelectionFuncWrapper Nothing func)
    let data_ = castFunPtrToPtr func'
    let destroy = safeFreeFunPtrPtr
    gtk_tree_selection_set_select_function _obj' func' data_ destroy
    touchManagedPtr _obj
    return ()

-- method TreeSelection::unselect_all
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_unselect_all" gtk_tree_selection_unselect_all :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    IO ()


treeSelectionUnselectAll ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    m ()
treeSelectionUnselectAll _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_tree_selection_unselect_all _obj'
    touchManagedPtr _obj
    return ()

-- method TreeSelection::unselect_iter
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iter", argType = TInterface "Gtk" "TreeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_unselect_iter" gtk_tree_selection_unselect_iter :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr TreeIter ->                         -- iter : TInterface "Gtk" "TreeIter"
    IO ()


treeSelectionUnselectIter ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreeIter ->                             -- iter
    m ()
treeSelectionUnselectIter _obj iter = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let iter' = unsafeManagedPtrGetPtr iter
    gtk_tree_selection_unselect_iter _obj' iter'
    touchManagedPtr _obj
    touchManagedPtr iter
    return ()

-- method TreeSelection::unselect_path
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_unselect_path" gtk_tree_selection_unselect_path :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr TreePath ->                         -- path : TInterface "Gtk" "TreePath"
    IO ()


treeSelectionUnselectPath ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreePath ->                             -- path
    m ()
treeSelectionUnselectPath _obj path = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let path' = unsafeManagedPtrGetPtr path
    gtk_tree_selection_unselect_path _obj' path'
    touchManagedPtr _obj
    touchManagedPtr path
    return ()

-- method TreeSelection::unselect_range
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "start_path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "end_path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "TreeSelection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "start_path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "end_path", argType = TInterface "Gtk" "TreePath", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_tree_selection_unselect_range" gtk_tree_selection_unselect_range :: 
    Ptr TreeSelection ->                    -- _obj : TInterface "Gtk" "TreeSelection"
    Ptr TreePath ->                         -- start_path : TInterface "Gtk" "TreePath"
    Ptr TreePath ->                         -- end_path : TInterface "Gtk" "TreePath"
    IO ()


treeSelectionUnselectRange ::
    (MonadIO m, TreeSelectionK a) =>
    a ->                                    -- _obj
    TreePath ->                             -- start_path
    TreePath ->                             -- end_path
    m ()
treeSelectionUnselectRange _obj start_path end_path = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let start_path' = unsafeManagedPtrGetPtr start_path
    let end_path' = unsafeManagedPtrGetPtr end_path
    gtk_tree_selection_unselect_range _obj' start_path' end_path'
    touchManagedPtr _obj
    touchManagedPtr start_path
    touchManagedPtr end_path
    return ()