]> git.lyx.org Git - lyx.git/blobdiff - src/Cursor.h
adjust
[lyx.git] / src / Cursor.h
index c33478d523356f1ce029e343097223f192a9ec31..27f2174d3c4dafade8277518d98e9a0121423ba8 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "DispatchResult.h"
 #include "DocIterator.h"
+#include "Font.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,8 +182,9 @@ 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);
@@ -194,6 +198,8 @@ public:
        
        ///
        DispatchResult disp_;
+       ///
+       DocIterator const & beforeDispatchCursor() { return beforeDispatchCursor_; }
        
 private:
        /**
@@ -225,8 +231,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:
 
        //
@@ -256,12 +269,17 @@ public:
        /// return false for empty math insets
        bool backspace();
        /// move the cursor up by sending an internal LFUN_UP
+       /// return true if fullscreen update is needed
        bool up();
-       /// move the cursor up by sending an internal LFUN_DOWN
+       /// move the cursor up by sending an internal LFUN_DOWN,
+       /// return true if fullscreen update is needed
        bool down();
-       /// move up/down in a text inset, called for LFUN_UP/DOWN
-       bool upDownInText(bool up);
+       /// move up/down in a text inset, called for LFUN_UP/DOWN,
+       /// return true if successful, updateNeeded set to true if fullscreen
+       /// update is needed, otherwise it's not touched
+       bool upDownInText(bool up, bool & updateNeeded);
        /// move up/down in math or any non text inset, call for LFUN_UP/DOWN
+       /// return true if successful
        bool upDownInMath(bool up);
        ///
        void plainErase();
@@ -291,6 +309,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();
@@ -323,6 +342,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