{- |
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.Poppler.Structs.StructureElementIter
    ( 

-- * Exported types
    StructureElementIter(..)                ,
    noStructureElementIter                  ,


 -- * Methods
-- ** structureElementIterCopy
    structureElementIterCopy                ,


-- ** structureElementIterFree
    structureElementIterFree                ,


-- ** structureElementIterGetChild
    structureElementIterGetChild            ,


-- ** structureElementIterGetElement
    structureElementIterGetElement          ,


-- ** structureElementIterNew
    structureElementIterNew                 ,


-- ** structureElementIterNext
    structureElementIterNext                ,




    ) 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.Poppler.Types
import GI.Poppler.Callbacks

newtype StructureElementIter = StructureElementIter (ForeignPtr StructureElementIter)
foreign import ccall "poppler_structure_element_iter_get_type" c_poppler_structure_element_iter_get_type :: 
    IO GType

instance BoxedObject StructureElementIter where
    boxedType _ = c_poppler_structure_element_iter_get_type

noStructureElementIter :: Maybe StructureElementIter
noStructureElementIter = Nothing

-- method StructureElementIter::new
-- method type : Constructor
-- Args : [Arg {argName = "poppler_document", argType = TInterface "Poppler" "Document", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "poppler_document", argType = TInterface "Poppler" "Document", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Poppler" "StructureElementIter"
-- throws : False
-- Skip return : False

foreign import ccall "poppler_structure_element_iter_new" poppler_structure_element_iter_new :: 
    Ptr Document ->                         -- poppler_document : TInterface "Poppler" "Document"
    IO (Ptr StructureElementIter)


structureElementIterNew ::
    (MonadIO m, DocumentK a) =>
    a ->                                    -- poppler_document
    m StructureElementIter
structureElementIterNew poppler_document = liftIO $ do
    let poppler_document' = unsafeManagedPtrCastPtr poppler_document
    result <- poppler_structure_element_iter_new poppler_document'
    checkUnexpectedReturnNULL "poppler_structure_element_iter_new" result
    result' <- (wrapBoxed StructureElementIter) result
    touchManagedPtr poppler_document
    return result'

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

foreign import ccall "poppler_structure_element_iter_copy" poppler_structure_element_iter_copy :: 
    Ptr StructureElementIter ->             -- _obj : TInterface "Poppler" "StructureElementIter"
    IO (Ptr StructureElementIter)


structureElementIterCopy ::
    (MonadIO m) =>
    StructureElementIter ->                 -- _obj
    m StructureElementIter
structureElementIterCopy _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- poppler_structure_element_iter_copy _obj'
    checkUnexpectedReturnNULL "poppler_structure_element_iter_copy" result
    result' <- (wrapBoxed StructureElementIter) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "poppler_structure_element_iter_free" poppler_structure_element_iter_free :: 
    Ptr StructureElementIter ->             -- _obj : TInterface "Poppler" "StructureElementIter"
    IO ()


structureElementIterFree ::
    (MonadIO m) =>
    StructureElementIter ->                 -- _obj
    m ()
structureElementIterFree _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    poppler_structure_element_iter_free _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "poppler_structure_element_iter_get_child" poppler_structure_element_iter_get_child :: 
    Ptr StructureElementIter ->             -- _obj : TInterface "Poppler" "StructureElementIter"
    IO (Ptr StructureElementIter)


structureElementIterGetChild ::
    (MonadIO m) =>
    StructureElementIter ->                 -- _obj
    m StructureElementIter
structureElementIterGetChild _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- poppler_structure_element_iter_get_child _obj'
    checkUnexpectedReturnNULL "poppler_structure_element_iter_get_child" result
    result' <- (wrapBoxed StructureElementIter) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "poppler_structure_element_iter_get_element" poppler_structure_element_iter_get_element :: 
    Ptr StructureElementIter ->             -- _obj : TInterface "Poppler" "StructureElementIter"
    IO (Ptr StructureElement)


structureElementIterGetElement ::
    (MonadIO m) =>
    StructureElementIter ->                 -- _obj
    m StructureElement
structureElementIterGetElement _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- poppler_structure_element_iter_get_element _obj'
    checkUnexpectedReturnNULL "poppler_structure_element_iter_get_element" result
    result' <- (wrapObject StructureElement) result
    touchManagedPtr _obj
    return result'

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

foreign import ccall "poppler_structure_element_iter_next" poppler_structure_element_iter_next :: 
    Ptr StructureElementIter ->             -- _obj : TInterface "Poppler" "StructureElementIter"
    IO CInt


structureElementIterNext ::
    (MonadIO m) =>
    StructureElementIter ->                 -- _obj
    m Bool
structureElementIterNext _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- poppler_structure_element_iter_next _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'