{-# LINE 2 "./Graphics/UI/Gtk/SourceView/SourceBuffer.chs" #-}
-- -*-haskell-*-
-- GIMP Toolkit (GTK) SourceBuffer
--
-- Author : Peter Gavin
-- derived from sourceview bindings by Axel Simon and Duncan Coutts
--
-- Created: 18 December 2008
--
-- Copyright (C) 2003-2008 Peter Gavin, Duncan Coutts, Axel Simon
--
-- This library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- |
-- Maintainer : gtk2hs-users@lists.sourceforge.net
-- Stability : provisional
-- Portability : portable (depends on GHC)
--
module Graphics.UI.Gtk.SourceView.SourceBuffer (
  SourceBuffer,
  SourceBufferClass,
  castToSourceBuffer,
  sourceBufferNew,
  sourceBufferNewWithLanguage,
  sourceBufferSetHighlightSyntax,
  sourceBufferGetHighlightSyntax,
  sourceBufferSetLanguage,
  sourceBufferGetLanguage,
  sourceBufferSetHighlightMatchingBrackets,
  sourceBufferGetHighlightMatchingBrackets,
  sourceBufferSetStyleScheme,
  sourceBufferGetStyleScheme,
  sourceBufferSetMaxUndoLevels,
  sourceBufferGetMaxUndoLevels,
  sourceBufferGetCanUndo,
  sourceBufferGetCanRedo,
  sourceBufferUndo,
  sourceBufferRedo,
  sourceBufferBeginNotUndoableAction,
  sourceBufferEndNotUndoableAction,
  sourceBufferCreateSourceMark,
  sourceBufferEnsureHighlight,
  sourceBufferCanRedo,
  sourceBufferCanUndo,
  sourceBufferHighlightMatchingBrackets,
  sourceBufferHighlightSyntax,
  sourceBufferLanguage,
  sourceBufferSourceStyleScheme,
  sourceBufferHighlightUpdated
  ) where

import Control.Monad (liftM)
import Data.Maybe (fromMaybe)

import System.Glib.FFI
import System.Glib.GObject (constructNewGObject,
      makeNewGObject)
import System.Glib.Properties
{-# LINE 67 "./Graphics/UI/Gtk/SourceView/SourceBuffer.chs" #-}
import System.Glib.Attributes
import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
import Graphics.UI.Gtk.SourceView.Types
{-# LINE 70 "./Graphics/UI/Gtk/SourceView/SourceBuffer.chs" #-}
import Graphics.UI.Gtk.SourceView.Signals
{-# LINE 71 "./Graphics/UI/Gtk/SourceView/SourceBuffer.chs" #-}
import Graphics.UI.Gtk.Multiline.TextIter
{-# LINE 72 "./Graphics/UI/Gtk/SourceView/SourceBuffer.chs" #-}

import Graphics.UI.Gtk.SourceView.SourceMark
{-# LINE 74 "./Graphics/UI/Gtk/SourceView/SourceBuffer.chs" #-}


{-# LINE 76 "./Graphics/UI/Gtk/SourceView/SourceBuffer.chs" #-}

-- methods

-- | Create a new 'SourceBuffer', possibly
-- taking a 'TextTagTable'.
--
sourceBufferNew :: Maybe TextTagTable -> IO SourceBuffer
sourceBufferNew tt = constructNewGObject mkSourceBuffer $
  (\(TextTagTable arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_new argPtr1)
{-# LINE 85 "./Graphics/UI/Gtk/SourceView/SourceBuffer.chs" #-}
  (fromMaybe (TextTagTable nullForeignPtr) tt)

-- | Create a new 'SourceBuffer'
-- with a 'SourceLanguage'.
--
sourceBufferNewWithLanguage :: SourceLanguage -> IO SourceBuffer
sourceBufferNewWithLanguage lang = constructNewGObject mkSourceBuffer $
  (\(SourceLanguage arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_new_with_language argPtr1) lang

-- |
--
sourceBufferSetHighlightSyntax :: SourceBuffer -> Bool -> IO ()
sourceBufferSetHighlightSyntax sb newVal =
  (\(SourceBuffer arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_set_highlight_syntax argPtr1 arg2) sb (fromBool newVal)

-- |
--
sourceBufferGetHighlightSyntax :: SourceBuffer -> IO Bool
sourceBufferGetHighlightSyntax sb = liftM toBool $
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_get_highlight_syntax argPtr1) sb

-- |
--
sourceBufferSetLanguage :: SourceBuffer -> SourceLanguage -> IO ()
sourceBufferSetLanguage sb lang =
  (\(SourceBuffer arg1) (SourceLanguage arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gtk_source_buffer_set_language argPtr1 argPtr2) sb lang

-- |
--
sourceBufferGetLanguage :: SourceBuffer -> IO SourceLanguage
sourceBufferGetLanguage sb = makeNewGObject mkSourceLanguage $
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_get_language argPtr1) sb

-- |
--
sourceBufferSetHighlightMatchingBrackets :: SourceBuffer -> Bool -> IO ()
sourceBufferSetHighlightMatchingBrackets sb newVal =
  (\(SourceBuffer arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_set_highlight_matching_brackets argPtr1 arg2) sb (fromBool newVal)

-- |
--
sourceBufferGetHighlightMatchingBrackets :: SourceBuffer -> IO Bool
sourceBufferGetHighlightMatchingBrackets sb = liftM toBool $
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_get_highlight_matching_brackets argPtr1) sb

-- |
--
sourceBufferSetStyleScheme :: SourceBuffer -> SourceStyleScheme -> IO ()
sourceBufferSetStyleScheme sb sss =
    (\(SourceBuffer arg1) (SourceStyleScheme arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gtk_source_buffer_set_style_scheme argPtr1 argPtr2) sb sss

-- |
--
sourceBufferGetStyleScheme :: SourceBuffer -> IO SourceStyleScheme
sourceBufferGetStyleScheme sb = makeNewGObject mkSourceStyleScheme $
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_get_style_scheme argPtr1) sb

-- |
--
sourceBufferSetMaxUndoLevels :: SourceBuffer -> Int -> IO ()
sourceBufferSetMaxUndoLevels sb newVal =
  (\(SourceBuffer arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_set_max_undo_levels argPtr1 arg2) sb (fromIntegral newVal)

-- |
--
sourceBufferGetMaxUndoLevels :: SourceBuffer -> IO Int
sourceBufferGetMaxUndoLevels sb = liftM fromIntegral $
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_get_max_undo_levels argPtr1) sb

-- |
--
sourceBufferGetCanUndo :: SourceBuffer -> IO Bool
sourceBufferGetCanUndo sb = liftM toBool $
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_can_undo argPtr1) sb

-- |
--
sourceBufferGetCanRedo :: SourceBuffer -> IO Bool
sourceBufferGetCanRedo sb = liftM toBool $
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_can_redo argPtr1) sb

-- |
--
sourceBufferUndo :: SourceBuffer -> IO ()
sourceBufferUndo sb =
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_undo argPtr1) sb

-- |
--
sourceBufferRedo :: SourceBuffer -> IO ()
sourceBufferRedo sb =
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_redo argPtr1) sb

-- |
--
sourceBufferBeginNotUndoableAction :: SourceBuffer -> IO ()
sourceBufferBeginNotUndoableAction sb =
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_begin_not_undoable_action argPtr1) sb

-- |
--
sourceBufferEndNotUndoableAction :: SourceBuffer -> IO ()
sourceBufferEndNotUndoableAction sb =
  (\(SourceBuffer arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_source_buffer_end_not_undoable_action argPtr1) sb

-- | Creates a marker in the buffer of the given type.
--
-- * A marker is
-- semantically very similar to a 'Graphics.UI.Gtk.Multiline.TextMark',
-- except it has a type
-- which is used by the 'SourceView' displaying the buffer to show a
-- pixmap on the left margin, at the line the marker is in. Because
-- of this, a marker is generally associated to a line and not a
-- character position. Markers are also accessible through a position
-- or range in the buffer.
--
-- * Markers are implemented using 'Graphics.UI.Gtk.Multiline.TextMark',
-- so all characteristics
-- and restrictions to marks apply to markers too. These includes
-- life cycle issues and 'Graphics.UI.Gtk.Multiline.TextMark.onMarkSet'
-- and 'Graphics.UI.Gtk.Multiline.TextMark.onMarkDeleted' signal
-- emissions.
--
-- * Like a 'Graphics.UI.Gtk.Multiline.TextMark', a 'SourceMarker'
-- can be anonymous if the
-- passed name is @Nothing@. Also, the buffer owns the markers so you
-- shouldn't unreference it.

sourceBufferCreateSourceMark :: SourceBuffer -- the buffer
                         -> Maybe String -- the name of the mark
                         -> String -- the category of the mark
                         -> TextIter -> IO SourceMark
sourceBufferCreateSourceMark sb name category iter =
  makeNewGObject mkSourceMark $
  maybeWith withCString name $ \strPtr1 ->
  withCString category $ \strPtr2 ->
  (\(SourceBuffer arg1) arg2 arg3 (TextIter arg4) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg4 $ \argPtr4 ->gtk_source_buffer_create_source_mark argPtr1 arg2 arg3 argPtr4) sb strPtr1 strPtr2 iter

-- |
--
sourceBufferEnsureHighlight :: SourceBuffer -> TextIter -> TextIter -> IO ()
sourceBufferEnsureHighlight sb start end =
    (\(SourceBuffer arg1) (TextIter arg2) (TextIter arg3) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->withForeignPtr arg3 $ \argPtr3 ->gtk_source_buffer_ensure_highlight argPtr1 argPtr2 argPtr3) sb start end

-- |
--
sourceBufferCanRedo :: ReadAttr SourceBuffer Bool
sourceBufferCanRedo = readAttrFromBoolProperty "can-redo"

-- |
--
sourceBufferCanUndo :: ReadAttr SourceBuffer Bool
sourceBufferCanUndo = readAttrFromBoolProperty "can-undo"

-- |
--
sourceBufferHighlightMatchingBrackets :: Attr SourceBuffer Bool
sourceBufferHighlightMatchingBrackets = newAttrFromBoolProperty "highlight-matching-brackets"

-- |
--
sourceBufferHighlightSyntax :: Attr SourceBuffer Bool
sourceBufferHighlightSyntax = newAttrFromBoolProperty "highlight-matching-brackets"

-- |
--
sourceBufferLanguage :: Attr SourceBuffer (Maybe SourceLanguage)
sourceBufferLanguage = newAttrFromMaybeObjectProperty "language" gTypeSourceLanguage

-- |
--
sourceBufferMaxUndoLevels :: Attr SourceBuffer Int
sourceBufferMaxUndoLevels = newAttrFromIntProperty "max-undo-levels"

-- |
--
sourceBufferSourceStyleScheme :: Attr SourceBuffer (Maybe SourceStyleScheme)
sourceBufferSourceStyleScheme = newAttrFromMaybeObjectProperty "style-scheme" gTypeSourceStyleScheme

-- |
--
sourceBufferHighlightUpdated :: Signal SourceBuffer (TextIter -> TextIter -> IO ())
sourceBufferHighlightUpdated = Signal $ connect_BOXED_BOXED__NONE "highlight-updated" mkTextIterCopy mkTextIterCopy

foreign import ccall unsafe "gtk_source_buffer_new"
  gtk_source_buffer_new :: ((Ptr TextTagTable) -> (IO (Ptr SourceBuffer)))

foreign import ccall unsafe "gtk_source_buffer_new_with_language"
  gtk_source_buffer_new_with_language :: ((Ptr SourceLanguage) -> (IO (Ptr SourceBuffer)))

foreign import ccall unsafe "gtk_source_buffer_set_highlight_syntax"
  gtk_source_buffer_set_highlight_syntax :: ((Ptr SourceBuffer) -> (CInt -> (IO ())))

foreign import ccall unsafe "gtk_source_buffer_get_highlight_syntax"
  gtk_source_buffer_get_highlight_syntax :: ((Ptr SourceBuffer) -> (IO CInt))

foreign import ccall unsafe "gtk_source_buffer_set_language"
  gtk_source_buffer_set_language :: ((Ptr SourceBuffer) -> ((Ptr SourceLanguage) -> (IO ())))

foreign import ccall unsafe "gtk_source_buffer_get_language"
  gtk_source_buffer_get_language :: ((Ptr SourceBuffer) -> (IO (Ptr SourceLanguage)))

foreign import ccall unsafe "gtk_source_buffer_set_highlight_matching_brackets"
  gtk_source_buffer_set_highlight_matching_brackets :: ((Ptr SourceBuffer) -> (CInt -> (IO ())))

foreign import ccall unsafe "gtk_source_buffer_get_highlight_matching_brackets"
  gtk_source_buffer_get_highlight_matching_brackets :: ((Ptr SourceBuffer) -> (IO CInt))

foreign import ccall unsafe "gtk_source_buffer_set_style_scheme"
  gtk_source_buffer_set_style_scheme :: ((Ptr SourceBuffer) -> ((Ptr SourceStyleScheme) -> (IO ())))

foreign import ccall unsafe "gtk_source_buffer_get_style_scheme"
  gtk_source_buffer_get_style_scheme :: ((Ptr SourceBuffer) -> (IO (Ptr SourceStyleScheme)))

foreign import ccall unsafe "gtk_source_buffer_set_max_undo_levels"
  gtk_source_buffer_set_max_undo_levels :: ((Ptr SourceBuffer) -> (CInt -> (IO ())))

foreign import ccall unsafe "gtk_source_buffer_get_max_undo_levels"
  gtk_source_buffer_get_max_undo_levels :: ((Ptr SourceBuffer) -> (IO CInt))

foreign import ccall unsafe "gtk_source_buffer_can_undo"
  gtk_source_buffer_can_undo :: ((Ptr SourceBuffer) -> (IO CInt))

foreign import ccall unsafe "gtk_source_buffer_can_redo"
  gtk_source_buffer_can_redo :: ((Ptr SourceBuffer) -> (IO CInt))

foreign import ccall safe "gtk_source_buffer_undo"
  gtk_source_buffer_undo :: ((Ptr SourceBuffer) -> (IO ()))

foreign import ccall safe "gtk_source_buffer_redo"
  gtk_source_buffer_redo :: ((Ptr SourceBuffer) -> (IO ()))

foreign import ccall safe "gtk_source_buffer_begin_not_undoable_action"
  gtk_source_buffer_begin_not_undoable_action :: ((Ptr SourceBuffer) -> (IO ()))

foreign import ccall safe "gtk_source_buffer_end_not_undoable_action"
  gtk_source_buffer_end_not_undoable_action :: ((Ptr SourceBuffer) -> (IO ()))

foreign import ccall safe "gtk_source_buffer_create_source_mark"
  gtk_source_buffer_create_source_mark :: ((Ptr SourceBuffer) -> ((Ptr CChar) -> ((Ptr CChar) -> ((Ptr TextIter) -> (IO (Ptr SourceMark))))))

foreign import ccall safe "gtk_source_buffer_ensure_highlight"
  gtk_source_buffer_ensure_highlight :: ((Ptr SourceBuffer) -> ((Ptr TextIter) -> ((Ptr TextIter) -> (IO ()))))