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

/No description available in the introspection data./
-}

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

module GI.Poppler.Structs.ActionRendition
    (

-- * Exported types
    ActionRendition(..)                     ,
    newZeroActionRendition                  ,
    noActionRendition                       ,


 -- * Properties
-- ** media #attr:media#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    actionRendition_media                   ,
#endif
    clearActionRenditionMedia               ,
    getActionRenditionMedia                 ,
    setActionRenditionMedia                 ,


-- ** op #attr:op#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    actionRendition_op                      ,
#endif
    getActionRenditionOp                    ,
    setActionRenditionOp                    ,


-- ** title #attr:title#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    actionRendition_title                   ,
#endif
    clearActionRenditionTitle               ,
    getActionRenditionTitle                 ,
    setActionRenditionTitle                 ,


-- ** type #attr:type#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    actionRendition_type                    ,
#endif
    getActionRenditionType                  ,
    setActionRenditionType                  ,




    ) 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

import {-# SOURCE #-} qualified GI.Poppler.Enums as Poppler.Enums
import {-# SOURCE #-} qualified GI.Poppler.Objects.Media as Poppler.Media

-- | Memory-managed wrapper type.
newtype ActionRendition = ActionRendition (ManagedPtr ActionRendition)
instance WrappedPtr ActionRendition where
    wrappedPtrCalloc = callocBytes 32
    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 32 >=> wrapPtr ActionRendition)
    wrappedPtrFree = Just ptr_to_g_free

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

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


-- | A convenience alias for `Nothing` :: `Maybe` `ActionRendition`.
noActionRendition :: Maybe ActionRendition
noActionRendition = Nothing

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

@
'Data.GI.Base.Attributes.get' actionRendition #type
@
-}
getActionRenditionType :: MonadIO m => ActionRendition -> m Poppler.Enums.ActionType
getActionRenditionType s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

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

@
'Data.GI.Base.Attributes.set' actionRendition [ #type 'Data.GI.Base.Attributes.:=' value ]
@
-}
setActionRenditionType :: MonadIO m => ActionRendition -> Poppler.Enums.ActionType -> m ()
setActionRenditionType s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = (fromIntegral . fromEnum) val
    poke (ptr `plusPtr` 0) (val' :: CUInt)

#if ENABLE_OVERLOADING
data ActionRenditionTypeFieldInfo
instance AttrInfo ActionRenditionTypeFieldInfo where
    type AttrAllowedOps ActionRenditionTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ActionRenditionTypeFieldInfo = (~) Poppler.Enums.ActionType
    type AttrBaseTypeConstraint ActionRenditionTypeFieldInfo = (~) ActionRendition
    type AttrGetType ActionRenditionTypeFieldInfo = Poppler.Enums.ActionType
    type AttrLabel ActionRenditionTypeFieldInfo = "type"
    type AttrOrigin ActionRenditionTypeFieldInfo = ActionRendition
    attrGet _ = getActionRenditionType
    attrSet _ = setActionRenditionType
    attrConstruct = undefined
    attrClear _ = undefined

actionRendition_type :: AttrLabelProxy "type"
actionRendition_type = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' actionRendition #title
@
-}
getActionRenditionTitle :: MonadIO m => ActionRendition -> m (Maybe T.Text)
getActionRenditionTitle s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO CString
    result <- SP.convertIfNonNull val $ \val' -> do
        val'' <- cstringToText val'
        return val''
    return result

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

@
'Data.GI.Base.Attributes.set' actionRendition [ #title 'Data.GI.Base.Attributes.:=' value ]
@
-}
setActionRenditionTitle :: MonadIO m => ActionRendition -> CString -> m ()
setActionRenditionTitle s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: CString)

{- |
Set the value of the “@title@” 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' #title
@
-}
clearActionRenditionTitle :: MonadIO m => ActionRendition -> m ()
clearActionRenditionTitle s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (FP.nullPtr :: CString)

#if ENABLE_OVERLOADING
data ActionRenditionTitleFieldInfo
instance AttrInfo ActionRenditionTitleFieldInfo where
    type AttrAllowedOps ActionRenditionTitleFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint ActionRenditionTitleFieldInfo = (~) CString
    type AttrBaseTypeConstraint ActionRenditionTitleFieldInfo = (~) ActionRendition
    type AttrGetType ActionRenditionTitleFieldInfo = Maybe T.Text
    type AttrLabel ActionRenditionTitleFieldInfo = "title"
    type AttrOrigin ActionRenditionTitleFieldInfo = ActionRendition
    attrGet _ = getActionRenditionTitle
    attrSet _ = setActionRenditionTitle
    attrConstruct = undefined
    attrClear _ = clearActionRenditionTitle

actionRendition_title :: AttrLabelProxy "title"
actionRendition_title = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' actionRendition #op
@
-}
getActionRenditionOp :: MonadIO m => ActionRendition -> m Int32
getActionRenditionOp s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO Int32
    return val

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

@
'Data.GI.Base.Attributes.set' actionRendition [ #op 'Data.GI.Base.Attributes.:=' value ]
@
-}
setActionRenditionOp :: MonadIO m => ActionRendition -> Int32 -> m ()
setActionRenditionOp s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Int32)

#if ENABLE_OVERLOADING
data ActionRenditionOpFieldInfo
instance AttrInfo ActionRenditionOpFieldInfo where
    type AttrAllowedOps ActionRenditionOpFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ActionRenditionOpFieldInfo = (~) Int32
    type AttrBaseTypeConstraint ActionRenditionOpFieldInfo = (~) ActionRendition
    type AttrGetType ActionRenditionOpFieldInfo = Int32
    type AttrLabel ActionRenditionOpFieldInfo = "op"
    type AttrOrigin ActionRenditionOpFieldInfo = ActionRendition
    attrGet _ = getActionRenditionOp
    attrSet _ = setActionRenditionOp
    attrConstruct = undefined
    attrClear _ = undefined

actionRendition_op :: AttrLabelProxy "op"
actionRendition_op = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' actionRendition #media
@
-}
getActionRenditionMedia :: MonadIO m => ActionRendition -> m (Maybe Poppler.Media.Media)
getActionRenditionMedia s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO (Ptr Poppler.Media.Media)
    result <- SP.convertIfNonNull val $ \val' -> do
        val'' <- (newObject Poppler.Media.Media) val'
        return val''
    return result

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

@
'Data.GI.Base.Attributes.set' actionRendition [ #media 'Data.GI.Base.Attributes.:=' value ]
@
-}
setActionRenditionMedia :: MonadIO m => ActionRendition -> Ptr Poppler.Media.Media -> m ()
setActionRenditionMedia s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (val :: Ptr Poppler.Media.Media)

{- |
Set the value of the “@media@” 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' #media
@
-}
clearActionRenditionMedia :: MonadIO m => ActionRendition -> m ()
clearActionRenditionMedia s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (FP.nullPtr :: Ptr Poppler.Media.Media)

#if ENABLE_OVERLOADING
data ActionRenditionMediaFieldInfo
instance AttrInfo ActionRenditionMediaFieldInfo where
    type AttrAllowedOps ActionRenditionMediaFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint ActionRenditionMediaFieldInfo = (~) (Ptr Poppler.Media.Media)
    type AttrBaseTypeConstraint ActionRenditionMediaFieldInfo = (~) ActionRendition
    type AttrGetType ActionRenditionMediaFieldInfo = Maybe Poppler.Media.Media
    type AttrLabel ActionRenditionMediaFieldInfo = "media"
    type AttrOrigin ActionRenditionMediaFieldInfo = ActionRendition
    attrGet _ = getActionRenditionMedia
    attrSet _ = setActionRenditionMedia
    attrConstruct = undefined
    attrClear _ = clearActionRenditionMedia

actionRendition_media :: AttrLabelProxy "media"
actionRendition_media = AttrLabelProxy

#endif



#if ENABLE_OVERLOADING
instance O.HasAttributeList ActionRendition
type instance O.AttributeList ActionRendition = ActionRenditionAttributeList
type ActionRenditionAttributeList = ('[ '("type", ActionRenditionTypeFieldInfo), '("title", ActionRenditionTitleFieldInfo), '("op", ActionRenditionOpFieldInfo), '("media", ActionRenditionMediaFieldInfo)] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
type family ResolveActionRenditionMethod (t :: Symbol) (o :: *) :: * where
    ResolveActionRenditionMethod l o = O.MethodResolutionFailed l o

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