Author: vfr
Date: Fri Jan 27 22:44:30 2012
New Revision: 40683
URL: http://www.lyx.org/trac/changeset/40683

Log:
branch: Fix bug #7644: Crash when copying table column or row

see r40656.

Modified:
   lyx-devel/branches/BRANCH_2_0_X/src/insets/InsetTabular.cpp
   lyx-devel/branches/BRANCH_2_0_X/status.20x

Modified: lyx-devel/branches/BRANCH_2_0_X/src/insets/InsetTabular.cpp
==============================================================================
--- lyx-devel/branches/BRANCH_2_0_X/src/insets/InsetTabular.cpp Fri Jan 27 
10:32:33 2012        (r40682)
+++ lyx-devel/branches/BRANCH_2_0_X/src/insets/InsetTabular.cpp Fri Jan 27 
22:44:30 2012        (r40683)
@@ -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));
+       }
 }
 
 

Modified: lyx-devel/branches/BRANCH_2_0_X/status.20x
==============================================================================
--- lyx-devel/branches/BRANCH_2_0_X/status.20x  Fri Jan 27 10:32:33 2012        
(r40682)
+++ lyx-devel/branches/BRANCH_2_0_X/status.20x  Fri Jan 27 22:44:30 2012        
(r40683)
@@ -181,6 +181,8 @@
 
 - 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,

Reply via email to