Make sure inset buffer is correctly set in math grid

Make MathData::setBuffer set the buffer of insets that it contains.
Remove corresponding code from InsetMathNest.

update the buffer() property in the following tabular-feature
actions : copy-row, add-row, copy-col, add-col.
This commit is contained in:
Jean-Marc Lasgouttes 2018-10-03 10:39:09 +02:00
parent a569aeaf66
commit 837bcbb043
4 changed files with 22 additions and 9 deletions

View File

@ -809,7 +809,7 @@ void InsetMathGrid::addRow(row_type row)
{ {
rowinfo_.insert(rowinfo_.begin() + row + 1, RowInfo()); rowinfo_.insert(rowinfo_.begin() + row + 1, RowInfo());
cells_.insert cells_.insert
(cells_.begin() + (row + 1) * ncols(), ncols(), MathData()); (cells_.begin() + (row + 1) * ncols(), ncols(), MathData(buffer_));
cellinfo_.insert cellinfo_.insert
(cellinfo_.begin() + (row + 1) * ncols(), ncols(), CellInfo()); (cellinfo_.begin() + (row + 1) * ncols(), ncols(), CellInfo());
} }
@ -833,8 +833,11 @@ void InsetMathGrid::delRow(row_type row)
void InsetMathGrid::copyRow(row_type row) void InsetMathGrid::copyRow(row_type row)
{ {
addRow(row); addRow(row);
for (col_type col = 0; col < ncols(); ++col) for (col_type col = 0; col < ncols(); ++col) {
cells_[(row + 1) * ncols() + col] = cells_[row * ncols() + col]; cells_[(row + 1) * ncols() + col] = cells_[row * ncols() + col];
// copying the cell does not set the buffer
cells_[(row + 1) * ncols() + col].setBuffer(*buffer_);
}
} }
@ -864,6 +867,8 @@ void InsetMathGrid::addCol(col_type newcol)
= cellinfo_[row * nc + col]; = cellinfo_[row * nc + col];
} }
swap(cells_, new_cells); swap(cells_, new_cells);
// copying cells loses the buffer reference
setBuffer(*buffer_);
swap(cellinfo_, new_cellinfo); swap(cellinfo_, new_cellinfo);
ColInfo inf; ColInfo inf;
@ -895,8 +900,11 @@ void InsetMathGrid::delCol(col_type col)
void InsetMathGrid::copyCol(col_type col) void InsetMathGrid::copyCol(col_type col)
{ {
addCol(col+1); addCol(col+1);
for (row_type row = 0; row < nrows(); ++row) for (row_type row = 0; row < nrows(); ++row) {
cells_[row * ncols() + col + 1] = cells_[row * ncols() + col]; cells_[row * ncols() + col + 1] = cells_[row * ncols() + col];
// copying the cell does not set the buffer
cells_[row * ncols() + col + 1].setBuffer(*buffer_);
}
} }

View File

@ -118,11 +118,8 @@ InsetMathNest & InsetMathNest::operator=(InsetMathNest const & inset)
void InsetMathNest::setBuffer(Buffer & buffer) void InsetMathNest::setBuffer(Buffer & buffer)
{ {
InsetMath::setBuffer(buffer); InsetMath::setBuffer(buffer);
for (idx_type i = 0, n = nargs(); i != n; ++i) { for (MathData & data : cells_)
MathData & data = cell(i); data.setBuffer(buffer);
for (size_t j = 0; j != data.size(); ++j)
data[j].nucleus()->setBuffer(buffer);
}
} }

View File

@ -52,6 +52,14 @@ MathData::MathData(Buffer * buf, const_iterator from, const_iterator to)
{} {}
void MathData::setBuffer(Buffer & b)
{
buffer_ = &b;
for (MathAtom & at : *this)
at.nucleus()->setBuffer(b);
}
MathAtom & MathData::operator[](pos_type pos) MathAtom & MathData::operator[](pos_type pos)
{ {
LBUFERR(pos < size()); LBUFERR(pos < size());

View File

@ -184,7 +184,7 @@ public:
/// ///
void updateBuffer(ParIterator const &, UpdateType); void updateBuffer(ParIterator const &, UpdateType);
/// ///
void setBuffer(Buffer & b) { buffer_ = &b; } void setBuffer(Buffer & b);
protected: protected:
/// cached values for super/subscript placement /// cached values for super/subscript placement