{- |
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.GtkSource.Objects.Gutter
    ( 

-- * Exported types
    Gutter(..)                              ,
    IsGutter                                ,
    toGutter                                ,
    noGutter                                ,


 -- * Methods
-- ** getPadding #method:getPadding#
    GutterGetPaddingMethodInfo              ,
    gutterGetPadding                        ,


-- ** getRendererAtPos #method:getRendererAtPos#
    GutterGetRendererAtPosMethodInfo        ,
    gutterGetRendererAtPos                  ,


-- ** getWindow #method:getWindow#
    GutterGetWindowMethodInfo               ,
    gutterGetWindow                         ,


-- ** insert #method:insert#
    GutterInsertMethodInfo                  ,
    gutterInsert                            ,


-- ** queueDraw #method:queueDraw#
    GutterQueueDrawMethodInfo               ,
    gutterQueueDraw                         ,


-- ** remove #method:remove#
    GutterRemoveMethodInfo                  ,
    gutterRemove                            ,


-- ** reorder #method:reorder#
    GutterReorderMethodInfo                 ,
    gutterReorder                           ,


-- ** setPadding #method:setPadding#
    GutterSetPaddingMethodInfo              ,
    gutterSetPadding                        ,




 -- * Properties
-- ** view #attr:view#
    GutterViewPropertyInfo                  ,
    constructGutterView                     ,
    getGutterView                           ,
    gutterView                              ,


-- ** windowType #attr:windowType#
    GutterWindowTypePropertyInfo            ,
    constructGutterWindowType               ,
    getGutterWindowType                     ,
    gutterWindowType                        ,


-- ** xpad #attr:xpad#
    GutterXpadPropertyInfo                  ,
    constructGutterXpad                     ,
    getGutterXpad                           ,
    gutterXpad                              ,
    setGutterXpad                           ,


-- ** ypad #attr:ypad#
    GutterYpadPropertyInfo                  ,
    constructGutterYpad                     ,
    getGutterYpad                           ,
    gutterYpad                              ,
    setGutterYpad                           ,




    ) 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 qualified GI.Gdk.Objects.Window as Gdk.Window
import qualified GI.Gtk.Enums as Gtk.Enums
import {-# SOURCE #-} qualified GI.GtkSource.Objects.GutterRenderer as GtkSource.GutterRenderer
import {-# SOURCE #-} qualified GI.GtkSource.Objects.View as GtkSource.View

newtype Gutter = Gutter (ManagedPtr Gutter)
foreign import ccall "gtk_source_gutter_get_type"
    c_gtk_source_gutter_get_type :: IO GType

instance GObject Gutter where
    gobjectType _ = c_gtk_source_gutter_get_type
    

class GObject o => IsGutter o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError Gutter a) =>
    IsGutter a
#endif
instance IsGutter Gutter
instance GObject.Object.IsObject Gutter

toGutter :: IsGutter o => o -> IO Gutter
toGutter = unsafeCastTo Gutter

noGutter :: Maybe Gutter
noGutter = Nothing

type family ResolveGutterMethod (t :: Symbol) (o :: *) :: * where
    ResolveGutterMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveGutterMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveGutterMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveGutterMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveGutterMethod "insert" o = GutterInsertMethodInfo
    ResolveGutterMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveGutterMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveGutterMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveGutterMethod "queueDraw" o = GutterQueueDrawMethodInfo
    ResolveGutterMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveGutterMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveGutterMethod "remove" o = GutterRemoveMethodInfo
    ResolveGutterMethod "reorder" o = GutterReorderMethodInfo
    ResolveGutterMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveGutterMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveGutterMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveGutterMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveGutterMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveGutterMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveGutterMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveGutterMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveGutterMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveGutterMethod "getPadding" o = GutterGetPaddingMethodInfo
    ResolveGutterMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveGutterMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveGutterMethod "getRendererAtPos" o = GutterGetRendererAtPosMethodInfo
    ResolveGutterMethod "getWindow" o = GutterGetWindowMethodInfo
    ResolveGutterMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveGutterMethod "setPadding" o = GutterSetPaddingMethodInfo
    ResolveGutterMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveGutterMethod l o = O.MethodResolutionFailed l o

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

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

-- VVV Prop "view"
   -- Type: TInterface (Name {namespace = "GtkSource", name = "View"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
   -- Nullable: (Nothing,Nothing)

getGutterView :: (MonadIO m, IsGutter o) => o -> m (Maybe GtkSource.View.View)
getGutterView obj = liftIO $ getObjectPropertyObject obj "view" GtkSource.View.View

constructGutterView :: (IsGutter o, GtkSource.View.IsView a) => a -> IO (GValueConstruct o)
constructGutterView val = constructObjectPropertyObject "view" (Just val)

data GutterViewPropertyInfo
instance AttrInfo GutterViewPropertyInfo where
    type AttrAllowedOps GutterViewPropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint GutterViewPropertyInfo = GtkSource.View.IsView
    type AttrBaseTypeConstraint GutterViewPropertyInfo = IsGutter
    type AttrGetType GutterViewPropertyInfo = (Maybe GtkSource.View.View)
    type AttrLabel GutterViewPropertyInfo = "view"
    type AttrOrigin GutterViewPropertyInfo = Gutter
    attrGet _ = getGutterView
    attrSet _ = undefined
    attrConstruct _ = constructGutterView
    attrClear _ = undefined

-- VVV Prop "window-type"
   -- Type: TInterface (Name {namespace = "Gtk", name = "TextWindowType"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
   -- Nullable: (Nothing,Nothing)

getGutterWindowType :: (MonadIO m, IsGutter o) => o -> m Gtk.Enums.TextWindowType
getGutterWindowType obj = liftIO $ getObjectPropertyEnum obj "window-type"

constructGutterWindowType :: (IsGutter o) => Gtk.Enums.TextWindowType -> IO (GValueConstruct o)
constructGutterWindowType val = constructObjectPropertyEnum "window-type" val

data GutterWindowTypePropertyInfo
instance AttrInfo GutterWindowTypePropertyInfo where
    type AttrAllowedOps GutterWindowTypePropertyInfo = '[ 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint GutterWindowTypePropertyInfo = (~) Gtk.Enums.TextWindowType
    type AttrBaseTypeConstraint GutterWindowTypePropertyInfo = IsGutter
    type AttrGetType GutterWindowTypePropertyInfo = Gtk.Enums.TextWindowType
    type AttrLabel GutterWindowTypePropertyInfo = "window-type"
    type AttrOrigin GutterWindowTypePropertyInfo = Gutter
    attrGet _ = getGutterWindowType
    attrSet _ = undefined
    attrConstruct _ = constructGutterWindowType
    attrClear _ = undefined

-- VVV Prop "xpad"
   -- Type: TBasicType TInt
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Nothing,Nothing)

getGutterXpad :: (MonadIO m, IsGutter o) => o -> m Int32
getGutterXpad obj = liftIO $ getObjectPropertyInt32 obj "xpad"

setGutterXpad :: (MonadIO m, IsGutter o) => o -> Int32 -> m ()
setGutterXpad obj val = liftIO $ setObjectPropertyInt32 obj "xpad" val

constructGutterXpad :: (IsGutter o) => Int32 -> IO (GValueConstruct o)
constructGutterXpad val = constructObjectPropertyInt32 "xpad" val

data GutterXpadPropertyInfo
instance AttrInfo GutterXpadPropertyInfo where
    type AttrAllowedOps GutterXpadPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint GutterXpadPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint GutterXpadPropertyInfo = IsGutter
    type AttrGetType GutterXpadPropertyInfo = Int32
    type AttrLabel GutterXpadPropertyInfo = "xpad"
    type AttrOrigin GutterXpadPropertyInfo = Gutter
    attrGet _ = getGutterXpad
    attrSet _ = setGutterXpad
    attrConstruct _ = constructGutterXpad
    attrClear _ = undefined

-- VVV Prop "ypad"
   -- Type: TBasicType TInt
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Nothing,Nothing)

getGutterYpad :: (MonadIO m, IsGutter o) => o -> m Int32
getGutterYpad obj = liftIO $ getObjectPropertyInt32 obj "ypad"

setGutterYpad :: (MonadIO m, IsGutter o) => o -> Int32 -> m ()
setGutterYpad obj val = liftIO $ setObjectPropertyInt32 obj "ypad" val

constructGutterYpad :: (IsGutter o) => Int32 -> IO (GValueConstruct o)
constructGutterYpad val = constructObjectPropertyInt32 "ypad" val

data GutterYpadPropertyInfo
instance AttrInfo GutterYpadPropertyInfo where
    type AttrAllowedOps GutterYpadPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint GutterYpadPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint GutterYpadPropertyInfo = IsGutter
    type AttrGetType GutterYpadPropertyInfo = Int32
    type AttrLabel GutterYpadPropertyInfo = "ypad"
    type AttrOrigin GutterYpadPropertyInfo = Gutter
    attrGet _ = getGutterYpad
    attrSet _ = setGutterYpad
    attrConstruct _ = constructGutterYpad
    attrClear _ = undefined

instance O.HasAttributeList Gutter
type instance O.AttributeList Gutter = GutterAttributeList
type GutterAttributeList = ('[ '("view", GutterViewPropertyInfo), '("windowType", GutterWindowTypePropertyInfo), '("xpad", GutterXpadPropertyInfo), '("ypad", GutterYpadPropertyInfo)] :: [(Symbol, *)])

gutterView :: AttrLabelProxy "view"
gutterView = AttrLabelProxy

gutterWindowType :: AttrLabelProxy "windowType"
gutterWindowType = AttrLabelProxy

gutterXpad :: AttrLabelProxy "xpad"
gutterXpad = AttrLabelProxy

gutterYpad :: AttrLabelProxy "ypad"
gutterYpad = AttrLabelProxy

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

-- method Gutter::get_padding
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "gutter", argType = TInterface (Name {namespace = "GtkSource", name = "Gutter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "xpad", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "ypad", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, 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_gutter_get_padding" gtk_source_gutter_get_padding :: 
    Ptr Gutter ->                           -- gutter : TInterface (Name {namespace = "GtkSource", name = "Gutter"})
    Int32 ->                                -- xpad : TBasicType TInt
    Int32 ->                                -- ypad : TBasicType TInt
    IO ()

{-# DEPRECATED gutterGetPadding ["(Since version 3.12)","Use 'GI.GtkSource.Objects.GutterRenderer.gutterRendererGetPadding' instead."] #-}
{- |
/No description available in the introspection data./
-}
gutterGetPadding ::
    (B.CallStack.HasCallStack, MonadIO m, IsGutter a) =>
    a
    -> Int32
    -> Int32
    -> m ()
gutterGetPadding gutter xpad ypad = liftIO $ do
    gutter' <- unsafeManagedPtrCastPtr gutter
    gtk_source_gutter_get_padding gutter' xpad ypad
    touchManagedPtr gutter
    return ()

data GutterGetPaddingMethodInfo
instance (signature ~ (Int32 -> Int32 -> m ()), MonadIO m, IsGutter a) => O.MethodInfo GutterGetPaddingMethodInfo a signature where
    overloadedMethod _ = gutterGetPadding

-- method Gutter::get_renderer_at_pos
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "gutter", argType = TInterface (Name {namespace = "GtkSource", name = "Gutter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GtkSourceGutter.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The x position to get identified.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "y", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The y position to get identified.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "GutterRenderer"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_gutter_get_renderer_at_pos" gtk_source_gutter_get_renderer_at_pos :: 
    Ptr Gutter ->                           -- gutter : TInterface (Name {namespace = "GtkSource", name = "Gutter"})
    Int32 ->                                -- x : TBasicType TInt
    Int32 ->                                -- y : TBasicType TInt
    IO (Ptr GtkSource.GutterRenderer.GutterRenderer)

{- |
Finds the 'GI.GtkSource.Objects.GutterRenderer.GutterRenderer' at (x, y).
-}
gutterGetRendererAtPos ::
    (B.CallStack.HasCallStack, MonadIO m, IsGutter a) =>
    a
    {- ^ /@gutter@/: A 'GI.GtkSource.Objects.Gutter.Gutter'. -}
    -> Int32
    {- ^ /@x@/: The x position to get identified. -}
    -> Int32
    {- ^ /@y@/: The y position to get identified. -}
    -> m (Maybe GtkSource.GutterRenderer.GutterRenderer)
    {- ^ __Returns:__ the renderer at (x, y) or 'Nothing'. -}
gutterGetRendererAtPos gutter x y = liftIO $ do
    gutter' <- unsafeManagedPtrCastPtr gutter
    result <- gtk_source_gutter_get_renderer_at_pos gutter' x y
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newObject GtkSource.GutterRenderer.GutterRenderer) result'
        return result''
    touchManagedPtr gutter
    return maybeResult

data GutterGetRendererAtPosMethodInfo
instance (signature ~ (Int32 -> Int32 -> m (Maybe GtkSource.GutterRenderer.GutterRenderer)), MonadIO m, IsGutter a) => O.MethodInfo GutterGetRendererAtPosMethodInfo a signature where
    overloadedMethod _ = gutterGetRendererAtPos

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

foreign import ccall "gtk_source_gutter_get_window" gtk_source_gutter_get_window :: 
    Ptr Gutter ->                           -- gutter : TInterface (Name {namespace = "GtkSource", name = "Gutter"})
    IO (Ptr Gdk.Window.Window)

{-# DEPRECATED gutterGetWindow ["(Since version 3.12)","Use 'GI.Gtk.Objects.TextView.textViewGetWindow' instead."] #-}
{- |
Get the 'GI.Gdk.Objects.Window.Window' of the gutter. The window will only be available when the
gutter has at least one, non-zero width, cell renderer packed.

@since 2.8
-}
gutterGetWindow ::
    (B.CallStack.HasCallStack, MonadIO m, IsGutter a) =>
    a
    {- ^ /@gutter@/: a 'GI.GtkSource.Objects.Gutter.Gutter'. -}
    -> m Gdk.Window.Window
    {- ^ __Returns:__ the 'GI.Gdk.Objects.Window.Window' of the gutter, or 'Nothing'
if the gutter has no window. -}
gutterGetWindow gutter = liftIO $ do
    gutter' <- unsafeManagedPtrCastPtr gutter
    result <- gtk_source_gutter_get_window gutter'
    checkUnexpectedReturnNULL "gutterGetWindow" result
    result' <- (newObject Gdk.Window.Window) result
    touchManagedPtr gutter
    return result'

data GutterGetWindowMethodInfo
instance (signature ~ (m Gdk.Window.Window), MonadIO m, IsGutter a) => O.MethodInfo GutterGetWindowMethodInfo a signature where
    overloadedMethod _ = gutterGetWindow

-- method Gutter::insert
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "gutter", argType = TInterface (Name {namespace = "GtkSource", name = "Gutter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceGutter.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "renderer", argType = TInterface (Name {namespace = "GtkSource", name = "GutterRenderer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a gutter renderer (must inherit from #GtkSourceGutterRenderer).", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the renderer position.", 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_gutter_insert" gtk_source_gutter_insert :: 
    Ptr Gutter ->                           -- gutter : TInterface (Name {namespace = "GtkSource", name = "Gutter"})
    Ptr GtkSource.GutterRenderer.GutterRenderer -> -- renderer : TInterface (Name {namespace = "GtkSource", name = "GutterRenderer"})
    Int32 ->                                -- position : TBasicType TInt
    IO CInt

{- |
Insert /@renderer@/ into the gutter. If /@renderer@/ is yet unowned then gutter
claims its ownership. Otherwise just increases renderer\'s reference count.
/@renderer@/ cannot be already inserted to another gutter.

@since 3.0
-}
gutterInsert ::
    (B.CallStack.HasCallStack, MonadIO m, IsGutter a, GtkSource.GutterRenderer.IsGutterRenderer b) =>
    a
    {- ^ /@gutter@/: a 'GI.GtkSource.Objects.Gutter.Gutter'. -}
    -> b
    {- ^ /@renderer@/: a gutter renderer (must inherit from 'GI.GtkSource.Objects.GutterRenderer.GutterRenderer'). -}
    -> Int32
    {- ^ /@position@/: the renderer position. -}
    -> m Bool
    {- ^ __Returns:__ 'True' if operation succeeded. Otherwise 'False'. -}
gutterInsert gutter renderer position = liftIO $ do
    gutter' <- unsafeManagedPtrCastPtr gutter
    renderer' <- unsafeManagedPtrCastPtr renderer
    result <- gtk_source_gutter_insert gutter' renderer' position
    let result' = (/= 0) result
    touchManagedPtr gutter
    touchManagedPtr renderer
    return result'

data GutterInsertMethodInfo
instance (signature ~ (b -> Int32 -> m Bool), MonadIO m, IsGutter a, GtkSource.GutterRenderer.IsGutterRenderer b) => O.MethodInfo GutterInsertMethodInfo a signature where
    overloadedMethod _ = gutterInsert

-- method Gutter::queue_draw
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "gutter", argType = TInterface (Name {namespace = "GtkSource", name = "Gutter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceGutter.", 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_gutter_queue_draw" gtk_source_gutter_queue_draw :: 
    Ptr Gutter ->                           -- gutter : TInterface (Name {namespace = "GtkSource", name = "Gutter"})
    IO ()

{- |
Invalidates the drawable area of the gutter. You can use this to force a
redraw of the gutter if something has changed and needs to be redrawn.

@since 2.8
-}
gutterQueueDraw ::
    (B.CallStack.HasCallStack, MonadIO m, IsGutter a) =>
    a
    {- ^ /@gutter@/: a 'GI.GtkSource.Objects.Gutter.Gutter'. -}
    -> m ()
gutterQueueDraw gutter = liftIO $ do
    gutter' <- unsafeManagedPtrCastPtr gutter
    gtk_source_gutter_queue_draw gutter'
    touchManagedPtr gutter
    return ()

data GutterQueueDrawMethodInfo
instance (signature ~ (m ()), MonadIO m, IsGutter a) => O.MethodInfo GutterQueueDrawMethodInfo a signature where
    overloadedMethod _ = gutterQueueDraw

-- method Gutter::remove
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "gutter", argType = TInterface (Name {namespace = "GtkSource", name = "Gutter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceGutter.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "renderer", argType = TInterface (Name {namespace = "GtkSource", name = "GutterRenderer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceGutterRenderer.", 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_gutter_remove" gtk_source_gutter_remove :: 
    Ptr Gutter ->                           -- gutter : TInterface (Name {namespace = "GtkSource", name = "Gutter"})
    Ptr GtkSource.GutterRenderer.GutterRenderer -> -- renderer : TInterface (Name {namespace = "GtkSource", name = "GutterRenderer"})
    IO ()

{- |
Removes /@renderer@/ from /@gutter@/.

@since 2.8
-}
gutterRemove ::
    (B.CallStack.HasCallStack, MonadIO m, IsGutter a, GtkSource.GutterRenderer.IsGutterRenderer b) =>
    a
    {- ^ /@gutter@/: a 'GI.GtkSource.Objects.Gutter.Gutter'. -}
    -> b
    {- ^ /@renderer@/: a 'GI.GtkSource.Objects.GutterRenderer.GutterRenderer'. -}
    -> m ()
gutterRemove gutter renderer = liftIO $ do
    gutter' <- unsafeManagedPtrCastPtr gutter
    renderer' <- unsafeManagedPtrCastPtr renderer
    gtk_source_gutter_remove gutter' renderer'
    touchManagedPtr gutter
    touchManagedPtr renderer
    return ()

data GutterRemoveMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsGutter a, GtkSource.GutterRenderer.IsGutterRenderer b) => O.MethodInfo GutterRemoveMethodInfo a signature where
    overloadedMethod _ = gutterRemove

-- method Gutter::reorder
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "gutter", argType = TInterface (Name {namespace = "GtkSource", name = "Gutter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceGutterRenderer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "renderer", argType = TInterface (Name {namespace = "GtkSource", name = "GutterRenderer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkCellRenderer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new renderer position.", 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_gutter_reorder" gtk_source_gutter_reorder :: 
    Ptr Gutter ->                           -- gutter : TInterface (Name {namespace = "GtkSource", name = "Gutter"})
    Ptr GtkSource.GutterRenderer.GutterRenderer -> -- renderer : TInterface (Name {namespace = "GtkSource", name = "GutterRenderer"})
    Int32 ->                                -- position : TBasicType TInt
    IO ()

{- |
Reorders /@renderer@/ in /@gutter@/ to new /@position@/.

@since 2.8
-}
gutterReorder ::
    (B.CallStack.HasCallStack, MonadIO m, IsGutter a, GtkSource.GutterRenderer.IsGutterRenderer b) =>
    a
    {- ^ /@gutter@/: a 'GI.GtkSource.Objects.GutterRenderer.GutterRenderer'. -}
    -> b
    {- ^ /@renderer@/: a 'GI.Gtk.Objects.CellRenderer.CellRenderer'. -}
    -> Int32
    {- ^ /@position@/: the new renderer position. -}
    -> m ()
gutterReorder gutter renderer position = liftIO $ do
    gutter' <- unsafeManagedPtrCastPtr gutter
    renderer' <- unsafeManagedPtrCastPtr renderer
    gtk_source_gutter_reorder gutter' renderer' position
    touchManagedPtr gutter
    touchManagedPtr renderer
    return ()

data GutterReorderMethodInfo
instance (signature ~ (b -> Int32 -> m ()), MonadIO m, IsGutter a, GtkSource.GutterRenderer.IsGutterRenderer b) => O.MethodInfo GutterReorderMethodInfo a signature where
    overloadedMethod _ = gutterReorder

-- method Gutter::set_padding
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "gutter", argType = TInterface (Name {namespace = "GtkSource", name = "Gutter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "xpad", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "ypad", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, 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_gutter_set_padding" gtk_source_gutter_set_padding :: 
    Ptr Gutter ->                           -- gutter : TInterface (Name {namespace = "GtkSource", name = "Gutter"})
    Int32 ->                                -- xpad : TBasicType TInt
    Int32 ->                                -- ypad : TBasicType TInt
    IO ()

{-# DEPRECATED gutterSetPadding ["(Since version 3.12)","Use 'GI.GtkSource.Objects.GutterRenderer.gutterRendererSetPadding' instead."] #-}
{- |
/No description available in the introspection data./
-}
gutterSetPadding ::
    (B.CallStack.HasCallStack, MonadIO m, IsGutter a) =>
    a
    -> Int32
    -> Int32
    -> m ()
gutterSetPadding gutter xpad ypad = liftIO $ do
    gutter' <- unsafeManagedPtrCastPtr gutter
    gtk_source_gutter_set_padding gutter' xpad ypad
    touchManagedPtr gutter
    return ()

data GutterSetPaddingMethodInfo
instance (signature ~ (Int32 -> Int32 -> m ()), MonadIO m, IsGutter a) => O.MethodInfo GutterSetPaddingMethodInfo a signature where
    overloadedMethod _ = gutterSetPadding