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

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

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

module GI.Gst.Structs.ParamSpecFraction
    (

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


 -- * Properties
-- ** defDen #attr:defDen#
{- | default denominator
-}
    getParamSpecFractionDefDen              ,
#if ENABLE_OVERLOADING
    paramSpecFraction_defDen                ,
#endif
    setParamSpecFractionDefDen              ,


-- ** defNum #attr:defNum#
{- | default numerator
-}
    getParamSpecFractionDefNum              ,
#if ENABLE_OVERLOADING
    paramSpecFraction_defNum                ,
#endif
    setParamSpecFractionDefNum              ,


-- ** maxDen #attr:maxDen#
{- | maximal denominator
-}
    getParamSpecFractionMaxDen              ,
#if ENABLE_OVERLOADING
    paramSpecFraction_maxDen                ,
#endif
    setParamSpecFractionMaxDen              ,


-- ** maxNum #attr:maxNum#
{- | maximal numerator
-}
    getParamSpecFractionMaxNum              ,
#if ENABLE_OVERLOADING
    paramSpecFraction_maxNum                ,
#endif
    setParamSpecFractionMaxNum              ,


-- ** minDen #attr:minDen#
{- | minimal denominator
-}
    getParamSpecFractionMinDen              ,
#if ENABLE_OVERLOADING
    paramSpecFraction_minDen                ,
#endif
    setParamSpecFractionMinDen              ,


-- ** minNum #attr:minNum#
{- | minimal numerator
-}
    getParamSpecFractionMinNum              ,
#if ENABLE_OVERLOADING
    paramSpecFraction_minNum                ,
#endif
    setParamSpecFractionMinNum              ,


-- ** parentInstance #attr:parentInstance#
{- | super class
-}
    clearParamSpecFractionParentInstance    ,
    getParamSpecFractionParentInstance      ,
#if ENABLE_OVERLOADING
    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.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.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


-- | Memory-managed wrapper type.
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


-- | A convenience alias for `Nothing` :: `Maybe` `ParamSpecFraction`.
noParamSpecFraction :: Maybe ParamSpecFraction
noParamSpecFraction = Nothing

{- |
Get the value of the “@parent_instance@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' paramSpecFraction #parentInstance
@
-}
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'' <- B.GParamSpec.newGParamSpecFromPtr val'
        return val''
    return result

{- |
Set the value of the “@parent_instance@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' paramSpecFraction [ #parentInstance 'Data.GI.Base.Attributes.:=' value ]
@
-}
setParamSpecFractionParentInstance :: MonadIO m => ParamSpecFraction -> Ptr GParamSpec -> m ()
setParamSpecFractionParentInstance s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: Ptr GParamSpec)

{- |
Set the value of the “@parent_instance@” field to `Nothing`.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.clear' #parentInstance
@
-}
clearParamSpecFractionParentInstance :: MonadIO m => ParamSpecFraction -> m ()
clearParamSpecFractionParentInstance s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (FP.nullPtr :: Ptr GParamSpec)

#if ENABLE_OVERLOADING
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


{- |
Get the value of the “@min_num@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' paramSpecFraction #minNum
@
-}
getParamSpecFractionMinNum :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionMinNum s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 72) :: IO Int32
    return val

{- |
Set the value of the “@min_num@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' paramSpecFraction [ #minNum 'Data.GI.Base.Attributes.:=' value ]
@
-}
setParamSpecFractionMinNum :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionMinNum s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 72) (val :: Int32)

#if ENABLE_OVERLOADING
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


{- |
Get the value of the “@min_den@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' paramSpecFraction #minDen
@
-}
getParamSpecFractionMinDen :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionMinDen s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 76) :: IO Int32
    return val

{- |
Set the value of the “@min_den@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' paramSpecFraction [ #minDen 'Data.GI.Base.Attributes.:=' value ]
@
-}
setParamSpecFractionMinDen :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionMinDen s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 76) (val :: Int32)

#if ENABLE_OVERLOADING
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


{- |
Get the value of the “@max_num@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' paramSpecFraction #maxNum
@
-}
getParamSpecFractionMaxNum :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionMaxNum s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 80) :: IO Int32
    return val

{- |
Set the value of the “@max_num@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' paramSpecFraction [ #maxNum 'Data.GI.Base.Attributes.:=' value ]
@
-}
setParamSpecFractionMaxNum :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionMaxNum s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 80) (val :: Int32)

#if ENABLE_OVERLOADING
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


{- |
Get the value of the “@max_den@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' paramSpecFraction #maxDen
@
-}
getParamSpecFractionMaxDen :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionMaxDen s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 84) :: IO Int32
    return val

{- |
Set the value of the “@max_den@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' paramSpecFraction [ #maxDen 'Data.GI.Base.Attributes.:=' value ]
@
-}
setParamSpecFractionMaxDen :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionMaxDen s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 84) (val :: Int32)

#if ENABLE_OVERLOADING
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


{- |
Get the value of the “@def_num@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' paramSpecFraction #defNum
@
-}
getParamSpecFractionDefNum :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionDefNum s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 88) :: IO Int32
    return val

{- |
Set the value of the “@def_num@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' paramSpecFraction [ #defNum 'Data.GI.Base.Attributes.:=' value ]
@
-}
setParamSpecFractionDefNum :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionDefNum s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 88) (val :: Int32)

#if ENABLE_OVERLOADING
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


{- |
Get the value of the “@def_den@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' paramSpecFraction #defDen
@
-}
getParamSpecFractionDefDen :: MonadIO m => ParamSpecFraction -> m Int32
getParamSpecFractionDefDen s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 92) :: IO Int32
    return val

{- |
Set the value of the “@def_den@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' paramSpecFraction [ #defDen 'Data.GI.Base.Attributes.:=' value ]
@
-}
setParamSpecFractionDefDen :: MonadIO m => ParamSpecFraction -> Int32 -> m ()
setParamSpecFractionDefDen s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 92) (val :: Int32)

#if ENABLE_OVERLOADING
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 ENABLE_OVERLOADING
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 ENABLE_OVERLOADING
type family ResolveParamSpecFractionMethod (t :: Symbol) (o :: *) :: * where
    ResolveParamSpecFractionMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveParamSpecFractionMethod t ParamSpecFraction, O.MethodInfo info ParamSpecFraction p) => OL.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