#define UNDO_H
#include "dociterator.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
+#include "bufferparams.h"
#include "support/types.h"
#include <string>
-class LCursor;
+
+namespace lyx {
+
+class BufferParams;
class BufferView;
+class DocIterator;
+class LCursor;
/**
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
+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 {
/**
/// 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;
};
* 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
/// 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