{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Provides a base class for CD digital audio (CDDA) sources, which handles
-- things like seeking, querying, discid calculation, tags, and buffer
-- timestamping.
-- 
-- == Using GstAudioCdSrc-based elements in applications
-- 
-- GstAudioCdSrc registers two t'GI.Gst.Enums.Format's of its own, namely
-- the \"track\" format and the \"sector\" format. Applications will usually
-- only find the \"track\" format interesting. You can retrieve that t'GI.Gst.Enums.Format'
-- for use in seek events or queries with gst_format_get_by_nick(\"track\").
-- 
-- In order to query the number of tracks, for example, an application would
-- set the CDDA source element to READY or PAUSED state and then query the
-- the number of tracks via 'GI.Gst.Objects.Element.elementQueryDuration' using the track
-- format acquired above. Applications can query the currently playing track
-- in the same way.
-- 
-- Alternatively, applications may retrieve the currently playing track and
-- the total number of tracks from the taglist that will posted on the bus
-- whenever the CD is opened or the currently playing track changes. The
-- taglist will contain GST_TAG_TRACK_NUMBER and GST_TAG_TRACK_COUNT tags.
-- 
-- Applications playing back CD audio using playbin and cdda:\/\/n URIs should
-- issue a seek command in track format to change between tracks, rather than
-- setting a new cdda:\/\/n+1 URI on playbin (as setting a new URI on playbin
-- involves closing and re-opening the CD device, which is much much slower).
-- 
-- == Tags and meta-information
-- 
-- CDDA sources will automatically emit a number of tags, details about which
-- can be found in the libgsttag documentation. Those tags are:
-- @/GST_TAG_CDDA_CDDB_DISCID/@, @/GST_TAG_CDDA_CDDB_DISCID_FULL/@,
-- @/GST_TAG_CDDA_MUSICBRAINZ_DISCID/@, @/GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL/@,
-- among others.
-- 
-- == Tracks and Table of Contents (TOC)
-- 
-- Applications will be informed of the available tracks via a TOC message
-- on the pipeline\'s t'GI.Gst.Objects.Bus.Bus'. The t'GI.Gst.Structs.Toc.Toc' will contain a t'GI.Gst.Structs.TocEntry.TocEntry' for
-- each track, with information about each track. The duration for each
-- track can be retrieved via the 'GI.Gst.Constants.TAG_DURATION' tag from each entry\'s
-- tag list, or calculated via 'GI.Gst.Structs.TocEntry.tocEntryGetStartStopTimes'.
-- The track entries in the TOC will be sorted by track number.

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

module GI.GstAudio.Objects.AudioCdSrc
    ( 

-- * Exported types
    AudioCdSrc(..)                          ,
    IsAudioCdSrc                            ,
    toAudioCdSrc                            ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [abortState]("GI.Gst.Objects.Element#g:method:abortState"), [addControlBinding]("GI.Gst.Objects.Object#g:method:addControlBinding"), [addPad]("GI.Gst.Objects.Element#g:method:addPad"), [addPropertyDeepNotifyWatch]("GI.Gst.Objects.Element#g:method:addPropertyDeepNotifyWatch"), [addPropertyNotifyWatch]("GI.Gst.Objects.Element#g:method:addPropertyNotifyWatch"), [addTrack]("GI.GstAudio.Objects.AudioCdSrc#g:method:addTrack"), [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [callAsync]("GI.Gst.Objects.Element#g:method:callAsync"), [changeState]("GI.Gst.Objects.Element#g:method:changeState"), [continueState]("GI.Gst.Objects.Element#g:method:continueState"), [createAllPads]("GI.Gst.Objects.Element#g:method:createAllPads"), [defaultError]("GI.Gst.Objects.Object#g:method:defaultError"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [foreachPad]("GI.Gst.Objects.Element#g:method:foreachPad"), [foreachSinkPad]("GI.Gst.Objects.Element#g:method:foreachSinkPad"), [foreachSrcPad]("GI.Gst.Objects.Element#g:method:foreachSrcPad"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [hasActiveControlBindings]("GI.Gst.Objects.Object#g:method:hasActiveControlBindings"), [hasAncestor]("GI.Gst.Objects.Object#g:method:hasAncestor"), [hasAsAncestor]("GI.Gst.Objects.Object#g:method:hasAsAncestor"), [hasAsParent]("GI.Gst.Objects.Object#g:method:hasAsParent"), [isAsync]("GI.GstBase.Objects.BaseSrc#g:method:isAsync"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [isLive]("GI.GstBase.Objects.BaseSrc#g:method:isLive"), [isLockedState]("GI.Gst.Objects.Element#g:method:isLockedState"), [iteratePads]("GI.Gst.Objects.Element#g:method:iteratePads"), [iterateSinkPads]("GI.Gst.Objects.Element#g:method:iterateSinkPads"), [iterateSrcPads]("GI.Gst.Objects.Element#g:method:iterateSrcPads"), [link]("GI.Gst.Objects.Element#g:method:link"), [linkFiltered]("GI.Gst.Objects.Element#g:method:linkFiltered"), [linkPads]("GI.Gst.Objects.Element#g:method:linkPads"), [linkPadsFiltered]("GI.Gst.Objects.Element#g:method:linkPadsFiltered"), [linkPadsFull]("GI.Gst.Objects.Element#g:method:linkPadsFull"), [lostState]("GI.Gst.Objects.Element#g:method:lostState"), [messageFull]("GI.Gst.Objects.Element#g:method:messageFull"), [messageFullWithDetails]("GI.Gst.Objects.Element#g:method:messageFullWithDetails"), [negotiate]("GI.GstBase.Objects.BaseSrc#g:method:negotiate"), [newSeamlessSegment]("GI.GstBase.Objects.BaseSrc#g:method:newSeamlessSegment"), [newSegment]("GI.GstBase.Objects.BaseSrc#g:method:newSegment"), [noMorePads]("GI.Gst.Objects.Element#g:method:noMorePads"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [postMessage]("GI.Gst.Objects.Element#g:method:postMessage"), [provideClock]("GI.Gst.Objects.Element#g:method:provideClock"), [query]("GI.Gst.Objects.Element#g:method:query"), [queryConvert]("GI.Gst.Objects.Element#g:method:queryConvert"), [queryDuration]("GI.Gst.Objects.Element#g:method:queryDuration"), [queryLatency]("GI.GstBase.Objects.BaseSrc#g:method:queryLatency"), [queryPosition]("GI.Gst.Objects.Element#g:method:queryPosition"), [ref]("GI.Gst.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [releaseRequestPad]("GI.Gst.Objects.Element#g:method:releaseRequestPad"), [removeControlBinding]("GI.Gst.Objects.Object#g:method:removeControlBinding"), [removePad]("GI.Gst.Objects.Element#g:method:removePad"), [removePropertyNotifyWatch]("GI.Gst.Objects.Element#g:method:removePropertyNotifyWatch"), [requestPad]("GI.Gst.Objects.Element#g:method:requestPad"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [seek]("GI.Gst.Objects.Element#g:method:seek"), [seekSimple]("GI.Gst.Objects.Element#g:method:seekSimple"), [sendEvent]("GI.Gst.Objects.Element#g:method:sendEvent"), [startComplete]("GI.GstBase.Objects.BaseSrc#g:method:startComplete"), [startWait]("GI.GstBase.Objects.BaseSrc#g:method:startWait"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [submitBufferList]("GI.GstBase.Objects.BaseSrc#g:method:submitBufferList"), [suggestNextSync]("GI.Gst.Objects.Object#g:method:suggestNextSync"), [syncStateWithParent]("GI.Gst.Objects.Element#g:method:syncStateWithParent"), [syncValues]("GI.Gst.Objects.Object#g:method:syncValues"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unlink]("GI.Gst.Objects.Element#g:method:unlink"), [unlinkPads]("GI.Gst.Objects.Element#g:method:unlinkPads"), [unparent]("GI.Gst.Objects.Object#g:method:unparent"), [unref]("GI.Gst.Objects.Object#g:method:unref"), [waitPlaying]("GI.GstBase.Objects.BaseSrc#g:method:waitPlaying"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getAllocator]("GI.GstBase.Objects.BaseSrc#g:method:getAllocator"), [getBaseTime]("GI.Gst.Objects.Element#g:method:getBaseTime"), [getBlocksize]("GI.GstBase.Objects.BaseSrc#g:method:getBlocksize"), [getBufferPool]("GI.GstBase.Objects.BaseSrc#g:method:getBufferPool"), [getBus]("GI.Gst.Objects.Element#g:method:getBus"), [getClock]("GI.Gst.Objects.Element#g:method:getClock"), [getCompatiblePad]("GI.Gst.Objects.Element#g:method:getCompatiblePad"), [getCompatiblePadTemplate]("GI.Gst.Objects.Element#g:method:getCompatiblePadTemplate"), [getContext]("GI.Gst.Objects.Element#g:method:getContext"), [getContextUnlocked]("GI.Gst.Objects.Element#g:method:getContextUnlocked"), [getContexts]("GI.Gst.Objects.Element#g:method:getContexts"), [getControlBinding]("GI.Gst.Objects.Object#g:method:getControlBinding"), [getControlRate]("GI.Gst.Objects.Object#g:method:getControlRate"), [getCurrentClockTime]("GI.Gst.Objects.Element#g:method:getCurrentClockTime"), [getCurrentRunningTime]("GI.Gst.Objects.Element#g:method:getCurrentRunningTime"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getDoTimestamp]("GI.GstBase.Objects.BaseSrc#g:method:getDoTimestamp"), [getFactory]("GI.Gst.Objects.Element#g:method:getFactory"), [getGValueArray]("GI.Gst.Objects.Object#g:method:getGValueArray"), [getMetadata]("GI.Gst.Objects.Element#g:method:getMetadata"), [getName]("GI.Gst.Objects.Object#g:method:getName"), [getPadTemplate]("GI.Gst.Objects.Element#g:method:getPadTemplate"), [getPadTemplateList]("GI.Gst.Objects.Element#g:method:getPadTemplateList"), [getParent]("GI.Gst.Objects.Object#g:method:getParent"), [getPathString]("GI.Gst.Objects.Object#g:method:getPathString"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getProtocols]("GI.Gst.Interfaces.URIHandler#g:method:getProtocols"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getRequestPad]("GI.Gst.Objects.Element#g:method:getRequestPad"), [getStartTime]("GI.Gst.Objects.Element#g:method:getStartTime"), [getState]("GI.Gst.Objects.Element#g:method:getState"), [getStaticPad]("GI.Gst.Objects.Element#g:method:getStaticPad"), [getUri]("GI.Gst.Interfaces.URIHandler#g:method:getUri"), [getUriType]("GI.Gst.Interfaces.URIHandler#g:method:getUriType"), [getValue]("GI.Gst.Objects.Object#g:method:getValue").
-- 
-- ==== Setters
-- [setAsync]("GI.GstBase.Objects.BaseSrc#g:method:setAsync"), [setAutomaticEos]("GI.GstBase.Objects.BaseSrc#g:method:setAutomaticEos"), [setBaseTime]("GI.Gst.Objects.Element#g:method:setBaseTime"), [setBlocksize]("GI.GstBase.Objects.BaseSrc#g:method:setBlocksize"), [setBus]("GI.Gst.Objects.Element#g:method:setBus"), [setCaps]("GI.GstBase.Objects.BaseSrc#g:method:setCaps"), [setClock]("GI.Gst.Objects.Element#g:method:setClock"), [setContext]("GI.Gst.Objects.Element#g:method:setContext"), [setControlBindingDisabled]("GI.Gst.Objects.Object#g:method:setControlBindingDisabled"), [setControlBindingsDisabled]("GI.Gst.Objects.Object#g:method:setControlBindingsDisabled"), [setControlRate]("GI.Gst.Objects.Object#g:method:setControlRate"), [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setDoTimestamp]("GI.GstBase.Objects.BaseSrc#g:method:setDoTimestamp"), [setDynamicSize]("GI.GstBase.Objects.BaseSrc#g:method:setDynamicSize"), [setFormat]("GI.GstBase.Objects.BaseSrc#g:method:setFormat"), [setLive]("GI.GstBase.Objects.BaseSrc#g:method:setLive"), [setLockedState]("GI.Gst.Objects.Element#g:method:setLockedState"), [setName]("GI.Gst.Objects.Object#g:method:setName"), [setParent]("GI.Gst.Objects.Object#g:method:setParent"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty"), [setStartTime]("GI.Gst.Objects.Element#g:method:setStartTime"), [setState]("GI.Gst.Objects.Element#g:method:setState"), [setUri]("GI.Gst.Interfaces.URIHandler#g:method:setUri").

#if defined(ENABLE_OVERLOADING)
    ResolveAudioCdSrcMethod                 ,
#endif

-- ** addTrack #method:addTrack#

#if defined(ENABLE_OVERLOADING)
    AudioCdSrcAddTrackMethodInfo            ,
#endif
    audioCdSrcAddTrack                      ,




 -- * Properties


-- ** device #attr:device#
-- | /No description available in the introspection data./

#if defined(ENABLE_OVERLOADING)
    AudioCdSrcDevicePropertyInfo            ,
#endif
#if defined(ENABLE_OVERLOADING)
    audioCdSrcDevice                        ,
#endif
    clearAudioCdSrcDevice                   ,
    constructAudioCdSrcDevice               ,
    getAudioCdSrcDevice                     ,
    setAudioCdSrcDevice                     ,


-- ** mode #attr:mode#
-- | /No description available in the introspection data./

#if defined(ENABLE_OVERLOADING)
    AudioCdSrcModePropertyInfo              ,
#endif
#if defined(ENABLE_OVERLOADING)
    audioCdSrcMode                          ,
#endif
    constructAudioCdSrcMode                 ,
    getAudioCdSrcMode                       ,
    setAudioCdSrcMode                       ,


-- ** track #attr:track#
-- | /No description available in the introspection data./

#if defined(ENABLE_OVERLOADING)
    AudioCdSrcTrackPropertyInfo             ,
#endif
#if defined(ENABLE_OVERLOADING)
    audioCdSrcTrack                         ,
#endif
    constructAudioCdSrcTrack                ,
    getAudioCdSrcTrack                      ,
    setAudioCdSrcTrack                      ,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
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 Control.Monad.IO.Class as MIO
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 GHC.Records as R

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gst.Interfaces.URIHandler as Gst.URIHandler
import qualified GI.Gst.Objects.Element as Gst.Element
import qualified GI.Gst.Objects.Object as Gst.Object
import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioCdSrcTrack as GstAudio.AudioCdSrcTrack
import qualified GI.GstBase.Objects.BaseSrc as GstBase.BaseSrc
import qualified GI.GstBase.Objects.PushSrc as GstBase.PushSrc

-- | Memory-managed wrapper type.
newtype AudioCdSrc = AudioCdSrc (SP.ManagedPtr AudioCdSrc)
    deriving (AudioCdSrc -> AudioCdSrc -> Bool
(AudioCdSrc -> AudioCdSrc -> Bool)
-> (AudioCdSrc -> AudioCdSrc -> Bool) -> Eq AudioCdSrc
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AudioCdSrc -> AudioCdSrc -> Bool
$c/= :: AudioCdSrc -> AudioCdSrc -> Bool
== :: AudioCdSrc -> AudioCdSrc -> Bool
$c== :: AudioCdSrc -> AudioCdSrc -> Bool
Eq)

instance SP.ManagedPtrNewtype AudioCdSrc where
    toManagedPtr :: AudioCdSrc -> ManagedPtr AudioCdSrc
toManagedPtr (AudioCdSrc ManagedPtr AudioCdSrc
p) = ManagedPtr AudioCdSrc
p

foreign import ccall "gst_audio_cd_src_get_type"
    c_gst_audio_cd_src_get_type :: IO B.Types.GType

instance B.Types.TypedObject AudioCdSrc where
    glibType :: IO GType
glibType = IO GType
c_gst_audio_cd_src_get_type

instance B.Types.GObject AudioCdSrc

-- | Type class for types which can be safely cast to `AudioCdSrc`, for instance with `toAudioCdSrc`.
class (SP.GObject o, O.IsDescendantOf AudioCdSrc o) => IsAudioCdSrc o
instance (SP.GObject o, O.IsDescendantOf AudioCdSrc o) => IsAudioCdSrc o

instance O.HasParentTypes AudioCdSrc
type instance O.ParentTypes AudioCdSrc = '[GstBase.PushSrc.PushSrc, GstBase.BaseSrc.BaseSrc, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object, Gst.URIHandler.URIHandler]

-- | Cast to `AudioCdSrc`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toAudioCdSrc :: (MIO.MonadIO m, IsAudioCdSrc o) => o -> m AudioCdSrc
toAudioCdSrc :: forall (m :: * -> *) o.
(MonadIO m, IsAudioCdSrc o) =>
o -> m AudioCdSrc
toAudioCdSrc = IO AudioCdSrc -> m AudioCdSrc
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO AudioCdSrc -> m AudioCdSrc)
-> (o -> IO AudioCdSrc) -> o -> m AudioCdSrc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr AudioCdSrc -> AudioCdSrc) -> o -> IO AudioCdSrc
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr AudioCdSrc -> AudioCdSrc
AudioCdSrc

-- | Convert 'AudioCdSrc' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe AudioCdSrc) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gst_audio_cd_src_get_type
    gvalueSet_ :: Ptr GValue -> Maybe AudioCdSrc -> IO ()
gvalueSet_ Ptr GValue
gv Maybe AudioCdSrc
P.Nothing = Ptr GValue -> Ptr AudioCdSrc -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr AudioCdSrc
forall a. Ptr a
FP.nullPtr :: FP.Ptr AudioCdSrc)
    gvalueSet_ Ptr GValue
gv (P.Just AudioCdSrc
obj) = AudioCdSrc -> (Ptr AudioCdSrc -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr AudioCdSrc
obj (Ptr GValue -> Ptr AudioCdSrc -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe AudioCdSrc)
gvalueGet_ Ptr GValue
gv = do
        Ptr AudioCdSrc
ptr <- Ptr GValue -> IO (Ptr AudioCdSrc)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr AudioCdSrc)
        if Ptr AudioCdSrc
ptr Ptr AudioCdSrc -> Ptr AudioCdSrc -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr AudioCdSrc
forall a. Ptr a
FP.nullPtr
        then AudioCdSrc -> Maybe AudioCdSrc
forall a. a -> Maybe a
P.Just (AudioCdSrc -> Maybe AudioCdSrc)
-> IO AudioCdSrc -> IO (Maybe AudioCdSrc)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr AudioCdSrc -> AudioCdSrc)
-> Ptr AudioCdSrc -> IO AudioCdSrc
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr AudioCdSrc -> AudioCdSrc
AudioCdSrc Ptr AudioCdSrc
ptr
        else Maybe AudioCdSrc -> IO (Maybe AudioCdSrc)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe AudioCdSrc
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveAudioCdSrcMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioCdSrcMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
    ResolveAudioCdSrcMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
    ResolveAudioCdSrcMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
    ResolveAudioCdSrcMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
    ResolveAudioCdSrcMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
    ResolveAudioCdSrcMethod "addTrack" o = AudioCdSrcAddTrackMethodInfo
    ResolveAudioCdSrcMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveAudioCdSrcMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveAudioCdSrcMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
    ResolveAudioCdSrcMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
    ResolveAudioCdSrcMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
    ResolveAudioCdSrcMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
    ResolveAudioCdSrcMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
    ResolveAudioCdSrcMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveAudioCdSrcMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
    ResolveAudioCdSrcMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
    ResolveAudioCdSrcMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
    ResolveAudioCdSrcMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveAudioCdSrcMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveAudioCdSrcMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
    ResolveAudioCdSrcMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
    ResolveAudioCdSrcMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
    ResolveAudioCdSrcMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
    ResolveAudioCdSrcMethod "isAsync" o = GstBase.BaseSrc.BaseSrcIsAsyncMethodInfo
    ResolveAudioCdSrcMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveAudioCdSrcMethod "isLive" o = GstBase.BaseSrc.BaseSrcIsLiveMethodInfo
    ResolveAudioCdSrcMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
    ResolveAudioCdSrcMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
    ResolveAudioCdSrcMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
    ResolveAudioCdSrcMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
    ResolveAudioCdSrcMethod "link" o = Gst.Element.ElementLinkMethodInfo
    ResolveAudioCdSrcMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
    ResolveAudioCdSrcMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
    ResolveAudioCdSrcMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
    ResolveAudioCdSrcMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
    ResolveAudioCdSrcMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
    ResolveAudioCdSrcMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
    ResolveAudioCdSrcMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
    ResolveAudioCdSrcMethod "negotiate" o = GstBase.BaseSrc.BaseSrcNegotiateMethodInfo
    ResolveAudioCdSrcMethod "newSeamlessSegment" o = GstBase.BaseSrc.BaseSrcNewSeamlessSegmentMethodInfo
    ResolveAudioCdSrcMethod "newSegment" o = GstBase.BaseSrc.BaseSrcNewSegmentMethodInfo
    ResolveAudioCdSrcMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
    ResolveAudioCdSrcMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveAudioCdSrcMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveAudioCdSrcMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
    ResolveAudioCdSrcMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
    ResolveAudioCdSrcMethod "query" o = Gst.Element.ElementQueryMethodInfo
    ResolveAudioCdSrcMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
    ResolveAudioCdSrcMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
    ResolveAudioCdSrcMethod "queryLatency" o = GstBase.BaseSrc.BaseSrcQueryLatencyMethodInfo
    ResolveAudioCdSrcMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
    ResolveAudioCdSrcMethod "ref" o = Gst.Object.ObjectRefMethodInfo
    ResolveAudioCdSrcMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveAudioCdSrcMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
    ResolveAudioCdSrcMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
    ResolveAudioCdSrcMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
    ResolveAudioCdSrcMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
    ResolveAudioCdSrcMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
    ResolveAudioCdSrcMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveAudioCdSrcMethod "seek" o = Gst.Element.ElementSeekMethodInfo
    ResolveAudioCdSrcMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
    ResolveAudioCdSrcMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
    ResolveAudioCdSrcMethod "startComplete" o = GstBase.BaseSrc.BaseSrcStartCompleteMethodInfo
    ResolveAudioCdSrcMethod "startWait" o = GstBase.BaseSrc.BaseSrcStartWaitMethodInfo
    ResolveAudioCdSrcMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveAudioCdSrcMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveAudioCdSrcMethod "submitBufferList" o = GstBase.BaseSrc.BaseSrcSubmitBufferListMethodInfo
    ResolveAudioCdSrcMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
    ResolveAudioCdSrcMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
    ResolveAudioCdSrcMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
    ResolveAudioCdSrcMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveAudioCdSrcMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
    ResolveAudioCdSrcMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
    ResolveAudioCdSrcMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
    ResolveAudioCdSrcMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
    ResolveAudioCdSrcMethod "waitPlaying" o = GstBase.BaseSrc.BaseSrcWaitPlayingMethodInfo
    ResolveAudioCdSrcMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveAudioCdSrcMethod "getAllocator" o = GstBase.BaseSrc.BaseSrcGetAllocatorMethodInfo
    ResolveAudioCdSrcMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
    ResolveAudioCdSrcMethod "getBlocksize" o = GstBase.BaseSrc.BaseSrcGetBlocksizeMethodInfo
    ResolveAudioCdSrcMethod "getBufferPool" o = GstBase.BaseSrc.BaseSrcGetBufferPoolMethodInfo
    ResolveAudioCdSrcMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
    ResolveAudioCdSrcMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
    ResolveAudioCdSrcMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
    ResolveAudioCdSrcMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
    ResolveAudioCdSrcMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
    ResolveAudioCdSrcMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
    ResolveAudioCdSrcMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
    ResolveAudioCdSrcMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
    ResolveAudioCdSrcMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
    ResolveAudioCdSrcMethod "getCurrentClockTime" o = Gst.Element.ElementGetCurrentClockTimeMethodInfo
    ResolveAudioCdSrcMethod "getCurrentRunningTime" o = Gst.Element.ElementGetCurrentRunningTimeMethodInfo
    ResolveAudioCdSrcMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveAudioCdSrcMethod "getDoTimestamp" o = GstBase.BaseSrc.BaseSrcGetDoTimestampMethodInfo
    ResolveAudioCdSrcMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
    ResolveAudioCdSrcMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
    ResolveAudioCdSrcMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
    ResolveAudioCdSrcMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
    ResolveAudioCdSrcMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
    ResolveAudioCdSrcMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
    ResolveAudioCdSrcMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
    ResolveAudioCdSrcMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
    ResolveAudioCdSrcMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveAudioCdSrcMethod "getProtocols" o = Gst.URIHandler.URIHandlerGetProtocolsMethodInfo
    ResolveAudioCdSrcMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveAudioCdSrcMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
    ResolveAudioCdSrcMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
    ResolveAudioCdSrcMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
    ResolveAudioCdSrcMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
    ResolveAudioCdSrcMethod "getUri" o = Gst.URIHandler.URIHandlerGetUriMethodInfo
    ResolveAudioCdSrcMethod "getUriType" o = Gst.URIHandler.URIHandlerGetUriTypeMethodInfo
    ResolveAudioCdSrcMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
    ResolveAudioCdSrcMethod "setAsync" o = GstBase.BaseSrc.BaseSrcSetAsyncMethodInfo
    ResolveAudioCdSrcMethod "setAutomaticEos" o = GstBase.BaseSrc.BaseSrcSetAutomaticEosMethodInfo
    ResolveAudioCdSrcMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
    ResolveAudioCdSrcMethod "setBlocksize" o = GstBase.BaseSrc.BaseSrcSetBlocksizeMethodInfo
    ResolveAudioCdSrcMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
    ResolveAudioCdSrcMethod "setCaps" o = GstBase.BaseSrc.BaseSrcSetCapsMethodInfo
    ResolveAudioCdSrcMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
    ResolveAudioCdSrcMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
    ResolveAudioCdSrcMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
    ResolveAudioCdSrcMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
    ResolveAudioCdSrcMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
    ResolveAudioCdSrcMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveAudioCdSrcMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveAudioCdSrcMethod "setDoTimestamp" o = GstBase.BaseSrc.BaseSrcSetDoTimestampMethodInfo
    ResolveAudioCdSrcMethod "setDynamicSize" o = GstBase.BaseSrc.BaseSrcSetDynamicSizeMethodInfo
    ResolveAudioCdSrcMethod "setFormat" o = GstBase.BaseSrc.BaseSrcSetFormatMethodInfo
    ResolveAudioCdSrcMethod "setLive" o = GstBase.BaseSrc.BaseSrcSetLiveMethodInfo
    ResolveAudioCdSrcMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
    ResolveAudioCdSrcMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
    ResolveAudioCdSrcMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
    ResolveAudioCdSrcMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveAudioCdSrcMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
    ResolveAudioCdSrcMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
    ResolveAudioCdSrcMethod "setUri" o = Gst.URIHandler.URIHandlerSetUriMethodInfo
    ResolveAudioCdSrcMethod l o = O.MethodResolutionFailed l o

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

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveAudioCdSrcMethod t AudioCdSrc, O.OverloadedMethod info AudioCdSrc p, R.HasField t AudioCdSrc p) => R.HasField t AudioCdSrc p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveAudioCdSrcMethod t AudioCdSrc, O.OverloadedMethodInfo info AudioCdSrc) => OL.IsLabel t (O.MethodProxy info AudioCdSrc) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

-- VVV Prop "device"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Nothing)

-- | Get the value of the “@device@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioCdSrc #device
-- @
getAudioCdSrcDevice :: (MonadIO m, IsAudioCdSrc o) => o -> m (Maybe T.Text)
getAudioCdSrcDevice :: forall (m :: * -> *) o.
(MonadIO m, IsAudioCdSrc o) =>
o -> m (Maybe Text)
getAudioCdSrcDevice o
obj = IO (Maybe Text) -> m (Maybe Text)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (Maybe Text) -> m (Maybe Text))
-> IO (Maybe Text) -> m (Maybe Text)
forall a b. (a -> b) -> a -> b
$ o -> String -> IO (Maybe Text)
forall a. GObject a => a -> String -> IO (Maybe Text)
B.Properties.getObjectPropertyString o
obj String
"device"

-- | Set the value of the “@device@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioCdSrc [ #device 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioCdSrcDevice :: (MonadIO m, IsAudioCdSrc o) => o -> T.Text -> m ()
setAudioCdSrcDevice :: forall (m :: * -> *) o.
(MonadIO m, IsAudioCdSrc o) =>
o -> Text -> m ()
setAudioCdSrcDevice o
obj Text
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    o -> String -> Maybe Text -> IO ()
forall a. GObject a => a -> String -> Maybe Text -> IO ()
B.Properties.setObjectPropertyString o
obj String
"device" (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
val)

-- | Construct a `GValueConstruct` with valid value for the “@device@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
constructAudioCdSrcDevice :: (IsAudioCdSrc o, MIO.MonadIO m) => T.Text -> m (GValueConstruct o)
constructAudioCdSrcDevice :: forall o (m :: * -> *).
(IsAudioCdSrc o, MonadIO m) =>
Text -> m (GValueConstruct o)
constructAudioCdSrcDevice Text
val = IO (GValueConstruct o) -> m (GValueConstruct o)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
-> IO (GValueConstruct o) -> m (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ do
    IO (GValueConstruct o) -> IO (GValueConstruct o)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
-> IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ String -> Maybe Text -> IO (GValueConstruct o)
forall o. String -> Maybe Text -> IO (GValueConstruct o)
B.Properties.constructObjectPropertyString String
"device" (Text -> Maybe Text
forall a. a -> Maybe a
P.Just Text
val)

-- | Set the value of the “@device@” property to `Nothing`.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.clear' #device
-- @
clearAudioCdSrcDevice :: (MonadIO m, IsAudioCdSrc o) => o -> m ()
clearAudioCdSrcDevice :: forall (m :: * -> *) o. (MonadIO m, IsAudioCdSrc o) => o -> m ()
clearAudioCdSrcDevice o
obj = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ o -> String -> Maybe Text -> IO ()
forall a. GObject a => a -> String -> Maybe Text -> IO ()
B.Properties.setObjectPropertyString o
obj String
"device" (Maybe Text
forall a. Maybe a
Nothing :: Maybe T.Text)

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcDevicePropertyInfo
instance AttrInfo AudioCdSrcDevicePropertyInfo where
    type AttrAllowedOps AudioCdSrcDevicePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrBaseTypeConstraint AudioCdSrcDevicePropertyInfo = IsAudioCdSrc
    type AttrSetTypeConstraint AudioCdSrcDevicePropertyInfo = (~) T.Text
    type AttrTransferTypeConstraint AudioCdSrcDevicePropertyInfo = (~) T.Text
    type AttrTransferType AudioCdSrcDevicePropertyInfo = T.Text
    type AttrGetType AudioCdSrcDevicePropertyInfo = (Maybe T.Text)
    type AttrLabel AudioCdSrcDevicePropertyInfo = "device"
    type AttrOrigin AudioCdSrcDevicePropertyInfo = AudioCdSrc
    attrGet = getAudioCdSrcDevice
    attrSet = setAudioCdSrcDevice
    attrTransfer _ v = do
        return v
    attrConstruct = constructAudioCdSrcDevice
    attrClear = clearAudioCdSrcDevice
#endif

-- VVV Prop "mode"
   -- Type: TInterface (Name {namespace = "GstAudio", name = "AudioCdSrcMode"})
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Nothing)

-- | Get the value of the “@mode@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioCdSrc #mode
-- @
getAudioCdSrcMode :: (MonadIO m, IsAudioCdSrc o) => o -> m GstAudio.Enums.AudioCdSrcMode
getAudioCdSrcMode :: forall (m :: * -> *) o.
(MonadIO m, IsAudioCdSrc o) =>
o -> m AudioCdSrcMode
getAudioCdSrcMode o
obj = IO AudioCdSrcMode -> m AudioCdSrcMode
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO AudioCdSrcMode -> m AudioCdSrcMode)
-> IO AudioCdSrcMode -> m AudioCdSrcMode
forall a b. (a -> b) -> a -> b
$ o -> String -> IO AudioCdSrcMode
forall a b. (GObject a, Enum b, BoxedEnum b) => a -> String -> IO b
B.Properties.getObjectPropertyEnum o
obj String
"mode"

-- | Set the value of the “@mode@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioCdSrc [ #mode 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioCdSrcMode :: (MonadIO m, IsAudioCdSrc o) => o -> GstAudio.Enums.AudioCdSrcMode -> m ()
setAudioCdSrcMode :: forall (m :: * -> *) o.
(MonadIO m, IsAudioCdSrc o) =>
o -> AudioCdSrcMode -> m ()
setAudioCdSrcMode o
obj AudioCdSrcMode
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    o -> String -> AudioCdSrcMode -> IO ()
forall a b.
(GObject a, Enum b, BoxedEnum b) =>
a -> String -> b -> IO ()
B.Properties.setObjectPropertyEnum o
obj String
"mode" AudioCdSrcMode
val

-- | Construct a `GValueConstruct` with valid value for the “@mode@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
constructAudioCdSrcMode :: (IsAudioCdSrc o, MIO.MonadIO m) => GstAudio.Enums.AudioCdSrcMode -> m (GValueConstruct o)
constructAudioCdSrcMode :: forall o (m :: * -> *).
(IsAudioCdSrc o, MonadIO m) =>
AudioCdSrcMode -> m (GValueConstruct o)
constructAudioCdSrcMode AudioCdSrcMode
val = IO (GValueConstruct o) -> m (GValueConstruct o)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
-> IO (GValueConstruct o) -> m (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ do
    IO (GValueConstruct o) -> IO (GValueConstruct o)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
-> IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ String -> AudioCdSrcMode -> IO (GValueConstruct o)
forall a o.
(Enum a, BoxedEnum a) =>
String -> a -> IO (GValueConstruct o)
B.Properties.constructObjectPropertyEnum String
"mode" AudioCdSrcMode
val

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcModePropertyInfo
instance AttrInfo AudioCdSrcModePropertyInfo where
    type AttrAllowedOps AudioCdSrcModePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrBaseTypeConstraint AudioCdSrcModePropertyInfo = IsAudioCdSrc
    type AttrSetTypeConstraint AudioCdSrcModePropertyInfo = (~) GstAudio.Enums.AudioCdSrcMode
    type AttrTransferTypeConstraint AudioCdSrcModePropertyInfo = (~) GstAudio.Enums.AudioCdSrcMode
    type AttrTransferType AudioCdSrcModePropertyInfo = GstAudio.Enums.AudioCdSrcMode
    type AttrGetType AudioCdSrcModePropertyInfo = GstAudio.Enums.AudioCdSrcMode
    type AttrLabel AudioCdSrcModePropertyInfo = "mode"
    type AttrOrigin AudioCdSrcModePropertyInfo = AudioCdSrc
    attrGet = getAudioCdSrcMode
    attrSet = setAudioCdSrcMode
    attrTransfer _ v = do
        return v
    attrConstruct = constructAudioCdSrcMode
    attrClear = undefined
#endif

-- VVV Prop "track"
   -- Type: TBasicType TUInt
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Nothing)

-- | Get the value of the “@track@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioCdSrc #track
-- @
getAudioCdSrcTrack :: (MonadIO m, IsAudioCdSrc o) => o -> m Word32
getAudioCdSrcTrack :: forall (m :: * -> *) o.
(MonadIO m, IsAudioCdSrc o) =>
o -> m Word32
getAudioCdSrcTrack o
obj = IO Word32 -> m Word32
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
forall a b. (a -> b) -> a -> b
$ o -> String -> IO Word32
forall a. GObject a => a -> String -> IO Word32
B.Properties.getObjectPropertyUInt32 o
obj String
"track"

-- | Set the value of the “@track@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioCdSrc [ #track 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioCdSrcTrack :: (MonadIO m, IsAudioCdSrc o) => o -> Word32 -> m ()
setAudioCdSrcTrack :: forall (m :: * -> *) o.
(MonadIO m, IsAudioCdSrc o) =>
o -> Word32 -> m ()
setAudioCdSrcTrack o
obj Word32
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    o -> String -> Word32 -> IO ()
forall a. GObject a => a -> String -> Word32 -> IO ()
B.Properties.setObjectPropertyUInt32 o
obj String
"track" Word32
val

-- | Construct a `GValueConstruct` with valid value for the “@track@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
constructAudioCdSrcTrack :: (IsAudioCdSrc o, MIO.MonadIO m) => Word32 -> m (GValueConstruct o)
constructAudioCdSrcTrack :: forall o (m :: * -> *).
(IsAudioCdSrc o, MonadIO m) =>
Word32 -> m (GValueConstruct o)
constructAudioCdSrcTrack Word32
val = IO (GValueConstruct o) -> m (GValueConstruct o)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
-> IO (GValueConstruct o) -> m (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ do
    IO (GValueConstruct o) -> IO (GValueConstruct o)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
-> IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ String -> Word32 -> IO (GValueConstruct o)
forall o. String -> Word32 -> IO (GValueConstruct o)
B.Properties.constructObjectPropertyUInt32 String
"track" Word32
val

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcTrackPropertyInfo
instance AttrInfo AudioCdSrcTrackPropertyInfo where
    type AttrAllowedOps AudioCdSrcTrackPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrBaseTypeConstraint AudioCdSrcTrackPropertyInfo = IsAudioCdSrc
    type AttrSetTypeConstraint AudioCdSrcTrackPropertyInfo = (~) Word32
    type AttrTransferTypeConstraint AudioCdSrcTrackPropertyInfo = (~) Word32
    type AttrTransferType AudioCdSrcTrackPropertyInfo = Word32
    type AttrGetType AudioCdSrcTrackPropertyInfo = Word32
    type AttrLabel AudioCdSrcTrackPropertyInfo = "track"
    type AttrOrigin AudioCdSrcTrackPropertyInfo = AudioCdSrc
    attrGet = getAudioCdSrcTrack
    attrSet = setAudioCdSrcTrack
    attrTransfer _ v = do
        return v
    attrConstruct = constructAudioCdSrcTrack
    attrClear = undefined
#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList AudioCdSrc
type instance O.AttributeList AudioCdSrc = AudioCdSrcAttributeList
type AudioCdSrcAttributeList = ('[ '("blocksize", GstBase.BaseSrc.BaseSrcBlocksizePropertyInfo), '("device", AudioCdSrcDevicePropertyInfo), '("doTimestamp", GstBase.BaseSrc.BaseSrcDoTimestampPropertyInfo), '("mode", AudioCdSrcModePropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrc.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("track", AudioCdSrcTrackPropertyInfo), '("typefind", GstBase.BaseSrc.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
audioCdSrcDevice :: AttrLabelProxy "device"
audioCdSrcDevice = AttrLabelProxy

audioCdSrcMode :: AttrLabelProxy "mode"
audioCdSrcMode = AttrLabelProxy

audioCdSrcTrack :: AttrLabelProxy "track"
audioCdSrcTrack = AttrLabelProxy

#endif

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

#endif

-- method AudioCdSrc::add_track
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "src"
--           , argType =
--               TInterface Name { namespace = "GstAudio" , name = "AudioCdSrc" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GstAudioCdSrc" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "track"
--           , argType =
--               TInterface
--                 Name { namespace = "GstAudio" , name = "AudioCdSrcTrack" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "address of #GstAudioCdSrcTrack to add"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_cd_src_add_track" gst_audio_cd_src_add_track :: 
    Ptr AudioCdSrc ->                       -- src : TInterface (Name {namespace = "GstAudio", name = "AudioCdSrc"})
    Ptr GstAudio.AudioCdSrcTrack.AudioCdSrcTrack -> -- track : TInterface (Name {namespace = "GstAudio", name = "AudioCdSrcTrack"})
    IO CInt

-- | CDDA sources use this function from their start vfunc to announce the
-- available data and audio tracks to the base source class. The caller
-- should allocate /@track@/ on the stack, the base source will do a shallow
-- copy of the structure (and take ownership of the taglist if there is one).
audioCdSrcAddTrack ::
    (B.CallStack.HasCallStack, MonadIO m, IsAudioCdSrc a) =>
    a
    -- ^ /@src@/: a t'GI.GstAudio.Objects.AudioCdSrc.AudioCdSrc'
    -> GstAudio.AudioCdSrcTrack.AudioCdSrcTrack
    -- ^ /@track@/: address of t'GI.GstAudio.Structs.AudioCdSrcTrack.AudioCdSrcTrack' to add
    -> m Bool
    -- ^ __Returns:__ FALSE on error, otherwise TRUE.
audioCdSrcAddTrack :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsAudioCdSrc a) =>
a -> AudioCdSrcTrack -> m Bool
audioCdSrcAddTrack a
src AudioCdSrcTrack
track = IO Bool -> m Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ do
    Ptr AudioCdSrc
src' <- a -> IO (Ptr AudioCdSrc)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
src
    Ptr AudioCdSrcTrack
track' <- AudioCdSrcTrack -> IO (Ptr AudioCdSrcTrack)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr AudioCdSrcTrack
track
    CInt
result <- Ptr AudioCdSrc -> Ptr AudioCdSrcTrack -> IO CInt
gst_audio_cd_src_add_track Ptr AudioCdSrc
src' Ptr AudioCdSrcTrack
track'
    let result' :: Bool
result' = (CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/= CInt
0) CInt
result
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
src
    AudioCdSrcTrack -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr AudioCdSrcTrack
track
    Bool -> IO Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
result'

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcAddTrackMethodInfo
instance (signature ~ (GstAudio.AudioCdSrcTrack.AudioCdSrcTrack -> m Bool), MonadIO m, IsAudioCdSrc a) => O.OverloadedMethod AudioCdSrcAddTrackMethodInfo a signature where
    overloadedMethod = audioCdSrcAddTrack

instance O.OverloadedMethodInfo AudioCdSrcAddTrackMethodInfo a where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.GstAudio.Objects.AudioCdSrc.audioCdSrcAddTrack",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.23/docs/GI-GstAudio-Objects-AudioCdSrc.html#v:audioCdSrcAddTrack"
        }


#endif