-/// Convenience: prepare undo for the single paragraph or cell
-/// containing the cursor
-void recordUndo(Cursor & cur, Undo::undo_kind kind = Undo::ATOMIC);
-/// Convenience: prepare undo for the inset containing the cursor
-void recordUndoInset(Cursor & cur, Undo::undo_kind kind = Undo::ATOMIC);
-/// Convenience: prepare undo for the selected paragraphs
-void recordUndoSelection(Cursor & cur, Undo::undo_kind kind = Undo::ATOMIC);
+ Undo(Buffer &);
+
+ ~Undo();
+
+ /// this will undo the last action - returns false if no undo possible
+ bool textUndo(DocIterator &);
+
+ /// this will redo the last undo - returns false if no redo possible
+ bool textRedo(DocIterator &);
+
+ /// End a sequence of INSERT_UNDO or DELETE_UNDO type of undo
+ /// operations (grouping of consecutive characters insertion/deletion).
+ void finishUndo();
+
+ ///
+ bool hasUndoStack() const;
+ ///
+ bool hasRedoStack() const;
+
+ /// open a new group of undo operations.
+ /**
+ * Groups can be nested. Such a nested group e.g. { {} {} } is undone in
+ * a single step. This means you can add a group whenever you are not sure.
+ */
+ void beginUndoGroup();
+
+ /// end the current undo group.
+ void endUndoGroup();
+
+ /// The general case: record undo information for an arbitrary range.
+ /**
+ * Record undo information - call with the current cursor and
+ * the 'other end' of the range of changed paragraphs. So we
+ * give an inclusive range. This is called before you make the
+ * changes to the paragraph, and it will record the original
+ * information of the paragraphs in the undo stack.
+ */
+ void recordUndo(DocIterator const & cur, UndoKind kind,
+ pit_type from, pit_type to);
+
+ /// Convenience: record undo information for the range between
+ /// 'from' and cursor.
+ void recordUndo(DocIterator const & cur, UndoKind kind, pit_type from);
+
+ /// Convenience: record undo information for the single
+ /// paragraph or cell containing the cursor.
+ void recordUndo(DocIterator const & cur, UndoKind kind = ATOMIC_UNDO);
+
+ /// Convenience: record undo information for the inset
+ /// containing the cursor.
+ void recordUndoInset(DocIterator const & cur,
+ UndoKind kind = ATOMIC_UNDO);
+
+ /// Convenience: prepare undo for the whole buffer
+ void recordUndoFullDocument(DocIterator const & cur);
+
+private:
+ struct Private;
+ Private * const d;
+};