Fix bug #4952: Multiple cells pasting fails if cells are selected.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29719 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Vincent van Ravesteijn 2009-05-17 21:22:02 +00:00
parent 79688b9d59
commit 3cc18261ef

View File

@ -3630,8 +3630,7 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
cur.recordUndoInset(DELETE_UNDO); cur.recordUndoInset(DELETE_UNDO);
cutSelection(cur); cutSelection(cur);
} }
} } else
else
cell(cur.idx())->dispatch(cur, cmd); cell(cur.idx())->dispatch(cur, cmd);
break; break;
@ -3690,6 +3689,7 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
case LFUN_PASTE: case LFUN_PASTE:
if (!tabularStackDirty()) { if (!tabularStackDirty()) {
if (!cur.selIsMultiCell())
cell(cur.idx())->dispatch(cur, cmd); cell(cur.idx())->dispatch(cur, cmd);
break; break;
} }
@ -4067,12 +4067,19 @@ bool InsetTabular::getStatus(Cursor & cur, FuncRequest const & cmd,
return true; return true;
case LFUN_PASTE: case LFUN_PASTE:
if (cur.selIsMultiCell()) {
status.setEnabled(false);
status.message(_("You cannot paste into a multicell selection."));
return true;
}
if (tabularStackDirty() && theClipboard().isInternal()) { if (tabularStackDirty() && theClipboard().isInternal()) {
if (cur.selIsMultiCell()) {
row_type rs, re;
col_type cs, ce;
getSelection(cur, rs, re, cs, ce);
if (paste_tabular && paste_tabular->column_info.size() == ce - cs + 1
&& paste_tabular->row_info.size() == re - rs + 1)
status.setEnabled(true);
else {
status.setEnabled(false);
status.message(_("Selection size should match clipboard content."));
}
} else
status.setEnabled(true); status.setEnabled(true);
return true; return true;
} }
@ -4923,8 +4930,15 @@ bool InsetTabular::pasteClipboard(Cursor & cur)
{ {
if (!paste_tabular) if (!paste_tabular)
return false; return false;
col_type const actcol = tabular.cellColumn(cur.idx()); col_type actcol = tabular.cellColumn(cur.idx());
row_type const actrow = tabular.cellRow(cur.idx()); row_type actrow = tabular.cellRow(cur.idx());
if (cur.selIsMultiCell()) {
row_type re;
col_type ce;
getSelection(cur, actrow, re, actcol, ce);
}
for (row_type r1 = 0, r2 = actrow; for (row_type r1 = 0, r2 = actrow;
r1 < paste_tabular->row_info.size() && r2 < tabular.row_info.size(); r1 < paste_tabular->row_info.size() && r2 < tabular.row_info.size();
++r1, ++r2) { ++r1, ++r2) {