{- |
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.DOMVideoPlaybackQuality
    ( 

-- * Exported types
    DOMVideoPlaybackQuality(..)             ,
    DOMVideoPlaybackQualityK                ,
    toDOMVideoPlaybackQuality               ,
    noDOMVideoPlaybackQuality               ,


 -- * Methods
-- ** dOMVideoPlaybackQualityGetCorruptedVideoFrames
    dOMVideoPlaybackQualityGetCorruptedVideoFrames,


-- ** dOMVideoPlaybackQualityGetCreationTime
    dOMVideoPlaybackQualityGetCreationTime  ,


-- ** dOMVideoPlaybackQualityGetDroppedVideoFrames
    dOMVideoPlaybackQualityGetDroppedVideoFrames,


-- ** dOMVideoPlaybackQualityGetTotalFrameDelay
    dOMVideoPlaybackQualityGetTotalFrameDelay,


-- ** dOMVideoPlaybackQualityGetTotalVideoFrames
    dOMVideoPlaybackQualityGetTotalVideoFrames,




 -- * Properties
-- ** CorruptedVideoFrames
    DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo,
    getDOMVideoPlaybackQualityCorruptedVideoFrames,


-- ** CreationTime
    DOMVideoPlaybackQualityCreationTimePropertyInfo,
    getDOMVideoPlaybackQualityCreationTime  ,


-- ** DroppedVideoFrames
    DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo,
    getDOMVideoPlaybackQualityDroppedVideoFrames,


-- ** TotalFrameDelay
    DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo,
    getDOMVideoPlaybackQualityTotalFrameDelay,


-- ** TotalVideoFrames
    DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo,
    getDOMVideoPlaybackQualityTotalVideoFrames,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.WebKit.Types
import GI.WebKit.Callbacks
import qualified GI.GObject as GObject

newtype DOMVideoPlaybackQuality = DOMVideoPlaybackQuality (ForeignPtr DOMVideoPlaybackQuality)
foreign import ccall "webkit_dom_video_playback_quality_get_type"
    c_webkit_dom_video_playback_quality_get_type :: IO GType

type instance ParentTypes DOMVideoPlaybackQuality = DOMVideoPlaybackQualityParentTypes
type DOMVideoPlaybackQualityParentTypes = '[DOMObject, GObject.Object]

instance GObject DOMVideoPlaybackQuality where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_webkit_dom_video_playback_quality_get_type
    

class GObject o => DOMVideoPlaybackQualityK o
instance (GObject o, IsDescendantOf DOMVideoPlaybackQuality o) => DOMVideoPlaybackQualityK o

toDOMVideoPlaybackQuality :: DOMVideoPlaybackQualityK o => o -> IO DOMVideoPlaybackQuality
toDOMVideoPlaybackQuality = unsafeCastTo DOMVideoPlaybackQuality

noDOMVideoPlaybackQuality :: Maybe DOMVideoPlaybackQuality
noDOMVideoPlaybackQuality = Nothing

-- VVV Prop "corrupted-video-frames"
   -- Type: TBasicType TUInt64
   -- Flags: [PropertyReadable]

getDOMVideoPlaybackQualityCorruptedVideoFrames :: (MonadIO m, DOMVideoPlaybackQualityK o) => o -> m Word64
getDOMVideoPlaybackQualityCorruptedVideoFrames obj = liftIO $ getObjectPropertyUInt64 obj "corrupted-video-frames"

data DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo
instance AttrInfo DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo where
    type AttrAllowedOps DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo = DOMVideoPlaybackQualityK
    type AttrGetType DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo = Word64
    type AttrLabel DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo = "DOMVideoPlaybackQuality::corrupted-video-frames"
    attrGet _ = getDOMVideoPlaybackQualityCorruptedVideoFrames
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "creation-time"
   -- Type: TBasicType TDouble
   -- Flags: [PropertyReadable]

getDOMVideoPlaybackQualityCreationTime :: (MonadIO m, DOMVideoPlaybackQualityK o) => o -> m Double
getDOMVideoPlaybackQualityCreationTime obj = liftIO $ getObjectPropertyDouble obj "creation-time"

data DOMVideoPlaybackQualityCreationTimePropertyInfo
instance AttrInfo DOMVideoPlaybackQualityCreationTimePropertyInfo where
    type AttrAllowedOps DOMVideoPlaybackQualityCreationTimePropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMVideoPlaybackQualityCreationTimePropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMVideoPlaybackQualityCreationTimePropertyInfo = DOMVideoPlaybackQualityK
    type AttrGetType DOMVideoPlaybackQualityCreationTimePropertyInfo = Double
    type AttrLabel DOMVideoPlaybackQualityCreationTimePropertyInfo = "DOMVideoPlaybackQuality::creation-time"
    attrGet _ = getDOMVideoPlaybackQualityCreationTime
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "dropped-video-frames"
   -- Type: TBasicType TUInt64
   -- Flags: [PropertyReadable]

getDOMVideoPlaybackQualityDroppedVideoFrames :: (MonadIO m, DOMVideoPlaybackQualityK o) => o -> m Word64
getDOMVideoPlaybackQualityDroppedVideoFrames obj = liftIO $ getObjectPropertyUInt64 obj "dropped-video-frames"

data DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo
instance AttrInfo DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo where
    type AttrAllowedOps DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo = DOMVideoPlaybackQualityK
    type AttrGetType DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo = Word64
    type AttrLabel DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo = "DOMVideoPlaybackQuality::dropped-video-frames"
    attrGet _ = getDOMVideoPlaybackQualityDroppedVideoFrames
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "total-frame-delay"
   -- Type: TBasicType TDouble
   -- Flags: [PropertyReadable]

getDOMVideoPlaybackQualityTotalFrameDelay :: (MonadIO m, DOMVideoPlaybackQualityK o) => o -> m Double
getDOMVideoPlaybackQualityTotalFrameDelay obj = liftIO $ getObjectPropertyDouble obj "total-frame-delay"

data DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo
instance AttrInfo DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo where
    type AttrAllowedOps DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo = DOMVideoPlaybackQualityK
    type AttrGetType DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo = Double
    type AttrLabel DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo = "DOMVideoPlaybackQuality::total-frame-delay"
    attrGet _ = getDOMVideoPlaybackQualityTotalFrameDelay
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "total-video-frames"
   -- Type: TBasicType TUInt64
   -- Flags: [PropertyReadable]

getDOMVideoPlaybackQualityTotalVideoFrames :: (MonadIO m, DOMVideoPlaybackQualityK o) => o -> m Word64
getDOMVideoPlaybackQualityTotalVideoFrames obj = liftIO $ getObjectPropertyUInt64 obj "total-video-frames"

data DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo
instance AttrInfo DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo where
    type AttrAllowedOps DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo = DOMVideoPlaybackQualityK
    type AttrGetType DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo = Word64
    type AttrLabel DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo = "DOMVideoPlaybackQuality::total-video-frames"
    attrGet _ = getDOMVideoPlaybackQualityTotalVideoFrames
    attrSet _ = undefined
    attrConstruct _ = undefined

type instance AttributeList DOMVideoPlaybackQuality = DOMVideoPlaybackQualityAttributeList
type DOMVideoPlaybackQualityAttributeList = ('[ '("core-object", DOMObjectCoreObjectPropertyInfo), '("corrupted-video-frames", DOMVideoPlaybackQualityCorruptedVideoFramesPropertyInfo), '("creation-time", DOMVideoPlaybackQualityCreationTimePropertyInfo), '("dropped-video-frames", DOMVideoPlaybackQualityDroppedVideoFramesPropertyInfo), '("total-frame-delay", DOMVideoPlaybackQualityTotalFrameDelayPropertyInfo), '("total-video-frames", DOMVideoPlaybackQualityTotalVideoFramesPropertyInfo)] :: [(Symbol, *)])

type instance SignalList DOMVideoPlaybackQuality = DOMVideoPlaybackQualitySignalList
type DOMVideoPlaybackQualitySignalList = ('[ '("notify", GObject.ObjectNotifySignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method DOMVideoPlaybackQuality::get_corrupted_video_frames
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUInt64
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_video_playback_quality_get_corrupted_video_frames" webkit_dom_video_playback_quality_get_corrupted_video_frames :: 
    Ptr DOMVideoPlaybackQuality ->          -- _obj : TInterface "WebKit" "DOMVideoPlaybackQuality"
    IO Word64


dOMVideoPlaybackQualityGetCorruptedVideoFrames ::
    (MonadIO m, DOMVideoPlaybackQualityK a) =>
    a ->                                    -- _obj
    m Word64
dOMVideoPlaybackQualityGetCorruptedVideoFrames _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_dom_video_playback_quality_get_corrupted_video_frames _obj'
    touchManagedPtr _obj
    return result

-- method DOMVideoPlaybackQuality::get_creation_time
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TDouble
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_video_playback_quality_get_creation_time" webkit_dom_video_playback_quality_get_creation_time :: 
    Ptr DOMVideoPlaybackQuality ->          -- _obj : TInterface "WebKit" "DOMVideoPlaybackQuality"
    IO CDouble


dOMVideoPlaybackQualityGetCreationTime ::
    (MonadIO m, DOMVideoPlaybackQualityK a) =>
    a ->                                    -- _obj
    m Double
dOMVideoPlaybackQualityGetCreationTime _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_dom_video_playback_quality_get_creation_time _obj'
    let result' = realToFrac result
    touchManagedPtr _obj
    return result'

-- method DOMVideoPlaybackQuality::get_dropped_video_frames
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUInt64
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_video_playback_quality_get_dropped_video_frames" webkit_dom_video_playback_quality_get_dropped_video_frames :: 
    Ptr DOMVideoPlaybackQuality ->          -- _obj : TInterface "WebKit" "DOMVideoPlaybackQuality"
    IO Word64


dOMVideoPlaybackQualityGetDroppedVideoFrames ::
    (MonadIO m, DOMVideoPlaybackQualityK a) =>
    a ->                                    -- _obj
    m Word64
dOMVideoPlaybackQualityGetDroppedVideoFrames _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_dom_video_playback_quality_get_dropped_video_frames _obj'
    touchManagedPtr _obj
    return result

-- method DOMVideoPlaybackQuality::get_total_frame_delay
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TDouble
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_video_playback_quality_get_total_frame_delay" webkit_dom_video_playback_quality_get_total_frame_delay :: 
    Ptr DOMVideoPlaybackQuality ->          -- _obj : TInterface "WebKit" "DOMVideoPlaybackQuality"
    IO CDouble


dOMVideoPlaybackQualityGetTotalFrameDelay ::
    (MonadIO m, DOMVideoPlaybackQualityK a) =>
    a ->                                    -- _obj
    m Double
dOMVideoPlaybackQualityGetTotalFrameDelay _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_dom_video_playback_quality_get_total_frame_delay _obj'
    let result' = realToFrac result
    touchManagedPtr _obj
    return result'

-- method DOMVideoPlaybackQuality::get_total_video_frames
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "DOMVideoPlaybackQuality", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUInt64
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_video_playback_quality_get_total_video_frames" webkit_dom_video_playback_quality_get_total_video_frames :: 
    Ptr DOMVideoPlaybackQuality ->          -- _obj : TInterface "WebKit" "DOMVideoPlaybackQuality"
    IO Word64


dOMVideoPlaybackQualityGetTotalVideoFrames ::
    (MonadIO m, DOMVideoPlaybackQualityK a) =>
    a ->                                    -- _obj
    m Word64
dOMVideoPlaybackQualityGetTotalVideoFrames _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_dom_video_playback_quality_get_total_video_frames _obj'
    touchManagedPtr _obj
    return result