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

-- * Exported types
    Hyperlink(..)                           ,
    HyperlinkK                              ,
    toHyperlink                             ,
    noHyperlink                             ,


 -- * Methods
-- ** hyperlinkGetEndIndex
    hyperlinkGetEndIndex                    ,


-- ** hyperlinkGetNAnchors
    hyperlinkGetNAnchors                    ,


-- ** hyperlinkGetObject
    hyperlinkGetObject                      ,


-- ** hyperlinkGetStartIndex
    hyperlinkGetStartIndex                  ,


-- ** hyperlinkGetUri
    hyperlinkGetUri                         ,


-- ** hyperlinkIsInline
    hyperlinkIsInline                       ,


-- ** hyperlinkIsSelectedLink
    hyperlinkIsSelectedLink                 ,


-- ** hyperlinkIsValid
    hyperlinkIsValid                        ,




 -- * Properties
-- ** EndIndex
    HyperlinkEndIndexPropertyInfo           ,
    getHyperlinkEndIndex                    ,


-- ** NumberOfAnchors
    HyperlinkNumberOfAnchorsPropertyInfo    ,
    getHyperlinkNumberOfAnchors             ,


-- ** SelectedLink
    HyperlinkSelectedLinkPropertyInfo       ,
    getHyperlinkSelectedLink                ,


-- ** StartIndex
    HyperlinkStartIndexPropertyInfo         ,
    getHyperlinkStartIndex                  ,




 -- * Signals
-- ** LinkActivated
    HyperlinkLinkActivatedCallback          ,
    HyperlinkLinkActivatedCallbackC         ,
    HyperlinkLinkActivatedSignalInfo        ,
    afterHyperlinkLinkActivated             ,
    hyperlinkLinkActivatedCallbackWrapper   ,
    hyperlinkLinkActivatedClosure           ,
    mkHyperlinkLinkActivatedCallback        ,
    noHyperlinkLinkActivatedCallback        ,
    onHyperlinkLinkActivated                ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Atk.Types
import GI.Atk.Callbacks
import qualified GI.GObject as GObject

newtype Hyperlink = Hyperlink (ForeignPtr Hyperlink)
foreign import ccall "atk_hyperlink_get_type"
    c_atk_hyperlink_get_type :: IO GType

type instance ParentTypes Hyperlink = HyperlinkParentTypes
type HyperlinkParentTypes = '[GObject.Object, Action]

instance GObject Hyperlink where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_atk_hyperlink_get_type
    

class GObject o => HyperlinkK o
instance (GObject o, IsDescendantOf Hyperlink o) => HyperlinkK o

toHyperlink :: HyperlinkK o => o -> IO Hyperlink
toHyperlink = unsafeCastTo Hyperlink

noHyperlink :: Maybe Hyperlink
noHyperlink = Nothing

-- signal Hyperlink::link-activated
type HyperlinkLinkActivatedCallback =
    IO ()

noHyperlinkLinkActivatedCallback :: Maybe HyperlinkLinkActivatedCallback
noHyperlinkLinkActivatedCallback = Nothing

type HyperlinkLinkActivatedCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkHyperlinkLinkActivatedCallback :: HyperlinkLinkActivatedCallbackC -> IO (FunPtr HyperlinkLinkActivatedCallbackC)

hyperlinkLinkActivatedClosure :: HyperlinkLinkActivatedCallback -> IO Closure
hyperlinkLinkActivatedClosure cb = newCClosure =<< mkHyperlinkLinkActivatedCallback wrapped
    where wrapped = hyperlinkLinkActivatedCallbackWrapper cb

hyperlinkLinkActivatedCallbackWrapper ::
    HyperlinkLinkActivatedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
hyperlinkLinkActivatedCallbackWrapper _cb _ _ = do
    _cb 

onHyperlinkLinkActivated :: (GObject a, MonadIO m) => a -> HyperlinkLinkActivatedCallback -> m SignalHandlerId
onHyperlinkLinkActivated obj cb = liftIO $ connectHyperlinkLinkActivated obj cb SignalConnectBefore
afterHyperlinkLinkActivated :: (GObject a, MonadIO m) => a -> HyperlinkLinkActivatedCallback -> m SignalHandlerId
afterHyperlinkLinkActivated obj cb = connectHyperlinkLinkActivated obj cb SignalConnectAfter

connectHyperlinkLinkActivated :: (GObject a, MonadIO m) =>
                                 a -> HyperlinkLinkActivatedCallback -> SignalConnectMode -> m SignalHandlerId
connectHyperlinkLinkActivated obj cb after = liftIO $ do
    cb' <- mkHyperlinkLinkActivatedCallback (hyperlinkLinkActivatedCallbackWrapper cb)
    connectSignalFunPtr obj "link-activated" cb' after

-- VVV Prop "end-index"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable]

getHyperlinkEndIndex :: (MonadIO m, HyperlinkK o) => o -> m Int32
getHyperlinkEndIndex obj = liftIO $ getObjectPropertyCInt obj "end-index"

data HyperlinkEndIndexPropertyInfo
instance AttrInfo HyperlinkEndIndexPropertyInfo where
    type AttrAllowedOps HyperlinkEndIndexPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint HyperlinkEndIndexPropertyInfo = (~) ()
    type AttrBaseTypeConstraint HyperlinkEndIndexPropertyInfo = HyperlinkK
    type AttrGetType HyperlinkEndIndexPropertyInfo = Int32
    type AttrLabel HyperlinkEndIndexPropertyInfo = "Hyperlink::end-index"
    attrGet _ = getHyperlinkEndIndex
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "number-of-anchors"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable]

getHyperlinkNumberOfAnchors :: (MonadIO m, HyperlinkK o) => o -> m Int32
getHyperlinkNumberOfAnchors obj = liftIO $ getObjectPropertyCInt obj "number-of-anchors"

data HyperlinkNumberOfAnchorsPropertyInfo
instance AttrInfo HyperlinkNumberOfAnchorsPropertyInfo where
    type AttrAllowedOps HyperlinkNumberOfAnchorsPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint HyperlinkNumberOfAnchorsPropertyInfo = (~) ()
    type AttrBaseTypeConstraint HyperlinkNumberOfAnchorsPropertyInfo = HyperlinkK
    type AttrGetType HyperlinkNumberOfAnchorsPropertyInfo = Int32
    type AttrLabel HyperlinkNumberOfAnchorsPropertyInfo = "Hyperlink::number-of-anchors"
    attrGet _ = getHyperlinkNumberOfAnchors
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "selected-link"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable]

getHyperlinkSelectedLink :: (MonadIO m, HyperlinkK o) => o -> m Bool
getHyperlinkSelectedLink obj = liftIO $ getObjectPropertyBool obj "selected-link"

data HyperlinkSelectedLinkPropertyInfo
instance AttrInfo HyperlinkSelectedLinkPropertyInfo where
    type AttrAllowedOps HyperlinkSelectedLinkPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint HyperlinkSelectedLinkPropertyInfo = (~) ()
    type AttrBaseTypeConstraint HyperlinkSelectedLinkPropertyInfo = HyperlinkK
    type AttrGetType HyperlinkSelectedLinkPropertyInfo = Bool
    type AttrLabel HyperlinkSelectedLinkPropertyInfo = "Hyperlink::selected-link"
    attrGet _ = getHyperlinkSelectedLink
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "start-index"
   -- Type: TBasicType TInt32
   -- Flags: [PropertyReadable]

getHyperlinkStartIndex :: (MonadIO m, HyperlinkK o) => o -> m Int32
getHyperlinkStartIndex obj = liftIO $ getObjectPropertyCInt obj "start-index"

data HyperlinkStartIndexPropertyInfo
instance AttrInfo HyperlinkStartIndexPropertyInfo where
    type AttrAllowedOps HyperlinkStartIndexPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint HyperlinkStartIndexPropertyInfo = (~) ()
    type AttrBaseTypeConstraint HyperlinkStartIndexPropertyInfo = HyperlinkK
    type AttrGetType HyperlinkStartIndexPropertyInfo = Int32
    type AttrLabel HyperlinkStartIndexPropertyInfo = "Hyperlink::start-index"
    attrGet _ = getHyperlinkStartIndex
    attrSet _ = undefined
    attrConstruct _ = undefined

type instance AttributeList Hyperlink = HyperlinkAttributeList
type HyperlinkAttributeList = ('[ '("end-index", HyperlinkEndIndexPropertyInfo), '("number-of-anchors", HyperlinkNumberOfAnchorsPropertyInfo), '("selected-link", HyperlinkSelectedLinkPropertyInfo), '("start-index", HyperlinkStartIndexPropertyInfo)] :: [(Symbol, *)])

data HyperlinkLinkActivatedSignalInfo
instance SignalInfo HyperlinkLinkActivatedSignalInfo where
    type HaskellCallbackType HyperlinkLinkActivatedSignalInfo = HyperlinkLinkActivatedCallback
    connectSignal _ = connectHyperlinkLinkActivated

type instance SignalList Hyperlink = HyperlinkSignalList
type HyperlinkSignalList = ('[ '("link-activated", HyperlinkLinkActivatedSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method Hyperlink::get_end_index
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TInt32
-- throws : False
-- Skip return : False

foreign import ccall "atk_hyperlink_get_end_index" atk_hyperlink_get_end_index :: 
    Ptr Hyperlink ->                        -- _obj : TInterface "Atk" "Hyperlink"
    IO Int32


hyperlinkGetEndIndex ::
    (MonadIO m, HyperlinkK a) =>
    a ->                                    -- _obj
    m Int32
hyperlinkGetEndIndex _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_hyperlink_get_end_index _obj'
    touchManagedPtr _obj
    return result

-- method Hyperlink::get_n_anchors
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TInt32
-- throws : False
-- Skip return : False

foreign import ccall "atk_hyperlink_get_n_anchors" atk_hyperlink_get_n_anchors :: 
    Ptr Hyperlink ->                        -- _obj : TInterface "Atk" "Hyperlink"
    IO Int32


hyperlinkGetNAnchors ::
    (MonadIO m, HyperlinkK a) =>
    a ->                                    -- _obj
    m Int32
hyperlinkGetNAnchors _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_hyperlink_get_n_anchors _obj'
    touchManagedPtr _obj
    return result

-- method Hyperlink::get_object
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "i", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "i", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Atk" "Object"
-- throws : False
-- Skip return : False

foreign import ccall "atk_hyperlink_get_object" atk_hyperlink_get_object :: 
    Ptr Hyperlink ->                        -- _obj : TInterface "Atk" "Hyperlink"
    Int32 ->                                -- i : TBasicType TInt32
    IO (Ptr Object)


hyperlinkGetObject ::
    (MonadIO m, HyperlinkK a) =>
    a ->                                    -- _obj
    Int32 ->                                -- i
    m Object
hyperlinkGetObject _obj i = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_hyperlink_get_object _obj' i
    checkUnexpectedReturnNULL "atk_hyperlink_get_object" result
    result' <- (newObject Object) result
    touchManagedPtr _obj
    return result'

-- method Hyperlink::get_start_index
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TInt32
-- throws : False
-- Skip return : False

foreign import ccall "atk_hyperlink_get_start_index" atk_hyperlink_get_start_index :: 
    Ptr Hyperlink ->                        -- _obj : TInterface "Atk" "Hyperlink"
    IO Int32


hyperlinkGetStartIndex ::
    (MonadIO m, HyperlinkK a) =>
    a ->                                    -- _obj
    m Int32
hyperlinkGetStartIndex _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_hyperlink_get_start_index _obj'
    touchManagedPtr _obj
    return result

-- method Hyperlink::get_uri
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "i", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "i", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "atk_hyperlink_get_uri" atk_hyperlink_get_uri :: 
    Ptr Hyperlink ->                        -- _obj : TInterface "Atk" "Hyperlink"
    Int32 ->                                -- i : TBasicType TInt32
    IO CString


hyperlinkGetUri ::
    (MonadIO m, HyperlinkK a) =>
    a ->                                    -- _obj
    Int32 ->                                -- i
    m T.Text
hyperlinkGetUri _obj i = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_hyperlink_get_uri _obj' i
    checkUnexpectedReturnNULL "atk_hyperlink_get_uri" result
    result' <- cstringToText result
    freeMem result
    touchManagedPtr _obj
    return result'

-- method Hyperlink::is_inline
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "atk_hyperlink_is_inline" atk_hyperlink_is_inline :: 
    Ptr Hyperlink ->                        -- _obj : TInterface "Atk" "Hyperlink"
    IO CInt


hyperlinkIsInline ::
    (MonadIO m, HyperlinkK a) =>
    a ->                                    -- _obj
    m Bool
hyperlinkIsInline _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_hyperlink_is_inline _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

-- method Hyperlink::is_selected_link
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "atk_hyperlink_is_selected_link" atk_hyperlink_is_selected_link :: 
    Ptr Hyperlink ->                        -- _obj : TInterface "Atk" "Hyperlink"
    IO CInt

{-# DEPRECATED hyperlinkIsSelectedLink ["(Since version 1.8)","Please use ATK_STATE_FOCUSABLE for all links,","and ATK_STATE_FOCUSED for focused links."]#-}
hyperlinkIsSelectedLink ::
    (MonadIO m, HyperlinkK a) =>
    a ->                                    -- _obj
    m Bool
hyperlinkIsSelectedLink _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_hyperlink_is_selected_link _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

-- method Hyperlink::is_valid
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Atk" "Hyperlink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "atk_hyperlink_is_valid" atk_hyperlink_is_valid :: 
    Ptr Hyperlink ->                        -- _obj : TInterface "Atk" "Hyperlink"
    IO CInt


hyperlinkIsValid ::
    (MonadIO m, HyperlinkK a) =>
    a ->                                    -- _obj
    m Bool
hyperlinkIsValid _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_hyperlink_is_valid _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'