#include "DispatchResult.h"
#include "DocIterator.h"
+#include "Font.h"
+#include "Undo.h"
#include <iosfwd>
#include <vector>
class BufferView;
class FuncStatus;
class FuncRequest;
-class Font;
class Row;
// these should go
/// sets cursor part
void setCursor(DocIterator const & it);
+ ///
+ void setCurrentFont();
+
//
// selection
//
DocIterator selectionBegin() const;
/// access start of selection
DocIterator selectionEnd() const;
- ///
+ /// FIXME: document this
bool selHandle(bool selecting);
- //
+ ///
docstring selectionAsString(bool label) const;
///
docstring currentState();
* Not using noUpdate() should never be wrong.
*/
void noUpdate();
- /// fix cursor in circumstances that should never happen
- void fixIfBroken();
+ /// fix cursor in circumstances that should never happen.
+ /// \retval true if a fix occured.
+ bool fixIfBroken();
/// output
friend std::ostream & operator<<(std::ostream & os, Cursor const & cur);
+ ///
+ bool textUndo();
+ ///
+ bool textRedo();
+
+ /// makes sure the next operation will be stored
+ void finishUndo();
+
+ /// The general case: prepare undo for an arbitrary range.
+ void recordUndo(UndoKind kind, pit_type from, pit_type to);
+
+ /// Convenience: prepare undo for the range between 'from' and cursor.
+ void recordUndo(UndoKind kind, pit_type from);
+
+ /// Convenience: prepare undo for the single paragraph or cell
+ /// containing the cursor
+ void recordUndo(UndoKind kind = ATOMIC_UNDO);
+
+ /// Convenience: prepare undo for the inset containing the cursor
+ void recordUndoInset(UndoKind kind = ATOMIC_UNDO);
+
+ /// Convenience: prepare undo for the whole buffer
+ void recordUndoFullDocument();
+
+ /// Convenience: prepare undo for the selected paragraphs
+ void recordUndoSelection();
+
public:
///
BufferView * bv_;
///
DispatchResult disp_;
+ ///
+ DocIterator const & beforeDispatchCursor() { return beforeDispatchCursor_; }
private:
/**
/// y position before dispatch started
int beforeDispY_;
/// position before dispatch started
- size_t beforeDispDepth_;
-
+ DocIterator beforeDispatchCursor_;
+
+// FIXME: make them private.
+public:
+ /// the current font settings
+ Font current_font;
+ /// the current font
+ Font real_current_font;
+
private:
//
bool isInside(Inset const *);
/// make sure cursor position is valid
+ /// FIXME: It does a subset of fixIfBroken. Maybe merge them?
void normalize();
/// mark current cursor trace for redraw
void touch();
};
+/**
+ * Notifies all insets which appear in old, but not in cur. Make
+ * Sure that the cursor old is valid, i.e. als inset pointer
+ * point to valid insets! Use Cursor::fixIfBroken if necessary.
+ */
+bool notifyCursorLeaves(DocIterator const & old, Cursor & cur);
+
} // namespace lyx