{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.WebKit.Objects.DOMAudioTrackList
    ( 

-- * Exported types
    DOMAudioTrackList(..)                   ,
    IsDOMAudioTrackList                     ,
    toDOMAudioTrackList                     ,
    noDOMAudioTrackList                     ,


 -- * Methods
-- ** dispatchEvent #method:dispatchEvent#
    DOMAudioTrackListDispatchEventMethodInfo,
    dOMAudioTrackListDispatchEvent          ,


-- ** getLength #method:getLength#
    DOMAudioTrackListGetLengthMethodInfo    ,
    dOMAudioTrackListGetLength              ,


-- ** getTrackById #method:getTrackById#
    DOMAudioTrackListGetTrackByIdMethodInfo ,
    dOMAudioTrackListGetTrackById           ,


-- ** item #method:item#
    DOMAudioTrackListItemMethodInfo         ,
    dOMAudioTrackListItem                   ,




 -- * Properties
-- ** length #attr:length#
    DOMAudioTrackListLengthPropertyInfo     ,
    dOMAudioTrackListLength                 ,
    getDOMAudioTrackListLength              ,




    ) 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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
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 GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.WebKit.Interfaces.DOMEventTarget as WebKit.DOMEventTarget
import {-# SOURCE #-} qualified GI.WebKit.Objects.DOMAudioTrack as WebKit.DOMAudioTrack
import {-# SOURCE #-} qualified GI.WebKit.Objects.DOMEvent as WebKit.DOMEvent
import {-# SOURCE #-} qualified GI.WebKit.Objects.DOMObject as WebKit.DOMObject

newtype DOMAudioTrackList = DOMAudioTrackList (ManagedPtr DOMAudioTrackList)
foreign import ccall "webkit_dom_audio_track_list_get_type"
    c_webkit_dom_audio_track_list_get_type :: IO GType

instance GObject DOMAudioTrackList where
    gobjectType _ = c_webkit_dom_audio_track_list_get_type
    

class GObject o => IsDOMAudioTrackList o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError DOMAudioTrackList a) =>
    IsDOMAudioTrackList a
#endif
instance IsDOMAudioTrackList DOMAudioTrackList
instance WebKit.DOMObject.IsDOMObject DOMAudioTrackList
instance GObject.Object.IsObject DOMAudioTrackList
instance WebKit.DOMEventTarget.IsDOMEventTarget DOMAudioTrackList

toDOMAudioTrackList :: IsDOMAudioTrackList o => o -> IO DOMAudioTrackList
toDOMAudioTrackList = unsafeCastTo DOMAudioTrackList

noDOMAudioTrackList :: Maybe DOMAudioTrackList
noDOMAudioTrackList = Nothing

type family ResolveDOMAudioTrackListMethod (t :: Symbol) (o :: *) :: * where
    ResolveDOMAudioTrackListMethod "addEventListener" o = WebKit.DOMEventTarget.DOMEventTargetAddEventListenerMethodInfo
    ResolveDOMAudioTrackListMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveDOMAudioTrackListMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveDOMAudioTrackListMethod "dispatchEvent" o = DOMAudioTrackListDispatchEventMethodInfo
    ResolveDOMAudioTrackListMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveDOMAudioTrackListMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveDOMAudioTrackListMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveDOMAudioTrackListMethod "item" o = DOMAudioTrackListItemMethodInfo
    ResolveDOMAudioTrackListMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveDOMAudioTrackListMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveDOMAudioTrackListMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveDOMAudioTrackListMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveDOMAudioTrackListMethod "removeEventListener" o = WebKit.DOMEventTarget.DOMEventTargetRemoveEventListenerMethodInfo
    ResolveDOMAudioTrackListMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveDOMAudioTrackListMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveDOMAudioTrackListMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveDOMAudioTrackListMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveDOMAudioTrackListMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveDOMAudioTrackListMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveDOMAudioTrackListMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveDOMAudioTrackListMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveDOMAudioTrackListMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveDOMAudioTrackListMethod "getLength" o = DOMAudioTrackListGetLengthMethodInfo
    ResolveDOMAudioTrackListMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveDOMAudioTrackListMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveDOMAudioTrackListMethod "getTrackById" o = DOMAudioTrackListGetTrackByIdMethodInfo
    ResolveDOMAudioTrackListMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveDOMAudioTrackListMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveDOMAudioTrackListMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveDOMAudioTrackListMethod t DOMAudioTrackList, O.MethodInfo info DOMAudioTrackList p) => O.IsLabelProxy t (DOMAudioTrackList -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveDOMAudioTrackListMethod t DOMAudioTrackList, O.MethodInfo info DOMAudioTrackList p) => O.IsLabel t (DOMAudioTrackList -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

-- VVV Prop "length"
   -- Type: TBasicType TULong
   -- Flags: [PropertyReadable]
   -- Nullable: (Just False,Nothing)

getDOMAudioTrackListLength :: (MonadIO m, IsDOMAudioTrackList o) => o -> m CULong
getDOMAudioTrackListLength obj = liftIO $ getObjectPropertyULong obj "length"

data DOMAudioTrackListLengthPropertyInfo
instance AttrInfo DOMAudioTrackListLengthPropertyInfo where
    type AttrAllowedOps DOMAudioTrackListLengthPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMAudioTrackListLengthPropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMAudioTrackListLengthPropertyInfo = IsDOMAudioTrackList
    type AttrGetType DOMAudioTrackListLengthPropertyInfo = CULong
    type AttrLabel DOMAudioTrackListLengthPropertyInfo = "length"
    type AttrOrigin DOMAudioTrackListLengthPropertyInfo = DOMAudioTrackList
    attrGet _ = getDOMAudioTrackListLength
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined

instance O.HasAttributeList DOMAudioTrackList
type instance O.AttributeList DOMAudioTrackList = DOMAudioTrackListAttributeList
type DOMAudioTrackListAttributeList = ('[ '("coreObject", WebKit.DOMObject.DOMObjectCoreObjectPropertyInfo), '("length", DOMAudioTrackListLengthPropertyInfo)] :: [(Symbol, *)])

dOMAudioTrackListLength :: AttrLabelProxy "length"
dOMAudioTrackListLength = AttrLabelProxy

type instance O.SignalList DOMAudioTrackList = DOMAudioTrackListSignalList
type DOMAudioTrackListSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method DOMAudioTrackList::dispatch_event
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "self", argType = TInterface (Name {namespace = "WebKit", name = "DOMAudioTrackList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMAudioTrackList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "evt", argType = TInterface (Name {namespace = "WebKit", name = "DOMEvent"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMEvent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "webkit_dom_audio_track_list_dispatch_event" webkit_dom_audio_track_list_dispatch_event :: 
    Ptr DOMAudioTrackList ->                -- self : TInterface (Name {namespace = "WebKit", name = "DOMAudioTrackList"})
    Ptr WebKit.DOMEvent.DOMEvent ->         -- evt : TInterface (Name {namespace = "WebKit", name = "DOMEvent"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{-# DEPRECATED dOMAudioTrackListDispatchEvent ["(Since version 2.4)","Use 'GI.WebKit.Interfaces.DOMEventTarget.dOMEventTargetDispatchEvent' instead."] #-}
{- |
/No description available in the introspection data./
-}
dOMAudioTrackListDispatchEvent ::
    (B.CallStack.HasCallStack, MonadIO m, IsDOMAudioTrackList a, WebKit.DOMEvent.IsDOMEvent b) =>
    a
    {- ^ /@self@/: A 'GI.WebKit.Objects.DOMAudioTrackList.DOMAudioTrackList' -}
    -> b
    {- ^ /@evt@/: A 'GI.WebKit.Objects.DOMEvent.DOMEvent' -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
dOMAudioTrackListDispatchEvent self evt = liftIO $ do
    self' <- unsafeManagedPtrCastPtr self
    evt' <- unsafeManagedPtrCastPtr evt
    onException (do
        _ <- propagateGError $ webkit_dom_audio_track_list_dispatch_event self' evt'
        touchManagedPtr self
        touchManagedPtr evt
        return ()
     ) (do
        return ()
     )

data DOMAudioTrackListDispatchEventMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsDOMAudioTrackList a, WebKit.DOMEvent.IsDOMEvent b) => O.MethodInfo DOMAudioTrackListDispatchEventMethodInfo a signature where
    overloadedMethod _ = dOMAudioTrackListDispatchEvent

-- method DOMAudioTrackList::get_length
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "self", argType = TInterface (Name {namespace = "WebKit", name = "DOMAudioTrackList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMAudioTrackList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TULong)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_audio_track_list_get_length" webkit_dom_audio_track_list_get_length :: 
    Ptr DOMAudioTrackList ->                -- self : TInterface (Name {namespace = "WebKit", name = "DOMAudioTrackList"})
    IO CULong

{- |
/No description available in the introspection data./
-}
dOMAudioTrackListGetLength ::
    (B.CallStack.HasCallStack, MonadIO m, IsDOMAudioTrackList a) =>
    a
    {- ^ /@self@/: A 'GI.WebKit.Objects.DOMAudioTrackList.DOMAudioTrackList' -}
    -> m CULong
    {- ^ __Returns:__ A @/gulong/@ -}
dOMAudioTrackListGetLength self = liftIO $ do
    self' <- unsafeManagedPtrCastPtr self
    result <- webkit_dom_audio_track_list_get_length self'
    touchManagedPtr self
    return result

data DOMAudioTrackListGetLengthMethodInfo
instance (signature ~ (m CULong), MonadIO m, IsDOMAudioTrackList a) => O.MethodInfo DOMAudioTrackListGetLengthMethodInfo a signature where
    overloadedMethod _ = dOMAudioTrackListGetLength

-- method DOMAudioTrackList::get_track_by_id
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "self", argType = TInterface (Name {namespace = "WebKit", name = "DOMAudioTrackList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMAudioTrackList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "id", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #gchar", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit", name = "DOMAudioTrack"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_audio_track_list_get_track_by_id" webkit_dom_audio_track_list_get_track_by_id :: 
    Ptr DOMAudioTrackList ->                -- self : TInterface (Name {namespace = "WebKit", name = "DOMAudioTrackList"})
    CString ->                              -- id : TBasicType TUTF8
    IO (Ptr WebKit.DOMAudioTrack.DOMAudioTrack)

{- |
/No description available in the introspection data./
-}
dOMAudioTrackListGetTrackById ::
    (B.CallStack.HasCallStack, MonadIO m, IsDOMAudioTrackList a) =>
    a
    {- ^ /@self@/: A 'GI.WebKit.Objects.DOMAudioTrackList.DOMAudioTrackList' -}
    -> T.Text
    {- ^ /@id@/: A @/gchar/@ -}
    -> m WebKit.DOMAudioTrack.DOMAudioTrack
    {- ^ __Returns:__ A 'GI.WebKit.Objects.DOMAudioTrack.DOMAudioTrack' -}
dOMAudioTrackListGetTrackById self id = liftIO $ do
    self' <- unsafeManagedPtrCastPtr self
    id' <- textToCString id
    result <- webkit_dom_audio_track_list_get_track_by_id self' id'
    checkUnexpectedReturnNULL "dOMAudioTrackListGetTrackById" result
    result' <- (wrapObject WebKit.DOMAudioTrack.DOMAudioTrack) result
    touchManagedPtr self
    freeMem id'
    return result'

data DOMAudioTrackListGetTrackByIdMethodInfo
instance (signature ~ (T.Text -> m WebKit.DOMAudioTrack.DOMAudioTrack), MonadIO m, IsDOMAudioTrackList a) => O.MethodInfo DOMAudioTrackListGetTrackByIdMethodInfo a signature where
    overloadedMethod _ = dOMAudioTrackListGetTrackById

-- method DOMAudioTrackList::item
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "self", argType = TInterface (Name {namespace = "WebKit", name = "DOMAudioTrackList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMAudioTrackList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TULong, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #gulong", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit", name = "DOMAudioTrack"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_audio_track_list_item" webkit_dom_audio_track_list_item :: 
    Ptr DOMAudioTrackList ->                -- self : TInterface (Name {namespace = "WebKit", name = "DOMAudioTrackList"})
    CULong ->                               -- index : TBasicType TULong
    IO (Ptr WebKit.DOMAudioTrack.DOMAudioTrack)

{- |
/No description available in the introspection data./
-}
dOMAudioTrackListItem ::
    (B.CallStack.HasCallStack, MonadIO m, IsDOMAudioTrackList a) =>
    a
    {- ^ /@self@/: A 'GI.WebKit.Objects.DOMAudioTrackList.DOMAudioTrackList' -}
    -> CULong
    {- ^ /@index@/: A @/gulong/@ -}
    -> m WebKit.DOMAudioTrack.DOMAudioTrack
    {- ^ __Returns:__ A 'GI.WebKit.Objects.DOMAudioTrack.DOMAudioTrack' -}
dOMAudioTrackListItem self index = liftIO $ do
    self' <- unsafeManagedPtrCastPtr self
    result <- webkit_dom_audio_track_list_item self' index
    checkUnexpectedReturnNULL "dOMAudioTrackListItem" result
    result' <- (wrapObject WebKit.DOMAudioTrack.DOMAudioTrack) result
    touchManagedPtr self
    return result'

data DOMAudioTrackListItemMethodInfo
instance (signature ~ (CULong -> m WebKit.DOMAudioTrack.DOMAudioTrack), MonadIO m, IsDOMAudioTrackList a) => O.MethodInfo DOMAudioTrackListItemMethodInfo a signature where
    overloadedMethod _ = dOMAudioTrackListItem