{- |
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.Objects.Layer
    ( 

-- * Exported types
    Layer(..)                               ,
    IsLayer                                 ,
    toLayer                                 ,
    noLayer                                 ,


 -- * Methods
-- ** getRadioButtonGroupId #method:getRadioButtonGroupId#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LayerGetRadioButtonGroupIdMethodInfo    ,
#endif
    layerGetRadioButtonGroupId              ,


-- ** getTitle #method:getTitle#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LayerGetTitleMethodInfo                 ,
#endif
    layerGetTitle                           ,


-- ** hide #method:hide#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LayerHideMethodInfo                     ,
#endif
    layerHide                               ,


-- ** isParent #method:isParent#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LayerIsParentMethodInfo                 ,
#endif
    layerIsParent                           ,


-- ** isVisible #method:isVisible#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LayerIsVisibleMethodInfo                ,
#endif
    layerIsVisible                          ,


-- ** show #method:show#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LayerShowMethodInfo                     ,
#endif
    layerShow                               ,




    ) 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 qualified GI.GObject.Objects.Object as GObject.Object

newtype Layer = Layer (ManagedPtr Layer)
foreign import ccall "poppler_layer_get_type"
    c_poppler_layer_get_type :: IO GType

instance GObject Layer where
    gobjectType _ = c_poppler_layer_get_type
    

class GObject o => IsLayer o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError Layer a) =>
    IsLayer a
#endif
instance IsLayer Layer
instance GObject.Object.IsObject Layer

toLayer :: (MonadIO m, IsLayer o) => o -> m Layer
toLayer = liftIO . unsafeCastTo Layer

noLayer :: Maybe Layer
noLayer = Nothing

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type family ResolveLayerMethod (t :: Symbol) (o :: *) :: * where
    ResolveLayerMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveLayerMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveLayerMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveLayerMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveLayerMethod "hide" o = LayerHideMethodInfo
    ResolveLayerMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveLayerMethod "isParent" o = LayerIsParentMethodInfo
    ResolveLayerMethod "isVisible" o = LayerIsVisibleMethodInfo
    ResolveLayerMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveLayerMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveLayerMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveLayerMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveLayerMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveLayerMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveLayerMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveLayerMethod "show" o = LayerShowMethodInfo
    ResolveLayerMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveLayerMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveLayerMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveLayerMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveLayerMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveLayerMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveLayerMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveLayerMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveLayerMethod "getRadioButtonGroupId" o = LayerGetRadioButtonGroupIdMethodInfo
    ResolveLayerMethod "getTitle" o = LayerGetTitleMethodInfo
    ResolveLayerMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveLayerMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveLayerMethod l o = O.MethodResolutionFailed l o

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

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

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
instance O.HasAttributeList Layer
type instance O.AttributeList Layer = LayerAttributeList
type LayerAttributeList = ('[ ] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type instance O.SignalList Layer = LayerSignalList
type LayerSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method Layer::get_radio_button_group_id
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "layer", argType = TInterface (Name {namespace = "Poppler", name = "Layer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerLayer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : False
-- Skip return : False

foreign import ccall "poppler_layer_get_radio_button_group_id" poppler_layer_get_radio_button_group_id :: 
    Ptr Layer ->                            -- layer : TInterface (Name {namespace = "Poppler", name = "Layer"})
    IO Int32

{- |
Returns the numeric ID the radio button group associated with /@layer@/.

@since 0.12
-}
layerGetRadioButtonGroupId ::
    (B.CallStack.HasCallStack, MonadIO m, IsLayer a) =>
    a
    {- ^ /@layer@/: a 'GI.Poppler.Objects.Layer.Layer' -}
    -> m Int32
    {- ^ __Returns:__ the ID of the radio button group associated with /@layer@/,
or 0 if the layer is not associated to any radio button group -}
layerGetRadioButtonGroupId layer = liftIO $ do
    layer' <- unsafeManagedPtrCastPtr layer
    result <- poppler_layer_get_radio_button_group_id layer'
    touchManagedPtr layer
    return result

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data LayerGetRadioButtonGroupIdMethodInfo
instance (signature ~ (m Int32), MonadIO m, IsLayer a) => O.MethodInfo LayerGetRadioButtonGroupIdMethodInfo a signature where
    overloadedMethod _ = layerGetRadioButtonGroupId

#endif

-- method Layer::get_title
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "layer", argType = TInterface (Name {namespace = "Poppler", name = "Layer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerLayer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "poppler_layer_get_title" poppler_layer_get_title :: 
    Ptr Layer ->                            -- layer : TInterface (Name {namespace = "Poppler", name = "Layer"})
    IO CString

{- |
Returns the name of the layer suitable for
presentation as a title in a viewer\'s GUI

@since 0.12
-}
layerGetTitle ::
    (B.CallStack.HasCallStack, MonadIO m, IsLayer a) =>
    a
    {- ^ /@layer@/: a 'GI.Poppler.Objects.Layer.Layer' -}
    -> m T.Text
    {- ^ __Returns:__ a string containing the title of the layer -}
layerGetTitle layer = liftIO $ do
    layer' <- unsafeManagedPtrCastPtr layer
    result <- poppler_layer_get_title layer'
    checkUnexpectedReturnNULL "layerGetTitle" result
    result' <- cstringToText result
    touchManagedPtr layer
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data LayerGetTitleMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsLayer a) => O.MethodInfo LayerGetTitleMethodInfo a signature where
    overloadedMethod _ = layerGetTitle

#endif

-- method Layer::hide
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "layer", argType = TInterface (Name {namespace = "Poppler", name = "Layer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerLayer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "poppler_layer_hide" poppler_layer_hide :: 
    Ptr Layer ->                            -- layer : TInterface (Name {namespace = "Poppler", name = "Layer"})
    IO ()

{- |
Hides /@layer@/. If /@layer@/ is the parent of other nested layers,
such layers will be also hidden and will be blocked until /@layer@/
is shown again

@since 0.12
-}
layerHide ::
    (B.CallStack.HasCallStack, MonadIO m, IsLayer a) =>
    a
    {- ^ /@layer@/: a 'GI.Poppler.Objects.Layer.Layer' -}
    -> m ()
layerHide layer = liftIO $ do
    layer' <- unsafeManagedPtrCastPtr layer
    poppler_layer_hide layer'
    touchManagedPtr layer
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data LayerHideMethodInfo
instance (signature ~ (m ()), MonadIO m, IsLayer a) => O.MethodInfo LayerHideMethodInfo a signature where
    overloadedMethod _ = layerHide

#endif

-- method Layer::is_parent
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "layer", argType = TInterface (Name {namespace = "Poppler", name = "Layer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerLayer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "poppler_layer_is_parent" poppler_layer_is_parent :: 
    Ptr Layer ->                            -- layer : TInterface (Name {namespace = "Poppler", name = "Layer"})
    IO CInt

{- |
Returns whether /@layer@/ is parent of other nested layers.

@since 0.12
-}
layerIsParent ::
    (B.CallStack.HasCallStack, MonadIO m, IsLayer a) =>
    a
    {- ^ /@layer@/: a 'GI.Poppler.Objects.Layer.Layer' -}
    -> m Bool
    {- ^ __Returns:__ 'True' if /@layer@/ is a parent layer -}
layerIsParent layer = liftIO $ do
    layer' <- unsafeManagedPtrCastPtr layer
    result <- poppler_layer_is_parent layer'
    let result' = (/= 0) result
    touchManagedPtr layer
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data LayerIsParentMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsLayer a) => O.MethodInfo LayerIsParentMethodInfo a signature where
    overloadedMethod _ = layerIsParent

#endif

-- method Layer::is_visible
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "layer", argType = TInterface (Name {namespace = "Poppler", name = "Layer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerLayer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "poppler_layer_is_visible" poppler_layer_is_visible :: 
    Ptr Layer ->                            -- layer : TInterface (Name {namespace = "Poppler", name = "Layer"})
    IO CInt

{- |
Returns whether /@layer@/ is visible

@since 0.12
-}
layerIsVisible ::
    (B.CallStack.HasCallStack, MonadIO m, IsLayer a) =>
    a
    {- ^ /@layer@/: a 'GI.Poppler.Objects.Layer.Layer' -}
    -> m Bool
    {- ^ __Returns:__ 'True' if /@layer@/ is visible -}
layerIsVisible layer = liftIO $ do
    layer' <- unsafeManagedPtrCastPtr layer
    result <- poppler_layer_is_visible layer'
    let result' = (/= 0) result
    touchManagedPtr layer
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data LayerIsVisibleMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsLayer a) => O.MethodInfo LayerIsVisibleMethodInfo a signature where
    overloadedMethod _ = layerIsVisible

#endif

-- method Layer::show
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "layer", argType = TInterface (Name {namespace = "Poppler", name = "Layer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerLayer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "poppler_layer_show" poppler_layer_show :: 
    Ptr Layer ->                            -- layer : TInterface (Name {namespace = "Poppler", name = "Layer"})
    IO ()

{- |
Shows /@layer@/

@since 0.12
-}
layerShow ::
    (B.CallStack.HasCallStack, MonadIO m, IsLayer a) =>
    a
    {- ^ /@layer@/: a 'GI.Poppler.Objects.Layer.Layer' -}
    -> m ()
layerShow layer = liftIO $ do
    layer' <- unsafeManagedPtrCastPtr layer
    poppler_layer_show layer'
    touchManagedPtr layer
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data LayerShowMethodInfo
instance (signature ~ (m ()), MonadIO m, IsLayer a) => O.MethodInfo LayerShowMethodInfo a signature where
    overloadedMethod _ = layerShow

#endif