]> git.lyx.org Git - lyx.git/blobdiff - src/Cursor.h
listerrors.lyx : Update a link.
[lyx.git] / src / Cursor.h
index ebb68b13f48bd069fdf43ba89eeae5347a99000f..0d7441967866c2635fd9d6eea34a83355127f35c 100644 (file)
@@ -36,9 +36,6 @@ class Encoding;
 
 
 /// The cursor class describes the position of a cursor within a document.
-
-// The public inheritance should go in favour of a suitable data member
-// (or maybe private inheritance) at some point of time.
 class Cursor : public DocIterator
 {
 public:
@@ -114,7 +111,7 @@ public:
         */
        bool selHandle(bool selecting);
        ///
-       docstring selectionAsString(bool label) const;
+       docstring selectionAsString(bool with_label) const;
        ///
        docstring currentState() const;
 
@@ -201,7 +198,11 @@ public:
        int textTargetOffset() const;
 
        /// access to normalized selection anchor
-       CursorSlice anchor() const;
+       CursorSlice normalAnchor() const;
+       // FIXME: this can't be a const & and a const function because
+       // LFUN_TAB_* wants to move the real anchor.
+       /// access to real selection anchor
+       DocIterator & realAnchor();
        /// sets anchor to cursor position
        void resetAnchor();
        /// access to owning BufferView
@@ -224,11 +225,17 @@ public:
         * Right Thing (even if my getStatus partner said that I can do it).
         * It is sort of a kludge that should be used only rarely...
         */
-       void undispatched();
+       void undispatched() const;
        /// the event was already dispatched
-       void dispatched();
-       /// Set which update should be done
-       void updateFlags(Update::flags f);
+       void dispatched() const;
+       /// Set which screen update should be done
+       void screenUpdateFlags(Update::flags f) const;
+       /// Forces an updateBuffer() call
+       void forceBufferUpdate() const;
+       /// Removes any pending updateBuffer() call
+       void clearBufferUpdate() const;
+       /// Do we need to call updateBuffer()?
+       bool needBufferUpdate() const;
        /**
         * don't call update() when done
         *
@@ -237,9 +244,11 @@ public:
         * not need to be re-drawn and all entries in the coord cache stay
         * valid (and there are no other things to put in the coord cache).
         * This is a fairly rare event as well and only some optimization.
-        * Not using noUpdate() should never be wrong.
+        * Not using noScreenUpdate() should never be wrong.
         */
-       void noUpdate();
+       void noScreenUpdate() const;
+       ///
+       Update::flags screenUpdate() const { return disp_.screenUpdate(); }
        /// fix cursor in circumstances that should never happen.
        /// \retval true if a fix occured.
        bool fixIfBroken();
@@ -273,7 +282,8 @@ public:
        void recordUndo(UndoKind kind = ATOMIC_UNDO) const;
 
        /// Convenience: prepare undo for the inset containing the cursor
-       void recordUndoInset(UndoKind kind = ATOMIC_UNDO) const;
+       void recordUndoInset(UndoKind kind = ATOMIC_UNDO,
+                            Inset const * inset = 0) const;
 
        /// Convenience: prepare undo for the whole buffer
        void recordUndoFullDocument() const;
@@ -284,21 +294,38 @@ public:
        ///
        void checkBufferStructure();
 
+       /// hook for text input to maintain the "new born word"
+       void markNewWordPosition();
+
+       /// The position of the new born word
+       /// As the user is entering a word without leaving it
+       /// the result is not empty. When not in text mode
+       /// and after leaving the word the result is empty.
+       DocIterator newWord() const { return new_word_; }
+
 public:
-       ///
-       BufferView * bv_;
 //private:
-       /// the anchor position
-       DocIterator anchor_;
        
-       ///
-       mutable DispatchResult disp_;
        ///
        DocIterator const & beforeDispatchCursor() const { return beforeDispatchCursor_; }
        ///
        void saveBeforeDispatchPosXY();
 
 private:
+       /// validate the "new born word" position
+       void checkNewWordPosition();
+       /// clear the "new born word" position
+       void clearNewWordPosition();
+
+private:
+       ///
+       BufferView * bv_;
+       /// the anchor position
+       DocIterator anchor_;
+       /// the start of the new born word
+       DocIterator new_word_;
+       ///
+       mutable DispatchResult disp_;
        /**
         * The target x position of the cursor. This is used for when
         * we have text like :
@@ -388,8 +415,8 @@ public:
        void plainInsert(MathAtom const & at);
        ///
        void niceInsert(MathAtom const & at);
-       ///
-       void niceInsert(docstring const & str, Parse::flags f = Parse::NORMAL,
+       /// return the number of inserted array items
+       int niceInsert(docstring const & str, Parse::flags f = Parse::NORMAL,
                        bool enter = true);
 
        /// in pixels from top of screen