packages feed

gi-glib-0.2.46.14: GI/GLib/Structs/HookList.hs


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

The #GHookList struct represents a list of hook functions.
-}

module GI.GLib.Structs.HookList
    ( 

-- * Exported types
    HookList(..)                            ,
    newZeroHookList                         ,
    noHookList                              ,


 -- * Methods
-- ** hookListClear
    HookListClearMethodInfo                 ,
    hookListClear                           ,


-- ** hookListInit
    HookListInitMethodInfo                  ,
    hookListInit                            ,


-- ** hookListInvoke
    HookListInvokeMethodInfo                ,
    hookListInvoke                          ,


-- ** hookListInvokeCheck
    HookListInvokeCheckMethodInfo           ,
    hookListInvokeCheck                     ,




 -- * Properties
-- ** Dummy3
    hookListClearDummy3                     ,
    hookListDummy3                          ,
    hookListReadDummy3                      ,
    hookListWriteDummy3                     ,


-- ** HookSize
    hookListHookSize                        ,
    hookListReadHookSize                    ,
    hookListWriteHookSize                   ,


-- ** Hooks
    hookListClearHooks                      ,
    hookListHooks                           ,
    hookListReadHooks                       ,
    hookListWriteHooks                      ,


-- ** IsSetup
    hookListIsSetup                         ,
    hookListReadIsSetup                     ,
    hookListWriteIsSetup                    ,


-- ** SeqId
    hookListReadSeqId                       ,
    hookListSeqId                           ,
    hookListWriteSeqId                      ,




    ) where

import Data.GI.Base.ShortPrelude

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.GLib.Types
import GI.GLib.Callbacks

newtype HookList = HookList (ForeignPtr HookList)
-- | Construct a `HookList` struct initialized to zero.
newZeroHookList :: MonadIO m => m HookList
newZeroHookList = liftIO $ callocBytes 56 >>= wrapPtr HookList

instance tag ~ 'AttrSet => Constructible HookList tag where
    new _ attrs = do
        o <- newZeroHookList
        GI.Attributes.set o attrs
        return o


noHookList :: Maybe HookList
noHookList = Nothing

hookListReadSeqId :: MonadIO m => HookList -> m CULong
hookListReadSeqId s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CULong
    return val

hookListWriteSeqId :: MonadIO m => HookList -> CULong -> m ()
hookListWriteSeqId s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: CULong)

data HookListSeqIdFieldInfo
instance AttrInfo HookListSeqIdFieldInfo where
    type AttrAllowedOps HookListSeqIdFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint HookListSeqIdFieldInfo = (~) CULong
    type AttrBaseTypeConstraint HookListSeqIdFieldInfo = (~) HookList
    type AttrGetType HookListSeqIdFieldInfo = CULong
    type AttrLabel HookListSeqIdFieldInfo = "seq_id"
    attrGet _ = hookListReadSeqId
    attrSet _ = hookListWriteSeqId
    attrConstruct = undefined
    attrClear _ = undefined

hookListSeqId :: AttrLabelProxy "seqId"
hookListSeqId = AttrLabelProxy


hookListReadHookSize :: MonadIO m => HookList -> m Word32
hookListReadHookSize s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO Word32
    return val

hookListWriteHookSize :: MonadIO m => HookList -> Word32 -> m ()
hookListWriteHookSize s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: Word32)

data HookListHookSizeFieldInfo
instance AttrInfo HookListHookSizeFieldInfo where
    type AttrAllowedOps HookListHookSizeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint HookListHookSizeFieldInfo = (~) Word32
    type AttrBaseTypeConstraint HookListHookSizeFieldInfo = (~) HookList
    type AttrGetType HookListHookSizeFieldInfo = Word32
    type AttrLabel HookListHookSizeFieldInfo = "hook_size"
    attrGet _ = hookListReadHookSize
    attrSet _ = hookListWriteHookSize
    attrConstruct = undefined
    attrClear _ = undefined

hookListHookSize :: AttrLabelProxy "hookSize"
hookListHookSize = AttrLabelProxy


hookListReadIsSetup :: MonadIO m => HookList -> m Word32
hookListReadIsSetup s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 12) :: IO Word32
    return val

hookListWriteIsSetup :: MonadIO m => HookList -> Word32 -> m ()
hookListWriteIsSetup s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 12) (val :: Word32)

data HookListIsSetupFieldInfo
instance AttrInfo HookListIsSetupFieldInfo where
    type AttrAllowedOps HookListIsSetupFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint HookListIsSetupFieldInfo = (~) Word32
    type AttrBaseTypeConstraint HookListIsSetupFieldInfo = (~) HookList
    type AttrGetType HookListIsSetupFieldInfo = Word32
    type AttrLabel HookListIsSetupFieldInfo = "is_setup"
    attrGet _ = hookListReadIsSetup
    attrSet _ = hookListWriteIsSetup
    attrConstruct = undefined
    attrClear _ = undefined

hookListIsSetup :: AttrLabelProxy "isSetup"
hookListIsSetup = AttrLabelProxy


hookListReadHooks :: MonadIO m => HookList -> m (Maybe Hook)
hookListReadHooks s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO (Ptr Hook)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newPtr 64 Hook) val'
        return val''
    return result

hookListWriteHooks :: MonadIO m => HookList -> Ptr Hook -> m ()
hookListWriteHooks s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Ptr Hook)

hookListClearHooks :: MonadIO m => HookList -> m ()
hookListClearHooks s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (nullPtr :: Ptr Hook)

data HookListHooksFieldInfo
instance AttrInfo HookListHooksFieldInfo where
    type AttrAllowedOps HookListHooksFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint HookListHooksFieldInfo = (~) (Ptr Hook)
    type AttrBaseTypeConstraint HookListHooksFieldInfo = (~) HookList
    type AttrGetType HookListHooksFieldInfo = Maybe Hook
    type AttrLabel HookListHooksFieldInfo = "hooks"
    attrGet _ = hookListReadHooks
    attrSet _ = hookListWriteHooks
    attrConstruct = undefined
    attrClear _ = hookListClearHooks

hookListHooks :: AttrLabelProxy "hooks"
hookListHooks = AttrLabelProxy


hookListReadDummy3 :: MonadIO m => HookList -> m (Ptr ())
hookListReadDummy3 s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO (Ptr ())
    return val

hookListWriteDummy3 :: MonadIO m => HookList -> Ptr () -> m ()
hookListWriteDummy3 s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (val :: Ptr ())

hookListClearDummy3 :: MonadIO m => HookList -> m ()
hookListClearDummy3 s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (nullPtr :: Ptr ())

data HookListDummy3FieldInfo
instance AttrInfo HookListDummy3FieldInfo where
    type AttrAllowedOps HookListDummy3FieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint HookListDummy3FieldInfo = (~) (Ptr ())
    type AttrBaseTypeConstraint HookListDummy3FieldInfo = (~) HookList
    type AttrGetType HookListDummy3FieldInfo = Ptr ()
    type AttrLabel HookListDummy3FieldInfo = "dummy3"
    attrGet _ = hookListReadDummy3
    attrSet _ = hookListWriteDummy3
    attrConstruct = undefined
    attrClear _ = hookListClearDummy3

hookListDummy3 :: AttrLabelProxy "dummy3"
hookListDummy3 = AttrLabelProxy


-- XXX Skipped attribute for "HookList:finalize_hook" :: Not implemented: "Wrapping foreign callbacks is not supported yet"
-- XXX Skipped attribute for "HookList:dummy" :: Not implemented: "Don't know how to unpack C array of type TCArray False 2 (-1) (TBasicType TPtr)"

type instance AttributeList HookList = HookListAttributeList
type HookListAttributeList = ('[ '("seqId", HookListSeqIdFieldInfo), '("hookSize", HookListHookSizeFieldInfo), '("isSetup", HookListIsSetupFieldInfo), '("hooks", HookListHooksFieldInfo), '("dummy3", HookListDummy3FieldInfo)] :: [(Symbol, *)])

-- method HookList::clear
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HookList", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "g_hook_list_clear" g_hook_list_clear :: 
    Ptr HookList ->                         -- _obj : TInterface "GLib" "HookList"
    IO ()


hookListClear ::
    (MonadIO m) =>
    HookList                                -- _obj
    -> m ()                                 -- result
hookListClear _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    g_hook_list_clear _obj'
    touchManagedPtr _obj
    return ()

data HookListClearMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo HookListClearMethodInfo HookList signature where
    overloadedMethod _ = hookListClear

-- method HookList::init
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HookList", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "hook_size", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "g_hook_list_init" g_hook_list_init :: 
    Ptr HookList ->                         -- _obj : TInterface "GLib" "HookList"
    Word32 ->                               -- hook_size : TBasicType TUInt
    IO ()


hookListInit ::
    (MonadIO m) =>
    HookList                                -- _obj
    -> Word32                               -- hookSize
    -> m ()                                 -- result
hookListInit _obj hookSize = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    g_hook_list_init _obj' hookSize
    touchManagedPtr _obj
    return ()

data HookListInitMethodInfo
instance (signature ~ (Word32 -> m ()), MonadIO m) => MethodInfo HookListInitMethodInfo HookList signature where
    overloadedMethod _ = hookListInit

-- method HookList::invoke
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HookList", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "may_recurse", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "g_hook_list_invoke" g_hook_list_invoke :: 
    Ptr HookList ->                         -- _obj : TInterface "GLib" "HookList"
    CInt ->                                 -- may_recurse : TBasicType TBoolean
    IO ()


hookListInvoke ::
    (MonadIO m) =>
    HookList                                -- _obj
    -> Bool                                 -- mayRecurse
    -> m ()                                 -- result
hookListInvoke _obj mayRecurse = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let mayRecurse' = (fromIntegral . fromEnum) mayRecurse
    g_hook_list_invoke _obj' mayRecurse'
    touchManagedPtr _obj
    return ()

data HookListInvokeMethodInfo
instance (signature ~ (Bool -> m ()), MonadIO m) => MethodInfo HookListInvokeMethodInfo HookList signature where
    overloadedMethod _ = hookListInvoke

-- method HookList::invoke_check
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HookList", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "may_recurse", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "g_hook_list_invoke_check" g_hook_list_invoke_check :: 
    Ptr HookList ->                         -- _obj : TInterface "GLib" "HookList"
    CInt ->                                 -- may_recurse : TBasicType TBoolean
    IO ()


hookListInvokeCheck ::
    (MonadIO m) =>
    HookList                                -- _obj
    -> Bool                                 -- mayRecurse
    -> m ()                                 -- result
hookListInvokeCheck _obj mayRecurse = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let mayRecurse' = (fromIntegral . fromEnum) mayRecurse
    g_hook_list_invoke_check _obj' mayRecurse'
    touchManagedPtr _obj
    return ()

data HookListInvokeCheckMethodInfo
instance (signature ~ (Bool -> m ()), MonadIO m) => MethodInfo HookListInvokeCheckMethodInfo HookList signature where
    overloadedMethod _ = hookListInvokeCheck

type family ResolveHookListMethod (t :: Symbol) (o :: *) :: * where
    ResolveHookListMethod "clear" o = HookListClearMethodInfo
    ResolveHookListMethod "init" o = HookListInitMethodInfo
    ResolveHookListMethod "invoke" o = HookListInvokeMethodInfo
    ResolveHookListMethod "invokeCheck" o = HookListInvokeCheckMethodInfo
    ResolveHookListMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveHookListMethod t HookList, MethodInfo info HookList p) => IsLabelProxy t (HookList -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveHookListMethod t HookList, MethodInfo info HookList p) => IsLabel t (HookList -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif