X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCursor.h;h=462c31caa24a31b6c9c1303f6bdc6685818856c6;hb=2de30c62f8d671a8c8d4d52a6a7310e2c5ca84de;hp=94d8f1a310a06e9b4bd8ee38b1a5f72ca0db45ee;hpb=21c30a09e12a7ad94bde592d3fea3e66f6fb38f5;p=lyx.git diff --git a/src/Cursor.h b/src/Cursor.h index 94d8f1a310..462c31caa2 100644 --- a/src/Cursor.h +++ b/src/Cursor.h @@ -10,17 +10,19 @@ */ /* -First some explanation about what a Cursor really is. I try to go from -more local to general. +First some explanation about what a Cursor really is, from local to +global. * a CursorSlice indicates the position of the cursor at local level. -It contains in particular: + It contains in particular: * idx(): the cell that contains the cursor (for Tabular or math arrays). Always 0 for 'plain' insets - * pit(): the index of the current paragraph (only for Texted) + * pit(): the index of the current paragraph (only for text) * pos(): the position in the current paragraph (or in the math - equation in Mathed). - * inset(): the inset in which the cursor is. + equation in mathed). + * inset(): the inset in which the cursor is. For a InsetTabular, + this is the tabular itself, not the cell inset (which is an + InsetTableCell). * a DocIterator indicated the position of the cursor in the document. It knows about the current buffer (buffer() method) and contains a @@ -35,19 +37,18 @@ It contains in particular: * innerTextSlice() returns the deepest slice that is text (useful when one is in a math equation and looks for the enclosing text) -* A CursorData is a descendent of Dociterator that contains +* A CursorData is a descendant of Dociterator that contains * a second DocIterator object, the anchor, that is useful when selecting. - * some other data not interesting here -This class is used only for undo and contains the Cursor element that -are not GUI-related. In LyX 2.0, Cursor was directly deriving from -DocIterator + * some other data that describes current selection, cursor font, etc. + + This class is mostly used only for undo and contains the Cursor + elements that are not GUI-related. In LyX 2.0, Cursor was directly + deriving from DocIterator * A Cursor is a descendant of CursorData that contains interesting display-related information, in particular targetX(), the horizontal position of the cursor in pixels. - * one interesting method for what you want to do is textRow(), that - returns the inner Row object that contains the cursor */ #ifndef LCURSOR_H @@ -95,19 +96,12 @@ public: protected: /// the anchor position DocIterator anchor_; - /// - mutable DispatchResult disp_; /// do we have a selection? bool selection_; /// are we on the way to get one? bool mark_; /// are we in word-selection mode? This is set when double clicking. bool word_selection_; - /// If true, we are behind the previous char, otherwise we are in front - // of the next char. This only make a difference when we are in front - // of a big inset spanning a whole row and computing coordinates for - // displaying the cursor. - bool logicalpos_; // FIXME: make them protected. public: @@ -156,7 +150,10 @@ public: /// set the cursor data void setCursorData(CursorData const & data); /// sets cursor part + /// this (intentionally) does neither touch anchor nor selection status void setCursor(DocIterator const & it); + /// set the cursor to dit normalised against the anchor, and set selection. + void setCursorSelectionTo(DocIterator dit); /// sets the cursor to the normalized selection anchor void setCursorToAnchor(); @@ -168,8 +165,8 @@ public: // /// selection active? bool selection() const { return selection_; } - /// set selection; - void setSelection(bool sel) { selection_ = sel; } + /// set selection; this is lower level than (set|clear)Selection + void selection(bool sel) { selection_ = sel; } /// do we have a multicell selection? bool selIsMultiCell() const { return selection_ && selBegin().idx() != selEnd().idx(); } @@ -218,6 +215,9 @@ public: bool macromode() const { return macromode_; } /// are we entering a macro name? bool & macromode() { return macromode_; } + + /// returns true when all insets in cursor stack are in cache + bool inCoordCache() const; /// returns x,y position void getPos(int & x, int & y) const; /// return logical positions between which the cursor is situated @@ -226,8 +226,6 @@ public: * edge" will be returned as -1. */ void getSurroundingPos(pos_type & left_pos, pos_type & right_pos) const; - void getSurroundingPosNew(pos_type & left_pos, pos_type & right_pos) const; - void getSurroundingPosOrig(pos_type & left_pos, pos_type & right_pos) const; /// the row in the paragraph we're in Row const & textRow() const; @@ -298,10 +296,9 @@ public: /// access to normalized selection anchor 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(); + DocIterator const & realAnchor() const { return anchor_; } + DocIterator & realAnchor() { return anchor_; } /// sets anchor to cursor position void resetAnchor(); /// access to owning BufferView