]> git.lyx.org Git - lyx.git/blobdiff - src/Cursor.h
white space -> tabs
[lyx.git] / src / Cursor.h
index 13ca0e7cdd3ff93eef1ebbd434ddea057a306a72..cf2344f2c6d53de788f809131d7441bdac754efa 100644 (file)
@@ -25,7 +25,7 @@ class Buffer;
 class BufferView;
 class FuncStatus;
 class FuncRequest;
-class LyXFont;
+class Font;
 class Row;
 
 // these should go
@@ -47,9 +47,9 @@ public:
        /// get the resut of the last dispatch
        DispatchResult result() const;
        /// add a new cursor slice
-       void push(InsetBase & inset);
+       void push(Inset & inset);
        /// add a new cursor slice, place cursor on left end
-       void pushLeft(InsetBase & inset);
+       void pushLeft(Inset & inset);
        /// pop one level off the cursor
        void pop();
        /// pop one slice off the cursor stack and go left
@@ -57,7 +57,7 @@ public:
        /// pop one slice off the cursor stack and go right
        bool popRight();
        /// make sure we are outside of given inset
-       void leaveInset(InsetBase const & inset);
+       void leaveInset(Inset const & inset);
        /// sets cursor part
        void setCursor(DocIterator const & it);
 
@@ -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();
@@ -115,22 +115,27 @@ public:
        bool posRight();
 
        /// insert an inset
-       void insert(InsetBase *);
+       void insert(Inset *);
        /// insert a single char
        void insert(char_type c);
        /// 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;
@@ -146,7 +151,7 @@ public:
        int currentMode();
        /// reset cursor bottom to the beginning of the given inset
        // (sort of 'chroot' environment...)
-       void reset(InsetBase &);
+       void reset(Inset &);
        /// for spellchecking
        void replaceWord(std::string const & replacestring);
        /**
@@ -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();
        ///
@@ -272,9 +295,10 @@ public:
        // selection in given cell of atom
        void handleNest(MathAtom const & at, int cell = 0);
        ///
-       bool isInside(InsetBase const *);
+       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