]> git.lyx.org Git - lyx.git/blobdiff - src/tabular.C
Fix working of the spellchecker dialog with ispell when there are no
[lyx.git] / src / tabular.C
index b06f5b9a91c25dbe2b75b7fceb5f31357458a92d..6c5d2f388c3055079546c7f0efe12d579168b851 100644 (file)
@@ -3,7 +3,7 @@
  * 
  *           LyX, The Document Processor
  *      
- *           Copyright 2000 The LyX Team.
+ *           Copyright 2000-2001 The LyX Team.
  *
  *           @author: Jürgen Vigna
  *
@@ -16,6 +16,9 @@
 #pragma implementation
 #endif
 
+// temporary until verified (08/08/2001 Jug)
+#define SPECIAL_COLUM_HANDLING 1
+
 #include <algorithm>
 #include <cstdlib>
 
 #include "LaTeXFeatures.h"
 #include "support/lstrings.h"
 #include "support/lyxmanip.h"
+#include "support/LAssert.h"
 #include "insets/insettabular.h"
 #include "insets/insettext.h"
+#include "gettext.h"
 
 using std::ostream;
 using std::istream;
@@ -40,6 +45,10 @@ using std::max;
 using std::endl;
 using std::vector;
 
+#ifndef CXX_GLOBAL_CSTD
+using std::strlen;
+#endif
+
 namespace {
 
        int const WIDTH_OF_LINE = 5;
@@ -88,6 +97,7 @@ LyXTabular::columnstruct::columnstruct()
 LyXTabular::LyXTabular(InsetTabular * inset, int rows_arg, int columns_arg)
 {
        owner_ = inset;
+       cur_cell = -1;
        Init(rows_arg, columns_arg);
 }
 
@@ -95,28 +105,38 @@ LyXTabular::LyXTabular(InsetTabular * inset, int rows_arg, int columns_arg)
 LyXTabular::LyXTabular(InsetTabular * inset, LyXTabular const & lt)
 {
        owner_ = inset;
-       Init(lt.rows_, lt.columns_);
+       cur_cell = -1;
+       Init(lt.rows_, lt.columns_, &lt);
+#if 0
 #ifdef WITH_WARNINGS
 #warning Jürgen, can you make it the other way round. So that copy assignment depends on the copy constructor and not the other way. (Lgb)
 #endif
        operator=(lt);
+#endif
 }
 
 
 LyXTabular::LyXTabular(Buffer const * buf, InsetTabular * inset, LyXLex & lex)
 {
        owner_ = inset;
+       cur_cell = -1;
        Read(buf, lex);
 }
 
 
 LyXTabular & LyXTabular::operator=(LyXTabular const & lt)
 {
+#if 0
+#warning This while method should look like this: (Lgb)
+
+               LyXTabular tmp(lt);
+               tmp.swap(*this);
+#else
        // If this and lt is not of the same size we have a serious bug
        // So then it is ok to throw an exception, or for now
        // call abort()
-       Assert(rows_ == lt.rows_ && columns_ == lt.columns_);
-
+       lyx::Assert(rows_ == lt.rows_ && columns_ == lt.columns_);
+       cur_cell = -1;
        cell_info = lt.cell_info;
        row_info = lt.row_info;
        column_info = lt.column_info;
@@ -131,14 +151,15 @@ LyXTabular & LyXTabular::operator=(LyXTabular const & lt)
        rotate = lt.rotate;
 
        Reinit();
-       
+#endif
        return *this;
 }
 
 
-LyXTabular * LyXTabular::Clone(InsetTabular * inset)
+LyXTabular * LyXTabular::clone(InsetTabular * inset)
 {
        LyXTabular * result = new LyXTabular(inset, *this);
+#if 0
        // don't know if this is good but I need to Clone also
        // the text-insets here, this is for the Undo-facility!
        for (int i = 0; i < rows_; ++i) {
@@ -147,12 +168,13 @@ LyXTabular * LyXTabular::Clone(InsetTabular * inset)
                        result->cell_info[i][j].inset.setOwner(inset);
                }
        }
+#endif
        return result;
 }
 
 
 /* activates all lines and sets all widths to 0 */ 
-void LyXTabular::Init(int rows_arg, int columns_arg)
+void LyXTabular::Init(int rows_arg, int columns_arg, LyXTabular const * lt)
 {
        rows_ = rows_arg;
        columns_ = columns_arg;
@@ -160,11 +182,16 @@ void LyXTabular::Init(int rows_arg, int columns_arg)
        column_info = column_vector(columns_, columnstruct());
        cell_info = cell_vvector(rows_, cell_vector(columns_, cellstruct()));
 
+       if (lt) {
+               operator=(*lt);
+               return;
+       }
+
        int cellno = 0;
        for (int i = 0; i < rows_; ++i) {
                for (int j = 0; j < columns_; ++j) {
                        cell_info[i][j].inset.setOwner(owner_);
-                       cell_info[i][j].inset.SetDrawFrame(0, InsetText::LOCKED);
+                       cell_info[i][j].inset.setDrawFrame(0, InsetText::LOCKED);
                        cell_info[i][j].cellno = cellno++;
                }
                cell_info[i].back().right_line = true;
@@ -359,7 +386,7 @@ void LyXTabular::set_row_column_number_info(bool oldformat)
                                cell_info[row][column].right_line =
                                        cell_info[row][column+cn-1].right_line;
                        }
-                       cell_info[row][column].inset.SetAutoBreakRows(
+                       cell_info[row][column].inset.setAutoBreakRows(
                                !GetPWidth(GetCellNumber(row, column)).empty());
                }
        }
@@ -411,26 +438,50 @@ bool LyXTabular::BottomLine(int cell, bool onlycolumn) const
 
 bool LyXTabular::LeftLine(int cell, bool onlycolumn) const
 {
-       if (!onlycolumn && IsMultiColumn(cell))
+       if (!onlycolumn && IsMultiColumn(cell)) {
+#ifdef SPECIAL_COLUM_HANDLING
+               if (cellinfo_of_cell(cell)->align_special.empty())
+                       return cellinfo_of_cell(cell)->left_line;
+               return prefixIs(frontStrip(cellinfo_of_cell(cell)->align_special), "|");
+#else
                return cellinfo_of_cell(cell)->left_line;
+#endif
+       }
+#ifdef SPECIAL_COLUM_HANDLING
+       if (column_info[column_of_cell(cell)].align_special.empty())
+               return column_info[column_of_cell(cell)].left_line;
+       return prefixIs(frontStrip(column_info[column_of_cell(cell)].align_special), "|");
+#else
        return column_info[column_of_cell(cell)].left_line;
+#endif
 }
 
 
 bool LyXTabular::RightLine(int cell, bool onlycolumn) const
 {
-       if (!onlycolumn && IsMultiColumn(cell))
+       if (!onlycolumn && IsMultiColumn(cell)) {
+#ifdef SPECIAL_COLUM_HANDLING
+               if (cellinfo_of_cell(cell)->align_special.empty())
+                       return cellinfo_of_cell(cell)->right_line;
+               return suffixIs(strip(cellinfo_of_cell(cell)->align_special), "|");
+#else
                return cellinfo_of_cell(cell)->right_line;
+#endif
+       }
+#ifdef SPECIAL_COLUM_HANDLING
+       if (column_info[column_of_cell(cell)].align_special.empty())
+               return column_info[right_column_of_cell(cell)].right_line;
+       return suffixIs(strip(column_info[column_of_cell(cell)].align_special), "|");
+#else
        return column_info[right_column_of_cell(cell)].right_line;
+#endif
 }
 
 
 bool LyXTabular::TopAlreadyDrawed(int cell) const
 {
-       if (GetAdditionalHeight(cell))
-               return false;
        int row = row_of_cell(cell);
-       if (row > 0) {
+       if ((row > 0) && !GetAdditionalHeight(row)) {
                int column = column_of_cell(cell);
                --row;
                while (column
@@ -456,7 +507,11 @@ bool LyXTabular::LeftAlreadyDrawed(int cell) const
                                LyXTabular::CELL_PART_OF_MULTICOLUMN));
                if (GetAdditionalWidth(cell_info[row][column].cellno))
                        return false;
+#ifdef SPECIAL_COLUM_HANDLING
                return column_info[column].right_line;
+#else
+               return RightLine(cell_info[row][column].cellno, true);
+#endif
        }
        return false;
 }
@@ -468,10 +523,10 @@ bool LyXTabular::IsLastRow(int cell) const
 }
 
 
-int LyXTabular::GetAdditionalHeight(int cell) const
+int LyXTabular::GetAdditionalHeight(int row) const
 {
-       int const row = row_of_cell(cell);
-       if (!row) return 0;
+       if (!row || row >= rows_)
+               return 0;
 
        bool top = true;
        bool bottom = true;
@@ -505,11 +560,14 @@ int LyXTabular::GetAdditionalWidth(int cell) const
        // internally already set in SetWidthOfCell
        // used to get it back in text.C
        int const col = right_column_of_cell(cell);
-       if (col < columns_ - 1 && column_info[col].right_line &&
-               column_info[col+1].left_line)
+       int const row = row_of_cell(cell);
+       if (col < columns_ - 1 && RightLine(cell, true) &&
+               LeftLine(cell_info[row][col+1].cellno, true)) // column_info[col+1].left_line)
+       {
                return WIDTH_OF_LINE;
-       else
+       } else {
                return 0;
+       }
 }
 
 
@@ -586,17 +644,28 @@ bool LyXTabular::SetWidthOfCell(int cell, int new_width)
        int const column1 = column_of_cell(cell);
        bool tmp = false;
        int width = 0;
+       int add_width = 0;
 
-       if (GetWidthOfCell(cell) == (new_width+2*WIDTH_OF_LINE))
+#ifdef SPECIAL_COLUM_HANDLING
+       if (RightLine(cell_info[row][column1].cellno, true) &&
+               (column1 < columns_-1) &&
+               LeftLine(cell_info[row][column1+1].cellno, true))
+#else
+       if (column_info[column1].right_line && (column1 < columns_-1) &&
+               column_info[column1+1].left_line) // additional width
+#endif
+       {
+               // additional width
+               add_width = WIDTH_OF_LINE;
+       }
+       if (GetWidthOfCell(cell) == (new_width+2*WIDTH_OF_LINE+add_width)) {
                return false;
+       }
        if (IsMultiColumn(cell, true)) {
                tmp = SetWidthOfMulticolCell(cell, new_width);
        } else {
-               width = (new_width + 2*WIDTH_OF_LINE);
+               width = (new_width + 2*WIDTH_OF_LINE + add_width);
                cell_info[row][column1].width_of_cell = width;
-               if (column_info[column1].right_line && (column1 < columns_-1) &&
-                       column_info[column1+1].left_line) // additional width
-                       cell_info[row][column1].width_of_cell += WIDTH_OF_LINE;
                tmp = calculate_width_of_column_NMC(column1);
        }
        if (tmp) {
@@ -647,7 +716,7 @@ bool LyXTabular::SetColumnPWidth(int cell, string const & width)
        for (int i = 0; i < rows_; ++i) {
                int c = GetCellNumber(i, j);
                flag = !GetPWidth(c).empty(); // because of multicolumns!
-               GetCellInset(c)->SetAutoBreakRows(flag);
+               GetCellInset(c)->setAutoBreakRows(flag);
        }
        return true;
 }
@@ -659,7 +728,7 @@ bool LyXTabular::SetMColumnPWidth(int cell, string const & width)
 
        cellinfo_of_cell(cell)->p_width = width;
        if (IsMultiColumn(cell)) {
-               GetCellInset(cell)->SetAutoBreakRows(flag);
+               GetCellInset(cell)->setAutoBreakRows(flag);
                return true;
        }
        return false;
@@ -667,7 +736,7 @@ bool LyXTabular::SetMColumnPWidth(int cell, string const & width)
 
 
 bool LyXTabular::SetAlignSpecial(int cell, string const & special,
-                                LyXTabular::Feature what)
+                                 LyXTabular::Feature what)
 {
        if (what == SET_SPECIAL_MULTI)
                cellinfo_of_cell(cell)->align_special = special;
@@ -913,6 +982,7 @@ int LyXTabular::right_column_of_cell(int cell) const
 
 
 // Perfect case for a template... (Lgb)
+// or perhaps not...
 #if 1
 template<class T>
 string const write_attribute(string const & name, T const & t)
@@ -1057,7 +1127,7 @@ void LyXTabular::Write(Buffer const * buf, ostream & os) const
                           << write_attribute("special", cell_info[i][j].align_special)
                           << ">\n";
                        os << "\\begin_inset ";
-                       cell_info[i][j].inset.Write(buf, os);
+                       cell_info[i][j].inset.write(buf, os);
                        os << "\n\\end_inset \n"
                           << "</cell>\n";
                }
@@ -1138,8 +1208,8 @@ bool getTokenValue(string const & str, const char * token, string & ret)
        size_t token_length = strlen(token);
        string::size_type pos = str.find(token);
 
-       if (pos == string::npos || pos+token_length+1 >= str.length()
-               || str[pos+token_length] != '=')
+       if (pos == string::npos || pos + token_length + 1 >= str.length()
+               || str[pos + token_length] != '=')
                return false;
        ret.erase();
        pos += token_length + 1;
@@ -1308,7 +1378,7 @@ void LyXTabular::ReadNew(Buffer const * buf, istream & is,
                        getTokenValue(line, "special", cell_info[i][j].align_special);
                        l_getline(is, line);
                        if (prefixIs(line, "\\begin_inset")) {
-                               cell_info[i][j].inset.Read(buf, lex);
+                               cell_info[i][j].inset.read(buf, lex);
                                l_getline(is, line);
                        }
                        if (!prefixIs(line, "</cell>")) {
@@ -1465,40 +1535,35 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
        }
        set_row_column_number_info(true);
 
-       LyXParagraph * par = new LyXParagraph;
-       LyXParagraph * return_par = 0;
-#ifndef NEW_INSETS
-       LyXParagraph::footnote_flag footnoteflag = LyXParagraph::NO_FOOTNOTE;
-       LyXParagraph::footnote_kind footnotekind = LyXParagraph::FOOTNOTE;
-#endif
+       Paragraph * par = new Paragraph;
+       Paragraph * return_par = 0;
+
        string tmptok;
        int pos = 0;
-       char depth = 0;
+       Paragraph::depth_type depth = 0;
        LyXFont font(LyXFont::ALL_INHERIT);
-       font.setLanguage(owner_->BufferOwner()->GetLanguage());
+       font.setLanguage(owner_->bufferOwner()->getLanguage());
 
-       while (lex.IsOK()) {
+       while (lex.isOK()) {
                lex.nextToken();
-               string const token = lex.GetString();
+               string const token = lex.getString();
                if (token.empty())
                        continue;
                if (token == "\\layout"
                        || token == "\\end_float"
                        || token == "\\end_deeper") {
                        lex.pushToken(token);
+#ifndef NO_COMPABILITY
+                       // Here we need to insert the inset_ert_contents into the last
+                       // cell of the tabular.
+                       owner_->bufferOwner()->insertErtContents(par, pos, font);
+#endif
                        break;
                }
-               if (owner_->BufferOwner()->parseSingleLyXformat2Token(lex, par,
+               if (owner_->bufferOwner()->parseSingleLyXformat2Token(lex, par,
                                                                                                                          return_par,
                                                                                                                          token, pos,
-                                                                                                                         depth, font
-#ifndef NEW_INSETS
-                                                                                                                         ,
-                                                                                                                         footnoteflag,
-                                                                                                                         footnotekind
-#endif
-                                                                                                                         ))
-               {
+                                                                                                                         depth, font)) {
                        // the_end read
                        lex.pushToken(token);
                        break;
@@ -1516,15 +1581,10 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
        InsetText * inset = GetCellInset(cell);
        int row;
 
-#ifndef NEW_INSETS
-       for (int i = 0; i < par->Last(); ++i)
-#else
-       for (int i = 0; i < par->size(); ++i)
-#endif
-       {
-               if (par->IsNewline(i)) {
+       for (int i = 0; i < par->size(); ++i) {
+               if (par->isNewline(i)) {
                        ++cell;
-                       if (cell > GetNumberOfCells()) {
+                       if (cell > numberofcells) {
                                lyxerr << "Some error in reading old table format occured!" <<
                                        endl << "Terminating when reading cell[" << cell << "]!" <<
                                        endl;
@@ -1545,16 +1605,12 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
                        if (!cell_info[row_of_cell(cell)][column_of_cell(cell)].usebox)
                        {
                                // insert a space instead
-                               par->Erase(i);
-                               par->InsertChar(i, ' ');
+                               par->erase(i);
+                               par->insertChar(i, ' ');
                        }
                }
-               par->CopyIntoMinibuffer(*owner_->BufferOwner(), i);
-#ifndef NEW_INSETS
-               inset->par->InsertFromMinibuffer(inset->par->Last());
-#else
-               inset->par->InsertFromMinibuffer(inset->par->size());
-#endif
+               par->copyIntoMinibuffer(*owner_->bufferOwner(), i);
+               inset->paragraph()->insertFromMinibuffer(inset->paragraph()->size());
        }
        delete par;
        Reinit();
@@ -1680,7 +1736,7 @@ bool LyXTabular::NeedRotating() const
 
 bool LyXTabular::IsLastCell(int cell) const
 {
-       if ((cell + 1) < GetNumberOfCells())
+       if ((cell + 1) < numberofcells)
                return false;
        return true;
 }
@@ -1724,6 +1780,7 @@ int LyXTabular::GetLastCellBelow(int cell) const
 
 int LyXTabular::GetCellNumber(int row, int column) const
 {
+#if 0
        if (column >= columns_)
                column = columns_ - 1;
        else if (column < 0)
@@ -1732,7 +1789,9 @@ int LyXTabular::GetCellNumber(int row, int column) const
                row = rows_ - 1;
        else if (row < 0)
                row = 0;
-       
+#else
+       lyx::Assert(column >= 0 || column < columns_ || row >= 0 || row < rows_);
+#endif
        return cell_info[row][column].cellno;
 }
 
@@ -1880,7 +1939,7 @@ int LyXTabular::GetHeightOfTabular() const
 
        for (int row = 0; row < rows_; ++row)
                height += GetAscentOfRow(row) + GetDescentOfRow(row) +
-                       GetAdditionalHeight(GetCellNumber(row, 0));
+                       GetAdditionalHeight(row);
        return height;
 }
 
@@ -1972,8 +2031,13 @@ int LyXTabular::TeXCellPreamble(ostream & os, int cell) const
                if (!cellinfo_of_cell(cell)->align_special.empty()) {
                        os << cellinfo_of_cell(cell)->align_special << "}{";
                } else {
-                       if (LeftLine(cell))
+                       if (LeftLine(cell) &&
+                               (IsFirstCellInRow(cell) || 
+                                (!IsMultiColumn(cell-1) && !LeftLine(cell, true) &&
+                                 !RightLine(cell-1, true))))
+                       {
                                os << '|';
+                       }
                        if (!GetPWidth(cell).empty()) {
                                switch (GetVAlignment(cell)) {
                                case LYX_VALIGN_TOP:
@@ -2083,40 +2147,42 @@ int LyXTabular::Latex(Buffer const * buf,
        else
                os << "\\begin{tabular}{";
        for (int i = 0; i < columns_; ++i) {
-               if (column_info[i].left_line)
-                       os << '|';
                if (!column_info[i].align_special.empty()) {
                        os << column_info[i].align_special;
-               } else if (!column_info[i].p_width.empty()) {
-                       switch (column_info[i].valignment) {
-                       case LYX_VALIGN_TOP:
-                               os << "p";
-                               break;
-                       case LYX_VALIGN_CENTER:
-                               os << "m";
-                               break;
-                       case LYX_VALIGN_BOTTOM:
-                               os << "b";
-                               break;
+               } else { 
+                       if (column_info[i].left_line)
+                               os << '|';
+                       if (!column_info[i].p_width.empty()) {
+                               switch (column_info[i].valignment) {
+                               case LYX_VALIGN_TOP:
+                                       os << "p";
+                                       break;
+                               case LYX_VALIGN_CENTER:
+                                       os << "m";
+                                       break;
+                               case LYX_VALIGN_BOTTOM:
+                                       os << "b";
+                                       break;
                        }
-                       os << "{"
-                          << column_info[i].p_width
-                          << '}';
-               } else {
-                       switch (column_info[i].alignment) {
-                       case LYX_ALIGN_LEFT:
-                               os << 'l';
-                               break;
-                       case LYX_ALIGN_RIGHT:
+                               os << "{"
+                                  << column_info[i].p_width
+                                  << '}';
+                       } else {
+                               switch (column_info[i].alignment) {
+                               case LYX_ALIGN_LEFT:
+                                       os << 'l';
+                                       break;
+                               case LYX_ALIGN_RIGHT:
                                os << 'r';
                                break;
-                       default:
-                               os << 'c';
-                               break;
+                               default:
+                                       os << 'c';
+                                       break;
+                               }
                        }
+                       if (column_info[i].right_line)
+                               os << '|';
                }
-               if (column_info[i].right_line)
-                       os << '|';
        }
        os << "}\n";
        ++ret;
@@ -2156,15 +2222,12 @@ int LyXTabular::Latex(Buffer const * buf,
                        ret += TeXCellPreamble(os, cell);
                        InsetText * inset = GetCellInset(cell);
 
-                       bool rtl = inset->par->isRightToLeftPar(buf->params) &&
-#ifndef NEW_INSETS
-                               inset->par->Last() > 0 && GetPWidth(cell).empty();
-#else
-                       inset->par->size() > 0 && GetPWidth(cell).empty();
-#endif
+                       bool rtl = inset->paragraph()->isRightToLeftPar(buf->params) &&
+                                       inset->paragraph()->size() > 0 && GetPWidth(cell).empty();
+
                        if (rtl)
                                os << "\\R{";
-                       ret += inset->Latex(buf, os, fragile, fp);
+                       ret += inset->latex(buf, os, fragile, fp);
                        if (rtl)
                                os << "}";
 
@@ -2293,7 +2356,7 @@ int LyXTabular::DocBook(Buffer const * buf, ostream & os) const
                        }
                
                        os << ">";
-                       ret += GetCellInset(cell)->DocBook(buf, os);
+                       ret += GetCellInset(cell)->docbook(buf, os);
                        os << "</entry>";
                        ++cell;
                }
@@ -2421,7 +2484,7 @@ int LyXTabular::AsciiPrintCell(Buffer const * buf, ostream & os,
                                                           vector<unsigned int> const & clen) const
 {
        ostringstream sstr;
-       int ret = GetCellInset(cell)->Ascii(buf, sstr, 0);
+       int ret = GetCellInset(cell)->ascii(buf, sstr, 0);
 
        if (LeftLine(cell))
                os << "| ";
@@ -2480,7 +2543,7 @@ int LyXTabular::Ascii(Buffer const * buf, ostream & os) const
                        if (IsMultiColumn(cell, true))
                                continue;
                        ostringstream sstr;
-                       GetCellInset(cell)->Ascii(buf, sstr, 0);
+                       GetCellInset(cell)->ascii(buf, sstr, 0);
                        if (clen[j] < sstr.str().length())
                                clen[j] = sstr.str().length();
                }
@@ -2492,7 +2555,7 @@ int LyXTabular::Ascii(Buffer const * buf, ostream & os) const
                        if (!IsMultiColumn(cell, true) || IsPartOfMultiColumn(i, j))
                                continue;
                        ostringstream sstr;
-                       GetCellInset(cell)->Ascii(buf, sstr, 0);
+                       GetCellInset(cell)->ascii(buf, sstr, 0);
                        int len = int(sstr.str().length());
                        int const n = cells_in_multicolumn(cell);
                        for (int k = j; (len > 0) && (k < (j + n - 1)); ++k)
@@ -2519,13 +2582,15 @@ int LyXTabular::Ascii(Buffer const * buf, ostream & os) const
 
 InsetText * LyXTabular::GetCellInset(int cell) const
 {
+       cur_cell = cell;
        return & cell_info[row_of_cell(cell)][column_of_cell(cell)].inset;
 }
 
 
 InsetText * LyXTabular::GetCellInset(int row, int column) const
 {
-       return GetCellInset(GetCellNumber(row, column));
+       cur_cell = GetCellNumber(row, column);
+       return & cell_info[row][column].inset;
 }
 
 
@@ -2538,35 +2603,41 @@ void LyXTabular::Validate(LaTeXFeatures & features) const
        for (int cell = 0; !features.array && (cell < numberofcells); ++cell) {
                if (GetVAlignment(cell) != LYX_VALIGN_TOP)
                        features.array = true;
-               GetCellInset(cell)->Validate(features);
+               GetCellInset(cell)->validate(features);
        }
 }
 
 
-#ifndef NEW_INSETS
-LyXTabular::BoxType LyXTabular::UseParbox(int cell) const
+std::vector<string> const LyXTabular::getLabelList() const
 {
-       LyXParagraph * par = GetCellInset(cell)->par;
-
-       for (; par; par = par->next_) {
-               for (int i = 0; i < par->Last(); ++i) {
-                       if (par->GetChar(i)     == LyXParagraph::META_NEWLINE)
-                               return BOX_PARBOX;
+       std::vector<string> label_list;
+       for (int i = 0; i < rows_; ++i)
+               for (int j = 0; j < columns_; ++j) {
+                       std::vector<string> const l =
+                               GetCellInset(i, j)->getLabelList();
+                       label_list.insert(label_list.end(),
+                                         l.begin(), l.end());
                }
-       }
-       return BOX_NONE;
+       return label_list;
 }
-#else
+
+                       
 LyXTabular::BoxType LyXTabular::UseParbox(int cell) const
 {
-       LyXParagraph * par = GetCellInset(cell)->par;
+       Paragraph * par = GetCellInset(cell)->paragraph();
 
        for (; par; par = par->next()) {
                for (int i = 0; i < par->size(); ++i) {
-                       if (par->GetChar(i)     == LyXParagraph::META_NEWLINE)
+                       if (par->getChar(i)     == Paragraph::META_NEWLINE)
                                return BOX_PARBOX;
                }
        }
        return BOX_NONE;
 }
-#endif
+
+/* Emacs:
+ * Local variables:
+ * tab-width: 4
+ * End:
+ * vi:set tabstop=4:
+ */