X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCursor.h;h=1abc177ca469e9708b20100d2dd63c8e14e64bad;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=aa31f91c96b5592d951b8e649463213dc8ebd91f;hpb=b917c4e40f9f5cd3d101444600eddafcca54d6e3;p=lyx.git diff --git a/src/Cursor.h b/src/Cursor.h index aa31f91c96..1abc177ca4 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 @@ -149,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(); @@ -228,10 +232,6 @@ public: // // common part // - /// move one step backwards - bool posBackward(); - /// move one step forward - bool posForward(); /// move visually one step to the right /** * @note: This method may move into an inset unless skip_inset == true. @@ -394,6 +394,17 @@ public: /// and after leaving the word the result is empty. DocIterator newWord() const { return new_word_; } + /// 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 + /// one inset in the selection has confirmDeletion. + bool confirmDeletion(bool before = false) const; + + /// Determine if x falls to the left or to the side of the middle of the + /// inset, and advance the cursor to match this position. If edit is true, + /// keep the cursor in front of the inset if it matter for dialogs. + /// Note: it does not handle RTL text yet, and is only used in math for now. + void moveToClosestEdge(int x, bool edit = false); + public: //private: @@ -450,9 +461,10 @@ public: /// void insert(MathData const &); /// return false for empty math insets - bool erase(); - /// return false for empty math insets - bool backspace(); + /// Use force to skip the confirmDeletion check. + bool erase(bool force = false); + bool backspace(bool force = false); + /// move the cursor up by sending an internal LFUN_UP /// return true if fullscreen update is needed bool up(); @@ -469,6 +481,15 @@ public: /// return true if successful bool upDownInMath(bool up); /// + InsetMath & nextMath(); + /// + InsetMath & prevMath(); + /// move forward in math. word: whether to skip a whole "word" (insets with + /// the same mathclass) + bool mathForward(bool word); + /// + bool mathBackward(bool word); + /// void plainErase(); /// void plainInsert(MathAtom const & at);