Reuse the same code for the append* and copy* functions

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40659 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Vincent van Ravesteijn 2012-01-22 22:16:03 +00:00
parent 2206f1a655
commit adb70a1fe0
2 changed files with 33 additions and 70 deletions

View File

@ -700,41 +700,6 @@ void Tabular::init(Buffer * buf, row_type rows_arg,
}
void Tabular::appendRow(row_type row)
{
row_info.insert(row_info.begin() + row + 1, RowData());
row_info[row + 1] = row_info[row];
cell_info.insert(cell_info.begin() + row + 1,
cell_vector(ncols(), CellData(buffer_)));
for (col_type c = 0; c < ncols(); ++c) {
if (cell_info[row][c].multirow == CELL_BEGIN_OF_MULTIROW)
cell_info[row + 1][c].multirow = CELL_PART_OF_MULTIROW;
else
cell_info[row + 1][c].multirow = cell_info[row][c].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));
}
}
void Tabular::deleteRow(row_type const row)
{
// Not allowed to delete last row
@ -756,6 +721,18 @@ void Tabular::deleteRow(row_type const row)
void Tabular::copyRow(row_type const row)
{
insertRow(row, true);
}
void Tabular::appendRow(row_type row)
{
insertRow(row, false);
}
void Tabular::insertRow(row_type const row, bool copy)
{
row_info.insert(row_info.begin() + row + 1, RowData(row_info[row]));
cell_info.insert(cell_info.begin() + row + 1,
@ -763,7 +740,7 @@ void Tabular::copyRow(row_type const row)
for (col_type c = 0; c < ncols(); ++c) {
cell_info[row + 1].insert(cell_info[row + 1].begin() + c,
CellData(cell_info[row][c]));
copy ? CellData(cell_info[row][c]) : CellData(buffer_));
if (buffer().params().trackChanges)
cell_info[row + 1][c].inset->setChange(Change(Change::INSERTED));
if (cell_info[row][c].multirow == CELL_BEGIN_OF_MULTIROW)
@ -791,37 +768,6 @@ void Tabular::copyRow(row_type const row)
}
void Tabular::appendColumn(col_type c)
{
column_info.insert(column_info.begin() + c + 1, ColumnData());
column_info[c + 1] = column_info[c];
for (row_type r = 0; r < nrows(); ++r) {
cell_info[r].insert(cell_info[r].begin() + c + 1,
CellData(buffer_));
if (cell_info[r][c].multicolumn == CELL_BEGIN_OF_MULTICOLUMN)
cell_info[r][c + 1].multicolumn = CELL_PART_OF_MULTICOLUMN;
else
cell_info[r][c + 1].multicolumn = cell_info[r][c].multicolumn;
}
updateIndexes();
for (row_type r = 0; r < nrows(); ++r) {
// inherit line settings
idx_type const i = cellIndex(r, c + 1);
idx_type const j = cellIndex(r, c);
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));
}
}
void Tabular::deleteColumn(col_type const col)
{
// Not allowed to delete last column
@ -843,12 +789,25 @@ void Tabular::deleteColumn(col_type const col)
void Tabular::copyColumn(col_type const col)
{
insertColumn(col, true);
}
void Tabular::appendColumn(col_type col)
{
insertColumn(col, false);
}
void Tabular::insertColumn(col_type const col, bool copy)
{
BufferParams const & bp = buffer().params();
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 + 1, CellData(cell_info[r][col]));
cell_info[r].insert(cell_info[r].begin() + col + 1,
copy ? CellData(cell_info[r][col]) : CellData(buffer_));
if (bp.trackChanges)
cell_info[r][col + 1].inset->setChange(Change(Change::INSERTED));
if (cell_info[r][col].multicolumn == CELL_BEGIN_OF_MULTICOLUMN)

View File

@ -448,13 +448,17 @@ public:
///
void deleteRow(row_type row);
///
void copyRow(row_type);
void copyRow(row_type row);
///
void insertRow(row_type row, bool copy);
///
void appendColumn(col_type column);
///
void deleteColumn(col_type column);
///
void copyColumn(col_type);
void copyColumn(col_type column);
///
void insertColumn(col_type column, bool copy);
///
idx_type getFirstCellInRow(row_type row) const;
///