{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- An [class/@animationTarget@/] that calls a given callback during the
-- animation.
-- 
-- /Since: 1.0/

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

module GI.Adw.Objects.CallbackAnimationTarget
    ( 
#if defined(ENABLE_OVERLOADING)
    CallbackAnimationTargetNewMethodInfo    ,
#endif

-- * Exported types
    CallbackAnimationTarget(..)             ,
    IsCallbackAnimationTarget               ,
    toCallbackAnimationTarget               ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [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"), [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"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata").
-- 
-- ==== 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)
    ResolveCallbackAnimationTargetMethod    ,
#endif



    ) 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.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 {-# SOURCE #-} qualified GI.Adw.Objects.AnimationTarget as Adw.AnimationTarget
import qualified GI.GObject.Objects.Object as GObject.Object

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

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

foreign import ccall "adw_callback_animation_target_get_type"
    c_adw_callback_animation_target_get_type :: IO B.Types.GType

instance B.Types.TypedObject CallbackAnimationTarget where
    glibType :: IO GType
glibType = IO GType
c_adw_callback_animation_target_get_type

instance B.Types.GObject CallbackAnimationTarget

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

instance O.HasParentTypes CallbackAnimationTarget
type instance O.ParentTypes CallbackAnimationTarget = '[Adw.AnimationTarget.AnimationTarget, GObject.Object.Object]

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

-- | Convert 'CallbackAnimationTarget' 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 CallbackAnimationTarget) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_adw_callback_animation_target_get_type
    gvalueSet_ :: Ptr GValue -> Maybe CallbackAnimationTarget -> IO ()
gvalueSet_ Ptr GValue
gv Maybe CallbackAnimationTarget
P.Nothing = Ptr GValue -> Ptr CallbackAnimationTarget -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr CallbackAnimationTarget
forall a. Ptr a
FP.nullPtr :: FP.Ptr CallbackAnimationTarget)
    gvalueSet_ Ptr GValue
gv (P.Just CallbackAnimationTarget
obj) = CallbackAnimationTarget
-> (Ptr CallbackAnimationTarget -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr CallbackAnimationTarget
obj (Ptr GValue -> Ptr CallbackAnimationTarget -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe CallbackAnimationTarget)
gvalueGet_ Ptr GValue
gv = do
        Ptr CallbackAnimationTarget
ptr <- Ptr GValue -> IO (Ptr CallbackAnimationTarget)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr CallbackAnimationTarget)
        if Ptr CallbackAnimationTarget
ptr Ptr CallbackAnimationTarget -> Ptr CallbackAnimationTarget -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr CallbackAnimationTarget
forall a. Ptr a
FP.nullPtr
        then CallbackAnimationTarget -> Maybe CallbackAnimationTarget
forall a. a -> Maybe a
P.Just (CallbackAnimationTarget -> Maybe CallbackAnimationTarget)
-> IO CallbackAnimationTarget -> IO (Maybe CallbackAnimationTarget)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr CallbackAnimationTarget -> CallbackAnimationTarget)
-> Ptr CallbackAnimationTarget -> IO CallbackAnimationTarget
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr CallbackAnimationTarget -> CallbackAnimationTarget
CallbackAnimationTarget Ptr CallbackAnimationTarget
ptr
        else Maybe CallbackAnimationTarget -> IO (Maybe CallbackAnimationTarget)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe CallbackAnimationTarget
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveCallbackAnimationTargetMethod (t :: Symbol) (o :: *) :: * where
    ResolveCallbackAnimationTargetMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveCallbackAnimationTargetMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveCallbackAnimationTargetMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveCallbackAnimationTargetMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveCallbackAnimationTargetMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveCallbackAnimationTargetMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveCallbackAnimationTargetMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveCallbackAnimationTargetMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveCallbackAnimationTargetMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveCallbackAnimationTargetMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveCallbackAnimationTargetMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveCallbackAnimationTargetMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveCallbackAnimationTargetMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveCallbackAnimationTargetMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveCallbackAnimationTargetMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveCallbackAnimationTargetMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveCallbackAnimationTargetMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveCallbackAnimationTargetMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveCallbackAnimationTargetMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveCallbackAnimationTargetMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveCallbackAnimationTargetMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveCallbackAnimationTargetMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveCallbackAnimationTargetMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveCallbackAnimationTargetMethod t CallbackAnimationTarget, O.OverloadedMethod info CallbackAnimationTarget p) => OL.IsLabel t (CallbackAnimationTarget -> 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 ~ ResolveCallbackAnimationTargetMethod t CallbackAnimationTarget, O.OverloadedMethod info CallbackAnimationTarget p, R.HasField t CallbackAnimationTarget p) => R.HasField t CallbackAnimationTarget p where
    getField = O.overloadedMethod @info

#endif

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

#endif

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

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList CallbackAnimationTarget = CallbackAnimationTargetSignalList
type CallbackAnimationTargetSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- XXX Could not generate method CallbackAnimationTarget::new
-- Bad introspection data: Closure "userData" is not a callback.
#if defined(ENABLE_OVERLOADING)
-- XXX: Dummy instance, since code generation failed.
-- Please file a bug at http://github.com/haskell-gi/haskell-gi.
data CallbackAnimationTargetNewMethodInfo
instance (p ~ (), o ~ O.UnsupportedMethodError "new" CallbackAnimationTarget) => O.OverloadedMethod CallbackAnimationTargetNewMethodInfo o p where
    overloadedMethod = undefined

instance (o ~ O.UnsupportedMethodError "new" CallbackAnimationTarget) => O.OverloadedMethodInfo CallbackAnimationTargetNewMethodInfo o where
    overloadedMethodInfo = undefined

#endif