{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- @GtkOverlayLayout@ is the layout manager used by @GtkOverlay@.
-- 
-- It places widgets as overlays on top of the main child.
-- 
-- This is not a reusable layout manager, since it expects its widget
-- to be a @GtkOverlay@. It only listed here so that its layout
-- properties get documented.

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

module GI.Gtk.Objects.OverlayLayout
    ( 

-- * Exported types
    OverlayLayout(..)                       ,
    IsOverlayLayout                         ,
    toOverlayLayout                         ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [allocate]("GI.Gtk.Objects.LayoutManager#g:method:allocate"), [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [layoutChanged]("GI.Gtk.Objects.LayoutManager#g:method:layoutChanged"), [measure]("GI.Gtk.Objects.LayoutManager#g:method:measure"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getData]("GI.GObject.Objects.Object#g:method:getData"), [getLayoutChild]("GI.Gtk.Objects.LayoutManager#g:method:getLayoutChild"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getRequestMode]("GI.Gtk.Objects.LayoutManager#g:method:getRequestMode"), [getWidget]("GI.Gtk.Objects.LayoutManager#g:method:getWidget").
-- 
-- ==== Setters
-- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveOverlayLayoutMethod              ,
#endif

-- ** new #method:new#

    overlayLayoutNew                        ,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.Kind as DK
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 GHC.Records as R

import qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Gtk.Objects.LayoutManager as Gtk.LayoutManager

-- | Memory-managed wrapper type.
newtype OverlayLayout = OverlayLayout (SP.ManagedPtr OverlayLayout)
    deriving (OverlayLayout -> OverlayLayout -> Bool
(OverlayLayout -> OverlayLayout -> Bool)
-> (OverlayLayout -> OverlayLayout -> Bool) -> Eq OverlayLayout
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OverlayLayout -> OverlayLayout -> Bool
== :: OverlayLayout -> OverlayLayout -> Bool
$c/= :: OverlayLayout -> OverlayLayout -> Bool
/= :: OverlayLayout -> OverlayLayout -> Bool
Eq)

instance SP.ManagedPtrNewtype OverlayLayout where
    toManagedPtr :: OverlayLayout -> ManagedPtr OverlayLayout
toManagedPtr (OverlayLayout ManagedPtr OverlayLayout
p) = ManagedPtr OverlayLayout
p

foreign import ccall "gtk_overlay_layout_get_type"
    c_gtk_overlay_layout_get_type :: IO B.Types.GType

instance B.Types.TypedObject OverlayLayout where
    glibType :: IO GType
glibType = IO GType
c_gtk_overlay_layout_get_type

instance B.Types.GObject OverlayLayout

-- | Type class for types which can be safely cast to `OverlayLayout`, for instance with `toOverlayLayout`.
class (SP.GObject o, O.IsDescendantOf OverlayLayout o) => IsOverlayLayout o
instance (SP.GObject o, O.IsDescendantOf OverlayLayout o) => IsOverlayLayout o

instance O.HasParentTypes OverlayLayout
type instance O.ParentTypes OverlayLayout = '[Gtk.LayoutManager.LayoutManager, GObject.Object.Object]

-- | Cast to `OverlayLayout`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toOverlayLayout :: (MIO.MonadIO m, IsOverlayLayout o) => o -> m OverlayLayout
toOverlayLayout :: forall (m :: * -> *) o.
(MonadIO m, IsOverlayLayout o) =>
o -> m OverlayLayout
toOverlayLayout = IO OverlayLayout -> m OverlayLayout
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO OverlayLayout -> m OverlayLayout)
-> (o -> IO OverlayLayout) -> o -> m OverlayLayout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr OverlayLayout -> OverlayLayout)
-> o -> IO OverlayLayout
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr OverlayLayout -> OverlayLayout
OverlayLayout

-- | Convert 'OverlayLayout' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe OverlayLayout) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gtk_overlay_layout_get_type
    gvalueSet_ :: Ptr GValue -> Maybe OverlayLayout -> IO ()
gvalueSet_ Ptr GValue
gv Maybe OverlayLayout
P.Nothing = Ptr GValue -> Ptr OverlayLayout -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr OverlayLayout
forall a. Ptr a
FP.nullPtr :: FP.Ptr OverlayLayout)
    gvalueSet_ Ptr GValue
gv (P.Just OverlayLayout
obj) = OverlayLayout -> (Ptr OverlayLayout -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr OverlayLayout
obj (Ptr GValue -> Ptr OverlayLayout -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe OverlayLayout)
gvalueGet_ Ptr GValue
gv = do
        Ptr OverlayLayout
ptr <- Ptr GValue -> IO (Ptr OverlayLayout)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr OverlayLayout)
        if Ptr OverlayLayout
ptr Ptr OverlayLayout -> Ptr OverlayLayout -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr OverlayLayout
forall a. Ptr a
FP.nullPtr
        then OverlayLayout -> Maybe OverlayLayout
forall a. a -> Maybe a
P.Just (OverlayLayout -> Maybe OverlayLayout)
-> IO OverlayLayout -> IO (Maybe OverlayLayout)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr OverlayLayout -> OverlayLayout)
-> Ptr OverlayLayout -> IO OverlayLayout
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr OverlayLayout -> OverlayLayout
OverlayLayout Ptr OverlayLayout
ptr
        else Maybe OverlayLayout -> IO (Maybe OverlayLayout)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe OverlayLayout
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveOverlayLayoutMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveOverlayLayoutMethod "allocate" o = Gtk.LayoutManager.LayoutManagerAllocateMethodInfo
    ResolveOverlayLayoutMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveOverlayLayoutMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveOverlayLayoutMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveOverlayLayoutMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveOverlayLayoutMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveOverlayLayoutMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveOverlayLayoutMethod "layoutChanged" o = Gtk.LayoutManager.LayoutManagerLayoutChangedMethodInfo
    ResolveOverlayLayoutMethod "measure" o = Gtk.LayoutManager.LayoutManagerMeasureMethodInfo
    ResolveOverlayLayoutMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveOverlayLayoutMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveOverlayLayoutMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveOverlayLayoutMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveOverlayLayoutMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveOverlayLayoutMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveOverlayLayoutMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveOverlayLayoutMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveOverlayLayoutMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveOverlayLayoutMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveOverlayLayoutMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveOverlayLayoutMethod "getLayoutChild" o = Gtk.LayoutManager.LayoutManagerGetLayoutChildMethodInfo
    ResolveOverlayLayoutMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveOverlayLayoutMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveOverlayLayoutMethod "getRequestMode" o = Gtk.LayoutManager.LayoutManagerGetRequestModeMethodInfo
    ResolveOverlayLayoutMethod "getWidget" o = Gtk.LayoutManager.LayoutManagerGetWidgetMethodInfo
    ResolveOverlayLayoutMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveOverlayLayoutMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveOverlayLayoutMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveOverlayLayoutMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveOverlayLayoutMethod t OverlayLayout, O.OverloadedMethod info OverlayLayout p) => OL.IsLabel t (OverlayLayout -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveOverlayLayoutMethod t OverlayLayout, O.OverloadedMethod info OverlayLayout p, R.HasField t OverlayLayout p) => R.HasField t OverlayLayout p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveOverlayLayoutMethod t OverlayLayout, O.OverloadedMethodInfo info OverlayLayout) => OL.IsLabel t (O.MethodProxy info OverlayLayout) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList OverlayLayout
type instance O.AttributeList OverlayLayout = OverlayLayoutAttributeList
type OverlayLayoutAttributeList = ('[ ] :: [(Symbol, DK.Type)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList OverlayLayout = OverlayLayoutSignalList
type OverlayLayoutSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, DK.Type)])

#endif

-- method OverlayLayout::new
-- method type : Constructor
-- Args: []
-- Lengths: []
-- returnType: Just
--               (TInterface Name { namespace = "Gtk" , name = "OverlayLayout" })
-- throws : False
-- Skip return : False

foreign import ccall "gtk_overlay_layout_new" gtk_overlay_layout_new :: 
    IO (Ptr OverlayLayout)

-- | Creates a new @GtkOverlayLayout@ instance.
overlayLayoutNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m OverlayLayout
    -- ^ __Returns:__ the newly created instance
overlayLayoutNew :: forall (m :: * -> *). (HasCallStack, MonadIO m) => m OverlayLayout
overlayLayoutNew  = IO OverlayLayout -> m OverlayLayout
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO OverlayLayout -> m OverlayLayout)
-> IO OverlayLayout -> m OverlayLayout
forall a b. (a -> b) -> a -> b
$ do
    Ptr OverlayLayout
result <- IO (Ptr OverlayLayout)
gtk_overlay_layout_new
    Text -> Ptr OverlayLayout -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"overlayLayoutNew" Ptr OverlayLayout
result
    OverlayLayout
result' <- ((ManagedPtr OverlayLayout -> OverlayLayout)
-> Ptr OverlayLayout -> IO OverlayLayout
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
wrapObject ManagedPtr OverlayLayout -> OverlayLayout
OverlayLayout) Ptr OverlayLayout
result
    OverlayLayout -> IO OverlayLayout
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return OverlayLayout
result'

#if defined(ENABLE_OVERLOADING)
#endif