{- |
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.Poppler.Structs.ActionRendition
    ( 

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


 -- * Properties
-- ** media #attr:media#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    actionRendition_media                   ,
#endif
    clearActionRenditionMedia               ,
    getActionRenditionMedia                 ,
    setActionRenditionMedia                 ,


-- ** op #attr:op#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    actionRendition_op                      ,
#endif
    getActionRenditionOp                    ,
    setActionRenditionOp                    ,


-- ** title #attr:title#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    actionRendition_title                   ,
#endif
    clearActionRenditionTitle               ,
    getActionRenditionTitle                 ,
    setActionRenditionTitle                 ,


-- ** type #attr:type#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    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.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 {-# SOURCE #-} qualified GI.Poppler.Enums as Poppler.Enums
import {-# SOURCE #-} qualified GI.Poppler.Objects.Media as Poppler.Media

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


noActionRendition :: Maybe ActionRendition
noActionRendition = Nothing

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'

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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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


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

setActionRenditionTitle :: MonadIO m => ActionRendition -> CString -> m ()
setActionRenditionTitle s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: CString)

clearActionRenditionTitle :: MonadIO m => ActionRendition -> m ()
clearActionRenditionTitle s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (FP.nullPtr :: CString)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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


getActionRenditionOp :: MonadIO m => ActionRendition -> m Int32
getActionRenditionOp s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO Int32
    return val

setActionRenditionOp :: MonadIO m => ActionRendition -> Int32 -> m ()
setActionRenditionOp s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Int32)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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


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

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)

clearActionRenditionMedia :: MonadIO m => ActionRendition -> m ()
clearActionRenditionMedia s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (FP.nullPtr :: Ptr Poppler.Media.Media)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
instance O.HasAttributeList ActionRendition
type instance O.AttributeList ActionRendition = ActionRenditionAttributeList
type ActionRenditionAttributeList = ('[ '("type", ActionRenditionTypeFieldInfo), '("title", ActionRenditionTitleFieldInfo), '("op", ActionRenditionOpFieldInfo), '("media", ActionRenditionMediaFieldInfo)] :: [(Symbol, *)])
#endif

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

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

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveActionRenditionMethod t ActionRendition, O.MethodInfo info ActionRendition p) => O.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

#endif