From: Georg Baum Date: Tue, 28 Mar 2006 12:49:47 +0000 (+0000) Subject: Fix bug 2380: X-Git-Tag: 1.6.10~13429 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=2129ed9082999e5177112ef3f45b7ca74d284788;p=features.git 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 --- diff --git a/src/insets/insettabular.C b/src/insets/insettabular.C index f0c7f776f0..bc8eb65d2f 100644 --- a/src/insets/insettabular.C +++ b/src/insets/insettabular.C @@ -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 { diff --git a/src/tabular.C b/src/tabular.C index 212431cbb8..055b390321 100644 --- a/src/tabular.C +++ b/src/tabular.C @@ -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, " got" diff --git a/src/tabular.h b/src/tabular.h index fc54679fa0..6c70ed7e55 100644 --- a/src/tabular.h +++ b/src/tabular.h @@ -23,6 +23,7 @@ #include #include +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