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

A GParamSpec derived structure that contains the meta data for fractional
properties.
-}

module GI.Gst.Structs.ParamSpecFraction
    ( 

-- * Exported types
    ParamSpecFraction(..)                   ,
    newZeroParamSpecFraction                ,
    noParamSpecFraction                     ,


 -- * Properties
-- ** defDen #attr:defDen#
    getParamSpecFractionDefDen              ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    paramSpecFraction_defDen                ,
#endif
    setParamSpecFractionDefDen              ,


-- ** defNum #attr:defNum#
    getParamSpecFractionDefNum              ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    paramSpecFraction_defNum                ,
#endif
    setParamSpecFractionDefNum              ,


-- ** maxDen #attr:maxDen#
    getParamSpecFractionMaxDen              ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    paramSpecFraction_maxDen                ,
#endif
    setParamSpecFractionMaxDen              ,


-- ** maxNum #attr:maxNum#
    getParamSpecFractionMaxNum              ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    paramSpecFraction_maxNum                ,
#endif
    setParamSpecFractionMaxNum              ,


-- ** minDen #attr:minDen#
    getParamSpecFractionMinDen              ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    paramSpecFraction_minDen                ,
#endif
    setParamSpecFractionMinDen              ,


-- ** minNum #attr:minNum#
    getParamSpecFractionMinNum              ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    paramSpecFraction_minNum                ,
#endif
    setParamSpecFractionMinNum              ,


-- ** parentInstance #attr:parentInstance#
    clearParamSpecFractionParentInstance    ,
    getParamSpecFractionParentInstance      ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    paramSpecFraction_parentInstance        ,
#endif
    setParamSpecFractionParentInstance      ,




    ) 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


newtype ParamSpecFraction = ParamSpecFraction (ManagedPtr ParamSpecFraction)
instance WrappedPtr ParamSpecFraction where
    wrappedPtrCalloc = callocBytes 96
    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 96 >=> wrapPtr ParamSpecFraction)
    wrappedPtrFree = Just ptr_to_g_free

-- | Construct a `ParamSpecFraction` struct initialized to zero.
newZeroParamSpecFraction :: MonadIO m => m ParamSpecFraction
newZeroParamSpecFraction = liftIO $ wrappedPtrCalloc >>= wrapPtr ParamSpecFraction

instance tag ~ 'AttrSet => Constructible ParamSpecFraction tag where
    new _ attrs = do
        o <- newZeroParamSpecFraction
        GI.Attributes.set o attrs
        return o


noParamSpecFraction :: Maybe ParamSpecFraction
noParamSpecFraction = Nothing

getParamSpecFractionParentInstance :: MonadIO m => ParamSpecFraction -> m (Maybe GParamSpec)
getParamSpecFractionParentInstance s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr GParamSpec)
    result <- SP.convertIfNonNull val $ \val' -> do
        val'' <- newGParamSpecFromPtr val'
        return val''
    return result

setParamSpecFractionParentInstance :: MonadIO m => ParamSpecFraction -> Ptr GParamSpec -> m ()
setParamSpecFractionParentInstance s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: Ptr GParamSpec)

clearParamSpecFractionParentInstance :: MonadIO m => ParamSpecFraction -> m ()
clearParamSpecFractionParentInstance s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (FP.nullPtr :: Ptr GParamSpec)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data ParamSpecFractionParentInstanceFieldInfo
instance AttrInfo ParamSpecFractionParentInstanceFieldInfo where
    type AttrAllowedOps ParamSpecFractionParentInstanceFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint ParamSpecFractionParentInstanceFieldInfo = (~) (Ptr GParamSpec)
    type AttrBaseTypeConstraint ParamSpecFractionParentInstanceFieldInfo = (~) ParamSpecFraction
    type AttrGetType ParamSpecFractionParentInstanceFieldInfo = Maybe GParamSpec
    type AttrLabel ParamSpecFractionParentInstanceFieldInfo = "parent_instance"
    type AttrOrigin ParamSpecFractionParentInstanceFieldInfo = ParamSpecFraction
    attrGet _ = getParamSpecFractionParentInstance
    attrSet _ = setParamSpecFractionParentInstance
    attrConstruct = undefined
    attrClear _ = clearParamSpecFractionParentInstance

paramSpecFraction_parentInstance :: AttrLabelProxy "parentInstance"
paramSpecFraction_parentInstance = AttrLabelProxy

#endif


getParamSpecFractionMinNum :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionMinNum s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 72) :: IO Int32
    return val

setParamSpecFractionMinNum :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionMinNum s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 72) (val :: Int32)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data ParamSpecFractionMinNumFieldInfo
instance AttrInfo ParamSpecFractionMinNumFieldInfo where
    type AttrAllowedOps ParamSpecFractionMinNumFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ParamSpecFractionMinNumFieldInfo = (~) Int32
    type AttrBaseTypeConstraint ParamSpecFractionMinNumFieldInfo = (~) ParamSpecFraction
    type AttrGetType ParamSpecFractionMinNumFieldInfo = Int32
    type AttrLabel ParamSpecFractionMinNumFieldInfo = "min_num"
    type AttrOrigin ParamSpecFractionMinNumFieldInfo = ParamSpecFraction
    attrGet _ = getParamSpecFractionMinNum
    attrSet _ = setParamSpecFractionMinNum
    attrConstruct = undefined
    attrClear _ = undefined

paramSpecFraction_minNum :: AttrLabelProxy "minNum"
paramSpecFraction_minNum = AttrLabelProxy

#endif


getParamSpecFractionMinDen :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionMinDen s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 76) :: IO Int32
    return val

setParamSpecFractionMinDen :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionMinDen s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 76) (val :: Int32)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data ParamSpecFractionMinDenFieldInfo
instance AttrInfo ParamSpecFractionMinDenFieldInfo where
    type AttrAllowedOps ParamSpecFractionMinDenFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ParamSpecFractionMinDenFieldInfo = (~) Int32
    type AttrBaseTypeConstraint ParamSpecFractionMinDenFieldInfo = (~) ParamSpecFraction
    type AttrGetType ParamSpecFractionMinDenFieldInfo = Int32
    type AttrLabel ParamSpecFractionMinDenFieldInfo = "min_den"
    type AttrOrigin ParamSpecFractionMinDenFieldInfo = ParamSpecFraction
    attrGet _ = getParamSpecFractionMinDen
    attrSet _ = setParamSpecFractionMinDen
    attrConstruct = undefined
    attrClear _ = undefined

paramSpecFraction_minDen :: AttrLabelProxy "minDen"
paramSpecFraction_minDen = AttrLabelProxy

#endif


getParamSpecFractionMaxNum :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionMaxNum s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 80) :: IO Int32
    return val

setParamSpecFractionMaxNum :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionMaxNum s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 80) (val :: Int32)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data ParamSpecFractionMaxNumFieldInfo
instance AttrInfo ParamSpecFractionMaxNumFieldInfo where
    type AttrAllowedOps ParamSpecFractionMaxNumFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ParamSpecFractionMaxNumFieldInfo = (~) Int32
    type AttrBaseTypeConstraint ParamSpecFractionMaxNumFieldInfo = (~) ParamSpecFraction
    type AttrGetType ParamSpecFractionMaxNumFieldInfo = Int32
    type AttrLabel ParamSpecFractionMaxNumFieldInfo = "max_num"
    type AttrOrigin ParamSpecFractionMaxNumFieldInfo = ParamSpecFraction
    attrGet _ = getParamSpecFractionMaxNum
    attrSet _ = setParamSpecFractionMaxNum
    attrConstruct = undefined
    attrClear _ = undefined

paramSpecFraction_maxNum :: AttrLabelProxy "maxNum"
paramSpecFraction_maxNum = AttrLabelProxy

#endif


getParamSpecFractionMaxDen :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionMaxDen s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 84) :: IO Int32
    return val

setParamSpecFractionMaxDen :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionMaxDen s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 84) (val :: Int32)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data ParamSpecFractionMaxDenFieldInfo
instance AttrInfo ParamSpecFractionMaxDenFieldInfo where
    type AttrAllowedOps ParamSpecFractionMaxDenFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ParamSpecFractionMaxDenFieldInfo = (~) Int32
    type AttrBaseTypeConstraint ParamSpecFractionMaxDenFieldInfo = (~) ParamSpecFraction
    type AttrGetType ParamSpecFractionMaxDenFieldInfo = Int32
    type AttrLabel ParamSpecFractionMaxDenFieldInfo = "max_den"
    type AttrOrigin ParamSpecFractionMaxDenFieldInfo = ParamSpecFraction
    attrGet _ = getParamSpecFractionMaxDen
    attrSet _ = setParamSpecFractionMaxDen
    attrConstruct = undefined
    attrClear _ = undefined

paramSpecFraction_maxDen :: AttrLabelProxy "maxDen"
paramSpecFraction_maxDen = AttrLabelProxy

#endif


getParamSpecFractionDefNum :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionDefNum s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 88) :: IO Int32
    return val

setParamSpecFractionDefNum :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionDefNum s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 88) (val :: Int32)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data ParamSpecFractionDefNumFieldInfo
instance AttrInfo ParamSpecFractionDefNumFieldInfo where
    type AttrAllowedOps ParamSpecFractionDefNumFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ParamSpecFractionDefNumFieldInfo = (~) Int32
    type AttrBaseTypeConstraint ParamSpecFractionDefNumFieldInfo = (~) ParamSpecFraction
    type AttrGetType ParamSpecFractionDefNumFieldInfo = Int32
    type AttrLabel ParamSpecFractionDefNumFieldInfo = "def_num"
    type AttrOrigin ParamSpecFractionDefNumFieldInfo = ParamSpecFraction
    attrGet _ = getParamSpecFractionDefNum
    attrSet _ = setParamSpecFractionDefNum
    attrConstruct = undefined
    attrClear _ = undefined

paramSpecFraction_defNum :: AttrLabelProxy "defNum"
paramSpecFraction_defNum = AttrLabelProxy

#endif


getParamSpecFractionDefDen :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionDefDen s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 92) :: IO Int32
    return val

setParamSpecFractionDefDen :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionDefDen s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 92) (val :: Int32)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data ParamSpecFractionDefDenFieldInfo
instance AttrInfo ParamSpecFractionDefDenFieldInfo where
    type AttrAllowedOps ParamSpecFractionDefDenFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ParamSpecFractionDefDenFieldInfo = (~) Int32
    type AttrBaseTypeConstraint ParamSpecFractionDefDenFieldInfo = (~) ParamSpecFraction
    type AttrGetType ParamSpecFractionDefDenFieldInfo = Int32
    type AttrLabel ParamSpecFractionDefDenFieldInfo = "def_den"
    type AttrOrigin ParamSpecFractionDefDenFieldInfo = ParamSpecFraction
    attrGet _ = getParamSpecFractionDefDen
    attrSet _ = setParamSpecFractionDefDen
    attrConstruct = undefined
    attrClear _ = undefined

paramSpecFraction_defDen :: AttrLabelProxy "defDen"
paramSpecFraction_defDen = AttrLabelProxy

#endif



#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
instance O.HasAttributeList ParamSpecFraction
type instance O.AttributeList ParamSpecFraction = ParamSpecFractionAttributeList
type ParamSpecFractionAttributeList = ('[ '("parentInstance", ParamSpecFractionParentInstanceFieldInfo), '("minNum", ParamSpecFractionMinNumFieldInfo), '("minDen", ParamSpecFractionMinDenFieldInfo), '("maxNum", ParamSpecFractionMaxNumFieldInfo), '("maxDen", ParamSpecFractionMaxDenFieldInfo), '("defNum", ParamSpecFractionDefNumFieldInfo), '("defDen", ParamSpecFractionDefDenFieldInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type family ResolveParamSpecFractionMethod (t :: Symbol) (o :: *) :: * where
    ResolveParamSpecFractionMethod l o = O.MethodResolutionFailed l o

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

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

#endif