Op 22-1-2012 22:44, [email protected] schreef:
Author: vfr Date: Sun Jan 22 22:44:27 2012 New Revision: 40656 URL: http://www.lyx.org/trac/changeset/40656Log: 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
