// 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;
/// 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
/// 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 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;
};