{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) GIBaseInfo is the common base struct of all other *Info structs accessible through the #GIRepository API. All other structs can be casted to a #GIBaseInfo, for instance: <example> <title>Casting a #GIFunctionInfo to #GIBaseInfo</title> <programlisting> GIFunctionInfo *function_info = ...; GIBaseInfo *info = (GIBaseInfo*)function_info; </programlisting> </example> Most #GIRepository APIs returning a #GIBaseInfo is actually creating a new struct, in other words, g_base_info_unref() has to be called when done accessing the data. GIBaseInfos are normally accessed by calling either g_irepository_find_by_name(), g_irepository_find_by_gtype() or g_irepository_get_info(). <example> <title>Getting the Button of the Gtk typelib</title> <programlisting> GIBaseInfo *button_info = g_irepository_find_by_name(NULL, "Gtk", "Button"); ... use button_info ... g_base_info_unref(button_info); </programlisting> </example> <refsect1 id="gi-gibaseinfo.struct-hierarchy" role="struct_hierarchy"> <title role="struct_hierarchy.title">Struct hierarchy</title> <synopsis> GIBaseInfo +----<link linkend="gi-GIArgInfo">GIArgInfo</link> +----<link linkend="gi-GICallableInfo">GICallableInfo</link> +----<link linkend="gi-GIConstantInfo">GIConstantInfo</link> +----<link linkend="gi-GIFieldInfo">GIFieldInfo</link> +----<link linkend="gi-GIPropertyInfo">GIPropertyInfo</link> +----<link linkend="gi-GIRegisteredTypeInfo">GIRegisteredTypeInfo</link> +----<link linkend="gi-GITypeInfo">GITypeInfo</link> </synopsis> </refsect1> -} module GI.GIRepository.Structs.BaseInfo ( -- * Exported types BaseInfo(..) , noBaseInfo , -- * Methods -- ** baseInfoEqual baseInfoEqual , -- ** baseInfoGetAttribute baseInfoGetAttribute , -- ** baseInfoGetContainer baseInfoGetContainer , -- ** baseInfoGetName baseInfoGetName , -- ** baseInfoGetNamespace baseInfoGetNamespace , -- ** baseInfoGetType baseInfoGetType , -- ** baseInfoGetTypelib baseInfoGetTypelib , -- ** baseInfoIsDeprecated baseInfoIsDeprecated , -- ** baseInfoIterateAttributes baseInfoIterateAttributes , ) 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.GIRepository.Types import GI.GIRepository.Callbacks newtype BaseInfo = BaseInfo (ForeignPtr BaseInfo) foreign import ccall "g_base_info_gtype_get_type" c_g_base_info_gtype_get_type :: IO GType instance BoxedObject BaseInfo where boxedType _ = c_g_base_info_gtype_get_type noBaseInfo :: Maybe BaseInfo noBaseInfo = Nothing -- method BaseInfo::equal -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "info2", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "info2", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "g_base_info_equal" g_base_info_equal :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" Ptr BaseInfo -> -- info2 : TInterface "GIRepository" "BaseInfo" IO CInt baseInfoEqual :: (MonadIO m) => BaseInfo -> -- _obj BaseInfo -> -- info2 m Bool baseInfoEqual _obj info2 = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let info2' = unsafeManagedPtrGetPtr info2 result <- g_base_info_equal _obj' info2' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr info2 return result' -- method BaseInfo::get_attribute -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TUTF8 -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_attribute" g_base_info_get_attribute :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" CString -> -- name : TBasicType TUTF8 IO CString baseInfoGetAttribute :: (MonadIO m) => BaseInfo -> -- _obj T.Text -> -- name m T.Text baseInfoGetAttribute _obj name = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj name' <- textToCString name result <- g_base_info_get_attribute _obj' name' checkUnexpectedReturnNULL "g_base_info_get_attribute" result result' <- cstringToText result touchManagedPtr _obj freeMem name' return result' -- method BaseInfo::get_container -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TInterface "GIRepository" "BaseInfo" -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_container" g_base_info_get_container :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" IO (Ptr BaseInfo) baseInfoGetContainer :: (MonadIO m) => BaseInfo -> -- _obj m BaseInfo baseInfoGetContainer _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_base_info_get_container _obj' checkUnexpectedReturnNULL "g_base_info_get_container" result result' <- (newBoxed BaseInfo) result touchManagedPtr _obj return result' -- method BaseInfo::get_name -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TUTF8 -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_name" g_base_info_get_name :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" IO CString baseInfoGetName :: (MonadIO m) => BaseInfo -> -- _obj m T.Text baseInfoGetName _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_base_info_get_name _obj' checkUnexpectedReturnNULL "g_base_info_get_name" result result' <- cstringToText result touchManagedPtr _obj return result' -- method BaseInfo::get_namespace -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TUTF8 -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_namespace" g_base_info_get_namespace :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" IO CString baseInfoGetNamespace :: (MonadIO m) => BaseInfo -> -- _obj m T.Text baseInfoGetNamespace _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_base_info_get_namespace _obj' checkUnexpectedReturnNULL "g_base_info_get_namespace" result result' <- cstringToText result touchManagedPtr _obj return result' -- method BaseInfo::get_type -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TInterface "GIRepository" "InfoType" -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_type" g_base_info_get_type :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" IO CUInt baseInfoGetType :: (MonadIO m) => BaseInfo -> -- _obj m InfoType baseInfoGetType _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_base_info_get_type _obj' let result' = (toEnum . fromIntegral) result touchManagedPtr _obj return result' -- method BaseInfo::get_typelib -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TInterface "GIRepository" "Typelib" -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_typelib" g_base_info_get_typelib :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" IO (Ptr Typelib) baseInfoGetTypelib :: (MonadIO m) => BaseInfo -> -- _obj m Typelib baseInfoGetTypelib _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_base_info_get_typelib _obj' checkUnexpectedReturnNULL "g_base_info_get_typelib" result -- XXX Wrapping a foreign struct/union with no known destructor, leak? result' <- (\x -> Typelib <$> newForeignPtr_ x) result touchManagedPtr _obj return result' -- method BaseInfo::is_deprecated -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "g_base_info_is_deprecated" g_base_info_is_deprecated :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" IO CInt baseInfoIsDeprecated :: (MonadIO m) => BaseInfo -> -- _obj m Bool baseInfoIsDeprecated _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_base_info_is_deprecated _obj' let result' = (/= 0) result touchManagedPtr _obj return result' -- method BaseInfo::iterate_attributes -- method type : OrdinaryMethod -- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iterator", argType = TInterface "GIRepository" "AttributeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "name", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "value", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- Lengths : [] -- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "BaseInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "iterator", argType = TInterface "GIRepository" "AttributeIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "g_base_info_iterate_attributes" g_base_info_iterate_attributes :: Ptr BaseInfo -> -- _obj : TInterface "GIRepository" "BaseInfo" Ptr AttributeIter -> -- iterator : TInterface "GIRepository" "AttributeIter" Ptr CString -> -- name : TBasicType TUTF8 Ptr CString -> -- value : TBasicType TUTF8 IO CInt baseInfoIterateAttributes :: (MonadIO m) => BaseInfo -> -- _obj AttributeIter -> -- iterator m (Bool,T.Text,T.Text) baseInfoIterateAttributes _obj iterator = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let iterator' = unsafeManagedPtrGetPtr iterator name <- allocMem :: IO (Ptr CString) value <- allocMem :: IO (Ptr CString) result <- g_base_info_iterate_attributes _obj' iterator' name value let result' = (/= 0) result name' <- peek name name'' <- cstringToText name' value' <- peek value value'' <- cstringToText value' touchManagedPtr _obj touchManagedPtr iterator freeMem name freeMem value return (result', name'', value'')