return string();
string res = grabSelection(cur);
eraseSelection(cur);
- cur.selection() = false;
return res;
}
}
-int nrOfParagraphs()
+void cutSelection(LCursor & cur, bool doclear, bool realcut)
{
- return theCuts.empty() ? 0 : theCuts[0].first.size();
-}
+ // This doesn't make sense, if there is no selection
+ if (!cur.selection())
+ return;
+ // OK, we have a selection. This is always between cur.selBegin()
+ // and cur.selEnd()
-void cutSelection(LCursor & cur, bool doclear, bool realcut)
-{
if (cur.inTexted()) {
LyXText * text = cur.text();
BOOST_ASSERT(text);
// calls to stuffClipboard. (Lgb)
// cur.bv().stuffClipboard(cur.selectionAsString(true));
- // This doesn't make sense, if there is no selection
- if (!cur.selection())
- return;
-
- // OK, we have a selection. This is always between cur.selBegin()
- // and cur.selEnd()
-
// make sure that the depth behind the selection are restored, too
recordUndoSelection(cur);
pit_type begpit = cur.selBegin().pit();
}
if (cur.inMathed()) {
- lyxerr << "cutSelection in mathed" << endl;
- LCursor tmp = cur;
- copySelection(cur);
- cur.selection() = false;
- eraseSelection(tmp);
+ if (cur.selBegin().idx() != cur.selEnd().idx()) {
+ // The current selection spans more than one cell.
+ // Record all cells
+ recordUndoInset(cur);
+ } else {
+ // Record only the current cell to avoid a jumping
+ // cursor after undo
+ recordUndo(cur);
+ }
+ if (realcut)
+ copySelection(cur);
+ eraseSelection(cur);
}
}
cur.bv().showErrorList(_("Paste"));
cur.clearSelection();
- cur.resetAnchor();
text->setCursor(cur, ppp.first, ppp.second);
cur.setSelection();
updateCounters(cur.buffer());
}
- if (cur.inMathed()) {
- lyxerr << "### should be handled in MathNest/GridInset" << endl;
- }
+ // mathed is handled in MathNestInset/MathGridInset
+ BOOST_ASSERT(!cur.inMathed());
}
cur.top() = i1;
if (i1.idx() == i2.idx()) {
i1.cell().erase(i1.pos(), i2.pos());
+ // We may have deleted i1.cell(cur.pos()).
+ // Make sure that pos is valid.
+ if (cur.pos() > cur.lastpos())
+ cur.pos() = cur.lastpos();
} else {
MathInset * p = i1.asMathInset();
InsetBase::row_type r1, r2;
// We've deleted the whole cell. Only pos 0 is valid.
cur.pos() = 0;
}
- cur.resetAnchor();
+ // need a valid cursor. (Lgb)
+ cur.clearSelection();
} else {
lyxerr << "can't erase this selection 1" << endl;
}
void selDel(LCursor & cur)
{
//lyxerr << "LCursor::selDel" << endl;
- if (cur.selection()) {
+ if (cur.selection())
eraseSelection(cur);
- cur.selection() = false;
- }
}
}
-string grabSelection(LCursor & cur)
+string grabSelection(LCursor const & cur)
{
if (!cur.selection())
return string();
+ // FIXME: What is wrong with the following?
+#if 0
+ std::ostringstream os;
+ for (DocIterator dit = cur.selectionBegin();
+ dit != cur.selectionEnd(); dit.forwardPos())
+ os << asString(dit.cell());
+ return os.str();
+#endif
+
CursorSlice i1 = cur.selBegin();
CursorSlice i2 = cur.selEnd();