X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.h;h=494cf7b6fb70c056edaa1a3a2b08f935aaed314c;hb=e5a46922e916a06ad1b958d5895cc3cfb4f13d2c;hp=136443a70a1ec49b666b86cf623453706e021a69;hpb=ed064bdee611821c1ebdac78b7a085dfde9f0b5a;p=lyx.git diff --git a/src/undo.h b/src/undo.h index 136443a70a..494cf7b6fb 100644 --- a/src/undo.h +++ b/src/undo.h @@ -17,14 +17,20 @@ #define UNDO_H #include "dociterator.h" -#include "ParagraphList_fwd.h" +#include "ParagraphList.h" +#include "bufferparams.h" #include "support/types.h" #include -class LCursor; + +namespace lyx { + +class BufferParams; class BufferView; +class DocIterator; +class LCursor; /** @@ -44,12 +50,13 @@ The idea is to store the contents of 'interesting' paragraphs in some structure ('Undo') _before_ it is changed in some edit operation. Obviously, the stored ranged should be as small as possible. However, it there is a lower limit: The StableDocIterator pointing stored in the undo -struct must be valid after the changes, too, as it will used as a pointer -where to insert the stored bits when performining undo. +class must be valid after the changes, too, as it will used as a pointer +where to insert the stored bits when performining undo. */ -struct Undo { +class Undo { +public: /// This is used to combine consecutive undo recordings of the same kind. enum undo_kind { /** @@ -70,16 +77,20 @@ struct Undo { undo_kind kind; /// the position of the cursor StableDocIterator cursor; - /// the position of the cell described + /// the position of the cell described StableDocIterator cell; /// counted from begin of cell - lyx::pit_type from; + pit_type from; /// complement to end of this cell - lyx::pit_type end; + pit_type end; /// the contents of the saved Paragraphs (for texted) ParagraphList pars; /// the stringified contents of the saved MathArray (for mathed) - std::string array; + docstring array; + /// Only used in case of full backups + BufferParams bparams; + /// Only used in case of full backups + bool isFullBuffer; }; @@ -98,14 +109,23 @@ void finishUndo(); * 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. + * + * FIXME: We need something to record undo in partial grids for mathed. + * Right now we use recordUndoInset if more than one cell is changed, + * but that puts the cursor in front of the inset after undo. We would need + * something like + * recordUndoGrid(LCursor & cur, Undo::undo_kind kind, idx_type from, idx_type to); + * and store the cell information in class Undo. */ /// The general case: prepare undo for an arbitrary range. +/// FIXME: replace LCursor with DocIterator. This is not possible right +/// now because we need access to Buffer->params()!. void recordUndo(LCursor & cur, Undo::undo_kind kind, - lyx::pit_type from, lyx::pit_type to); + pit_type from, pit_type to); /// Convenience: prepare undo for the range between 'from' and cursor. -void recordUndo(LCursor & cur, Undo::undo_kind kind, lyx::pit_type from); +void recordUndo(LCursor & cur, Undo::undo_kind kind, pit_type from); /// Convenience: prepare undo for the single paragraph or cell /// containing the cursor @@ -115,7 +135,10 @@ void recordUndoInset(LCursor & cur, Undo::undo_kind kind = Undo::ATOMIC); /// Convenience: prepare undo for the selected paragraphs void recordUndoSelection(LCursor & cur, Undo::undo_kind kind = Undo::ATOMIC); -/// Convenience: prepare undo for the single paragraph containing the cursor -void recordUndoFullDocument(LCursor & cur); +/// Convenience: prepare undo for the whole buffer +void recordUndoFullDocument(BufferView * bv); + + +} // namespace lyx #endif // UNDO_FUNCS_H