X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCursor.h;h=55cc30e941ebee2097dfa690de65b9d4a0811a83;hb=0a89b08f687dfeb7b687b54eab98ae18cc889883;hp=462c31caa24a31b6c9c1303f6bdc6685818856c6;hpb=a3b877eccc9be5b7295fa2c2a0db3548e46caee9;p=lyx.git diff --git a/src/Cursor.h b/src/Cursor.h index 462c31caa2..55cc30e941 100644 --- a/src/Cursor.h +++ b/src/Cursor.h @@ -72,7 +72,6 @@ class Row; // these should go class InsetMathUnknown; -class Encoding; /** * This class describes the position of a cursor within a document, @@ -168,12 +167,12 @@ public: /// 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 + bool selIsMultiCell() const { return selection_ && selBegin().idx() != selEnd().idx(); } /// do we have a multiline selection? - bool selIsMultiLine() const + bool selIsMultiLine() const { return selection_ && selBegin().pit() != selEnd().pit(); } - /// + /// void setWordSelection(bool set) { word_selection_ = set; } /// bool wordSelection() { return word_selection_; } @@ -205,7 +204,7 @@ public: /// docstring selectionAsString(bool with_label) const; /// - docstring currentState() const; + docstring currentState(bool devel_mode) const; /// auto-correct mode bool autocorrect() const { return autocorrect_; } @@ -216,13 +215,11 @@ public: /// 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 /** - * If the cursor is at the edge of a row, the position which is "over the + * If the cursor is at the edge of a row, the position which is "over the * edge" will be returned as -1. */ void getSurroundingPos(pos_type & left_pos, pos_type & right_pos) const; @@ -232,10 +229,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. @@ -255,11 +248,11 @@ public: /// move visually to next/previous row /** * Assuming we were to keep moving left (right) from the current cursor - * position, place the cursor at the rightmost (leftmost) edge of the + * position, place the cursor at the rightmost (leftmost) edge of the * new row to which we would move according to visual-mode cursor movement. * This could be either the next or the previous row, depending on the - * direction in which we're moving, and whether we're in an LTR or RTL - * paragraph. + * direction in which we're moving, and whether we're in an LTR or RTL + * paragraph. * @note: The new position may even be in a new paragraph. * @note: This method will not move out of the current slice. * @return: false if not moved (no more rows to move to in given direction) @@ -304,7 +297,7 @@ public: /// access to owning BufferView BufferView & bv() const; /// get some interesting description of top position - void info(odocstream & os) const; + void info(odocstream & os, bool devel_mode) const; /// are we in math mode (2), text mode (1) or unsure (0)? int currentMode(); /// reset cursor bottom to the beginning of the top inset @@ -398,9 +391,20 @@ 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: - + /// DocIterator const & beforeDispatchCursor() const { return beforeDispatchCursor_; } /// @@ -454,9 +458,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(); @@ -473,6 +478,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); @@ -486,9 +500,9 @@ public: void setScreenPos(int x, int y); /// current offset in the top cell - /// interpret name a name of a macro. Returns true if - /// something got inserted. - bool macroModeClose(); + /// interpret name of a macro or ditch it if \c cancel is true. + /// Returns true if something got inserted. + bool macroModeClose(bool cancel = false); /// are we currently typing the name of a macro? bool inMacroMode() const; /// get access to the macro we are currently typing @@ -529,8 +543,6 @@ public: int macroNamePos(); /// can we enter the inset? bool openable(MathAtom const &) const; - /// - Encoding const * getEncoding() const; /// font at cursor position Font getFont() const; };