{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Element interface that allows setting of the TOC.
-- 
-- Elements that support some kind of chapters or editions (or tracks like in
-- the FLAC cue sheet) will implement this interface.
-- 
-- If you just want to retrieve the TOC in your application then all you
-- need to do is watch for TOC messages on your pipeline\'s bus (or you can
-- perform TOC query). This interface is only for setting TOC data, not for
-- extracting it. To set TOC from the application, find proper tocsetter element
-- and set TOC using 'GI.Gst.Interfaces.TocSetter.tocSetterSetToc'.
-- 
-- Elements implementing the t'GI.Gst.Interfaces.TocSetter.TocSetter' interface can extend existing TOC
-- by getting extend UID for that (you can use 'GI.Gst.Structs.Toc.tocFindEntry' to retrieve it)
-- with any TOC entries received from downstream.

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.Gst.Interfaces.TocSetter
    ( 

-- * Exported types
    TocSetter(..)                           ,
    noTocSetter                             ,
    IsTocSetter                             ,
    toTocSetter                             ,


 -- * Methods
-- ** Overloaded methods #method:Overloaded methods#

#if defined(ENABLE_OVERLOADING)
    ResolveTocSetterMethod                  ,
#endif


-- ** getToc #method:getToc#

#if defined(ENABLE_OVERLOADING)
    TocSetterGetTocMethodInfo               ,
#endif
    tocSetterGetToc                         ,


-- ** reset #method:reset#

#if defined(ENABLE_OVERLOADING)
    TocSetterResetMethodInfo                ,
#endif
    tocSetterReset                          ,


-- ** setToc #method:setToc#

#if defined(ENABLE_OVERLOADING)
    TocSetterSetTocMethodInfo               ,
#endif
    tocSetterSetToc                         ,




    ) 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.GI.Base.Signals as B.Signals
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.Element as Gst.Element
import {-# SOURCE #-} qualified GI.Gst.Objects.Object as Gst.Object
import {-# SOURCE #-} qualified GI.Gst.Structs.Toc as Gst.Toc

-- interface TocSetter 
-- | Memory-managed wrapper type.
newtype TocSetter = TocSetter (ManagedPtr TocSetter)
    deriving (TocSetter -> TocSetter -> Bool
(TocSetter -> TocSetter -> Bool)
-> (TocSetter -> TocSetter -> Bool) -> Eq TocSetter
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TocSetter -> TocSetter -> Bool
$c/= :: TocSetter -> TocSetter -> Bool
== :: TocSetter -> TocSetter -> Bool
$c== :: TocSetter -> TocSetter -> Bool
Eq)
-- | A convenience alias for `Nothing` :: `Maybe` `TocSetter`.
noTocSetter :: Maybe TocSetter
noTocSetter :: Maybe TocSetter
noTocSetter = Maybe TocSetter
forall a. Maybe a
Nothing

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList TocSetter = TocSetterSignalList
type TocSetterSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])

#endif

foreign import ccall "gst_toc_setter_get_type"
    c_gst_toc_setter_get_type :: IO GType

instance GObject TocSetter where
    gobjectType :: IO GType
gobjectType = IO GType
c_gst_toc_setter_get_type
    

-- | Convert 'TocSetter' to and from 'Data.GI.Base.GValue.GValue' with 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue TocSetter where
    toGValue :: TocSetter -> IO GValue
toGValue o :: TocSetter
o = do
        GType
gtype <- IO GType
c_gst_toc_setter_get_type
        TocSetter -> (Ptr TocSetter -> IO GValue) -> IO GValue
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr TocSetter
o (GType
-> (GValue -> Ptr TocSetter -> IO ()) -> Ptr TocSetter -> IO GValue
forall a. GType -> (GValue -> a -> IO ()) -> a -> IO GValue
B.GValue.buildGValue GType
gtype GValue -> Ptr TocSetter -> IO ()
forall a. GObject a => GValue -> Ptr a -> IO ()
B.GValue.set_object)
        
    fromGValue :: GValue -> IO TocSetter
fromGValue gv :: GValue
gv = do
        Ptr TocSetter
ptr <- GValue -> IO (Ptr TocSetter)
forall b. GObject b => GValue -> IO (Ptr b)
B.GValue.get_object GValue
gv :: IO (Ptr TocSetter)
        (ManagedPtr TocSetter -> TocSetter)
-> Ptr TocSetter -> IO TocSetter
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr TocSetter -> TocSetter
TocSetter Ptr TocSetter
ptr
        
    

-- | Type class for types which can be safely cast to `TocSetter`, for instance with `toTocSetter`.
class (GObject o, O.IsDescendantOf TocSetter o) => IsTocSetter o
instance (GObject o, O.IsDescendantOf TocSetter o) => IsTocSetter o

instance O.HasParentTypes TocSetter
type instance O.ParentTypes TocSetter = '[Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]

-- | Cast to `TocSetter`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toTocSetter :: (MonadIO m, IsTocSetter o) => o -> m TocSetter
toTocSetter :: o -> m TocSetter
toTocSetter = IO TocSetter -> m TocSetter
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO TocSetter -> m TocSetter)
-> (o -> IO TocSetter) -> o -> m TocSetter
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr TocSetter -> TocSetter) -> o -> IO TocSetter
forall o o'.
(HasCallStack, GObject o, GObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
unsafeCastTo ManagedPtr TocSetter -> TocSetter
TocSetter

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList TocSetter
type instance O.AttributeList TocSetter = TocSetterAttributeList
type TocSetterAttributeList = ('[ '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveTocSetterMethod (t :: Symbol) (o :: *) :: * where
    ResolveTocSetterMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
    ResolveTocSetterMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
    ResolveTocSetterMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
    ResolveTocSetterMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
    ResolveTocSetterMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
    ResolveTocSetterMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveTocSetterMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveTocSetterMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
    ResolveTocSetterMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
    ResolveTocSetterMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
    ResolveTocSetterMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
    ResolveTocSetterMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
    ResolveTocSetterMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveTocSetterMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
    ResolveTocSetterMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
    ResolveTocSetterMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
    ResolveTocSetterMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveTocSetterMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveTocSetterMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
    ResolveTocSetterMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
    ResolveTocSetterMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
    ResolveTocSetterMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
    ResolveTocSetterMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveTocSetterMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
    ResolveTocSetterMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
    ResolveTocSetterMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
    ResolveTocSetterMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
    ResolveTocSetterMethod "link" o = Gst.Element.ElementLinkMethodInfo
    ResolveTocSetterMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
    ResolveTocSetterMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
    ResolveTocSetterMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
    ResolveTocSetterMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
    ResolveTocSetterMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
    ResolveTocSetterMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
    ResolveTocSetterMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
    ResolveTocSetterMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
    ResolveTocSetterMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveTocSetterMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveTocSetterMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
    ResolveTocSetterMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
    ResolveTocSetterMethod "query" o = Gst.Element.ElementQueryMethodInfo
    ResolveTocSetterMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
    ResolveTocSetterMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
    ResolveTocSetterMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
    ResolveTocSetterMethod "ref" o = Gst.Object.ObjectRefMethodInfo
    ResolveTocSetterMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveTocSetterMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
    ResolveTocSetterMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
    ResolveTocSetterMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
    ResolveTocSetterMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
    ResolveTocSetterMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
    ResolveTocSetterMethod "reset" o = TocSetterResetMethodInfo
    ResolveTocSetterMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveTocSetterMethod "seek" o = Gst.Element.ElementSeekMethodInfo
    ResolveTocSetterMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
    ResolveTocSetterMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
    ResolveTocSetterMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveTocSetterMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveTocSetterMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
    ResolveTocSetterMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
    ResolveTocSetterMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
    ResolveTocSetterMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveTocSetterMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
    ResolveTocSetterMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
    ResolveTocSetterMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
    ResolveTocSetterMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
    ResolveTocSetterMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveTocSetterMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
    ResolveTocSetterMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
    ResolveTocSetterMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
    ResolveTocSetterMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
    ResolveTocSetterMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
    ResolveTocSetterMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
    ResolveTocSetterMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
    ResolveTocSetterMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
    ResolveTocSetterMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
    ResolveTocSetterMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
    ResolveTocSetterMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveTocSetterMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
    ResolveTocSetterMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
    ResolveTocSetterMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
    ResolveTocSetterMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
    ResolveTocSetterMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
    ResolveTocSetterMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
    ResolveTocSetterMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
    ResolveTocSetterMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
    ResolveTocSetterMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveTocSetterMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveTocSetterMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
    ResolveTocSetterMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
    ResolveTocSetterMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
    ResolveTocSetterMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
    ResolveTocSetterMethod "getToc" o = TocSetterGetTocMethodInfo
    ResolveTocSetterMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
    ResolveTocSetterMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
    ResolveTocSetterMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
    ResolveTocSetterMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
    ResolveTocSetterMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
    ResolveTocSetterMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
    ResolveTocSetterMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
    ResolveTocSetterMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
    ResolveTocSetterMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveTocSetterMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveTocSetterMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
    ResolveTocSetterMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
    ResolveTocSetterMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
    ResolveTocSetterMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveTocSetterMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
    ResolveTocSetterMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
    ResolveTocSetterMethod "setToc" o = TocSetterSetTocMethodInfo
    ResolveTocSetterMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveTocSetterMethod t TocSetter, O.MethodInfo info TocSetter p) => OL.IsLabel t (TocSetter -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#endif

-- method TocSetter::get_toc
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "setter"
--           , argType =
--               TInterface Name { namespace = "Gst" , name = "TocSetter" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GstTocSetter." , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TInterface Name { namespace = "Gst" , name = "Toc" })
-- throws : False
-- Skip return : False

foreign import ccall "gst_toc_setter_get_toc" gst_toc_setter_get_toc :: 
    Ptr TocSetter ->                        -- setter : TInterface (Name {namespace = "Gst", name = "TocSetter"})
    IO (Ptr Gst.Toc.Toc)

-- | Return current TOC the setter uses. The TOC should not be
-- modified without making it writable first.
tocSetterGetToc ::
    (B.CallStack.HasCallStack, MonadIO m, IsTocSetter a) =>
    a
    -- ^ /@setter@/: a t'GI.Gst.Interfaces.TocSetter.TocSetter'.
    -> m (Maybe Gst.Toc.Toc)
    -- ^ __Returns:__ TOC set, or 'P.Nothing'. Unref with
    --     @/gst_toc_unref()/@ when no longer needed
tocSetterGetToc :: a -> m (Maybe Toc)
tocSetterGetToc setter :: a
setter = IO (Maybe Toc) -> m (Maybe Toc)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe Toc) -> m (Maybe Toc))
-> IO (Maybe Toc) -> m (Maybe Toc)
forall a b. (a -> b) -> a -> b
$ do
    Ptr TocSetter
setter' <- a -> IO (Ptr TocSetter)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
setter
    Ptr Toc
result <- Ptr TocSetter -> IO (Ptr Toc)
gst_toc_setter_get_toc Ptr TocSetter
setter'
    Maybe Toc
maybeResult <- Ptr Toc -> (Ptr Toc -> IO Toc) -> IO (Maybe Toc)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull Ptr Toc
result ((Ptr Toc -> IO Toc) -> IO (Maybe Toc))
-> (Ptr Toc -> IO Toc) -> IO (Maybe Toc)
forall a b. (a -> b) -> a -> b
$ \result' :: Ptr Toc
result' -> do
        Toc
result'' <- ((ManagedPtr Toc -> Toc) -> Ptr Toc -> IO Toc
forall a.
(HasCallStack, BoxedObject a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr Toc -> Toc
Gst.Toc.Toc) Ptr Toc
result'
        Toc -> IO Toc
forall (m :: * -> *) a. Monad m => a -> m a
return Toc
result''
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
setter
    Maybe Toc -> IO (Maybe Toc)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Toc
maybeResult

#if defined(ENABLE_OVERLOADING)
data TocSetterGetTocMethodInfo
instance (signature ~ (m (Maybe Gst.Toc.Toc)), MonadIO m, IsTocSetter a) => O.MethodInfo TocSetterGetTocMethodInfo a signature where
    overloadedMethod = tocSetterGetToc

#endif

-- method TocSetter::reset
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "setter"
--           , argType =
--               TInterface Name { namespace = "Gst" , name = "TocSetter" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GstTocSetter." , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_toc_setter_reset" gst_toc_setter_reset :: 
    Ptr TocSetter ->                        -- setter : TInterface (Name {namespace = "Gst", name = "TocSetter"})
    IO ()

-- | Reset the internal TOC. Elements should call this from within the
-- state-change handler.
tocSetterReset ::
    (B.CallStack.HasCallStack, MonadIO m, IsTocSetter a) =>
    a
    -- ^ /@setter@/: a t'GI.Gst.Interfaces.TocSetter.TocSetter'.
    -> m ()
tocSetterReset :: a -> m ()
tocSetterReset setter :: a
setter = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr TocSetter
setter' <- a -> IO (Ptr TocSetter)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
setter
    Ptr TocSetter -> IO ()
gst_toc_setter_reset Ptr TocSetter
setter'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
setter
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data TocSetterResetMethodInfo
instance (signature ~ (m ()), MonadIO m, IsTocSetter a) => O.MethodInfo TocSetterResetMethodInfo a signature where
    overloadedMethod = tocSetterReset

#endif

-- method TocSetter::set_toc
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "setter"
--           , argType =
--               TInterface Name { namespace = "Gst" , name = "TocSetter" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GstTocSetter." , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "toc"
--           , argType = TInterface Name { namespace = "Gst" , name = "Toc" }
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GstToc to set." , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_toc_setter_set_toc" gst_toc_setter_set_toc :: 
    Ptr TocSetter ->                        -- setter : TInterface (Name {namespace = "Gst", name = "TocSetter"})
    Ptr Gst.Toc.Toc ->                      -- toc : TInterface (Name {namespace = "Gst", name = "Toc"})
    IO ()

-- | Set the given TOC on the setter. Previously set TOC will be
-- unreffed before setting a new one.
tocSetterSetToc ::
    (B.CallStack.HasCallStack, MonadIO m, IsTocSetter a) =>
    a
    -- ^ /@setter@/: a t'GI.Gst.Interfaces.TocSetter.TocSetter'.
    -> Maybe (Gst.Toc.Toc)
    -- ^ /@toc@/: a t'GI.Gst.Structs.Toc.Toc' to set.
    -> m ()
tocSetterSetToc :: a -> Maybe Toc -> m ()
tocSetterSetToc setter :: a
setter toc :: Maybe Toc
toc = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr TocSetter
setter' <- a -> IO (Ptr TocSetter)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
setter
    Ptr Toc
maybeToc <- case Maybe Toc
toc of
        Nothing -> Ptr Toc -> IO (Ptr Toc)
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Toc
forall a. Ptr a
nullPtr
        Just jToc :: Toc
jToc -> do
            Ptr Toc
jToc' <- Toc -> IO (Ptr Toc)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Toc
jToc
            Ptr Toc -> IO (Ptr Toc)
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Toc
jToc'
    Ptr TocSetter -> Ptr Toc -> IO ()
gst_toc_setter_set_toc Ptr TocSetter
setter' Ptr Toc
maybeToc
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
setter
    Maybe Toc -> (Toc -> IO ()) -> IO ()
forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
whenJust Maybe Toc
toc Toc -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data TocSetterSetTocMethodInfo
instance (signature ~ (Maybe (Gst.Toc.Toc) -> m ()), MonadIO m, IsTocSetter a) => O.MethodInfo TocSetterSetTocMethodInfo a signature where
    overloadedMethod = tocSetterSetToc

#endif