new_cur.pos() = right_pos;
new_cur.boundary(false);
if (!skip_inset &&
- text()->checkAndActivateInsetVisual(new_cur, right_pos>=pos(), false)) {
+ text()->checkAndActivateInsetVisual(new_cur, right_pos >= pos(), false)) {
// we actually move the cursor at the end of this function, for now
// we just keep track of the new position in new_cur...
LYXERR(Debug::RTL, "entering inset at: " << new_cur.pos());
selection() = true;
// A selection with no contents is not a selection
// FIXME: doesnt look ok
- if (pit() == anchor().pit() && pos() == anchor().pos())
+ if (idx() == anchor().idx() &&
+ pit() == anchor().pit() &&
+ pos() == anchor().pos())
selection() = false;
}
<< pos() << ' ' << lastpos() << " in idx: " << idx()
<< " in atom: '";
odocstringstream os;
- WriteStream wi(os, false, true);
+ WriteStream wi(os, false, true, false);
inset().asInsetMath()->write(wi);
lyxerr << to_utf8(os.str()) << endl;
pos() = lastpos();
}
-docstring Cursor::selectionAsString(bool label) const
+docstring Cursor::selectionAsString(bool with_label) const
{
if (!selection())
return docstring();
+ int const label = with_label
+ ? AS_STR_LABEL | AS_STR_INSETS : AS_STR_INSETS;
+
if (inTexted()) {
+ idx_type const startidx = selBegin().idx();
+ idx_type const endidx = selEnd().idx();
+ if (startidx != endidx) {
+ // multicell selection
+ InsetTabular * table = inset().asInsetTabular();
+ LASSERT(table, return docstring());
+ return table->asString(startidx, endidx);
+ }
+
ParagraphList const & pars = text()->paragraphs();
- // should be const ...
- pit_type startpit = selBegin().pit();
- pit_type endpit = selEnd().pit();
+ pit_type const startpit = selBegin().pit();
+ pit_type const endpit = selEnd().pit();
size_t const startpos = selBegin().pos();
size_t const endpos = selEnd().pos();
}
-docstring Cursor::currentState()
+docstring Cursor::currentState() const
{
if (inMathed()) {
odocstringstream os;
}
-docstring Cursor::getPossibleLabel()
+docstring Cursor::getPossibleLabel() const
{
return inMathed() ? from_ascii("eq:") : text()->getPossibleLabel(*this);
}
{
if (DocIterator::fixIfBroken()) {
clearSelection();
- resetAnchor();
return true;
}
return false;
return false;
// Set cursor
setCursor(dit);
- selection() = false;
- resetAnchor();
+ clearSelection();
fixIfBroken();
return true;
}
return false;
// Set cursor
setCursor(dit);
- selection() = false;
- resetAnchor();
+ clearSelection();
fixIfBroken();
return true;
}
-void Cursor::finishUndo()
+void Cursor::finishUndo() const
{
bv_->buffer().undo().finishUndo();
}
-void Cursor::recordUndo(UndoKind kind, pit_type from, pit_type to)
+void Cursor::beginUndoGroup() const
+{
+ bv_->buffer().undo().beginUndoGroup();
+}
+
+
+void Cursor::endUndoGroup() const
+{
+ bv_->buffer().undo().endUndoGroup();
+}
+
+
+void Cursor::recordUndo(UndoKind kind, pit_type from, pit_type to) const
{
bv_->buffer().undo().recordUndo(*this, kind, from, to);
}
-void Cursor::recordUndo(UndoKind kind, pit_type from)
+void Cursor::recordUndo(UndoKind kind, pit_type from) const
{
bv_->buffer().undo().recordUndo(*this, kind, from);
}
-void Cursor::recordUndo(UndoKind kind)
+void Cursor::recordUndo(UndoKind kind) const
{
bv_->buffer().undo().recordUndo(*this, kind);
}
-void Cursor::recordUndoInset(UndoKind kind)
+void Cursor::recordUndoInset(UndoKind kind) const
{
bv_->buffer().undo().recordUndoInset(*this, kind);
}
-void Cursor::recordUndoFullDocument()
+void Cursor::recordUndoFullDocument() const
{
bv_->buffer().undo().recordUndoFullDocument(*this);
}
-void Cursor::recordUndoSelection()
+void Cursor::recordUndoSelection() const
{
if (inMathed()) {
if (cap::multipleCellsSelected(*this))