From: Vincent van Ravesteijn Date: Fri, 27 Jan 2012 21:44:30 +0000 (+0000) Subject: branch: Fix bug #7644: Crash when copying table column or row X-Git-Tag: 2.0.3~48 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=8016aebdf187964a70500ff0907f86ef3f76a6b0;p=features.git branch: Fix bug #7644: Crash when copying table column or row see r40656. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@40683 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp index 77dcefa434..1569999c4c 100644 --- a/src/insets/InsetTabular.cpp +++ b/src/insets/InsetTabular.cpp @@ -759,14 +759,37 @@ void Tabular::deleteRow(row_type const row) 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::deleteColumn(col_type const col) 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)); + } } diff --git a/status.20x b/status.20x index a59a3fb27c..6d4287ea0f 100644 --- a/status.20x +++ b/status.20x @@ -181,6 +181,8 @@ What's new - Fix crash when inserting a float around multiple display maths (bug 7974). +- Fix crash when copying table columns or rows (bug 7644). + - Update citation labels when the BibTeX file changes (bug 7499). - Mark Buffer dirty when changing branch activation status (bug 7872). Sadly,