X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FUndo.h;h=fbfb9e7dbbb3dc40ef3ca1f2fd27725dec470ab1;hb=5e290e4bf9fb8e7d94912dd0126751d5f6649859;hp=c2acf4af216b78060c7ed3893a965fbfecaa57aa;hpb=7760c5ccf2c558e48a54c101b779d0be25d7e7ba;p=lyx.git diff --git a/src/Undo.h b/src/Undo.h index c2acf4af21..fbfb9e7dbb 100644 --- a/src/Undo.h +++ b/src/Undo.h @@ -22,11 +22,8 @@ namespace lyx { class Buffer; -class BufferParams; class CursorData; class Inset; -class MathData; -class ParagraphList; /// This is used to combine consecutive undo recordings of the same kind. enum UndoKind { @@ -47,6 +44,9 @@ enum UndoKind { class Undo { + /// noncopyable + Undo(Undo const &); + void operator=(Undo const &); public: Undo(Buffer &); @@ -57,10 +57,10 @@ public: void clear(); /// this will undo the last action - returns false if no undo possible - bool textUndo(CursorData &); + bool undoAction(CursorData &); /// this will redo the last undo - returns false if no redo possible - bool textRedo(CursorData &); + bool redoAction(CursorData &); /// End a sequence of INSERT_UNDO or DELETE_UNDO type of undo /// operations (grouping of consecutive characters insertion/deletion). @@ -80,12 +80,23 @@ public: * 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); + /// end abruptly the current group and create a new one wih the same nesting level + void splitUndoGroup(CursorData const & cur); + /// return true if an undo group is open and contains at least one element + bool activeUndoGroup() const; /// The general case: record undo information for an arbitrary range. /** @@ -119,29 +130,23 @@ private: /** 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) + * The undo group is open when the object is instantiated or when + * the buffer is reset; it is then ended as the object goes out of + * scope (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. - */ + // Begin a new undo group for buffer \c buf. + UndoGroupHelper(Buffer * buf); + // End all active undo groups. + ~UndoGroupHelper(); + + // Begin if needed an undo group for buffer \c buf. void resetBuffer(Buffer * buf); private: - Buffer * buffer_; + class Impl; + Impl * const d; };