module Graphics.QML.DataModel.Internal.FFI.Types where
import Foreign.C.Types
import Foreign.Storable
import Foreign.Ptr
import Graphics.QML.Marshal
newtype HmDelegateHandle = HmDelegateHandle CInt
newtype QtVariant = QtVariant (Ptr CChar)
newtype HmColumnType = HmColumnType CInt
deriving (Eq, Show)
instance Marshal HmDelegateHandle where
type MarshalMode HmDelegateHandle c d = ModeBidi c
marshaller = bidiMarshaller
(\i -> HmDelegateHandle (CInt i))
(\(HmDelegateHandle (CInt i)) -> i)
type RowCountCallback = IO CInt
type ColumnCountCallback = IO CInt
type DataCallback = CInt -> CInt -> IO QtVariant
type HeaderDataCallback = CInt -> IO QtVariant
data HmCallbacks = HmCallbacks
{ rowCountCallback :: FunPtr RowCountCallback
, columnCountCallback :: FunPtr ColumnCountCallback
, dataCallback :: FunPtr DataCallback
, headerDataCallback :: FunPtr HeaderDataCallback
}
instance Storable HmCallbacks where
sizeOf _ = (32)
alignment _ = alignment (undefined :: CInt)
poke ptr hmc = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr $ rowCountCallback hmc
(\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr $ columnCountCallback hmc
(\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr $ dataCallback hmc
(\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr $ headerDataCallback hmc
peek ptr = HmCallbacks
<$> ((\hsc_ptr -> peekByteOff hsc_ptr 0)) ptr
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 8)) ptr
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 16)) ptr
<*> ((\hsc_ptr -> peekByteOff hsc_ptr 24)) ptr