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

-- * Exported types
    WebHitTestResult(..)                    ,
    IsWebHitTestResult                      ,
    toWebHitTestResult                      ,
    noWebHitTestResult                      ,


 -- * Methods
-- ** getNode #method:getNode#
    WebHitTestResultGetNodeMethodInfo       ,
    webHitTestResultGetNode                 ,




 -- * Properties
-- ** node #attr:node#
    WebHitTestResultNodePropertyInfo        ,
    constructWebHitTestResultNode           ,
    getWebHitTestResultNode                 ,
    webHitTestResultNode                    ,




    ) 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
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.DOMNode as WebKit2WebExtension.DOMNode
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.HitTestResult as WebKit2WebExtension.HitTestResult

newtype WebHitTestResult = WebHitTestResult (ManagedPtr WebHitTestResult)
foreign import ccall "webkit_web_hit_test_result_get_type"
    c_webkit_web_hit_test_result_get_type :: IO GType

instance GObject WebHitTestResult where
    gobjectType _ = c_webkit_web_hit_test_result_get_type
    

class GObject o => IsWebHitTestResult o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError WebHitTestResult a) =>
    IsWebHitTestResult a
#endif
instance IsWebHitTestResult WebHitTestResult
instance WebKit2WebExtension.HitTestResult.IsHitTestResult WebHitTestResult
instance GObject.Object.IsObject WebHitTestResult

toWebHitTestResult :: IsWebHitTestResult o => o -> IO WebHitTestResult
toWebHitTestResult = unsafeCastTo WebHitTestResult

noWebHitTestResult :: Maybe WebHitTestResult
noWebHitTestResult = Nothing

type family ResolveWebHitTestResultMethod (t :: Symbol) (o :: *) :: * where
    ResolveWebHitTestResultMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveWebHitTestResultMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveWebHitTestResultMethod "contextIsEditable" o = WebKit2WebExtension.HitTestResult.HitTestResultContextIsEditableMethodInfo
    ResolveWebHitTestResultMethod "contextIsImage" o = WebKit2WebExtension.HitTestResult.HitTestResultContextIsImageMethodInfo
    ResolveWebHitTestResultMethod "contextIsLink" o = WebKit2WebExtension.HitTestResult.HitTestResultContextIsLinkMethodInfo
    ResolveWebHitTestResultMethod "contextIsMedia" o = WebKit2WebExtension.HitTestResult.HitTestResultContextIsMediaMethodInfo
    ResolveWebHitTestResultMethod "contextIsScrollbar" o = WebKit2WebExtension.HitTestResult.HitTestResultContextIsScrollbarMethodInfo
    ResolveWebHitTestResultMethod "contextIsSelection" o = WebKit2WebExtension.HitTestResult.HitTestResultContextIsSelectionMethodInfo
    ResolveWebHitTestResultMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveWebHitTestResultMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveWebHitTestResultMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveWebHitTestResultMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveWebHitTestResultMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveWebHitTestResultMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveWebHitTestResultMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveWebHitTestResultMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveWebHitTestResultMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveWebHitTestResultMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveWebHitTestResultMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveWebHitTestResultMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveWebHitTestResultMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveWebHitTestResultMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveWebHitTestResultMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveWebHitTestResultMethod "getContext" o = WebKit2WebExtension.HitTestResult.HitTestResultGetContextMethodInfo
    ResolveWebHitTestResultMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveWebHitTestResultMethod "getImageUri" o = WebKit2WebExtension.HitTestResult.HitTestResultGetImageUriMethodInfo
    ResolveWebHitTestResultMethod "getLinkLabel" o = WebKit2WebExtension.HitTestResult.HitTestResultGetLinkLabelMethodInfo
    ResolveWebHitTestResultMethod "getLinkTitle" o = WebKit2WebExtension.HitTestResult.HitTestResultGetLinkTitleMethodInfo
    ResolveWebHitTestResultMethod "getLinkUri" o = WebKit2WebExtension.HitTestResult.HitTestResultGetLinkUriMethodInfo
    ResolveWebHitTestResultMethod "getMediaUri" o = WebKit2WebExtension.HitTestResult.HitTestResultGetMediaUriMethodInfo
    ResolveWebHitTestResultMethod "getNode" o = WebHitTestResultGetNodeMethodInfo
    ResolveWebHitTestResultMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveWebHitTestResultMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveWebHitTestResultMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveWebHitTestResultMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveWebHitTestResultMethod l o = O.MethodResolutionFailed l o

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

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveWebHitTestResultMethod t WebHitTestResult, O.MethodInfo info WebHitTestResult p) => O.IsLabel t (WebHitTestResult -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

-- VVV Prop "node"
   -- Type: TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMNode"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
   -- Nullable: (Just False,Nothing)

getWebHitTestResultNode :: (MonadIO m, IsWebHitTestResult o) => o -> m WebKit2WebExtension.DOMNode.DOMNode
getWebHitTestResultNode obj = liftIO $ checkUnexpectedNothing "getWebHitTestResultNode" $ getObjectPropertyObject obj "node" WebKit2WebExtension.DOMNode.DOMNode

constructWebHitTestResultNode :: (IsWebHitTestResult o, WebKit2WebExtension.DOMNode.IsDOMNode a) => a -> IO (GValueConstruct o)
constructWebHitTestResultNode val = constructObjectPropertyObject "node" (Just val)

data WebHitTestResultNodePropertyInfo
instance AttrInfo WebHitTestResultNodePropertyInfo where
    type AttrAllowedOps WebHitTestResultNodePropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint WebHitTestResultNodePropertyInfo = WebKit2WebExtension.DOMNode.IsDOMNode
    type AttrBaseTypeConstraint WebHitTestResultNodePropertyInfo = IsWebHitTestResult
    type AttrGetType WebHitTestResultNodePropertyInfo = WebKit2WebExtension.DOMNode.DOMNode
    type AttrLabel WebHitTestResultNodePropertyInfo = "node"
    type AttrOrigin WebHitTestResultNodePropertyInfo = WebHitTestResult
    attrGet _ = getWebHitTestResultNode
    attrSet _ = undefined
    attrConstruct _ = constructWebHitTestResultNode
    attrClear _ = undefined

instance O.HasAttributeList WebHitTestResult
type instance O.AttributeList WebHitTestResult = WebHitTestResultAttributeList
type WebHitTestResultAttributeList = ('[ '("context", WebKit2WebExtension.HitTestResult.HitTestResultContextPropertyInfo), '("imageUri", WebKit2WebExtension.HitTestResult.HitTestResultImageUriPropertyInfo), '("linkLabel", WebKit2WebExtension.HitTestResult.HitTestResultLinkLabelPropertyInfo), '("linkTitle", WebKit2WebExtension.HitTestResult.HitTestResultLinkTitlePropertyInfo), '("linkUri", WebKit2WebExtension.HitTestResult.HitTestResultLinkUriPropertyInfo), '("mediaUri", WebKit2WebExtension.HitTestResult.HitTestResultMediaUriPropertyInfo), '("node", WebHitTestResultNodePropertyInfo)] :: [(Symbol, *)])

webHitTestResultNode :: AttrLabelProxy "node"
webHitTestResultNode = AttrLabelProxy

type instance O.SignalList WebHitTestResult = WebHitTestResultSignalList
type WebHitTestResultSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

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

foreign import ccall "webkit_web_hit_test_result_get_node" webkit_web_hit_test_result_get_node :: 
    Ptr WebHitTestResult ->                 -- hit_test_result : TInterface (Name {namespace = "WebKit2WebExtension", name = "WebHitTestResult"})
    IO (Ptr WebKit2WebExtension.DOMNode.DOMNode)

{- |
Get the 'GI.WebKit2WebExtension.Objects.DOMNode.DOMNode' in the coordinates of the Hit Test.

@since 2.8
-}
webHitTestResultGetNode ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebHitTestResult a) =>
    a
    {- ^ /@hitTestResult@/: a 'GI.WebKit2WebExtension.Objects.WebHitTestResult.WebHitTestResult' -}
    -> m WebKit2WebExtension.DOMNode.DOMNode
    {- ^ __Returns:__ a 'GI.WebKit2WebExtension.Objects.DOMNode.DOMNode' -}
webHitTestResultGetNode hitTestResult = liftIO $ do
    hitTestResult' <- unsafeManagedPtrCastPtr hitTestResult
    result <- webkit_web_hit_test_result_get_node hitTestResult'
    checkUnexpectedReturnNULL "webHitTestResultGetNode" result
    result' <- (newObject WebKit2WebExtension.DOMNode.DOMNode) result
    touchManagedPtr hitTestResult
    return result'

data WebHitTestResultGetNodeMethodInfo
instance (signature ~ (m WebKit2WebExtension.DOMNode.DOMNode), MonadIO m, IsWebHitTestResult a) => O.MethodInfo WebHitTestResultGetNodeMethodInfo a signature where
    overloadedMethod _ = webHitTestResultGetNode