gi-gobject-2.0.18: GI/GObject/Structs/ParamSpecPool.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
A 'GI.GObject.Structs.ParamSpecPool.ParamSpecPool' maintains a collection of @/GParamSpecs/@ which can be
quickly accessed by owner and name. The implementation of the 'GI.GObject.Objects.Object.Object' property
system uses such a pool to store the @/GParamSpecs/@ of the properties all object
types.
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.GObject.Structs.ParamSpecPool
(
-- * Exported types
ParamSpecPool(..) ,
noParamSpecPool ,
-- * Methods
-- ** insert #method:insert#
#if ENABLE_OVERLOADING
ParamSpecPoolInsertMethodInfo ,
#endif
paramSpecPoolInsert ,
-- ** listOwned #method:listOwned#
#if ENABLE_OVERLOADING
ParamSpecPoolListOwnedMethodInfo ,
#endif
paramSpecPoolListOwned ,
-- ** lookup #method:lookup#
#if ENABLE_OVERLOADING
ParamSpecPoolLookupMethodInfo ,
#endif
paramSpecPoolLookup ,
-- ** new #method:new#
paramSpecPoolNew ,
-- ** remove #method:remove#
#if ENABLE_OVERLOADING
ParamSpecPoolRemoveMethodInfo ,
#endif
paramSpecPoolRemove ,
) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P
import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
-- | Memory-managed wrapper type.
newtype ParamSpecPool = ParamSpecPool (ManagedPtr ParamSpecPool)
-- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
instance WrappedPtr ParamSpecPool where
wrappedPtrCalloc = return nullPtr
wrappedPtrCopy = return
wrappedPtrFree = Nothing
-- | A convenience alias for `Nothing` :: `Maybe` `ParamSpecPool`.
noParamSpecPool :: Maybe ParamSpecPool
noParamSpecPool = Nothing
#if ENABLE_OVERLOADING
instance O.HasAttributeList ParamSpecPool
type instance O.AttributeList ParamSpecPool = ParamSpecPoolAttributeList
type ParamSpecPoolAttributeList = ('[ ] :: [(Symbol, *)])
#endif
-- method ParamSpecPool::insert
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pool", argType = TInterface (Name {namespace = "GObject", name = "ParamSpecPool"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GParamSpecPool.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "pspec", argType = TParamSpec, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GParamSpec to insert", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "owner_type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GType identifying the owner of @pspec", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "g_param_spec_pool_insert" g_param_spec_pool_insert ::
Ptr ParamSpecPool -> -- pool : TInterface (Name {namespace = "GObject", name = "ParamSpecPool"})
Ptr GParamSpec -> -- pspec : TParamSpec
CGType -> -- owner_type : TBasicType TGType
IO ()
{- |
Inserts a 'GI.GObject.Objects.ParamSpec.ParamSpec' in the pool.
-}
paramSpecPoolInsert ::
(B.CallStack.HasCallStack, MonadIO m) =>
ParamSpecPool
{- ^ /@pool@/: a 'GI.GObject.Structs.ParamSpecPool.ParamSpecPool'. -}
-> GParamSpec
{- ^ /@pspec@/: the 'GI.GObject.Objects.ParamSpec.ParamSpec' to insert -}
-> GType
{- ^ /@ownerType@/: a 'GType' identifying the owner of /@pspec@/ -}
-> m ()
paramSpecPoolInsert pool pspec ownerType = liftIO $ do
pool' <- unsafeManagedPtrGetPtr pool
pspec' <- unsafeManagedPtrGetPtr pspec
let ownerType' = gtypeToCGType ownerType
g_param_spec_pool_insert pool' pspec' ownerType'
touchManagedPtr pool
touchManagedPtr pspec
return ()
#if ENABLE_OVERLOADING
data ParamSpecPoolInsertMethodInfo
instance (signature ~ (GParamSpec -> GType -> m ()), MonadIO m) => O.MethodInfo ParamSpecPoolInsertMethodInfo ParamSpecPool signature where
overloadedMethod _ = paramSpecPoolInsert
#endif
-- XXX Could not generate method ParamSpecPool::list
-- Error was : Not implemented: "unpackCArray : Don't know how to unpack C Array of type TParamSpec"
-- method ParamSpecPool::list_owned
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pool", argType = TInterface (Name {namespace = "GObject", name = "ParamSpecPool"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GParamSpecPool", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "owner_type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the owner to look for", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TGList TParamSpec)
-- throws : False
-- Skip return : False
foreign import ccall "g_param_spec_pool_list_owned" g_param_spec_pool_list_owned ::
Ptr ParamSpecPool -> -- pool : TInterface (Name {namespace = "GObject", name = "ParamSpecPool"})
CGType -> -- owner_type : TBasicType TGType
IO (Ptr (GList (Ptr GParamSpec)))
{- |
Gets an 'GI.GLib.Structs.List.List' of all @/GParamSpecs/@ owned by /@ownerType@/ in
the pool.
-}
paramSpecPoolListOwned ::
(B.CallStack.HasCallStack, MonadIO m) =>
ParamSpecPool
{- ^ /@pool@/: a 'GI.GObject.Structs.ParamSpecPool.ParamSpecPool' -}
-> GType
{- ^ /@ownerType@/: the owner to look for -}
-> m [GParamSpec]
{- ^ __Returns:__ a
'GI.GLib.Structs.List.List' of all @/GParamSpecs/@ owned by /@ownerType@/ in
the pool@/GParamSpecs/@. -}
paramSpecPoolListOwned pool ownerType = liftIO $ do
pool' <- unsafeManagedPtrGetPtr pool
let ownerType' = gtypeToCGType ownerType
result <- g_param_spec_pool_list_owned pool' ownerType'
result' <- unpackGList result
result'' <- mapM B.GParamSpec.newGParamSpecFromPtr result'
g_list_free result
touchManagedPtr pool
return result''
#if ENABLE_OVERLOADING
data ParamSpecPoolListOwnedMethodInfo
instance (signature ~ (GType -> m [GParamSpec]), MonadIO m) => O.MethodInfo ParamSpecPoolListOwnedMethodInfo ParamSpecPool signature where
overloadedMethod _ = paramSpecPoolListOwned
#endif
-- method ParamSpecPool::lookup
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pool", argType = TInterface (Name {namespace = "GObject", name = "ParamSpecPool"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GParamSpecPool", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "param_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name to look for", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "owner_type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the owner to look for", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "walk_ancestors", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "If %TRUE, also try to find a #GParamSpec with @param_name\n owned by an ancestor of @owner_type.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just TParamSpec
-- throws : False
-- Skip return : False
foreign import ccall "g_param_spec_pool_lookup" g_param_spec_pool_lookup ::
Ptr ParamSpecPool -> -- pool : TInterface (Name {namespace = "GObject", name = "ParamSpecPool"})
CString -> -- param_name : TBasicType TUTF8
CGType -> -- owner_type : TBasicType TGType
CInt -> -- walk_ancestors : TBasicType TBoolean
IO (Ptr GParamSpec)
{- |
Looks up a 'GI.GObject.Objects.ParamSpec.ParamSpec' in the pool.
-}
paramSpecPoolLookup ::
(B.CallStack.HasCallStack, MonadIO m) =>
ParamSpecPool
{- ^ /@pool@/: a 'GI.GObject.Structs.ParamSpecPool.ParamSpecPool' -}
-> T.Text
{- ^ /@paramName@/: the name to look for -}
-> GType
{- ^ /@ownerType@/: the owner to look for -}
-> Bool
{- ^ /@walkAncestors@/: If 'True', also try to find a 'GI.GObject.Objects.ParamSpec.ParamSpec' with /@paramName@/
owned by an ancestor of /@ownerType@/. -}
-> m GParamSpec
{- ^ __Returns:__ The found 'GI.GObject.Objects.ParamSpec.ParamSpec', or 'Nothing' if no
matching 'GI.GObject.Objects.ParamSpec.ParamSpec' was found. -}
paramSpecPoolLookup pool paramName ownerType walkAncestors = liftIO $ do
pool' <- unsafeManagedPtrGetPtr pool
paramName' <- textToCString paramName
let ownerType' = gtypeToCGType ownerType
let walkAncestors' = (fromIntegral . fromEnum) walkAncestors
result <- g_param_spec_pool_lookup pool' paramName' ownerType' walkAncestors'
checkUnexpectedReturnNULL "paramSpecPoolLookup" result
result' <- B.GParamSpec.newGParamSpecFromPtr result
touchManagedPtr pool
freeMem paramName'
return result'
#if ENABLE_OVERLOADING
data ParamSpecPoolLookupMethodInfo
instance (signature ~ (T.Text -> GType -> Bool -> m GParamSpec), MonadIO m) => O.MethodInfo ParamSpecPoolLookupMethodInfo ParamSpecPool signature where
overloadedMethod _ = paramSpecPoolLookup
#endif
-- method ParamSpecPool::remove
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pool", argType = TInterface (Name {namespace = "GObject", name = "ParamSpecPool"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GParamSpecPool", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "pspec", argType = TParamSpec, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GParamSpec to remove", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "g_param_spec_pool_remove" g_param_spec_pool_remove ::
Ptr ParamSpecPool -> -- pool : TInterface (Name {namespace = "GObject", name = "ParamSpecPool"})
Ptr GParamSpec -> -- pspec : TParamSpec
IO ()
{- |
Removes a 'GI.GObject.Objects.ParamSpec.ParamSpec' from the pool.
-}
paramSpecPoolRemove ::
(B.CallStack.HasCallStack, MonadIO m) =>
ParamSpecPool
{- ^ /@pool@/: a 'GI.GObject.Structs.ParamSpecPool.ParamSpecPool' -}
-> GParamSpec
{- ^ /@pspec@/: the 'GI.GObject.Objects.ParamSpec.ParamSpec' to remove -}
-> m ()
paramSpecPoolRemove pool pspec = liftIO $ do
pool' <- unsafeManagedPtrGetPtr pool
pspec' <- unsafeManagedPtrGetPtr pspec
g_param_spec_pool_remove pool' pspec'
touchManagedPtr pool
touchManagedPtr pspec
return ()
#if ENABLE_OVERLOADING
data ParamSpecPoolRemoveMethodInfo
instance (signature ~ (GParamSpec -> m ()), MonadIO m) => O.MethodInfo ParamSpecPoolRemoveMethodInfo ParamSpecPool signature where
overloadedMethod _ = paramSpecPoolRemove
#endif
-- method ParamSpecPool::new
-- method type : MemberFunction
-- Args : [Arg {argCName = "type_prefixing", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Whether the pool will support type-prefixed property names.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GObject", name = "ParamSpecPool"}))
-- throws : False
-- Skip return : False
foreign import ccall "g_param_spec_pool_new" g_param_spec_pool_new ::
CInt -> -- type_prefixing : TBasicType TBoolean
IO (Ptr ParamSpecPool)
{- |
Creates a new 'GI.GObject.Structs.ParamSpecPool.ParamSpecPool'.
If /@typePrefixing@/ is 'True', lookups in the newly created pool will
allow to specify the owner as a colon-separated prefix of the
property name, like \"GtkContainer:border-width\". This feature is
deprecated, so you should always set /@typePrefixing@/ to 'False'.
-}
paramSpecPoolNew ::
(B.CallStack.HasCallStack, MonadIO m) =>
Bool
{- ^ /@typePrefixing@/: Whether the pool will support type-prefixed property names. -}
-> m ParamSpecPool
{- ^ __Returns:__ a newly allocated 'GI.GObject.Structs.ParamSpecPool.ParamSpecPool'. -}
paramSpecPoolNew typePrefixing = liftIO $ do
let typePrefixing' = (fromIntegral . fromEnum) typePrefixing
result <- g_param_spec_pool_new typePrefixing'
checkUnexpectedReturnNULL "paramSpecPoolNew" result
result' <- (newPtr ParamSpecPool) result
return result'
#if ENABLE_OVERLOADING
#endif
#if ENABLE_OVERLOADING
type family ResolveParamSpecPoolMethod (t :: Symbol) (o :: *) :: * where
ResolveParamSpecPoolMethod "insert" o = ParamSpecPoolInsertMethodInfo
ResolveParamSpecPoolMethod "listOwned" o = ParamSpecPoolListOwnedMethodInfo
ResolveParamSpecPoolMethod "lookup" o = ParamSpecPoolLookupMethodInfo
ResolveParamSpecPoolMethod "remove" o = ParamSpecPoolRemoveMethodInfo
ResolveParamSpecPoolMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveParamSpecPoolMethod t ParamSpecPool, O.MethodInfo info ParamSpecPool p) => OL.IsLabel t (ParamSpecPool -> p) where
#if MIN_VERSION_base(4,10,0)
fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif
#endif