]> git.lyx.org Git - lyx.git/blobdiff - src/Cursor.h
* src/LyXRC.{cpp,h}:
[lyx.git] / src / Cursor.h
index 998b66767987cd0c95b8d00f1635171727aba238..1ee104cd52b8a6a9fcbcdb9d10c62c4315325b99 100644 (file)
@@ -14,8 +14,9 @@
 
 #include "DispatchResult.h"
 #include "DocIterator.h"
+#include "Font.h"
+#include "Undo.h"
 
-#include <iosfwd>
 #include <vector>
 
 
@@ -25,7 +26,6 @@ class Buffer;
 class BufferView;
 class FuncStatus;
 class FuncRequest;
-class Font;
 class Row;
 
 // these should go
@@ -61,6 +61,9 @@ public:
        /// sets cursor part
        void setCursor(DocIterator const & it);
 
+       ///
+       void setCurrentFont();
+
        //
        // selection
        //
@@ -86,9 +89,9 @@ public:
        DocIterator selectionBegin() const;
        /// access start of selection
        DocIterator selectionEnd() const;
-       ///
+       /// FIXME: document this
        bool selHandle(bool selecting);
-       //
+       ///
        docstring selectionAsString(bool label) const;
        ///
        docstring currentState();
@@ -179,12 +182,40 @@ public:
         * 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_;
@@ -194,6 +225,8 @@ public:
        
        ///
        DispatchResult disp_;
+       ///
+       DocIterator const & beforeDispatchCursor() { return beforeDispatchCursor_; }
        
 private:
        /**
@@ -225,8 +258,15 @@ 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:
 
        //
@@ -296,6 +336,7 @@ public:
        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();
@@ -328,6 +369,13 @@ public:
 };
 
 
+/**
+ * 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