{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) 'GI.Gst.Objects.DynamicTypeFactory.DynamicTypeFactory' is used to represent a type that can be automatically loaded the first time it is used. For example, a non-standard type for use in caps fields. In general, applications and plugins don\'t need to use the factory beyond registering the type in a plugin init function. Once that is done, the type is stored in the registry, and ready as soon as the registry is loaded. == Registering a type for dynamic loading === /C code/ > > >static gboolean >plugin_init (GstPlugin * plugin) >{ > return gst_dynamic_type_register (plugin, GST_TYPE_CUSTOM_CAPS_FIELD); >} -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gst.Objects.DynamicTypeFactory ( -- * Exported types DynamicTypeFactory(..) , IsDynamicTypeFactory , toDynamicTypeFactory , noDynamicTypeFactory , -- * Methods -- ** load #method:load# dynamicTypeFactoryLoad , ) 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 import qualified GI.GObject.Objects.Object as GObject.Object import {-# SOURCE #-} qualified GI.Gst.Objects.Object as Gst.Object import {-# SOURCE #-} qualified GI.Gst.Objects.PluginFeature as Gst.PluginFeature -- | Memory-managed wrapper type. newtype DynamicTypeFactory = DynamicTypeFactory (ManagedPtr DynamicTypeFactory) foreign import ccall "gst_dynamic_type_factory_get_type" c_gst_dynamic_type_factory_get_type :: IO GType instance GObject DynamicTypeFactory where gobjectType = c_gst_dynamic_type_factory_get_type -- | Type class for types which can be safely cast to `DynamicTypeFactory`, for instance with `toDynamicTypeFactory`. class (GObject o, O.IsDescendantOf DynamicTypeFactory o) => IsDynamicTypeFactory o instance (GObject o, O.IsDescendantOf DynamicTypeFactory o) => IsDynamicTypeFactory o instance O.HasParentTypes DynamicTypeFactory type instance O.ParentTypes DynamicTypeFactory = '[Gst.PluginFeature.PluginFeature, Gst.Object.Object, GObject.Object.Object] -- | Cast to `DynamicTypeFactory`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`. toDynamicTypeFactory :: (MonadIO m, IsDynamicTypeFactory o) => o -> m DynamicTypeFactory toDynamicTypeFactory = liftIO . unsafeCastTo DynamicTypeFactory -- | A convenience alias for `Nothing` :: `Maybe` `DynamicTypeFactory`. noDynamicTypeFactory :: Maybe DynamicTypeFactory noDynamicTypeFactory = Nothing #if ENABLE_OVERLOADING type family ResolveDynamicTypeFactoryMethod (t :: Symbol) (o :: *) :: * where ResolveDynamicTypeFactoryMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo ResolveDynamicTypeFactoryMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolveDynamicTypeFactoryMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolveDynamicTypeFactoryMethod "checkVersion" o = Gst.PluginFeature.PluginFeatureCheckVersionMethodInfo ResolveDynamicTypeFactoryMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo ResolveDynamicTypeFactoryMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolveDynamicTypeFactoryMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolveDynamicTypeFactoryMethod "getv" o = GObject.Object.ObjectGetvMethodInfo ResolveDynamicTypeFactoryMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo ResolveDynamicTypeFactoryMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo ResolveDynamicTypeFactoryMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo ResolveDynamicTypeFactoryMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo ResolveDynamicTypeFactoryMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolveDynamicTypeFactoryMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolveDynamicTypeFactoryMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolveDynamicTypeFactoryMethod "ref" o = Gst.Object.ObjectRefMethodInfo ResolveDynamicTypeFactoryMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolveDynamicTypeFactoryMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo ResolveDynamicTypeFactoryMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolveDynamicTypeFactoryMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolveDynamicTypeFactoryMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolveDynamicTypeFactoryMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo ResolveDynamicTypeFactoryMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo ResolveDynamicTypeFactoryMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolveDynamicTypeFactoryMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo ResolveDynamicTypeFactoryMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo ResolveDynamicTypeFactoryMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolveDynamicTypeFactoryMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo ResolveDynamicTypeFactoryMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo ResolveDynamicTypeFactoryMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolveDynamicTypeFactoryMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo ResolveDynamicTypeFactoryMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo ResolveDynamicTypeFactoryMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo ResolveDynamicTypeFactoryMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo ResolveDynamicTypeFactoryMethod "getPlugin" o = Gst.PluginFeature.PluginFeatureGetPluginMethodInfo ResolveDynamicTypeFactoryMethod "getPluginName" o = Gst.PluginFeature.PluginFeatureGetPluginNameMethodInfo ResolveDynamicTypeFactoryMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolveDynamicTypeFactoryMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolveDynamicTypeFactoryMethod "getRank" o = Gst.PluginFeature.PluginFeatureGetRankMethodInfo ResolveDynamicTypeFactoryMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo ResolveDynamicTypeFactoryMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo ResolveDynamicTypeFactoryMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo ResolveDynamicTypeFactoryMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo ResolveDynamicTypeFactoryMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolveDynamicTypeFactoryMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo ResolveDynamicTypeFactoryMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo ResolveDynamicTypeFactoryMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolveDynamicTypeFactoryMethod "setRank" o = Gst.PluginFeature.PluginFeatureSetRankMethodInfo ResolveDynamicTypeFactoryMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveDynamicTypeFactoryMethod t DynamicTypeFactory, O.MethodInfo info DynamicTypeFactory p) => OL.IsLabel t (DynamicTypeFactory -> 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 #if ENABLE_OVERLOADING instance O.HasAttributeList DynamicTypeFactory type instance O.AttributeList DynamicTypeFactory = DynamicTypeFactoryAttributeList type DynamicTypeFactoryAttributeList = ('[ '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING #endif #if ENABLE_OVERLOADING type instance O.SignalList DynamicTypeFactory = DynamicTypeFactorySignalList type DynamicTypeFactorySignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)]) #endif -- method DynamicTypeFactory::load -- method type : MemberFunction -- Args : [Arg {argCName = "factoryname", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TGType) -- throws : False -- Skip return : False foreign import ccall "gst_dynamic_type_factory_load" gst_dynamic_type_factory_load :: CString -> -- factoryname : TBasicType TUTF8 IO CGType {- | /No description available in the introspection data./ -} dynamicTypeFactoryLoad :: (B.CallStack.HasCallStack, MonadIO m) => T.Text -> m GType dynamicTypeFactoryLoad factoryname = liftIO $ do factoryname' <- textToCString factoryname result <- gst_dynamic_type_factory_load factoryname' let result' = GType result freeMem factoryname' return result' #if ENABLE_OVERLOADING #endif