]> git.lyx.org Git - lyx.git/blobdiff - src/Cursor.h
Avoid full metrics computation with Update:FitCursor
[lyx.git] / src / Cursor.h
index 38ddad3502c314f36410d66c76965e567d4ce467..e362073ef44d7168bb6205d653248beeaa339c69 100644 (file)
@@ -118,7 +118,7 @@ public:
        ///
        void setWordSelection(bool set) { word_selection_ = set; }
        ///
-       bool wordSelection() { return word_selection_; }
+       bool wordSelection() const { return word_selection_; }
        /// did we place the anchor?
        bool mark() const { return mark_; }
        /// did we place the anchor?
@@ -131,12 +131,13 @@ public:
        void clearSelection();
        /// check whether selection contains specific type of inset
        /// returns 0 if no selection was made
-       bool insetInSelection(InsetCode const & inset);
+       bool insetInSelection(InsetCode const & inset) const;
        /// count occurences of specific inset type in the selection
        /// returns 0 if no selection was made
-       int countInsetsInSelection(InsetCode const & inset);
+       int countInsetsInSelection(InsetCode const & inset) const;
 
        /// access to normalized selection anchor
+       // FIXME: this should return a full DocIterator
        CursorSlice normalAnchor() const;
        /// access to real selection anchor
        DocIterator const & realAnchor() const { return anchor_; }
@@ -154,17 +155,13 @@ public:
        DocIterator selectionEnd() const;
 
        ///
-       docstring selectionAsString(bool with_label) const;
+       docstring selectionAsString(bool const with_label,
+                                   bool const skipdelete = false) const;
        /// get some interesting description of top position
        void info(odocstream & os, bool devel_mode) const;
        ///
        docstring currentState(bool devel_mode) const;
 
-       /// auto-correct mode
-       bool autocorrect() const { return autocorrect_; }
-       /// auto-correct mode
-       bool & autocorrect() { return autocorrect_; }
-
        /// fix cursor in circumstances that should never happen.
        /// \retval true if a fix occurred.
        bool fixIfBroken();
@@ -183,6 +180,8 @@ public:
        void beginUndoGroup() const;
        /// end the current undo group
        void endUndoGroup() const;
+       /// end abruptly the current group and create a new one wih the same nesting level
+       void splitUndoGroup() const;
 
        /// The general case: prepare undo for an arbitrary range.
        void recordUndo(pit_type from, pit_type to) const;
@@ -192,7 +191,7 @@ public:
        /// containing the cursor
        void recordUndo(UndoKind kind = ATOMIC_UNDO) const;
        /// Convenience: prepare undo for the inset containing the cursor
-       void recordUndoInset(Inset const * inset = 0) const;
+       void recordUndoInset(Inset const * inset = nullptr) const;
        /// Convenience: prepare undo for the whole buffer
        void recordUndoFullBuffer() const;
        /// Convenience: prepare undo for buffer parameters
@@ -209,7 +208,7 @@ public:
        DocIterator newWord() const { return new_word_; }
 
        /// are we in math mode (2), text mode (1) or unsure (0)?
-       int currentMode();
+       int currentMode() const;
 
        /// Return true if the next or previous inset has confirmDeletion depending
        /// on the boolean before. If there is a selection, return true if at least
@@ -236,8 +235,6 @@ private:
        //
        // math specific stuff that could be promoted to "global" later
        //
-       /// do we allow autocorrection
-       bool autocorrect_;
 
        // FIXME: make them private
 public:
@@ -274,17 +271,23 @@ public:
        void setCursorData(CursorData const & data);
 
        /// returns true if we made a decision
-       bool getStatus(FuncRequest const & cmd, FuncStatus & flag) const;
+       bool getStatus(FuncRequest const & cmd, FuncStatus & status) const;
        /// dispatch from innermost inset upwards
        void dispatch(FuncRequest const & cmd);
        /// display a message
        void message(docstring const & msg) const;
        /// display an error message
        void errorMessage(docstring const & msg) const;
-       /// get the resut of the last dispatch
+       /// get the result of the last dispatch
        DispatchResult const & result() const;
 
-       ///
+       /// Set the cursor language from current input method language
+       /* Considers first exact math with the codes used in the document,
+        * then approximate match among the same list, and finally exact
+        * or partial match with the whole list of languages.
+        */
+       void setLanguageFromInput();
+       /// Set the current font of the cursor from its location.
        void setCurrentFont();
 
        /**
@@ -378,6 +381,12 @@ public:
        void setTargetX();
        /// clear targetX, i.e. set it to -1
        void clearTargetX();
+       /// return x position of latest mouse press or -1 if unset
+       int xClickPos() const { return x_clickpos_; }
+       /// return y position of latest mouse press or -1 if unset
+       int yClickPos() const { return y_clickpos_; }
+       /// register mouse press coordinates
+       void setClickPos(int x, int y);
        /// set offset to actual position - targetX
        void updateTextTargetOffset();
        /// distance between actual and targeted position during last up/down in text
@@ -467,6 +476,9 @@ private:
        int x_target_;
        /// if a x_target cannot be hit exactly in a text, put the difference here
        int textTargetOffset_;
+       /// Exact position of mouse click
+       int x_clickpos_;
+       int y_clickpos_;
        /// position before dispatch started
        DocIterator beforeDispatchCursor_;
        /// cursor screen coordinates before dispatch started