-- GENERATED by C->Haskell Compiler, version 0.16.3 Crystal Seed, 24 Jan 2009 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Graphics/QML/Internal/Objects.chs" #-}{-# LANGUAGE
    ForeignFunctionInterface
  #-}

module Graphics.QML.Internal.Objects where

import Foreign.C.Types
import Foreign.Ptr
import Foreign.ForeignPtr.Safe
import Foreign.ForeignPtr.Unsafe
import Foreign.StablePtr


hsqmlGetNextClassId :: IO (CInt)
hsqmlGetNextClassId =
  hsqmlGetNextClassId'_ >>= \res ->
  let {res' = id res} in
  return (res')
{-# LINE 17 "src/Graphics/QML/Internal/Objects.chs" #-}

type UniformFunc = Ptr () -> Ptr (Ptr ()) -> IO ()

foreign import ccall "wrapper"  
  marshalFunc :: UniformFunc -> IO (FunPtr UniformFunc)

newtype HsQMLClassHandle = HsQMLClassHandle (ForeignPtr (HsQMLClassHandle))
withHsQMLClassHandle (HsQMLClassHandle fptr) = withForeignPtr fptr
{-# LINE 24 "src/Graphics/QML/Internal/Objects.chs" #-}

foreign import ccall "hsqml.h &hsqml_finalise_class_handle"
  hsqmlFinaliseClassHandlePtr :: FunPtr (Ptr (HsQMLClassHandle) -> IO ())

newClassHandle :: Ptr HsQMLClassHandle -> IO (Maybe HsQMLClassHandle)
newClassHandle p =
  if nullPtr == p
    then return Nothing
    else do
      fp <- newForeignPtr hsqmlFinaliseClassHandlePtr p
      return $ Just $ HsQMLClassHandle fp

hsqmlCreateClass :: Ptr CUInt -> Ptr CChar -> Ptr (FunPtr UniformFunc) -> Ptr (FunPtr UniformFunc) -> IO (Maybe HsQMLClassHandle)
hsqmlCreateClass a1 a2 a3 a4 =
  let {a1' = id a1} in 
  let {a2' = id a2} in 
  let {a3' = id a3} in 
  let {a4' = id a4} in 
  hsqmlCreateClass'_ a1' a2' a3' a4' >>= \res ->
  newClassHandle res >>= \res' ->
  return (res')
{-# LINE 42 "src/Graphics/QML/Internal/Objects.chs" #-}

withMaybeHsQMLClassHandle ::
    Maybe HsQMLClassHandle -> (Ptr HsQMLClassHandle -> IO b) -> IO b
withMaybeHsQMLClassHandle (Just (HsQMLClassHandle fp)) = withForeignPtr fp
withMaybeHsQMLClassHandle Nothing = \f -> f nullPtr

withMaybeHsQMLObjectHandle ::
    Maybe HsQMLObjectHandle -> (Ptr HsQMLObjectHandle -> IO b) -> IO b
withMaybeHsQMLObjectHandle (Just (HsQMLObjectHandle fp)) = withForeignPtr fp
withMaybeHsQMLObjectHandle Nothing = \f -> f nullPtr

newtype HsQMLObjectHandle = HsQMLObjectHandle (ForeignPtr (HsQMLObjectHandle))
withHsQMLObjectHandle (HsQMLObjectHandle fptr) = withForeignPtr fptr
{-# LINE 54 "src/Graphics/QML/Internal/Objects.chs" #-}

foreign import ccall "hsqml.h &hsqml_finalise_object_handle"
  hsqmlFinaliseObjectHandlePtr :: FunPtr (Ptr (HsQMLObjectHandle) -> IO ())

newObjectHandle :: Ptr HsQMLObjectHandle -> IO HsQMLObjectHandle
newObjectHandle p = do
  fp <- newForeignPtr hsqmlFinaliseObjectHandlePtr p
  return $ HsQMLObjectHandle fp

isNullObjectHandle :: HsQMLObjectHandle -> Bool
isNullObjectHandle (HsQMLObjectHandle fp) =
  nullPtr == unsafeForeignPtrToPtr fp

-- | Represents an instance of the QML class which wraps the type @tt@.
data ObjRef tt = ObjRef {
  objHndl :: HsQMLObjectHandle
}

objToPtr :: a -> (Ptr () -> IO b) -> IO b
objToPtr obj f = do
  sPtr <- newStablePtr obj
  res <- f $ castStablePtrToPtr sPtr
  return res

hsqmlCreateObject :: a -> HsQMLClassHandle -> IO (HsQMLObjectHandle)
hsqmlCreateObject a1 a2 =
  objToPtr a1 $ \a1' -> 
  withHsQMLClassHandle a2 $ \a2' -> 
  hsqmlCreateObject'_ a1' a2' >>= \res ->
  newObjectHandle res >>= \res' ->
  return (res')
{-# LINE 82 "src/Graphics/QML/Internal/Objects.chs" #-}

ptrToObj :: Ptr () -> IO a
ptrToObj =
  deRefStablePtr . castPtrToStablePtr

hsqmlObjectGetHaskell :: HsQMLObjectHandle -> IO (a)
hsqmlObjectGetHaskell a1 =
  withHsQMLObjectHandle a1 $ \a1' -> 
  hsqmlObjectGetHaskell'_ a1' >>= \res ->
  ptrToObj res >>= \res' ->
  return (res')
{-# LINE 90 "src/Graphics/QML/Internal/Objects.chs" #-}

hsqmlObjectGetPointer :: HsQMLObjectHandle -> IO (Ptr ())
hsqmlObjectGetPointer a1 =
  withHsQMLObjectHandle a1 $ \a1' -> 
  hsqmlObjectGetPointer'_ a1' >>= \res ->
  let {res' = id res} in
  return (res')
{-# LINE 94 "src/Graphics/QML/Internal/Objects.chs" #-}

hsqmlGetObjectHandle :: Ptr () -> Maybe HsQMLClassHandle -> IO (HsQMLObjectHandle)
hsqmlGetObjectHandle a1 a2 =
  let {a1' = id a1} in 
  withMaybeHsQMLClassHandle a2 $ \a2' -> 
  hsqmlGetObjectHandle'_ a1' a2' >>= \res ->
  newObjectHandle res >>= \res' ->
  return (res')
{-# LINE 99 "src/Graphics/QML/Internal/Objects.chs" #-}

ofDynamicMetaObject :: CUInt
ofDynamicMetaObject = 0x01

mfAccessPrivate, mfAccessProtected, mfAccessPublic, mfAccessMask,
  mfMethodMethod, mfMethodSignal, mfMethodSlot, mfMethodConstructor,
  mfMethodTypeMask, mfMethodCompatibility, mfMethodCloned, mfMethodScriptable
  :: CUInt
mfAccessPrivate   = 0x00
mfAccessProtected = 0x01
mfAccessPublic    = 0x02
mfAccessMask      = 0x03
mfMethodMethod      = 0x00
mfMethodSignal      = 0x04
mfMethodSlot        = 0x08
mfMethodConstructor = 0x0c
mfMethodTypeMask    = 0x0c
mfMethodCompatibility = 0x10
mfMethodCloned        = 0x20
mfMethodScriptable    = 0x40

pfInvalid, pfReadable, pfWritable, pfResettable, pfEnumOrFlag, pfStdCppSet,
  pfConstant, pfFinal, pfDesignable, pfResolveDesignable, pfScriptable,
  pfResolveScriptable, pfStored, pfResolveStored, pfEditable,
  pfResolveEditable, pfUser, pfResolveUser, pfNotify :: CUInt
pfInvalid           = 0x00000000
pfReadable          = 0x00000001
pfWritable          = 0x00000002
pfResettable        = 0x00000004
pfEnumOrFlag        = 0x00000008
pfStdCppSet         = 0x00000100
pfConstant          = 0x00000400
pfFinal             = 0x00000800
pfDesignable        = 0x00001000
pfResolveDesignable = 0x00002000
pfScriptable        = 0x00004000
pfResolveScriptable = 0x00008000
pfStored            = 0x00010000
pfResolveStored     = 0x00020000
pfEditable          = 0x00040000
pfResolveEditable   = 0x00080000
pfUser              = 0x00100000
pfResolveUser       = 0x00200000
pfNotify            = 0x00400000

foreign import ccall unsafe "Graphics/QML/Internal/Objects.chs.h hsqml_get_next_class_id"
  hsqmlGetNextClassId'_ :: (IO CInt)

foreign import ccall unsafe "Graphics/QML/Internal/Objects.chs.h hsqml_create_class"
  hsqmlCreateClass'_ :: ((Ptr CUInt) -> ((Ptr CChar) -> ((Ptr (FunPtr ((Ptr ()) -> ((Ptr (Ptr ())) -> (IO ()))))) -> ((Ptr (FunPtr ((Ptr ()) -> ((Ptr (Ptr ())) -> (IO ()))))) -> (IO (Ptr (HsQMLClassHandle)))))))

foreign import ccall unsafe "Graphics/QML/Internal/Objects.chs.h hsqml_create_object"
  hsqmlCreateObject'_ :: ((Ptr ()) -> ((Ptr (HsQMLClassHandle)) -> (IO (Ptr (HsQMLObjectHandle)))))

foreign import ccall unsafe "Graphics/QML/Internal/Objects.chs.h hsqml_object_get_haskell"
  hsqmlObjectGetHaskell'_ :: ((Ptr (HsQMLObjectHandle)) -> (IO (Ptr ())))

foreign import ccall unsafe "Graphics/QML/Internal/Objects.chs.h hsqml_object_get_pointer"
  hsqmlObjectGetPointer'_ :: ((Ptr (HsQMLObjectHandle)) -> (IO (Ptr ())))

foreign import ccall unsafe "Graphics/QML/Internal/Objects.chs.h hsqml_get_object_handle"
  hsqmlGetObjectHandle'_ :: ((Ptr ()) -> ((Ptr (HsQMLClassHandle)) -> (IO (Ptr (HsQMLObjectHandle)))))