bool selection() const { return selection_; }
/// selection active?
bool & selection() { return selection_; }
+ /// do we have a multicell selection?
+ bool selIsMultiCell() const
+ { return selection_ && selBegin().idx() != selEnd().idx(); }
+ /// do we have a multiline selection?
+ bool selIsMultiLine() const
+ { return selection_ && selBegin().pit() != selEnd().pit(); }
/// did we place the anchor?
bool mark() const { return mark_; }
/// did we place the anchor?
DocIterator selectionBegin() const;
/// access start of selection
DocIterator selectionEnd() const;
- /// FIXME: document this
+ /**
+ * Update the selection status and save permanent
+ * selection if needed.
+ * @param selecting the new selection status
+ * @return whether the selection status has changed
+ */
bool selHandle(bool selecting);
///
docstring selectionAsString(bool label) const;
///
- docstring currentState();
+ docstring currentState() const;
/// auto-correct mode
bool autocorrect() const { return autocorrect_; }
bool & macromode() { return macromode_; }
/// 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
+ * edge" will be returned as -1.
+ */
+ void getSurroundingPos(pos_type & left_pos, pos_type & right_pos);
/// the row in the paragraph we're in
Row const & textRow() const;
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.
+ * @note: This method may move into a new paragraph.
+ * @note: This method may move out of the current slice.
+ * @return: true if moved, false if not moved
+ */
+ bool posVisRight(bool skip_inset = false);
+ /// move visually one step to the left
+ /**
+ * @note: This method may move into an inset unless skip_inset == true.
+ * @note: This method may move into a new paragraph.
+ * @note: This method may move out of the current slice.
+ * @return: true if moved, false if not moved
+ */
+ bool posVisLeft(bool skip_inset = false);
+ /// 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
+ * 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.
+ * @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)
+ * @return: true if moved
+ */
+ bool posVisToNewRow(bool movingLeft);
+ /// move to right or left extremity of the current row
+ void posVisToRowExtremity(bool left);
/// insert an inset
void insert(Inset *);
bool textRedo();
/// makes sure the next operation will be stored
- void finishUndo();
+ void finishUndo() const;
+
+ /// open a new group of undo operations. Groups can be nested.
+ void beginUndoGroup() const;
+
+ /// end the current undo group
+ void endUndoGroup() const;
/// The general case: prepare undo for an arbitrary range.
- void recordUndo(UndoKind kind, pit_type from, pit_type to);
+ void recordUndo(UndoKind kind, pit_type from, pit_type to) const;
/// Convenience: prepare undo for the range between 'from' and cursor.
- void recordUndo(UndoKind kind, pit_type from);
+ void recordUndo(UndoKind kind, pit_type from) const;
/// Convenience: prepare undo for the single paragraph or cell
/// containing the cursor
- void recordUndo(UndoKind kind = ATOMIC_UNDO);
+ void recordUndo(UndoKind kind = ATOMIC_UNDO) const;
/// Convenience: prepare undo for the inset containing the cursor
- void recordUndoInset(UndoKind kind = ATOMIC_UNDO);
+ void recordUndoInset(UndoKind kind = ATOMIC_UNDO) const;
/// Convenience: prepare undo for the whole buffer
- void recordUndoFullDocument();
+ void recordUndoFullDocument() const;
- /// Convenience: prepare undo for the selected paragraphs
- void recordUndoSelection();
+ /// Convenience: prepare undo for the selected paragraphs or cells
+ void recordUndoSelection() const;
///
void checkBufferStructure();
bool inMacroMode() const;
/// get access to the macro we are currently typing
InsetMathUnknown * activeMacro();
+ /// get access to the macro we are currently typing
+ InsetMathUnknown const * activeMacro() const;
/// replace selected stuff with at, placing the former
// selection in given cell of atom
/// display an error message
void errorMessage(docstring const & msg) const;
///
- docstring getPossibleLabel();
+ docstring getPossibleLabel() const;
/// the name of the macro we are currently inputting
docstring macroName();
/**
* Notifies all insets which appear in old, but not in cur. Make
- * Sure that the cursor old is valid, i.e. als inset pointer
+ * Sure that the cursor old is valid, i.e. all inset pointers
* point to valid insets! Use Cursor::fixIfBroken if necessary.
*/
-bool notifyCursorLeaves(DocIterator const & old, Cursor & cur);
+bool notifyCursorLeaves(Cursor const & old, Cursor & cur);
} // namespace lyx