{- | 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 structure holding information for a specific type. It is filled in by the 'GI.GObject.Functions.typeQuery' function. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.GObject.Structs.TypeQuery ( -- * Exported types TypeQuery(..) , newZeroTypeQuery , noTypeQuery , -- * Properties -- ** classSize #attr:classSize# {- | the size of the class structure -} getTypeQueryClassSize , setTypeQueryClassSize , #if ENABLE_OVERLOADING typeQuery_classSize , #endif -- ** instanceSize #attr:instanceSize# {- | the size of the instance structure -} getTypeQueryInstanceSize , setTypeQueryInstanceSize , #if ENABLE_OVERLOADING typeQuery_instanceSize , #endif -- ** type #attr:type# {- | the 'GType' value of the type -} getTypeQueryType , setTypeQueryType , #if ENABLE_OVERLOADING typeQuery_type , #endif -- ** typeName #attr:typeName# {- | the name of the type -} clearTypeQueryTypeName , getTypeQueryTypeName , setTypeQueryTypeName , #if ENABLE_OVERLOADING typeQuery_typeName , #endif ) 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 TypeQuery = TypeQuery (ManagedPtr TypeQuery) instance WrappedPtr TypeQuery where wrappedPtrCalloc = callocBytes 24 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 24 >=> wrapPtr TypeQuery) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `TypeQuery` struct initialized to zero. newZeroTypeQuery :: MonadIO m => m TypeQuery newZeroTypeQuery = liftIO $ wrappedPtrCalloc >>= wrapPtr TypeQuery instance tag ~ 'AttrSet => Constructible TypeQuery tag where new _ attrs = do o <- newZeroTypeQuery GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `TypeQuery`. noTypeQuery :: Maybe TypeQuery noTypeQuery = Nothing {- | Get the value of the “@type@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' typeQuery #type @ -} getTypeQueryType :: MonadIO m => TypeQuery -> m GType getTypeQueryType s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO CGType let val' = GType val return val' {- | Set the value of the “@type@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' typeQuery [ #type 'Data.GI.Base.Attributes.:=' value ] @ -} setTypeQueryType :: MonadIO m => TypeQuery -> GType -> m () setTypeQueryType s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = gtypeToCGType val poke (ptr `plusPtr` 0) (val' :: CGType) #if ENABLE_OVERLOADING data TypeQueryTypeFieldInfo instance AttrInfo TypeQueryTypeFieldInfo where type AttrAllowedOps TypeQueryTypeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint TypeQueryTypeFieldInfo = (~) GType type AttrBaseTypeConstraint TypeQueryTypeFieldInfo = (~) TypeQuery type AttrGetType TypeQueryTypeFieldInfo = GType type AttrLabel TypeQueryTypeFieldInfo = "type" type AttrOrigin TypeQueryTypeFieldInfo = TypeQuery attrGet _ = getTypeQueryType attrSet _ = setTypeQueryType attrConstruct = undefined attrClear _ = undefined typeQuery_type :: AttrLabelProxy "type" typeQuery_type = AttrLabelProxy #endif {- | Get the value of the “@type_name@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' typeQuery #typeName @ -} getTypeQueryTypeName :: MonadIO m => TypeQuery -> m (Maybe T.Text) getTypeQueryTypeName s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO CString result <- SP.convertIfNonNull val $ \val' -> do val'' <- cstringToText val' return val'' return result {- | Set the value of the “@type_name@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' typeQuery [ #typeName 'Data.GI.Base.Attributes.:=' value ] @ -} setTypeQueryTypeName :: MonadIO m => TypeQuery -> CString -> m () setTypeQueryTypeName s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 8) (val :: CString) {- | Set the value of the “@type_name@” field to `Nothing`. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.clear' #typeName @ -} clearTypeQueryTypeName :: MonadIO m => TypeQuery -> m () clearTypeQueryTypeName s = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 8) (FP.nullPtr :: CString) #if ENABLE_OVERLOADING data TypeQueryTypeNameFieldInfo instance AttrInfo TypeQueryTypeNameFieldInfo where type AttrAllowedOps TypeQueryTypeNameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear] type AttrSetTypeConstraint TypeQueryTypeNameFieldInfo = (~) CString type AttrBaseTypeConstraint TypeQueryTypeNameFieldInfo = (~) TypeQuery type AttrGetType TypeQueryTypeNameFieldInfo = Maybe T.Text type AttrLabel TypeQueryTypeNameFieldInfo = "type_name" type AttrOrigin TypeQueryTypeNameFieldInfo = TypeQuery attrGet _ = getTypeQueryTypeName attrSet _ = setTypeQueryTypeName attrConstruct = undefined attrClear _ = clearTypeQueryTypeName typeQuery_typeName :: AttrLabelProxy "typeName" typeQuery_typeName = AttrLabelProxy #endif {- | Get the value of the “@class_size@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' typeQuery #classSize @ -} getTypeQueryClassSize :: MonadIO m => TypeQuery -> m Word32 getTypeQueryClassSize s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO Word32 return val {- | Set the value of the “@class_size@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' typeQuery [ #classSize 'Data.GI.Base.Attributes.:=' value ] @ -} setTypeQueryClassSize :: MonadIO m => TypeQuery -> Word32 -> m () setTypeQueryClassSize s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 16) (val :: Word32) #if ENABLE_OVERLOADING data TypeQueryClassSizeFieldInfo instance AttrInfo TypeQueryClassSizeFieldInfo where type AttrAllowedOps TypeQueryClassSizeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint TypeQueryClassSizeFieldInfo = (~) Word32 type AttrBaseTypeConstraint TypeQueryClassSizeFieldInfo = (~) TypeQuery type AttrGetType TypeQueryClassSizeFieldInfo = Word32 type AttrLabel TypeQueryClassSizeFieldInfo = "class_size" type AttrOrigin TypeQueryClassSizeFieldInfo = TypeQuery attrGet _ = getTypeQueryClassSize attrSet _ = setTypeQueryClassSize attrConstruct = undefined attrClear _ = undefined typeQuery_classSize :: AttrLabelProxy "classSize" typeQuery_classSize = AttrLabelProxy #endif {- | Get the value of the “@instance_size@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' typeQuery #instanceSize @ -} getTypeQueryInstanceSize :: MonadIO m => TypeQuery -> m Word32 getTypeQueryInstanceSize s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 20) :: IO Word32 return val {- | Set the value of the “@instance_size@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' typeQuery [ #instanceSize 'Data.GI.Base.Attributes.:=' value ] @ -} setTypeQueryInstanceSize :: MonadIO m => TypeQuery -> Word32 -> m () setTypeQueryInstanceSize s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 20) (val :: Word32) #if ENABLE_OVERLOADING data TypeQueryInstanceSizeFieldInfo instance AttrInfo TypeQueryInstanceSizeFieldInfo where type AttrAllowedOps TypeQueryInstanceSizeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint TypeQueryInstanceSizeFieldInfo = (~) Word32 type AttrBaseTypeConstraint TypeQueryInstanceSizeFieldInfo = (~) TypeQuery type AttrGetType TypeQueryInstanceSizeFieldInfo = Word32 type AttrLabel TypeQueryInstanceSizeFieldInfo = "instance_size" type AttrOrigin TypeQueryInstanceSizeFieldInfo = TypeQuery attrGet _ = getTypeQueryInstanceSize attrSet _ = setTypeQueryInstanceSize attrConstruct = undefined attrClear _ = undefined typeQuery_instanceSize :: AttrLabelProxy "instanceSize" typeQuery_instanceSize = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList TypeQuery type instance O.AttributeList TypeQuery = TypeQueryAttributeList type TypeQueryAttributeList = ('[ '("type", TypeQueryTypeFieldInfo), '("typeName", TypeQueryTypeNameFieldInfo), '("classSize", TypeQueryClassSizeFieldInfo), '("instanceSize", TypeQueryInstanceSizeFieldInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING type family ResolveTypeQueryMethod (t :: Symbol) (o :: *) :: * where ResolveTypeQueryMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveTypeQueryMethod t TypeQuery, O.MethodInfo info TypeQuery p) => OL.IsLabel t (TypeQuery -> 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