// these should go
class InsetMathUnknown;
-class Encoding;
/**
* This class describes the position of a cursor within a document,
/// 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_; }
///
docstring selectionAsString(bool with_label) const;
///
- docstring currentState() const;
+ docstring currentState(bool devel_mode) const;
/// auto-correct mode
bool autocorrect() const { return autocorrect_; }
/// 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;
//
// 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.
/// 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)
/// 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
/// 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_; }
///
///
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();
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
int macroNamePos();
/// can we enter the inset?
bool openable(MathAtom const &) const;
- ///
- Encoding const * getEncoding() const;
/// font at cursor position
Font getFont() const;
};