/////////////////////////////////////////////////////////////////////
-Tabular::CellData::CellData(Buffer const & buf, Tabular const & table)
+Tabular::CellData::CellData(Buffer const & buf)
: cellno(0),
width(0),
multicolumn(Tabular::CELL_NORMAL),
right_line(false),
usebox(BOX_NONE),
rotate(false),
- inset(new InsetTableCell(buf, this, &table))
+ inset(new InsetTableCell(buf))
{
inset->setBuffer(const_cast<Buffer &>(buf));
inset->paragraphs().back().setLayout(buf.params().documentClass().emptyLayout());
align_special(cs.align_special),
p_width(cs.p_width),
inset(dynamic_cast<InsetTableCell *>(cs.inset->clone()))
-{
- inset->setCellData(this);
-}
-
+{}
Tabular::CellData & Tabular::CellData::operator=(CellData cs)
{
return *this;
}
-
void Tabular::CellData::swap(CellData & rhs)
{
std::swap(cellno, rhs.cellno);
buffer_ = &buf;
row_info = row_vector(rows_arg);
column_info = column_vector(columns_arg);
- cell_info = cell_vvector(rows_arg, cell_vector(columns_arg, CellData(buf, *this)));
+ cell_info = cell_vvector(rows_arg, cell_vector(columns_arg, CellData(buf)));
row_info.reserve(10);
column_info.reserve(10);
cell_info.reserve(100);
for (row_type i = 0; i < nrows - 1; ++i)
swap(cell_info[i], old[i]);
- cell_info = cell_vvector(nrows, cell_vector(ncols, CellData(buffer(), *this)));
+ cell_info = cell_vvector(nrows, cell_vector(ncols, CellData(buffer())));
for (row_type i = 0; i <= row; ++i)
swap(cell_info[i], old[i]);
for (row_type r = 0; r < nrows; ++r) {
cell_info[r].insert(cell_info[r].begin() + c + 1,
- CellData(buffer(), *this));
+ CellData(buffer()));
if (cell_info[r][c].multicolumn == CELL_BEGIN_OF_MULTICOLUMN)
cell_info[r][c + 1].multicolumn = CELL_PART_OF_MULTICOLUMN;
else
void toggleFixedWidth(Cursor & cur, InsetTableCell * inset, bool fixedWidth)
{
inset->setAutoBreakRows(fixedWidth);
+ inset->toggleFixedWidth(fixedWidth);
if (fixedWidth)
return;
if (cell >= numberofcells)
return column_info.size() - 1;
if (cell == npos)
- return 0;
+ return 0;
return columnofcell[cell];
}
&& leftLine(cellIndex(r, nextcol));
bool coldouble = colright && nextcolleft;
bool celldouble = rightLine(cell) && nextcellleft;
- bool prevcellright = c > 0 && rightLine(cellIndex(r, c - 1));
ismulticol = isMultiColumn(cell)
|| (c == 0 && colleft != leftLine(cell))
|| ((colright || nextcolleft) && !rightLine(cell) && !nextcellleft)
|| (coldouble != celldouble);
if (ismulticol) {
os << "\\multicolumn{" << columnSpan(cell) << "}{";
- if (leftLine(cell) || prevcellright)
+ if (c ==0 && leftLine(cell))
os << '|';
if (!cellInfo(cell).align_special.empty()) {
os << cellInfo(cell).align_special;
{
CellData & cd = cell_info[row][column];
cd.inset = ins;
- // reset the InsetTableCell's pointers
- ins->setCellData(&cd);
- ins->setTabular(this);
-}
-
-
-Tabular::idx_type Tabular::cellFromInset(Inset const * inset) const
-{
- // is this inset part of the tabular?
- if (!inset) {
- lyxerr << "Error: this is not a cell of the tabular!" << endl;
- LASSERT(false, /**/);
- }
-
- for (idx_type cell = 0, n = numberofcells; cell < n; ++cell)
- if (cellInset(cell).get() == inset) {
- LYXERR(Debug::INSETTEXT, "Tabular::cellFromInset: "
- << "cell=" << cell);
- return cell;
- }
-
- // We should have found a cell at this point
- lyxerr << "Tabular::cellFromInset: Cell of inset "
- << inset << " not found!" << endl;
- LASSERT(false, /**/);
- // shut up compiler
- return 0;
}
//
/////////////////////////////////////////////////////////////////////
-InsetTableCell::InsetTableCell(Buffer const & buf,
- Tabular::CellData const * cell, Tabular const * table)
- : InsetText(buf), cell_data_(cell), table_(table)
+InsetTableCell::InsetTableCell(Buffer const & buf)
+ : InsetText(buf), isFixedWidth(false)
{}
-bool InsetTableCell::forceEmptyLayout(idx_type) const
+bool InsetTableCell::forcePlainLayout(idx_type) const
{
- LASSERT(table_, /**/);
- LASSERT(cell_data_, /**/);
- return table_->getPWidth(cell_data_->cellno).zero();
+ return !isFixedWidth;
}
bool InsetTableCell::allowParagraphCustomization(idx_type) const
{
- LASSERT(table_, /**/);
- LASSERT(cell_data_, /**/);
- return !table_->getPWidth(cell_data_->cellno).zero();
+ return isFixedWidth;
}
bool InsetTableCell::getStatus(Cursor & cur, FuncRequest const & cmd,
bool enabled;
switch (cmd.action) {
case LFUN_LAYOUT:
- enabled = !forceEmptyLayout();
+ enabled = !forcePlainLayout();
break;
case LFUN_LAYOUT_PARAGRAPH:
enabled = allowParagraphCustomization();
while (paste_tabular->column_info.size() > columns)
paste_tabular->deleteColumn(columns);
- // We clear all the InsetTableCell pointers, since they
- // might now become invalid and there is no point in having
- // them point to temporary things in paste_tabular.
- for (row_type i = 0; i < paste_tabular->row_info.size(); ++i)
- for (col_type j = 0; j < paste_tabular->column_info.size(); ++j) {
- paste_tabular->cellInset(i,j)->setCellData(0);
- paste_tabular->cellInset(i,j)->setTabular(0);
- }
-
odocstringstream os;
OutputParams const runparams(0);
paste_tabular->plaintext(os, runparams, 0, true, '\t');
}
shared_ptr<InsetTableCell> inset(
new InsetTableCell(*paste_tabular->cellInset(r1, c1)));
- // note that setCellInset will call InsetTableCell::setCellData()
- // and InsetTableCell::setTabular()
tabular.setCellInset(r2, c2, inset);
// FIXME: change tracking (MG)
inset->setChange(Change(cur.buffer().params().trackChanges ?
}
-bool InsetTabular::forceEmptyLayout(idx_type cell) const
+bool InsetTabular::forcePlainLayout(idx_type cell) const
{
return !tabular.getPWidth(cell).zero();
}