mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
implement missing bits of math cut and paste and fix bug 2059
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10548 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
a2b40d9038
commit
d7055d0a8e
@ -1,3 +1,19 @@
|
||||
2005-10-09 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||
|
||||
* CutAndPaste.C (nrOfParagraphs): remove (unused)
|
||||
* CutAndPaste.C (cutSelection): Remove debug message
|
||||
* CutAndPaste.C (cutSelection): Use the real cursor in mathed, record
|
||||
undo information and only copy if this is a real cut
|
||||
* CutAndPaste.C (pasteSelection): remove superflous cur.resetAnchor()
|
||||
call
|
||||
* CutAndPaste.C (pasteSelection): remove now superflous mathed warning
|
||||
(bug 2059)
|
||||
* CutAndPaste.C (eraseSelection): prevent cursor corruption
|
||||
* CutAndPaste.C (grabAndEraseSelection, selDel): remove now
|
||||
superflous cur.selection() setting
|
||||
* CutAndPaste.[Ch] (grabSelection): take a const cursor
|
||||
* cursor.C (selectionAsString): implement mathed case ((bug 2059)
|
||||
|
||||
2005-10-09 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||
|
||||
* text3.C (mathDispatch, dispatch): Dont' record undo steps that don't
|
||||
|
@ -370,7 +370,6 @@ string grabAndEraseSelection(LCursor & cur)
|
||||
return string();
|
||||
string res = grabSelection(cur);
|
||||
eraseSelection(cur);
|
||||
cur.selection() = false;
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -473,14 +472,15 @@ std::vector<string> const availableSelections(Buffer const & buffer)
|
||||
}
|
||||
|
||||
|
||||
int nrOfParagraphs()
|
||||
{
|
||||
return theCuts.empty() ? 0 : theCuts[0].first.size();
|
||||
}
|
||||
|
||||
|
||||
void cutSelection(LCursor & cur, bool doclear, bool realcut)
|
||||
{
|
||||
// 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()
|
||||
|
||||
if (cur.inTexted()) {
|
||||
LyXText * text = cur.text();
|
||||
BOOST_ASSERT(text);
|
||||
@ -494,13 +494,6 @@ void cutSelection(LCursor & cur, bool doclear, bool realcut)
|
||||
// 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();
|
||||
@ -542,11 +535,18 @@ void cutSelection(LCursor & cur, bool doclear, bool realcut)
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -630,15 +630,13 @@ void pasteSelection(LCursor & cur, size_t sel_index)
|
||||
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());
|
||||
}
|
||||
|
||||
|
||||
@ -710,6 +708,10 @@ void eraseSelection(LCursor & cur)
|
||||
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;
|
||||
@ -721,7 +723,8 @@ void eraseSelection(LCursor & cur)
|
||||
// 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;
|
||||
}
|
||||
@ -732,10 +735,8 @@ void eraseSelection(LCursor & cur)
|
||||
void selDel(LCursor & cur)
|
||||
{
|
||||
//lyxerr << "LCursor::selDel" << endl;
|
||||
if (cur.selection()) {
|
||||
if (cur.selection())
|
||||
eraseSelection(cur);
|
||||
cur.selection() = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -749,11 +750,20 @@ void selClearOrDel(LCursor & cur)
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
|
||||
|
@ -67,7 +67,7 @@ void SwitchBetweenClasses(lyx::textclass_type c1,
|
||||
void replaceWord(LCursor & cur, std::string const & replacestring);
|
||||
|
||||
///
|
||||
std::string grabSelection(LCursor & cur);
|
||||
std::string grabSelection(LCursor const & cur);
|
||||
///
|
||||
void eraseSelection(LCursor & cur);
|
||||
///
|
||||
|
@ -1126,9 +1126,9 @@ string LCursor::selectionAsString(bool label) const
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef WITH_WARNINGS
|
||||
#warning and mathed?
|
||||
#endif
|
||||
if (inMathed())
|
||||
return lyx::cap::grabSelection(*this);
|
||||
|
||||
return string();
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2005-10-09 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||
|
||||
* math_gridinset.C (doDispatch): adjust paste to match paste in text
|
||||
and math nest inset
|
||||
* math_nestinset.C (doDispatch): implement paste (bug 2059)
|
||||
|
||||
2005-10-09 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||
|
||||
* math_nestinset.C (doDispatch): Don't record undo steps when
|
||||
|
@ -1196,7 +1196,8 @@ void MathGridInset::doDispatch(LCursor & cur, FuncRequest & cmd)
|
||||
}
|
||||
|
||||
case LFUN_PASTE: {
|
||||
lyxerr << "MathGridInset: PASTE: " << cmd << std::endl;
|
||||
cur.message(_("Paste"));
|
||||
lyx::cap::replaceSelection(cur);
|
||||
istringstream is(cmd.argument);
|
||||
int n = 0;
|
||||
is >> n;
|
||||
@ -1230,6 +1231,9 @@ void MathGridInset::doDispatch(LCursor & cur, FuncRequest & cmd)
|
||||
for (col_type c = 0; c < grid.ncols(); ++c)
|
||||
cell(i).append(grid.cell(grid.index(r, c)));
|
||||
}
|
||||
cur.clearSelection(); // bug 393
|
||||
cur.bv().switchKeyMap();
|
||||
finishUndo();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -415,7 +415,8 @@ void MathNestInset::doDispatch(LCursor & cur, FuncRequest & cmd)
|
||||
size_t n = 0;
|
||||
istringstream is(cmd.argument);
|
||||
is >> n;
|
||||
pasteSelection(cur, n);
|
||||
string const selection = lyx::cap::getSelection(cur.buffer(), n);
|
||||
cur.niceInsert(selection);
|
||||
cur.clearSelection(); // bug 393
|
||||
cur.bv().switchKeyMap();
|
||||
finishUndo();
|
||||
@ -427,6 +428,7 @@ void MathNestInset::doDispatch(LCursor & cur, FuncRequest & cmd)
|
||||
cutSelection(cur, true, true);
|
||||
cur.message(_("Cut"));
|
||||
// Prevent stale position >= size crash
|
||||
// Probably not necessary anymore, see eraseSelection (gb 2005-10-09)
|
||||
cur.normalize();
|
||||
break;
|
||||
|
||||
|
@ -105,6 +105,13 @@ void finishUndo();
|
||||
* end' of the range of changed paragraphs. So we give an inclusive range.
|
||||
* This is called before you make the changes to the paragraph, and it
|
||||
* will record the original information of the paragraphs in the undo stack.
|
||||
*
|
||||
* FIXME: We need something to record undo in partial grids for mathed.
|
||||
* Right now we use recordUndoInset if more than one cell is changed,
|
||||
* but that puts the cursor in front of the inset after undo. We would need
|
||||
* something like
|
||||
* recordUndoGrid(LCursor & cur, Undo::undo_kind kind, idx_type from, idx_type to);
|
||||
* and store the cell information in class Undo.
|
||||
*/
|
||||
|
||||
/// The general case: prepare undo for an arbitrary range.
|
||||
|
Loading…
Reference in New Issue
Block a user