]> git.lyx.org Git - lyx.git/blobdiff - src/Cursor.h
white space -> tabs
[lyx.git] / src / Cursor.h
index 2d0e4386f5a2bb1efbdf7b0d113a412871794082..cf2344f2c6d53de788f809131d7441bdac754efa 100644 (file)
@@ -25,7 +25,7 @@ class Buffer;
 class BufferView;
 class FuncStatus;
 class FuncRequest;
-class LyXFont;
+class Font;
 class Row;
 
 // these should go
@@ -86,9 +86,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();
@@ -121,16 +121,21 @@ public:
        /// insert a string
        void insert(docstring const & str);
 
-       /// in pixels from left of screen
+       /// FIXME: rename to something sensible showing difference to x_target()
+       /// in pixels from left of screen, set to current position if unset
        int targetX() const;
-       /// write acess to target x position of cursor
-       int & x_target();
-       /// return target x position of cursor
+       /// set the targetX to x
+       void setTargetX(int x);
+       /// return targetX or -1 if unset
        int x_target() const;
-       /// set targetX in current position
+       /// set targetX to current position
        void setTargetX();
-       /// clear target x position of cursor
+       /// clear targetX, i.e. set it to -1
        void clearTargetX();
+       /// set offset to actual position - targetX
+       void updateTextTargetOffset();
+       /// distance between actual and targeted position during last up/down in text
+       int textTargetOffset() const;
 
        /// access to normalized selection anchor
        CursorSlice anchor() const;
@@ -186,11 +191,12 @@ public:
 //private:
        /// the anchor position
        DocIterator anchor_;
-
+       
        ///
        DispatchResult disp_;
-
-
+       ///
+       DocIterator const & beforeDispatchCursor() { return beforeDispatchCursor_; }
+       
 private:
        /**
         * The target x position of the cursor. This is used for when
@@ -205,6 +211,8 @@ private:
         * shorter than x()
         */
        int x_target_;
+       /// if a x_target cannot be hit exactly in a text, put the difference here
+       int textTargetOffset_;
        /// do we have a selection?
        bool selection_;
        /// are we on the way to get one?
@@ -214,6 +222,12 @@ private:
        // of a big inset spanning a whole row and computing coordinates for
        // displaying the cursor.
        bool logicalpos_;
+       /// x position before dispatch started
+       int beforeDispX_;
+       /// y position before dispatch started
+       int beforeDispY_;
+       /// position before dispatch started
+       DocIterator beforeDispatchCursor_;
 
 private:
 
@@ -243,10 +257,19 @@ public:
        bool erase();
        /// return false for empty math insets
        bool backspace();
-       /// called for LFUN_UP etc
+       /// move the cursor up by sending an internal LFUN_UP
+       /// return true if fullscreen update is needed
        bool up();
-       /// called for LFUN_DOWN etc
+       /// 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,
+       /// 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();
        ///
@@ -275,6 +298,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();
@@ -294,9 +318,6 @@ public:
        ///
        docstring getPossibleLabel();
 
-       /// moves position somehow up or down
-       bool goUpDown(bool up);
-
        /// the name of the macro we are currently inputting
        docstring macroName();
        /// where in the curent cell does the macro name start?
@@ -306,12 +327,17 @@ public:
        ///
        Encoding const * getEncoding() const;
        /// font at cursor position
-       LyXFont getFont() const;
-       ///
-       bool isRTL() const;
+       Font getFont() const;
 };
 
 
+/**
+ * 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