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

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


 -- * Methods
-- ** getRadioButtonGroupId #method:getRadioButtonGroupId#

#if ENABLE_OVERLOADING
    LayerGetRadioButtonGroupIdMethodInfo    ,
#endif
    layerGetRadioButtonGroupId              ,


-- ** getTitle #method:getTitle#

#if ENABLE_OVERLOADING
    LayerGetTitleMethodInfo                 ,
#endif
    layerGetTitle                           ,


-- ** hide #method:hide#

#if ENABLE_OVERLOADING
    LayerHideMethodInfo                     ,
#endif
    layerHide                               ,


-- ** isParent #method:isParent#

#if ENABLE_OVERLOADING
    LayerIsParentMethodInfo                 ,
#endif
    layerIsParent                           ,


-- ** isVisible #method:isVisible#

#if ENABLE_OVERLOADING
    LayerIsVisibleMethodInfo                ,
#endif
    layerIsVisible                          ,


-- ** show #method:show#

#if ENABLE_OVERLOADING
    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.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 qualified GI.GObject.Objects.Object as GObject.Object

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


-- | Type class for types which can be safely cast to `Layer`, for instance with `toLayer`.
class (GObject o, O.IsDescendantOf Layer o) => IsLayer o
instance (GObject o, O.IsDescendantOf Layer o) => IsLayer o

instance O.HasParentTypes Layer
type instance O.ParentTypes Layer = '[GObject.Object.Object]

-- | Cast to `Layer`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toLayer :: (MonadIO m, IsLayer o) => o -> m Layer
toLayer = liftIO . unsafeCastTo Layer

-- | A convenience alias for `Nothing` :: `Maybe` `Layer`.
noLayer :: Maybe Layer
noLayer = Nothing

#if ENABLE_OVERLOADING
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 "getv" o = GObject.Object.ObjectGetvMethodInfo
    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 "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) => OL.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

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

#if ENABLE_OVERLOADING
#endif

#if ENABLE_OVERLOADING
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 ENABLE_OVERLOADING
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 ENABLE_OVERLOADING
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 ENABLE_OVERLOADING
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 ENABLE_OVERLOADING
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 ENABLE_OVERLOADING
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 ENABLE_OVERLOADING
data LayerShowMethodInfo
instance (signature ~ (m ()), MonadIO m, IsLayer a) => O.MethodInfo LayerShowMethodInfo a signature where
    overloadedMethod _ = layerShow

#endif