packages feed

gtksourceview2-0.13.2.1: Graphics/UI/Gtk/SourceView/SourceUndoManager.chs

{-# LANGUAGE CPP #-}
-- -*-haskell-*-
--  GIMP Toolkit (GTK) SourceUndoManager
--
--  Author : Andy Stewart
--
--  Created: 08 Aug 2010
--
--  Copyright (C) 2010 Andy Stewart
--
--  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.SourceUndoManager (
-- * Description
-- | The 'SourceUndoManager' interface can be implemented to provide custom undo management to a
-- 'SourceBuffer'. Use 'sourceBufferSetUndoManager' to install a custom undo manager for a
-- particular source buffer.
-- 
-- Use 'sourceUndoManagerCanUndoChanged' and 'sourceUndoManagerCanRedoChanged' when
-- respectively the undo state or redo state of the undo stack has changed.

-- * Types  
    SourceUndoManager,
    SourceUndoManagerClass,
  
-- * Methods  
    sourceUndoManagerCanUndo,
    sourceUndoManagerCanRedo,
    sourceUndoManagerUndo,
    sourceUndoManagerRedo,
    sourceUndoManagerBeginNotUndoableAction,
    sourceUndoManagerEndNotUndoableAction,

-- * Signals
    sourceUndoManagerCanRedoChanged,
    sourceUndoManagerCanUndoChanged,
) where

import Control.Monad    (liftM)

import System.Glib.Attributes
import System.Glib.FFI
import System.Glib.Properties
import System.Glib.UTFString

{#import Graphics.UI.Gtk.SourceView.Signals#}
{#import Graphics.UI.Gtk.SourceView.Types#}

{# context lib="gtk" prefix="gtk" #}

-- | Get whether there are undo operations available.
sourceUndoManagerCanUndo :: SourceUndoManagerClass sum => sum
                         -> IO Bool  -- ^ returns 'True' if there are undo operations available, 'False' otherwise 
sourceUndoManagerCanUndo sm =
  liftM toBool $
  {#call gtk_source_undo_manager_can_undo #} (toSourceUndoManager sm)

-- | Get whether there are redo operations available.
sourceUndoManagerCanRedo :: SourceUndoManagerClass sum => sum
                         -> IO Bool  -- ^ returns 'True' if there are redo operations available, 'False' otherwise 
sourceUndoManagerCanRedo sm =
  liftM toBool $
  {#call gtk_source_undo_manager_can_redo #} (toSourceUndoManager sm)

-- | Perform a single undo. Calling this function when there are no undo operations available is an
-- error. Use @gtkSourceUndoManagerCanUndo@ to find out if there are undo operations available.
sourceUndoManagerUndo :: SourceUndoManagerClass sum => sum -> IO ()
sourceUndoManagerUndo sm =
  {#call gtk_source_undo_manager_undo #} (toSourceUndoManager sm)

-- | Perform a single redo. Calling this function when there are no redo operations available is an
-- error. Use @gtkSourceUndoManagerCanRedo@ to find out if there are redo operations available.
sourceUndoManagerRedo :: SourceUndoManagerClass sum => sum -> IO ()
sourceUndoManagerRedo sm =
  {#call gtk_source_undo_manager_redo #} (toSourceUndoManager sm)

-- | Begin a not undoable action on the buffer. All changes between this call and the call to
-- @gtkSourceUndoManagerEndNotUndoableAction@ cannot be undone. This function should be
-- re-entrant.
sourceUndoManagerBeginNotUndoableAction :: SourceUndoManagerClass sum => sum -> IO ()
sourceUndoManagerBeginNotUndoableAction sm =
  {#call gtk_source_undo_manager_begin_not_undoable_action #} (toSourceUndoManager sm)

-- | Ends a not undoable action on the buffer.
sourceUndoManagerEndNotUndoableAction :: SourceUndoManagerClass sum => sum -> IO ()
sourceUndoManagerEndNotUndoableAction sm =
  {#call gtk_source_undo_manager_end_not_undoable_action #} (toSourceUndoManager sm)

-- | Emitted when the ability to redo has changed.
--
sourceUndoManagerCanRedoChanged :: SourceUndoManagerClass sum => Signal sum (IO ())
sourceUndoManagerCanRedoChanged = Signal $ connect_NONE__NONE "can-redo-changed"

-- | Emitted when the ability to undo has changed.
--
sourceUndoManagerCanUndoChanged :: SourceUndoManagerClass sum => Signal sum (IO ())
sourceUndoManagerCanUndoChanged = Signal $ connect_NONE__NONE "can-undo-changed"