Op 22-1-2012 22:44, v...@lyx.org schreef:
Author: vfr
Date: Sun Jan 22 22:44:27 2012
New Revision: 40656
URL: http://www.lyx.org/trac/changeset/40656
Log:
Fix bug #7644: Crash when copying table column or row
Modified:
lyx-devel/trunk/src/insets/InsetTabular.cpp
Modified: lyx-devel/trunk/src/insets/InsetTabular.cpp
==============================================================================
--- lyx-devel/trunk/src/insets/InsetTabular.cpp Sun Jan 22 22:36:39 2012
(r40655)
+++ lyx-devel/trunk/src/insets/InsetTabular.cpp Sun Jan 22 22:44:27 2012
(r40656)
@@ -759,14 +759,37 @@
void Tabular::copyRow(row_type const row)
{
- row_info.insert(row_info.begin() + row, row_info[row]);
- cell_info.insert(cell_info.begin() + row, cell_info[row]);
-
- if (buffer().params().trackChanges)
- for (col_type c = 0; c< ncols(); ++c)
+ row_info.insert(row_info.begin() + row + 1, RowData(row_info[row]));
+ cell_info.insert(cell_info.begin() + row + 1,
+ cell_vector(0, CellData(buffer_)));
+
+ for (col_type c = 0; c< ncols(); ++c) {
+ cell_info[row + 1].insert(cell_info[row + 1].begin() + c,
+ CellData(cell_info[row][c]));
+ if (buffer().params().trackChanges)
cell_info[row +
1][c].inset->setChange(Change(Change::INSERTED));
-
+ if (cell_info[row][c].multirow == CELL_BEGIN_OF_MULTIROW)
+ cell_info[row + 1][c].multirow = CELL_PART_OF_MULTIROW;
+ }
+
updateIndexes();
+ for (col_type c = 0; c< ncols(); ++c) {
+ if (isPartOfMultiRow(row, c))
+ continue;
+ // inherit line settings
+ idx_type const i = cellIndex(row + 1, c);
+ idx_type const j = cellIndex(row, c);
+ setLeftLine(i, leftLine(j));
+ setRightLine(i, rightLine(j));
+ setTopLine(i, topLine(j));
+ if (topLine(j)&& bottomLine(j)) {
+ setBottomLine(i, true);
+ setBottomLine(j, false);
+ }
+ // mark track changes
+ if (buffer().params().trackChanges)
+ cellInfo(i).inset->setChange(Change(Change::INSERTED));
+ }
}
@@ -826,14 +849,30 @@
void Tabular::copyColumn(col_type const col)
{
BufferParams const& bp = buffer().params();
- column_info.insert(column_info.begin() + col, column_info[col]);
+ column_info.insert(column_info.begin() + col + 1,
ColumnData(column_info[col]));
for (row_type r = 0; r< nrows(); ++r) {
- cell_info[r].insert(cell_info[r].begin() + col,
cell_info[r][col]);
+ cell_info[r].insert(cell_info[r].begin() + col + 1,
CellData(cell_info[r][col]));
if (bp.trackChanges)
cell_info[r][col +
1].inset->setChange(Change(Change::INSERTED));
+ if (cell_info[r][col].multicolumn == CELL_BEGIN_OF_MULTICOLUMN)
+ cell_info[r][col + 1].multicolumn =
CELL_PART_OF_MULTICOLUMN;
}
updateIndexes();
+ for (row_type r = 0; r< nrows(); ++r) {
+ // inherit line settings
+ idx_type const i = cellIndex(r, col + 1);
+ idx_type const j = cellIndex(r, col);
+ setBottomLine(i, bottomLine(j));
+ setTopLine(i, topLine(j));
+ setLeftLine(i, leftLine(j));
+ if (rightLine(j)&& rightLine(j)) {
+ setRightLine(i, true);
+ setRightLine(j, false);
+ }
+ if (buffer().params().trackChanges)
+ cellInfo(i).inset->setChange(Change(Change::INSERTED));
+ }
}
For branch ?
Vincent