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

-- * Exported types
    SpaceDrawer(..)                         ,
    IsSpaceDrawer                           ,
    toSpaceDrawer                           ,
    noSpaceDrawer                           ,


 -- * Methods
-- ** bindMatrixSetting #method:bindMatrixSetting#

#if ENABLE_OVERLOADING
    SpaceDrawerBindMatrixSettingMethodInfo  ,
#endif
    spaceDrawerBindMatrixSetting            ,


-- ** getEnableMatrix #method:getEnableMatrix#

#if ENABLE_OVERLOADING
    SpaceDrawerGetEnableMatrixMethodInfo    ,
#endif
    spaceDrawerGetEnableMatrix              ,


-- ** getMatrix #method:getMatrix#

#if ENABLE_OVERLOADING
    SpaceDrawerGetMatrixMethodInfo          ,
#endif
    spaceDrawerGetMatrix                    ,


-- ** getTypesForLocations #method:getTypesForLocations#

#if ENABLE_OVERLOADING
    SpaceDrawerGetTypesForLocationsMethodInfo,
#endif
    spaceDrawerGetTypesForLocations         ,


-- ** new #method:new#

    spaceDrawerNew                          ,


-- ** setEnableMatrix #method:setEnableMatrix#

#if ENABLE_OVERLOADING
    SpaceDrawerSetEnableMatrixMethodInfo    ,
#endif
    spaceDrawerSetEnableMatrix              ,


-- ** setMatrix #method:setMatrix#

#if ENABLE_OVERLOADING
    SpaceDrawerSetMatrixMethodInfo          ,
#endif
    spaceDrawerSetMatrix                    ,


-- ** setTypesForLocations #method:setTypesForLocations#

#if ENABLE_OVERLOADING
    SpaceDrawerSetTypesForLocationsMethodInfo,
#endif
    spaceDrawerSetTypesForLocations         ,




 -- * Properties
-- ** enableMatrix #attr:enableMatrix#
{- | Whether the 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property is enabled.

/Since: 3.24/
-}
#if ENABLE_OVERLOADING
    SpaceDrawerEnableMatrixPropertyInfo     ,
#endif
    constructSpaceDrawerEnableMatrix        ,
    getSpaceDrawerEnableMatrix              ,
    setSpaceDrawerEnableMatrix              ,
#if ENABLE_OVERLOADING
    spaceDrawerEnableMatrix                 ,
#endif


-- ** matrix #attr:matrix#
{- | The :matrix property is a 'GVariant' property to specify where and
what kind of white spaces to draw.

The 'GVariant' is of type @\"au\"@, an array of unsigned integers. Each
integer is a combination of 'GI.GtkSource.Flags.SpaceTypeFlags'. There is one
integer for each 'GI.GtkSource.Flags.SpaceLocationFlags', in the same order as
they are defined in the enum ('GI.GtkSource.Flags.SpaceLocationFlagsNone' and
'GI.GtkSource.Flags.SpaceLocationFlagsAll' are not taken into account).

If the array is shorter than the number of locations, then the value
for the missing locations will be 'GI.GtkSource.Flags.SpaceTypeFlagsNone'.

By default, 'GI.GtkSource.Flags.SpaceTypeFlagsAll' is set for all locations.

/Since: 3.24/
-}
#if ENABLE_OVERLOADING
    SpaceDrawerMatrixPropertyInfo           ,
#endif
    clearSpaceDrawerMatrix                  ,
    constructSpaceDrawerMatrix              ,
    getSpaceDrawerMatrix                    ,
    setSpaceDrawerMatrix                    ,
#if ENABLE_OVERLOADING
    spaceDrawerMatrix                       ,
#endif




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.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.Gio.Flags as Gio.Flags
import qualified GI.Gio.Objects.Settings as Gio.Settings
import {-# SOURCE #-} qualified GI.GtkSource.Flags as GtkSource.Flags

-- | Memory-managed wrapper type.
newtype SpaceDrawer = SpaceDrawer (ManagedPtr SpaceDrawer)
foreign import ccall "gtk_source_space_drawer_get_type"
    c_gtk_source_space_drawer_get_type :: IO GType

instance GObject SpaceDrawer where
    gobjectType = c_gtk_source_space_drawer_get_type


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

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

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

-- | A convenience alias for `Nothing` :: `Maybe` `SpaceDrawer`.
noSpaceDrawer :: Maybe SpaceDrawer
noSpaceDrawer = Nothing

#if ENABLE_OVERLOADING
type family ResolveSpaceDrawerMethod (t :: Symbol) (o :: *) :: * where
    ResolveSpaceDrawerMethod "bindMatrixSetting" o = SpaceDrawerBindMatrixSettingMethodInfo
    ResolveSpaceDrawerMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveSpaceDrawerMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveSpaceDrawerMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveSpaceDrawerMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveSpaceDrawerMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveSpaceDrawerMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveSpaceDrawerMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveSpaceDrawerMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveSpaceDrawerMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveSpaceDrawerMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveSpaceDrawerMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveSpaceDrawerMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveSpaceDrawerMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveSpaceDrawerMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveSpaceDrawerMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveSpaceDrawerMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveSpaceDrawerMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveSpaceDrawerMethod "getEnableMatrix" o = SpaceDrawerGetEnableMatrixMethodInfo
    ResolveSpaceDrawerMethod "getMatrix" o = SpaceDrawerGetMatrixMethodInfo
    ResolveSpaceDrawerMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveSpaceDrawerMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveSpaceDrawerMethod "getTypesForLocations" o = SpaceDrawerGetTypesForLocationsMethodInfo
    ResolveSpaceDrawerMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveSpaceDrawerMethod "setEnableMatrix" o = SpaceDrawerSetEnableMatrixMethodInfo
    ResolveSpaceDrawerMethod "setMatrix" o = SpaceDrawerSetMatrixMethodInfo
    ResolveSpaceDrawerMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveSpaceDrawerMethod "setTypesForLocations" o = SpaceDrawerSetTypesForLocationsMethodInfo
    ResolveSpaceDrawerMethod l o = O.MethodResolutionFailed l o

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

-- VVV Prop "enable-matrix"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Just False,Just False)

{- |
Get the value of the “@enable-matrix@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' spaceDrawer #enableMatrix
@
-}
getSpaceDrawerEnableMatrix :: (MonadIO m, IsSpaceDrawer o) => o -> m Bool
getSpaceDrawerEnableMatrix obj = liftIO $ B.Properties.getObjectPropertyBool obj "enable-matrix"

{- |
Set the value of the “@enable-matrix@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' spaceDrawer [ #enableMatrix 'Data.GI.Base.Attributes.:=' value ]
@
-}
setSpaceDrawerEnableMatrix :: (MonadIO m, IsSpaceDrawer o) => o -> Bool -> m ()
setSpaceDrawerEnableMatrix obj val = liftIO $ B.Properties.setObjectPropertyBool obj "enable-matrix" val

{- |
Construct a `GValueConstruct` with valid value for the “@enable-matrix@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructSpaceDrawerEnableMatrix :: (IsSpaceDrawer o) => Bool -> IO (GValueConstruct o)
constructSpaceDrawerEnableMatrix val = B.Properties.constructObjectPropertyBool "enable-matrix" val

#if ENABLE_OVERLOADING
data SpaceDrawerEnableMatrixPropertyInfo
instance AttrInfo SpaceDrawerEnableMatrixPropertyInfo where
    type AttrAllowedOps SpaceDrawerEnableMatrixPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SpaceDrawerEnableMatrixPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint SpaceDrawerEnableMatrixPropertyInfo = IsSpaceDrawer
    type AttrGetType SpaceDrawerEnableMatrixPropertyInfo = Bool
    type AttrLabel SpaceDrawerEnableMatrixPropertyInfo = "enable-matrix"
    type AttrOrigin SpaceDrawerEnableMatrixPropertyInfo = SpaceDrawer
    attrGet _ = getSpaceDrawerEnableMatrix
    attrSet _ = setSpaceDrawerEnableMatrix
    attrConstruct _ = constructSpaceDrawerEnableMatrix
    attrClear _ = undefined
#endif

-- VVV Prop "matrix"
   -- Type: TVariant
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Nothing,Just True)

{- |
Get the value of the “@matrix@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' spaceDrawer #matrix
@
-}
getSpaceDrawerMatrix :: (MonadIO m, IsSpaceDrawer o) => o -> m (Maybe GVariant)
getSpaceDrawerMatrix obj = liftIO $ B.Properties.getObjectPropertyVariant obj "matrix"

{- |
Set the value of the “@matrix@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' spaceDrawer [ #matrix 'Data.GI.Base.Attributes.:=' value ]
@
-}
setSpaceDrawerMatrix :: (MonadIO m, IsSpaceDrawer o) => o -> GVariant -> m ()
setSpaceDrawerMatrix obj val = liftIO $ B.Properties.setObjectPropertyVariant obj "matrix" (Just val)

{- |
Construct a `GValueConstruct` with valid value for the “@matrix@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructSpaceDrawerMatrix :: (IsSpaceDrawer o) => GVariant -> IO (GValueConstruct o)
constructSpaceDrawerMatrix val = B.Properties.constructObjectPropertyVariant "matrix" (Just val)

{- |
Set the value of the “@matrix@” property to `Nothing`.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.clear' #matrix
@
-}
clearSpaceDrawerMatrix :: (MonadIO m, IsSpaceDrawer o) => o -> m ()
clearSpaceDrawerMatrix obj = liftIO $ B.Properties.setObjectPropertyVariant obj "matrix" (Nothing :: Maybe GVariant)

#if ENABLE_OVERLOADING
data SpaceDrawerMatrixPropertyInfo
instance AttrInfo SpaceDrawerMatrixPropertyInfo where
    type AttrAllowedOps SpaceDrawerMatrixPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint SpaceDrawerMatrixPropertyInfo = (~) GVariant
    type AttrBaseTypeConstraint SpaceDrawerMatrixPropertyInfo = IsSpaceDrawer
    type AttrGetType SpaceDrawerMatrixPropertyInfo = (Maybe GVariant)
    type AttrLabel SpaceDrawerMatrixPropertyInfo = "matrix"
    type AttrOrigin SpaceDrawerMatrixPropertyInfo = SpaceDrawer
    attrGet _ = getSpaceDrawerMatrix
    attrSet _ = setSpaceDrawerMatrix
    attrConstruct _ = constructSpaceDrawerMatrix
    attrClear _ = clearSpaceDrawerMatrix
#endif

#if ENABLE_OVERLOADING
instance O.HasAttributeList SpaceDrawer
type instance O.AttributeList SpaceDrawer = SpaceDrawerAttributeList
type SpaceDrawerAttributeList = ('[ '("enableMatrix", SpaceDrawerEnableMatrixPropertyInfo), '("matrix", SpaceDrawerMatrixPropertyInfo)] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
spaceDrawerEnableMatrix :: AttrLabelProxy "enableMatrix"
spaceDrawerEnableMatrix = AttrLabelProxy

spaceDrawerMatrix :: AttrLabelProxy "matrix"
spaceDrawerMatrix = AttrLabelProxy

#endif

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

#endif

-- method SpaceDrawer::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_space_drawer_new" gtk_source_space_drawer_new ::
    IO (Ptr SpaceDrawer)

{- |
Creates a new 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer' object. Useful for storing space drawing
settings independently of a 'GI.GtkSource.Objects.View.View'.

/Since: 3.24/
-}
spaceDrawerNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m SpaceDrawer
    {- ^ __Returns:__ a new 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer'. -}
spaceDrawerNew  = liftIO $ do
    result <- gtk_source_space_drawer_new
    checkUnexpectedReturnNULL "spaceDrawerNew" result
    result' <- (wrapObject SpaceDrawer) result
    return result'

#if ENABLE_OVERLOADING
#endif

-- method SpaceDrawer::bind_matrix_setting
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "drawer", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceSpaceDrawer object.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "settings", argType = TInterface (Name {namespace = "Gio", name = "Settings"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GSettings object.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the @settings key to bind.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "Gio", name = "SettingsBindFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "flags for the binding.", 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_space_drawer_bind_matrix_setting" gtk_source_space_drawer_bind_matrix_setting ::
    Ptr SpaceDrawer ->                      -- drawer : TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"})
    Ptr Gio.Settings.Settings ->            -- settings : TInterface (Name {namespace = "Gio", name = "Settings"})
    CString ->                              -- key : TBasicType TUTF8
    CUInt ->                                -- flags : TInterface (Name {namespace = "Gio", name = "SettingsBindFlags"})
    IO ()

{- |
Binds the 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property to a 'GI.Gio.Objects.Settings.Settings' key.

The 'GI.Gio.Objects.Settings.Settings' key must be of the same type as the
'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property, that is, @\"au\"@.

The 'GI.Gio.Objects.Settings.settingsBind' function cannot be used, because the default GIO
mapping functions don\'t support 'GVariant' properties (maybe it will be
supported by a future GIO version, in which case this function can be
deprecated).

/Since: 3.24/
-}
spaceDrawerBindMatrixSetting ::
    (B.CallStack.HasCallStack, MonadIO m, IsSpaceDrawer a, Gio.Settings.IsSettings b) =>
    a
    {- ^ /@drawer@/: a 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer' object. -}
    -> b
    {- ^ /@settings@/: a 'GI.Gio.Objects.Settings.Settings' object. -}
    -> T.Text
    {- ^ /@key@/: the /@settings@/ key to bind. -}
    -> [Gio.Flags.SettingsBindFlags]
    {- ^ /@flags@/: flags for the binding. -}
    -> m ()
spaceDrawerBindMatrixSetting drawer settings key flags = liftIO $ do
    drawer' <- unsafeManagedPtrCastPtr drawer
    settings' <- unsafeManagedPtrCastPtr settings
    key' <- textToCString key
    let flags' = gflagsToWord flags
    gtk_source_space_drawer_bind_matrix_setting drawer' settings' key' flags'
    touchManagedPtr drawer
    touchManagedPtr settings
    freeMem key'
    return ()

#if ENABLE_OVERLOADING
data SpaceDrawerBindMatrixSettingMethodInfo
instance (signature ~ (b -> T.Text -> [Gio.Flags.SettingsBindFlags] -> m ()), MonadIO m, IsSpaceDrawer a, Gio.Settings.IsSettings b) => O.MethodInfo SpaceDrawerBindMatrixSettingMethodInfo a signature where
    overloadedMethod _ = spaceDrawerBindMatrixSetting

#endif

-- method SpaceDrawer::get_enable_matrix
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "drawer", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceSpaceDrawer.", 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_space_drawer_get_enable_matrix" gtk_source_space_drawer_get_enable_matrix ::
    Ptr SpaceDrawer ->                      -- drawer : TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"})
    IO CInt

{- |
/No description available in the introspection data./

/Since: 3.24/
-}
spaceDrawerGetEnableMatrix ::
    (B.CallStack.HasCallStack, MonadIO m, IsSpaceDrawer a) =>
    a
    {- ^ /@drawer@/: a 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer'. -}
    -> m Bool
    {- ^ __Returns:__ whether the 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property is enabled. -}
spaceDrawerGetEnableMatrix drawer = liftIO $ do
    drawer' <- unsafeManagedPtrCastPtr drawer
    result <- gtk_source_space_drawer_get_enable_matrix drawer'
    let result' = (/= 0) result
    touchManagedPtr drawer
    return result'

#if ENABLE_OVERLOADING
data SpaceDrawerGetEnableMatrixMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsSpaceDrawer a) => O.MethodInfo SpaceDrawerGetEnableMatrixMethodInfo a signature where
    overloadedMethod _ = spaceDrawerGetEnableMatrix

#endif

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

foreign import ccall "gtk_source_space_drawer_get_matrix" gtk_source_space_drawer_get_matrix ::
    Ptr SpaceDrawer ->                      -- drawer : TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"})
    IO (Ptr GVariant)

{- |
Gets the value of the 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property, as a 'GVariant'.
An empty array can be returned in case the matrix is a zero matrix.

The 'GI.GtkSource.Objects.SpaceDrawer.spaceDrawerGetTypesForLocations' function may be more
convenient to use.

/Since: 3.24/
-}
spaceDrawerGetMatrix ::
    (B.CallStack.HasCallStack, MonadIO m, IsSpaceDrawer a) =>
    a
    {- ^ /@drawer@/: a 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer'. -}
    -> m GVariant
    {- ^ __Returns:__ the 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ value as a new floating 'GVariant'
  instance. -}
spaceDrawerGetMatrix drawer = liftIO $ do
    drawer' <- unsafeManagedPtrCastPtr drawer
    result <- gtk_source_space_drawer_get_matrix drawer'
    checkUnexpectedReturnNULL "spaceDrawerGetMatrix" result
    result' <- B.GVariant.wrapGVariantPtr result
    touchManagedPtr drawer
    return result'

#if ENABLE_OVERLOADING
data SpaceDrawerGetMatrixMethodInfo
instance (signature ~ (m GVariant), MonadIO m, IsSpaceDrawer a) => O.MethodInfo SpaceDrawerGetMatrixMethodInfo a signature where
    overloadedMethod _ = spaceDrawerGetMatrix

#endif

-- method SpaceDrawer::get_types_for_locations
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "drawer", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceSpaceDrawer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "locations", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceLocationFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "one or several #GtkSourceSpaceLocationFlags.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "SpaceTypeFlags"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_space_drawer_get_types_for_locations" gtk_source_space_drawer_get_types_for_locations ::
    Ptr SpaceDrawer ->                      -- drawer : TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"})
    CUInt ->                                -- locations : TInterface (Name {namespace = "GtkSource", name = "SpaceLocationFlags"})
    IO CUInt

{- |
If only one location is specified, this function returns what kind of
white spaces are drawn at that location. The value is retrieved from the
'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property.

If several locations are specified, this function returns the logical AND for
those locations. Which means that if a certain kind of white space is present
in the return value, then that kind of white space is drawn at all the
specified /@locations@/.

/Since: 3.24/
-}
spaceDrawerGetTypesForLocations ::
    (B.CallStack.HasCallStack, MonadIO m, IsSpaceDrawer a) =>
    a
    {- ^ /@drawer@/: a 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer'. -}
    -> [GtkSource.Flags.SpaceLocationFlags]
    {- ^ /@locations@/: one or several 'GI.GtkSource.Flags.SpaceLocationFlags'. -}
    -> m [GtkSource.Flags.SpaceTypeFlags]
    {- ^ __Returns:__ a combination of 'GI.GtkSource.Flags.SpaceTypeFlags'. -}
spaceDrawerGetTypesForLocations drawer locations = liftIO $ do
    drawer' <- unsafeManagedPtrCastPtr drawer
    let locations' = gflagsToWord locations
    result <- gtk_source_space_drawer_get_types_for_locations drawer' locations'
    let result' = wordToGFlags result
    touchManagedPtr drawer
    return result'

#if ENABLE_OVERLOADING
data SpaceDrawerGetTypesForLocationsMethodInfo
instance (signature ~ ([GtkSource.Flags.SpaceLocationFlags] -> m [GtkSource.Flags.SpaceTypeFlags]), MonadIO m, IsSpaceDrawer a) => O.MethodInfo SpaceDrawerGetTypesForLocationsMethodInfo a signature where
    overloadedMethod _ = spaceDrawerGetTypesForLocations

#endif

-- method SpaceDrawer::set_enable_matrix
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "drawer", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceSpaceDrawer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enable_matrix", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new value.", 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_space_drawer_set_enable_matrix" gtk_source_space_drawer_set_enable_matrix ::
    Ptr SpaceDrawer ->                      -- drawer : TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"})
    CInt ->                                 -- enable_matrix : TBasicType TBoolean
    IO ()

{- |
Sets whether the 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property is enabled.

/Since: 3.24/
-}
spaceDrawerSetEnableMatrix ::
    (B.CallStack.HasCallStack, MonadIO m, IsSpaceDrawer a) =>
    a
    {- ^ /@drawer@/: a 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer'. -}
    -> Bool
    {- ^ /@enableMatrix@/: the new value. -}
    -> m ()
spaceDrawerSetEnableMatrix drawer enableMatrix = liftIO $ do
    drawer' <- unsafeManagedPtrCastPtr drawer
    let enableMatrix' = (fromIntegral . fromEnum) enableMatrix
    gtk_source_space_drawer_set_enable_matrix drawer' enableMatrix'
    touchManagedPtr drawer
    return ()

#if ENABLE_OVERLOADING
data SpaceDrawerSetEnableMatrixMethodInfo
instance (signature ~ (Bool -> m ()), MonadIO m, IsSpaceDrawer a) => O.MethodInfo SpaceDrawerSetEnableMatrixMethodInfo a signature where
    overloadedMethod _ = spaceDrawerSetEnableMatrix

#endif

-- method SpaceDrawer::set_matrix
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "drawer", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceSpaceDrawer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "matrix", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the new matrix value, or %NULL.", 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_space_drawer_set_matrix" gtk_source_space_drawer_set_matrix ::
    Ptr SpaceDrawer ->                      -- drawer : TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"})
    Ptr GVariant ->                         -- matrix : TVariant
    IO ()

{- |
Sets a new value to the 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property, as a
'GVariant'. If /@matrix@/ is 'Nothing', then an empty array is set.

If /@matrix@/ is floating, it is consumed.

The 'GI.GtkSource.Objects.SpaceDrawer.spaceDrawerSetTypesForLocations' function may be more
convenient to use.

/Since: 3.24/
-}
spaceDrawerSetMatrix ::
    (B.CallStack.HasCallStack, MonadIO m, IsSpaceDrawer a) =>
    a
    {- ^ /@drawer@/: a 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer'. -}
    -> Maybe (GVariant)
    {- ^ /@matrix@/: the new matrix value, or 'Nothing'. -}
    -> m ()
spaceDrawerSetMatrix drawer matrix = liftIO $ do
    drawer' <- unsafeManagedPtrCastPtr drawer
    maybeMatrix <- case matrix of
        Nothing -> return nullPtr
        Just jMatrix -> do
            jMatrix' <- unsafeManagedPtrGetPtr jMatrix
            return jMatrix'
    gtk_source_space_drawer_set_matrix drawer' maybeMatrix
    touchManagedPtr drawer
    whenJust matrix touchManagedPtr
    return ()

#if ENABLE_OVERLOADING
data SpaceDrawerSetMatrixMethodInfo
instance (signature ~ (Maybe (GVariant) -> m ()), MonadIO m, IsSpaceDrawer a) => O.MethodInfo SpaceDrawerSetMatrixMethodInfo a signature where
    overloadedMethod _ = spaceDrawerSetMatrix

#endif

-- method SpaceDrawer::set_types_for_locations
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "drawer", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceSpaceDrawer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "locations", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceLocationFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "one or several #GtkSourceSpaceLocationFlags.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "types", argType = TInterface (Name {namespace = "GtkSource", name = "SpaceTypeFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a combination of #GtkSourceSpaceTypeFlags.", 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_space_drawer_set_types_for_locations" gtk_source_space_drawer_set_types_for_locations ::
    Ptr SpaceDrawer ->                      -- drawer : TInterface (Name {namespace = "GtkSource", name = "SpaceDrawer"})
    CUInt ->                                -- locations : TInterface (Name {namespace = "GtkSource", name = "SpaceLocationFlags"})
    CUInt ->                                -- types : TInterface (Name {namespace = "GtkSource", name = "SpaceTypeFlags"})
    IO ()

{- |
Modifies the 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer':@/matrix/@ property at the specified
/@locations@/.

/Since: 3.24/
-}
spaceDrawerSetTypesForLocations ::
    (B.CallStack.HasCallStack, MonadIO m, IsSpaceDrawer a) =>
    a
    {- ^ /@drawer@/: a 'GI.GtkSource.Objects.SpaceDrawer.SpaceDrawer'. -}
    -> [GtkSource.Flags.SpaceLocationFlags]
    {- ^ /@locations@/: one or several 'GI.GtkSource.Flags.SpaceLocationFlags'. -}
    -> [GtkSource.Flags.SpaceTypeFlags]
    {- ^ /@types@/: a combination of 'GI.GtkSource.Flags.SpaceTypeFlags'. -}
    -> m ()
spaceDrawerSetTypesForLocations drawer locations types = liftIO $ do
    drawer' <- unsafeManagedPtrCastPtr drawer
    let locations' = gflagsToWord locations
    let types' = gflagsToWord types
    gtk_source_space_drawer_set_types_for_locations drawer' locations' types'
    touchManagedPtr drawer
    return ()

#if ENABLE_OVERLOADING
data SpaceDrawerSetTypesForLocationsMethodInfo
instance (signature ~ ([GtkSource.Flags.SpaceLocationFlags] -> [GtkSource.Flags.SpaceTypeFlags] -> m ()), MonadIO m, IsSpaceDrawer a) => O.MethodInfo SpaceDrawerSetTypesForLocationsMethodInfo a signature where
    overloadedMethod _ = spaceDrawerSetTypesForLocations

#endif