{- |
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.GtkSource.Interfaces.CompletionProvider
    (

-- * Exported types
    CompletionProvider(..)                  ,
    noCompletionProvider                    ,
    IsCompletionProvider                    ,
    toCompletionProvider                    ,


 -- * Methods
-- ** activateProposal #method:activateProposal#

#if ENABLE_OVERLOADING
    CompletionProviderActivateProposalMethodInfo,
#endif
    completionProviderActivateProposal      ,


-- ** getActivation #method:getActivation#

#if ENABLE_OVERLOADING
    CompletionProviderGetActivationMethodInfo,
#endif
    completionProviderGetActivation         ,


-- ** getGicon #method:getGicon#

#if ENABLE_OVERLOADING
    CompletionProviderGetGiconMethodInfo    ,
#endif
    completionProviderGetGicon              ,


-- ** getIcon #method:getIcon#

#if ENABLE_OVERLOADING
    CompletionProviderGetIconMethodInfo     ,
#endif
    completionProviderGetIcon               ,


-- ** getIconName #method:getIconName#

#if ENABLE_OVERLOADING
    CompletionProviderGetIconNameMethodInfo ,
#endif
    completionProviderGetIconName           ,


-- ** getInfoWidget #method:getInfoWidget#

#if ENABLE_OVERLOADING
    CompletionProviderGetInfoWidgetMethodInfo,
#endif
    completionProviderGetInfoWidget         ,


-- ** getInteractiveDelay #method:getInteractiveDelay#

#if ENABLE_OVERLOADING
    CompletionProviderGetInteractiveDelayMethodInfo,
#endif
    completionProviderGetInteractiveDelay   ,


-- ** getName #method:getName#

#if ENABLE_OVERLOADING
    CompletionProviderGetNameMethodInfo     ,
#endif
    completionProviderGetName               ,


-- ** getPriority #method:getPriority#

#if ENABLE_OVERLOADING
    CompletionProviderGetPriorityMethodInfo ,
#endif
    completionProviderGetPriority           ,


-- ** getStartIter #method:getStartIter#

#if ENABLE_OVERLOADING
    CompletionProviderGetStartIterMethodInfo,
#endif
    completionProviderGetStartIter          ,


-- ** match #method:match#

#if ENABLE_OVERLOADING
    CompletionProviderMatchMethodInfo       ,
#endif
    completionProviderMatch                 ,


-- ** populate #method:populate#

#if ENABLE_OVERLOADING
    CompletionProviderPopulateMethodInfo    ,
#endif
    completionProviderPopulate              ,


-- ** updateInfo #method:updateInfo#

#if ENABLE_OVERLOADING
    CompletionProviderUpdateInfoMethodInfo  ,
#endif
    completionProviderUpdateInfo            ,




    ) 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
import qualified GI.GdkPixbuf.Objects.Pixbuf as GdkPixbuf.Pixbuf
import qualified GI.Gio.Interfaces.Icon as Gio.Icon
import qualified GI.Gtk.Objects.Widget as Gtk.Widget
import qualified GI.Gtk.Structs.TextIter as Gtk.TextIter
import {-# SOURCE #-} qualified GI.GtkSource.Flags as GtkSource.Flags
import {-# SOURCE #-} qualified GI.GtkSource.Interfaces.CompletionProposal as GtkSource.CompletionProposal
import {-# SOURCE #-} qualified GI.GtkSource.Objects.CompletionContext as GtkSource.CompletionContext
import {-# SOURCE #-} qualified GI.GtkSource.Objects.CompletionInfo as GtkSource.CompletionInfo

-- interface CompletionProvider 
-- | Memory-managed wrapper type.
newtype CompletionProvider = CompletionProvider (ManagedPtr CompletionProvider)
-- | A convenience alias for `Nothing` :: `Maybe` `CompletionProvider`.
noCompletionProvider :: Maybe CompletionProvider
noCompletionProvider = Nothing

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

#endif

foreign import ccall "gtk_source_completion_provider_get_type"
    c_gtk_source_completion_provider_get_type :: IO GType

instance GObject CompletionProvider where
    gobjectType = c_gtk_source_completion_provider_get_type


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

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

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

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

#if ENABLE_OVERLOADING
#endif

#if ENABLE_OVERLOADING
type family ResolveCompletionProviderMethod (t :: Symbol) (o :: *) :: * where
    ResolveCompletionProviderMethod "activateProposal" o = CompletionProviderActivateProposalMethodInfo
    ResolveCompletionProviderMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveCompletionProviderMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveCompletionProviderMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveCompletionProviderMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveCompletionProviderMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveCompletionProviderMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveCompletionProviderMethod "match" o = CompletionProviderMatchMethodInfo
    ResolveCompletionProviderMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveCompletionProviderMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveCompletionProviderMethod "populate" o = CompletionProviderPopulateMethodInfo
    ResolveCompletionProviderMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveCompletionProviderMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveCompletionProviderMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveCompletionProviderMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveCompletionProviderMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveCompletionProviderMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveCompletionProviderMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveCompletionProviderMethod "updateInfo" o = CompletionProviderUpdateInfoMethodInfo
    ResolveCompletionProviderMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveCompletionProviderMethod "getActivation" o = CompletionProviderGetActivationMethodInfo
    ResolveCompletionProviderMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveCompletionProviderMethod "getGicon" o = CompletionProviderGetGiconMethodInfo
    ResolveCompletionProviderMethod "getIcon" o = CompletionProviderGetIconMethodInfo
    ResolveCompletionProviderMethod "getIconName" o = CompletionProviderGetIconNameMethodInfo
    ResolveCompletionProviderMethod "getInfoWidget" o = CompletionProviderGetInfoWidgetMethodInfo
    ResolveCompletionProviderMethod "getInteractiveDelay" o = CompletionProviderGetInteractiveDelayMethodInfo
    ResolveCompletionProviderMethod "getName" o = CompletionProviderGetNameMethodInfo
    ResolveCompletionProviderMethod "getPriority" o = CompletionProviderGetPriorityMethodInfo
    ResolveCompletionProviderMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveCompletionProviderMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveCompletionProviderMethod "getStartIter" o = CompletionProviderGetStartIterMethodInfo
    ResolveCompletionProviderMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveCompletionProviderMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveCompletionProviderMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveCompletionProviderMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveCompletionProviderMethod t CompletionProvider, O.MethodInfo info CompletionProvider p) => OL.IsLabel t (CompletionProvider -> 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

-- method CompletionProvider::activate_proposal
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "proposal", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProposal"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProposal.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "iter", argType = TInterface (Name {namespace = "Gtk", name = "TextIter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkTextIter.", 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 "gtk_source_completion_provider_activate_proposal" gtk_source_completion_provider_activate_proposal ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    Ptr GtkSource.CompletionProposal.CompletionProposal -> -- proposal : TInterface (Name {namespace = "GtkSource", name = "CompletionProposal"})
    Ptr Gtk.TextIter.TextIter ->            -- iter : TInterface (Name {namespace = "Gtk", name = "TextIter"})
    IO CInt

{- |
Activate /@proposal@/ at /@iter@/. When this functions returns 'False', the default
activation of /@proposal@/ will take place which replaces the word at /@iter@/
with the text of /@proposal@/ (see 'GI.GtkSource.Interfaces.CompletionProposal.completionProposalGetText').

Here is how the default activation selects the boundaries of the word to
replace. The end of the word is /@iter@/. For the start of the word, it depends
on whether a start iter is defined for /@proposal@/ (see
'GI.GtkSource.Interfaces.CompletionProvider.completionProviderGetStartIter'). If a start iter is defined,
the start of the word is the start iter. Else, the word (as long as possible)
will contain only alphanumerical and the \"_\" characters.
-}
completionProviderActivateProposal ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a, GtkSource.CompletionProposal.IsCompletionProposal b) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> b
    {- ^ /@proposal@/: a 'GI.GtkSource.Interfaces.CompletionProposal.CompletionProposal'. -}
    -> Gtk.TextIter.TextIter
    {- ^ /@iter@/: a 'GI.Gtk.Structs.TextIter.TextIter'. -}
    -> m Bool
    {- ^ __Returns:__ 'True' to indicate that the proposal activation has been handled,
         'False' otherwise. -}
completionProviderActivateProposal provider proposal iter = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    proposal' <- unsafeManagedPtrCastPtr proposal
    iter' <- unsafeManagedPtrGetPtr iter
    result <- gtk_source_completion_provider_activate_proposal provider' proposal' iter'
    let result' = (/= 0) result
    touchManagedPtr provider
    touchManagedPtr proposal
    touchManagedPtr iter
    return result'

#if ENABLE_OVERLOADING
data CompletionProviderActivateProposalMethodInfo
instance (signature ~ (b -> Gtk.TextIter.TextIter -> m Bool), MonadIO m, IsCompletionProvider a, GtkSource.CompletionProposal.IsCompletionProposal b) => O.MethodInfo CompletionProviderActivateProposalMethodInfo a signature where
    overloadedMethod _ = completionProviderActivateProposal

#endif

-- method CompletionProvider::get_activation
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "CompletionActivation"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_completion_provider_get_activation" gtk_source_completion_provider_get_activation ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    IO CUInt

{- |
Get with what kind of activation the provider should be activated.
-}
completionProviderGetActivation ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> m [GtkSource.Flags.CompletionActivation]
    {- ^ __Returns:__ a combination of 'GI.GtkSource.Flags.CompletionActivation'. -}
completionProviderGetActivation provider = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    result <- gtk_source_completion_provider_get_activation provider'
    let result' = wordToGFlags result
    touchManagedPtr provider
    return result'

#if ENABLE_OVERLOADING
data CompletionProviderGetActivationMethodInfo
instance (signature ~ (m [GtkSource.Flags.CompletionActivation]), MonadIO m, IsCompletionProvider a) => O.MethodInfo CompletionProviderGetActivationMethodInfo a signature where
    overloadedMethod _ = completionProviderGetActivation

#endif

-- method CompletionProvider::get_gicon
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The #GtkSourceCompletionProvider", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gio", name = "Icon"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_completion_provider_get_gicon" gtk_source_completion_provider_get_gicon ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    IO (Ptr Gio.Icon.Icon)

{- |
Gets the 'GI.Gio.Interfaces.Icon.Icon' for the icon of /@provider@/.

/Since: 3.18/
-}
completionProviderGetGicon ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a) =>
    a
    {- ^ /@provider@/: The 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider' -}
    -> m (Maybe Gio.Icon.Icon)
    {- ^ __Returns:__ The icon to be used for the provider,
         or 'Nothing' if the provider does not have a special icon. -}
completionProviderGetGicon provider = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    result <- gtk_source_completion_provider_get_gicon provider'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newObject Gio.Icon.Icon) result'
        return result''
    touchManagedPtr provider
    return maybeResult

#if ENABLE_OVERLOADING
data CompletionProviderGetGiconMethodInfo
instance (signature ~ (m (Maybe Gio.Icon.Icon)), MonadIO m, IsCompletionProvider a) => O.MethodInfo CompletionProviderGetGiconMethodInfo a signature where
    overloadedMethod _ = completionProviderGetGicon

#endif

-- method CompletionProvider::get_icon
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The #GtkSourceCompletionProvider", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GdkPixbuf", name = "Pixbuf"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_completion_provider_get_icon" gtk_source_completion_provider_get_icon ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    IO (Ptr GdkPixbuf.Pixbuf.Pixbuf)

{- |
Get the 'GI.GdkPixbuf.Objects.Pixbuf.Pixbuf' for the icon of the /@provider@/.
-}
completionProviderGetIcon ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a) =>
    a
    {- ^ /@provider@/: The 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider' -}
    -> m (Maybe GdkPixbuf.Pixbuf.Pixbuf)
    {- ^ __Returns:__ The icon to be used for the provider,
         or 'Nothing' if the provider does not have a special icon. -}
completionProviderGetIcon provider = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    result <- gtk_source_completion_provider_get_icon provider'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newObject GdkPixbuf.Pixbuf.Pixbuf) result'
        return result''
    touchManagedPtr provider
    return maybeResult

#if ENABLE_OVERLOADING
data CompletionProviderGetIconMethodInfo
instance (signature ~ (m (Maybe GdkPixbuf.Pixbuf.Pixbuf)), MonadIO m, IsCompletionProvider a) => O.MethodInfo CompletionProviderGetIconMethodInfo a signature where
    overloadedMethod _ = completionProviderGetIcon

#endif

-- method CompletionProvider::get_icon_name
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The #GtkSourceCompletionProvider", 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 "gtk_source_completion_provider_get_icon_name" gtk_source_completion_provider_get_icon_name ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    IO CString

{- |
Gets the icon name of /@provider@/.

/Since: 3.18/
-}
completionProviderGetIconName ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a) =>
    a
    {- ^ /@provider@/: The 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider' -}
    -> m (Maybe T.Text)
    {- ^ __Returns:__ The icon name to be used for the provider,
         or 'Nothing' if the provider does not have a special icon. -}
completionProviderGetIconName provider = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    result <- gtk_source_completion_provider_get_icon_name provider'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- cstringToText result'
        return result''
    touchManagedPtr provider
    return maybeResult

#if ENABLE_OVERLOADING
data CompletionProviderGetIconNameMethodInfo
instance (signature ~ (m (Maybe T.Text)), MonadIO m, IsCompletionProvider a) => O.MethodInfo CompletionProviderGetIconNameMethodInfo a signature where
    overloadedMethod _ = completionProviderGetIconName

#endif

-- method CompletionProvider::get_info_widget
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "proposal", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProposal"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a currently selected #GtkSourceCompletionProposal.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gtk", name = "Widget"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_completion_provider_get_info_widget" gtk_source_completion_provider_get_info_widget ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    Ptr GtkSource.CompletionProposal.CompletionProposal -> -- proposal : TInterface (Name {namespace = "GtkSource", name = "CompletionProposal"})
    IO (Ptr Gtk.Widget.Widget)

{- |
Get a customized info widget to show extra information of a proposal.
This allows for customized widgets on a proposal basis, although in general
providers will have the same custom widget for all their proposals and
/@proposal@/ can be ignored. The implementation of this function is optional.

If this function is not implemented, the default widget is a 'GI.Gtk.Objects.Label.Label'. The
return value of 'GI.GtkSource.Interfaces.CompletionProposal.completionProposalGetInfo' is used as the
content of the 'GI.Gtk.Objects.Label.Label'.

\<note>
  \<para>
    If implemented, 'GI.GtkSource.Interfaces.CompletionProvider.completionProviderUpdateInfo'
    \<emphasis>must\<\/emphasis> also be implemented.
  \<\/para>
\<\/note>
-}
completionProviderGetInfoWidget ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a, GtkSource.CompletionProposal.IsCompletionProposal b) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> b
    {- ^ /@proposal@/: a currently selected 'GI.GtkSource.Interfaces.CompletionProposal.CompletionProposal'. -}
    -> m (Maybe Gtk.Widget.Widget)
    {- ^ __Returns:__ a custom 'GI.Gtk.Objects.Widget.Widget' to show extra
information about /@proposal@/, or 'Nothing' if the provider does not have a special
info widget. -}
completionProviderGetInfoWidget provider proposal = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    proposal' <- unsafeManagedPtrCastPtr proposal
    result <- gtk_source_completion_provider_get_info_widget provider' proposal'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newObject Gtk.Widget.Widget) result'
        return result''
    touchManagedPtr provider
    touchManagedPtr proposal
    return maybeResult

#if ENABLE_OVERLOADING
data CompletionProviderGetInfoWidgetMethodInfo
instance (signature ~ (b -> m (Maybe Gtk.Widget.Widget)), MonadIO m, IsCompletionProvider a, GtkSource.CompletionProposal.IsCompletionProposal b) => O.MethodInfo CompletionProviderGetInfoWidgetMethodInfo a signature where
    overloadedMethod _ = completionProviderGetInfoWidget

#endif

-- method CompletionProvider::get_interactive_delay
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", 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 "gtk_source_completion_provider_get_interactive_delay" gtk_source_completion_provider_get_interactive_delay ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    IO Int32

{- |
Get the delay in milliseconds before starting interactive completion for
this provider. A value of -1 indicates to use the default value as set
by the 'GI.GtkSource.Objects.Completion.Completion':@/auto-complete-delay/@ property.
-}
completionProviderGetInteractiveDelay ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> m Int32
    {- ^ __Returns:__ the interactive delay in milliseconds. -}
completionProviderGetInteractiveDelay provider = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    result <- gtk_source_completion_provider_get_interactive_delay provider'
    touchManagedPtr provider
    return result

#if ENABLE_OVERLOADING
data CompletionProviderGetInteractiveDelayMethodInfo
instance (signature ~ (m Int32), MonadIO m, IsCompletionProvider a) => O.MethodInfo CompletionProviderGetInteractiveDelayMethodInfo a signature where
    overloadedMethod _ = completionProviderGetInteractiveDelay

#endif

-- method CompletionProvider::get_name
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", 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 "gtk_source_completion_provider_get_name" gtk_source_completion_provider_get_name ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    IO CString

{- |
Get the name of the provider. This should be a translatable name for
display to the user. For example: _(\"Document word completion provider\"). The
returned string must be freed with 'GI.GLib.Functions.free'.
-}
completionProviderGetName ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> m T.Text
    {- ^ __Returns:__ a new string containing the name of the provider. -}
completionProviderGetName provider = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    result <- gtk_source_completion_provider_get_name provider'
    checkUnexpectedReturnNULL "completionProviderGetName" result
    result' <- cstringToText result
    freeMem result
    touchManagedPtr provider
    return result'

#if ENABLE_OVERLOADING
data CompletionProviderGetNameMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsCompletionProvider a) => O.MethodInfo CompletionProviderGetNameMethodInfo a signature where
    overloadedMethod _ = completionProviderGetName

#endif

-- method CompletionProvider::get_priority
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", 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 "gtk_source_completion_provider_get_priority" gtk_source_completion_provider_get_priority ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    IO Int32

{- |
Get the provider priority. The priority determines the order in which
proposals appear in the completion popup. Higher priorities are sorted
before lower priorities. The default priority is 0.
-}
completionProviderGetPriority ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> m Int32
    {- ^ __Returns:__ the provider priority. -}
completionProviderGetPriority provider = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    result <- gtk_source_completion_provider_get_priority provider'
    touchManagedPtr provider
    return result

#if ENABLE_OVERLOADING
data CompletionProviderGetPriorityMethodInfo
instance (signature ~ (m Int32), MonadIO m, IsCompletionProvider a) => O.MethodInfo CompletionProviderGetPriorityMethodInfo a signature where
    overloadedMethod _ = completionProviderGetPriority

#endif

-- method CompletionProvider::get_start_iter
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "context", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionContext"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionContext.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "proposal", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProposal"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProposal.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "iter", argType = TInterface (Name {namespace = "Gtk", name = "TextIter"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkTextIter.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_completion_provider_get_start_iter" gtk_source_completion_provider_get_start_iter ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    Ptr GtkSource.CompletionContext.CompletionContext -> -- context : TInterface (Name {namespace = "GtkSource", name = "CompletionContext"})
    Ptr GtkSource.CompletionProposal.CompletionProposal -> -- proposal : TInterface (Name {namespace = "GtkSource", name = "CompletionProposal"})
    Ptr Gtk.TextIter.TextIter ->            -- iter : TInterface (Name {namespace = "Gtk", name = "TextIter"})
    IO CInt

{- |
Get the 'GI.Gtk.Structs.TextIter.TextIter' at which the completion for /@proposal@/ starts. When
implemented, this information is used to position the completion window
accordingly when a proposal is selected in the completion window. The
/@proposal@/ text inside the completion window is aligned on /@iter@/.

If this function is not implemented, the word boundary is taken to position
the completion window. See 'GI.GtkSource.Interfaces.CompletionProvider.completionProviderActivateProposal'
for an explanation on the word boundaries.

When the /@proposal@/ is activated, the default handler uses /@iter@/ as the start
of the word to replace. See
'GI.GtkSource.Interfaces.CompletionProvider.completionProviderActivateProposal' for more information.
-}
completionProviderGetStartIter ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a, GtkSource.CompletionContext.IsCompletionContext b, GtkSource.CompletionProposal.IsCompletionProposal c) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> b
    {- ^ /@context@/: a 'GI.GtkSource.Objects.CompletionContext.CompletionContext'. -}
    -> c
    {- ^ /@proposal@/: a 'GI.GtkSource.Interfaces.CompletionProposal.CompletionProposal'. -}
    -> m ((Bool, Gtk.TextIter.TextIter))
    {- ^ __Returns:__ 'True' if /@iter@/ was set for /@proposal@/, 'False' otherwise. -}
completionProviderGetStartIter provider context proposal = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    context' <- unsafeManagedPtrCastPtr context
    proposal' <- unsafeManagedPtrCastPtr proposal
    iter <- callocBoxedBytes 80 :: IO (Ptr Gtk.TextIter.TextIter)
    result <- gtk_source_completion_provider_get_start_iter provider' context' proposal' iter
    let result' = (/= 0) result
    iter' <- (wrapBoxed Gtk.TextIter.TextIter) iter
    touchManagedPtr provider
    touchManagedPtr context
    touchManagedPtr proposal
    return (result', iter')

#if ENABLE_OVERLOADING
data CompletionProviderGetStartIterMethodInfo
instance (signature ~ (b -> c -> m ((Bool, Gtk.TextIter.TextIter))), MonadIO m, IsCompletionProvider a, GtkSource.CompletionContext.IsCompletionContext b, GtkSource.CompletionProposal.IsCompletionProposal c) => O.MethodInfo CompletionProviderGetStartIterMethodInfo a signature where
    overloadedMethod _ = completionProviderGetStartIter

#endif

-- method CompletionProvider::match
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "context", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionContext"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionContext.", 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 "gtk_source_completion_provider_match" gtk_source_completion_provider_match ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    Ptr GtkSource.CompletionContext.CompletionContext -> -- context : TInterface (Name {namespace = "GtkSource", name = "CompletionContext"})
    IO CInt

{- |
Get whether the provider match the context of completion detailed in
/@context@/.
-}
completionProviderMatch ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a, GtkSource.CompletionContext.IsCompletionContext b) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> b
    {- ^ /@context@/: a 'GI.GtkSource.Objects.CompletionContext.CompletionContext'. -}
    -> m Bool
    {- ^ __Returns:__ 'True' if /@provider@/ matches the completion context, 'False' otherwise. -}
completionProviderMatch provider context = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    context' <- unsafeManagedPtrCastPtr context
    result <- gtk_source_completion_provider_match provider' context'
    let result' = (/= 0) result
    touchManagedPtr provider
    touchManagedPtr context
    return result'

#if ENABLE_OVERLOADING
data CompletionProviderMatchMethodInfo
instance (signature ~ (b -> m Bool), MonadIO m, IsCompletionProvider a, GtkSource.CompletionContext.IsCompletionContext b) => O.MethodInfo CompletionProviderMatchMethodInfo a signature where
    overloadedMethod _ = completionProviderMatch

#endif

-- method CompletionProvider::populate
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "context", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionContext"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionContext.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_completion_provider_populate" gtk_source_completion_provider_populate ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    Ptr GtkSource.CompletionContext.CompletionContext -> -- context : TInterface (Name {namespace = "GtkSource", name = "CompletionContext"})
    IO ()

{- |
Populate /@context@/ with proposals from /@provider@/ added with the
'GI.GtkSource.Objects.CompletionContext.completionContextAddProposals' function.
-}
completionProviderPopulate ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a, GtkSource.CompletionContext.IsCompletionContext b) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> b
    {- ^ /@context@/: a 'GI.GtkSource.Objects.CompletionContext.CompletionContext'. -}
    -> m ()
completionProviderPopulate provider context = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    context' <- unsafeManagedPtrCastPtr context
    gtk_source_completion_provider_populate provider' context'
    touchManagedPtr provider
    touchManagedPtr context
    return ()

#if ENABLE_OVERLOADING
data CompletionProviderPopulateMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsCompletionProvider a, GtkSource.CompletionContext.IsCompletionContext b) => O.MethodInfo CompletionProviderPopulateMethodInfo a signature where
    overloadedMethod _ = completionProviderPopulate

#endif

-- method CompletionProvider::update_info
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProvider.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "proposal", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionProposal"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionProposal.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info", argType = TInterface (Name {namespace = "GtkSource", name = "CompletionInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceCompletionInfo.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_completion_provider_update_info" gtk_source_completion_provider_update_info ::
    Ptr CompletionProvider ->               -- provider : TInterface (Name {namespace = "GtkSource", name = "CompletionProvider"})
    Ptr GtkSource.CompletionProposal.CompletionProposal -> -- proposal : TInterface (Name {namespace = "GtkSource", name = "CompletionProposal"})
    Ptr GtkSource.CompletionInfo.CompletionInfo -> -- info : TInterface (Name {namespace = "GtkSource", name = "CompletionInfo"})
    IO ()

{- |
Update extra information shown in /@info@/ for /@proposal@/.

\<note>
  \<para>
    This function \<emphasis>must\<\/emphasis> be implemented when
    'GI.GtkSource.Interfaces.CompletionProvider.completionProviderGetInfoWidget' is implemented.
  \<\/para>
\<\/note>
-}
completionProviderUpdateInfo ::
    (B.CallStack.HasCallStack, MonadIO m, IsCompletionProvider a, GtkSource.CompletionProposal.IsCompletionProposal b, GtkSource.CompletionInfo.IsCompletionInfo c) =>
    a
    {- ^ /@provider@/: a 'GI.GtkSource.Interfaces.CompletionProvider.CompletionProvider'. -}
    -> b
    {- ^ /@proposal@/: a 'GI.GtkSource.Interfaces.CompletionProposal.CompletionProposal'. -}
    -> c
    {- ^ /@info@/: a 'GI.GtkSource.Objects.CompletionInfo.CompletionInfo'. -}
    -> m ()
completionProviderUpdateInfo provider proposal info = liftIO $ do
    provider' <- unsafeManagedPtrCastPtr provider
    proposal' <- unsafeManagedPtrCastPtr proposal
    info' <- unsafeManagedPtrCastPtr info
    gtk_source_completion_provider_update_info provider' proposal' info'
    touchManagedPtr provider
    touchManagedPtr proposal
    touchManagedPtr info
    return ()

#if ENABLE_OVERLOADING
data CompletionProviderUpdateInfoMethodInfo
instance (signature ~ (b -> c -> m ()), MonadIO m, IsCompletionProvider a, GtkSource.CompletionProposal.IsCompletionProposal b, GtkSource.CompletionInfo.IsCompletionInfo c) => O.MethodInfo CompletionProviderUpdateInfoMethodInfo a signature where
    overloadedMethod _ = completionProviderUpdateInfo

#endif