]> git.lyx.org Git - features.git/commitdiff
Fix bug 2380:
authorGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Tue, 28 Mar 2006 12:49:47 +0000 (12:49 +0000)
committerGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Tue, 28 Mar 2006 12:49:47 +0000 (12:49 +0000)
* 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

src/insets/insettabular.C
src/tabular.C
src/tabular.h

index f0c7f776f052f074666b3731c1410b2a725bb1c0..bc8eb65d2fa9fe479f6cb61ab0f2c61de796a850 100644 (file)
@@ -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 {
index 212431cbb853936f54030a89bc002fff06bd89e2..055b390321bf66027dbd5366b0ba6e6a508921b1 100644 (file)
@@ -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"
index fc54679fa0d0d04dc008cc195b97255d4733d22c..6c70ed7e555c442f97bbde6ccc6e5e41b4d53fcf 100644 (file)
@@ -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