mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-10 10:56:00 +00:00
Fix bug 2380:
* src/insets/insettabular.C (InsetTabular::hasPasteBuffer): (InsetTabular::doDispatch): (InsetTabular::insertAsciiString): Construct LyXTabulars with a BufferView * src/tabular.[Ch] (cellstruct): Set bv_owner of the text inset (LyXTabular::fixCellNums): (LyXTabular::appendRow): (LyXTabular::deleteRow): (LyXTabular::appendColumn): (LyXTabular::read): Construct cellstructs with a BufferView git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13516 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
7b81bf1108
commit
2129ed9082
src
@ -167,7 +167,7 @@ bool InsetTabular::hasPasteBuffer() const
|
||||
InsetTabular::InsetTabular(Buffer const & buf, row_type rows,
|
||||
col_type columns)
|
||||
: tabular(buf.params(), max(rows, row_type(1)),
|
||||
max(columns, col_type(1))), buffer_(&buf), scx_(0)
|
||||
max(columns, col_type(1)), buf.text().bv()), buffer_(&buf), scx_(0)
|
||||
{}
|
||||
|
||||
|
||||
@ -693,7 +693,7 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
|
||||
maxCols = max(cols, maxCols);
|
||||
|
||||
paste_tabular.reset(
|
||||
new LyXTabular(cur.buffer().params(), rows, maxCols));
|
||||
new LyXTabular(cur.buffer().params(), rows, maxCols, &cur.bv()));
|
||||
|
||||
string::size_type op = 0;
|
||||
idx_type cell = 0;
|
||||
@ -1882,7 +1882,7 @@ bool InsetTabular::insertAsciiString(BufferView & bv, string const & buf,
|
||||
row_type row = 0;
|
||||
if (usePaste) {
|
||||
paste_tabular.reset(
|
||||
new LyXTabular(bv.buffer()->params(), rows, maxCols));
|
||||
new LyXTabular(bv.buffer()->params(), rows, maxCols, &bv));
|
||||
loctab = paste_tabular.get();
|
||||
cols = 0;
|
||||
} else {
|
||||
|
@ -313,7 +313,8 @@ void l_getline(istream & is, string & str)
|
||||
|
||||
/// Define a few methods for the inner structs
|
||||
|
||||
LyXTabular::cellstruct::cellstruct(BufferParams const & bp)
|
||||
LyXTabular::cellstruct::cellstruct(BufferParams const & bp,
|
||||
BufferView const * bv)
|
||||
: cellno(0),
|
||||
width_of_cell(0),
|
||||
multicolumn(LyXTabular::CELL_NORMAL),
|
||||
@ -326,7 +327,9 @@ LyXTabular::cellstruct::cellstruct(BufferParams const & bp)
|
||||
usebox(BOX_NONE),
|
||||
rotate(false),
|
||||
inset(new InsetText(bp))
|
||||
{}
|
||||
{
|
||||
inset->setViewCache(bv);
|
||||
}
|
||||
|
||||
|
||||
LyXTabular::cellstruct::cellstruct(cellstruct const & cs)
|
||||
@ -406,21 +409,21 @@ LyXTabular::ltType::ltType()
|
||||
|
||||
|
||||
LyXTabular::LyXTabular(BufferParams const & bp, row_type rows_arg,
|
||||
col_type columns_arg)
|
||||
col_type columns_arg, BufferView const * bv)
|
||||
{
|
||||
init(bp, rows_arg, columns_arg);
|
||||
init(bp, rows_arg, columns_arg, bv);
|
||||
}
|
||||
|
||||
|
||||
// activates all lines and sets all widths to 0
|
||||
void LyXTabular::init(BufferParams const & bp, row_type rows_arg,
|
||||
col_type columns_arg)
|
||||
col_type columns_arg, BufferView const * bv)
|
||||
{
|
||||
rows_ = rows_arg;
|
||||
columns_ = columns_arg;
|
||||
row_info = row_vector(rows_);
|
||||
column_info = column_vector(columns_);
|
||||
cell_info = cell_vvector(rows_, cell_vector(columns_, cellstruct(bp)));
|
||||
cell_info = cell_vvector(rows_, cell_vector(columns_, cellstruct(bp, bv)));
|
||||
row_info.reserve(10);
|
||||
column_info.reserve(10);
|
||||
cell_info.reserve(100);
|
||||
@ -454,6 +457,7 @@ void LyXTabular::fixCellNums()
|
||||
|
||||
void LyXTabular::appendRow(BufferParams const & bp, idx_type const cell)
|
||||
{
|
||||
BufferView const * const bv = getCellInset(0)->getText(0)->bv();
|
||||
++rows_;
|
||||
|
||||
row_type const row = row_of_cell(cell);
|
||||
@ -467,7 +471,7 @@ void LyXTabular::appendRow(BufferParams const & bp, idx_type const cell)
|
||||
for (row_type i = 0; i < rows_ - 1; ++i)
|
||||
swap(cell_info[i], old[i]);
|
||||
|
||||
cell_info = cell_vvector(rows_, cell_vector(columns_, cellstruct(bp)));
|
||||
cell_info = cell_vvector(rows_, cell_vector(columns_, cellstruct(bp, bv)));
|
||||
|
||||
for (row_type i = 0; i <= row; ++i)
|
||||
swap(cell_info[i], old[i]);
|
||||
@ -497,6 +501,7 @@ void LyXTabular::deleteRow(row_type const row)
|
||||
|
||||
void LyXTabular::appendColumn(BufferParams const & bp, idx_type const cell)
|
||||
{
|
||||
BufferView const * const bv = getCellInset(0)->getText(0)->bv();
|
||||
++columns_;
|
||||
|
||||
col_type const column = column_of_cell(cell);
|
||||
@ -506,7 +511,7 @@ void LyXTabular::appendColumn(BufferParams const & bp, idx_type const cell)
|
||||
column_info[column + 1] = column_info[column];
|
||||
|
||||
for (row_type i = 0; i < rows_; ++i) {
|
||||
cell_info[i].insert(cell_info[i].begin() + column + 1, cellstruct(bp));
|
||||
cell_info[i].insert(cell_info[i].begin() + column + 1, cellstruct(bp, bv));
|
||||
|
||||
// care about multicolumns
|
||||
if (cell_info[i][column + 1].multicolumn == CELL_BEGIN_OF_MULTICOLUMN)
|
||||
@ -1273,7 +1278,7 @@ void LyXTabular::read(Buffer const & buf, LyXLex & lex)
|
||||
int columns_arg;
|
||||
if (!getTokenValue(line, "columns", columns_arg))
|
||||
return;
|
||||
init(buf.params(), rows_arg, columns_arg);
|
||||
init(buf.params(), rows_arg, columns_arg, buf.text().bv());
|
||||
l_getline(is, line);
|
||||
if (!prefixIs(line, "<features")) {
|
||||
lyxerr << "Wrong tabular format (expected <features ...> got"
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <iosfwd>
|
||||
#include <vector>
|
||||
|
||||
class BufferView;
|
||||
class InsetTabular;
|
||||
class LCursor;
|
||||
class OutputParams;
|
||||
@ -185,7 +186,7 @@ public:
|
||||
|
||||
/// constructor
|
||||
LyXTabular(BufferParams const &, col_type columns_arg,
|
||||
row_type rows_arg);
|
||||
row_type rows_arg, BufferView const *);
|
||||
|
||||
/// Returns true if there is a topline, returns false if not
|
||||
bool topLine(idx_type cell, bool onlycolumn = false) const;
|
||||
@ -403,7 +404,7 @@ public:
|
||||
class cellstruct {
|
||||
public:
|
||||
///
|
||||
cellstruct(BufferParams const &);
|
||||
cellstruct(BufferParams const &, BufferView const *);
|
||||
///
|
||||
cellstruct(cellstruct const &);
|
||||
///
|
||||
@ -531,7 +532,7 @@ public:
|
||||
|
||||
///
|
||||
void init(BufferParams const &, row_type rows_arg,
|
||||
col_type columns_arg);
|
||||
col_type columns_arg, BufferView const *);
|
||||
///
|
||||
void set_row_column_number_info();
|
||||
/// Returns true if a complete update is necessary, otherwise false
|
||||
|
Loading…
Reference in New Issue
Block a user