module System.GIO.Base where
import Control.Monad
import System.Glib.FFI
import System.Glib.Flags
import System.Glib.GObject
import System.GIO.Types
type Offset = (CLLong)
cToFlags :: (Integral int, Flags flags)
=> int
-> [flags]
cToFlags = toFlags . fromIntegral
cFromFlags :: (Integral int, Flags flags)
=> [flags]
-> int
cFromFlags = fromIntegral . fromFlags
cToEnum :: (Integral int, Enum enum)
=> int
-> enum
cToEnum = toEnum . fromIntegral
cFromEnum :: (Integral int, Enum enum)
=> enum
-> int
cFromEnum = fromIntegral . fromEnum
withGObject :: GObjectClass objectT
=> objectT
-> (Ptr objectT -> IO a)
-> IO a
withGObject object action =
let objectFPtr = unGObject $ toGObject object
in withForeignPtr (castForeignPtr objectFPtr) action
peekGObject :: GObjectClass obj
=> Ptr obj
-> IO obj
peekGObject cObject = do
do cObjectRef $ castPtr cObject
takeGObject cObject
foreign import ccall unsafe "&g_object_unref"
objectFinalizer :: FunPtr (Ptr () -> IO ())
foreign import ccall unsafe "g_object_ref"
cObjectRef :: Ptr ()
-> IO (Ptr ())
takeGObject :: GObjectClass obj
=> Ptr obj
-> IO obj
takeGObject cObject =
liftM (unsafeCastGObject . GObject . castForeignPtr) $
do newForeignPtr (castPtr cObject) objectFinalizer
type AsyncReadyCallback = GObject -> AsyncResult -> IO ()
type CAsyncReadyCallback = Ptr GObject -> Ptr AsyncResult -> Ptr () -> IO ()
foreign import ccall "wrapper"
makeAsyncReadyCallback :: CAsyncReadyCallback
-> IO ((FunPtr ((Ptr ()) -> ((Ptr AsyncResult) -> ((Ptr ()) -> (IO ()))))))
marshalAsyncReadyCallback :: AsyncReadyCallback -> IO ((FunPtr ((Ptr ()) -> ((Ptr AsyncResult) -> ((Ptr ()) -> (IO ()))))))
marshalAsyncReadyCallback asyncReadyCallback =
makeAsyncReadyCallback cAsyncReadyCallback
where cAsyncReadyCallback :: CAsyncReadyCallback
cAsyncReadyCallback cObject cAsyncResult cCallback = do
object <- peekGObject cObject
asyncResult <- peekGObject cAsyncResult
asyncReadyCallback object asyncResult
freeHaskellFunPtr (castPtrToFunPtr cCallback)
data FileAttributeInfoFlags = FileAttributeInfoNone
| FileAttributeInfoCopyWithFile
| FileAttributeInfoCopyWhenMoved
deriving (Eq,Ord,Bounded,Read,Show)
instance Enum FileAttributeInfoFlags where
fromEnum FileAttributeInfoNone = 0
fromEnum FileAttributeInfoCopyWithFile = 1
fromEnum FileAttributeInfoCopyWhenMoved = 2
toEnum 0 = FileAttributeInfoNone
toEnum 1 = FileAttributeInfoCopyWithFile
toEnum 2 = FileAttributeInfoCopyWhenMoved
toEnum unmatched = error ("FileAttributeInfoFlags.toEnum: Cannot match " ++ show unmatched)
succ FileAttributeInfoNone = FileAttributeInfoCopyWithFile
succ FileAttributeInfoCopyWithFile = FileAttributeInfoCopyWhenMoved
succ _ = undefined
pred FileAttributeInfoCopyWithFile = FileAttributeInfoNone
pred FileAttributeInfoCopyWhenMoved = FileAttributeInfoCopyWithFile
pred _ = undefined
enumFromTo x y | fromEnum x == fromEnum y = [ y ]
| otherwise = x : enumFromTo (succ x) y
enumFrom x = enumFromTo x FileAttributeInfoCopyWhenMoved
enumFromThen _ _ = error "Enum FileAttributeInfoFlags: enumFromThen not implemented"
enumFromThenTo _ _ _ = error "Enum FileAttributeInfoFlags: enumFromThenTo not implemented"
instance Flags FileAttributeInfoFlags