class Undo
{
+ /// noncopyable
+ Undo(Undo const &);
+ void operator=(Undo const &);
public:
Undo(Buffer &);
* a single step. This means you can add a group whenever you are not sure.
*/
void beginUndoGroup();
-
+ /// open a new group as above and specify a cursor to set as cur_before
+ /// of the group's undo elements.
+ /**
+ * This cursor takes precedence over what is passed to recordUndo.
+ * In the case of nested groups, only the first cur_before is
+ * taken into account. The cursor is reset at the end of the
+ * top-level group.
+ */
+ void beginUndoGroup(CursorData const & cur_before);
/// end the current undo group.
void endUndoGroup();
-
/// end the current undo group and set UndoElement::cur_after if necessary.
- void endUndoGroup(CursorData const &);
+ void endUndoGroup(CursorData const & cur_after);
/// The general case: record undo information for an arbitrary range.
/**
};
+/** Helper class to simplify the use of undo groups across several buffers.
+ *
+ * The undo group is created when the object is instanciated; it is
+ * then ended as the object goes out of scope or the buffer is reset
+ * (see below)
+ */
+class UndoGroupHelper {
+public:
+ UndoGroupHelper(Buffer * buf) : buffer_(0)
+ {
+ resetBuffer(buf);
+ }
+
+ ~UndoGroupHelper()
+ {
+ resetBuffer(0);
+ }
+
+ /** Close the current undo group if necessary and create a new one
+ * for buffer \c buf.
+ */
+ void resetBuffer(Buffer * buf);
+
+private:
+ Buffer * buffer_;
+};
+
+
} // namespace lyx