]> git.lyx.org Git - features.git/commitdiff
Last fixes for old-table-format-read, fixes in display of text-insets and
authorJürgen Vigna <jug@sad.it>
Fri, 19 May 2000 10:32:05 +0000 (10:32 +0000)
committerJürgen Vigna <jug@sad.it>
Fri, 19 May 2000 10:32:05 +0000 (10:32 +0000)
in setting latex-features.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@741 a592a061-630c-0410-9148-cb99ea01b6c8

ChangeLog
src/buffer.C
src/insets/insettabular.C
src/insets/insettext.C
src/tabular.C
src/tabular.h

index 95558284ab24fd86435aedbc7a8a5b2e399a20ab..2cb9984de58d8d3730dc2fca8c810b078f5fa1d3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2000-05-19  Juergen Vigna  <jug@sad.it>
+
+       * src/tabular.C (Validate): fixed/added validating of LaTeXFeatures.
+
+       * src/insets/insettext.C (computeTextRows): small fix for display of
+       1 character after a newline.
+
+       * src/tabular.C (OldFormatRead): fixed the OldFormatRead with regard
+       to cont-rows!
+
+2000-05-18  Juergen Vigna  <jug@sad.it>
+
+       * src/insets/insettabular.C (TabularFeatures): fixed update of display
+       when changing width of column.
+
+       * src/tabular.C (set_row_column_number_info): setting of
+       autobreak rows if necessary.
+
 2000-05-17  Jean-Marc Lasgouttes  <Jean-Marc.Lasgouttes@inria.fr>
 
        * src/lyxvc.C (toggleReadOnly): use VCS::status() instead of stat()
index 7d167f3f35f13b2fab2140577bca4ebc9da0c9cc..156629f5775a0189cfbdda6466b2d82a91d6b6c2 100644 (file)
@@ -229,6 +229,7 @@ void Buffer::fileName(string const & newfile)
 // else insert behavior
 // Returns false if "\the_end" is not read for formats >= 2.13. (Asger)
 #define USE_PARSE_FUNCTION 1
+#define USE_TABULAR_INSETS 1
 bool Buffer::readLyXformat2(LyXLex & lex, LyXParagraph * par)
 {
        string tmptok;
index f6dd9ba4c53b21b9d76b641e641660662aeda6ba..92b412ea73deacdecf863039580a5650762fa4e4 100644 (file)
@@ -642,8 +642,7 @@ int InsetTabular::DocBook(ostream &) const
 
 void InsetTabular::Validate(LaTeXFeatures & features) const
 {
-    if (tabular->IsLongTabular())
-        features.longtable = true;
+    tabular->Validate(features);
 }
 
 
@@ -926,9 +925,9 @@ void InsetTabular::TabularFeatures(BufferView * bv, int feature, string val)
     switch (feature) {
       case LyXTabular::SET_PWIDTH:
       {
-         bool update = tabular->GetPWidth(actcell).empty();
+         bool update = (tabular->GetPWidth(actcell) != val);
           tabular->SetPWidth(actcell,val);
-         if (tabular->GetPWidth(actcell).empty() != update)
+         if (update)
              UpdateLocal(bv, true);
       }
       break;
index 3baf395a78a973a409b71b566ce5c8f1988303d9..d7c0aaf2f555f461075f8dbe55c5f787fea87f55 100644 (file)
@@ -1327,9 +1327,9 @@ void InsetText::computeTextRows(Painter & pain) const
        if (par->IsNewline(p)) {
            rows.back().asc = wordAscent;
            rows.back().desc = wordDescent;
-           row.pos = ++p;
+           row.pos = p+1;
            rows.push_back(row);
-           nwp = p;
+           nwp = p+1;
            width = lastWordWidth = 0;
            oasc = odesc = wordAscent = wordDescent = 0;
            is_first_word_in_row = true;
index 1499877bf38402ad03ad14f34e98a3f1bc06321c..dd0a6b4ddb68891c998456299fb91312349c1fff 100644 (file)
@@ -23,6 +23,9 @@
 #include "layout.h"
 #include "lyx_gui_misc.h"
 #include "buffer.h"
+#include "BufferView.h"
+#include "Painter.h"
+#include "LaTeXFeatures.h"
 #include "support/lstrings.h"
 #include "support/lyxmanip.h"
 #include "insets/insettabular.h"
@@ -263,33 +266,12 @@ void LyXTabular::AppendRow(int /* cell */)
 }
 
 
-void LyXTabular::DeleteRow(int /*cell*/)
+void LyXTabular::DeleteRow(int row)
 {
-#if 0
-    int row = row_of_cell(cell);
-    rowstruct * row_info2 = new rowstruct[rows_ - 1];
-    cellstruct ** cell_info2 = new cellstruct * [rows_ - 1];
-
-    delete[] cell_info[row];
-    int i = 0;
-    for (; i < row; ++i) {
-       cell_info2[i] = cell_info[i];
-       row_info2[i] = row_info[i];
-    }
-    for (i = row; i < rows_ - 1; ++i) {
-       cell_info2[i] = cell_info[i + 1];
-       row_info2[i] = row_info[i + 1];
-    }
-
-    delete[] cell_info;
-    cell_info = cell_info2;
-    delete[] row_info;
-    row_info = row_info2;
-   
+    row_info.erase(&row_info[row]);
+    cell_info.erase(&cell_info[row]);
     --rows_;
-
     Reinit();
-#endif
 }
 
 
@@ -451,6 +433,14 @@ void LyXTabular::set_row_column_number_info()
            ++row;
        }
     }
+    for (row = 0; row < rows_; ++row) {
+       for (column = 0; column<columns_; ++column) {
+           if (IsPartOfMultiColumn(row,column))
+               continue;
+           cell_info[row][column].inset->SetAutoBreakRows(
+               !GetPWidth(GetCellNumber(row, column)).empty());
+       }
+    }
 }
 
 
@@ -1164,9 +1154,6 @@ void LyXTabular::Read(LyXLex & lex)
            (void)getTokenValue(line, "rotate", cell_info[i][j].rotate);
            (void)getTokenValue(line, "linebreaks", cell_info[i][j].linebreaks);
            (void)getTokenValue(line, "width", cell_info[i][j].p_width);
-           if (!(cell_info[i][j].p_width.empty() &&
-                 column_info[j].p_width.empty()))
-               cell_info[i][j].inset->SetAutoBreakRows(true);
            (void)getTokenValue(line, "special", cell_info[i][j].align_special);
            l_getline(is, line);
            if (prefixIs(line, "\\begin_inset")) {
@@ -1223,7 +1210,7 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
     else
        version = 1;
 
-    //int * cont_row_info; // unused
+    vector<int> cont_row_info;
 
     if (version < 5) {
        lyxerr << "Tabular format < 5 is not supported anymore\n"
@@ -1238,11 +1225,13 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
        } else
            is >> rows_arg >> columns_arg;
        Init(rows_arg, columns_arg);
+       cont_row_info = vector<int>(rows_arg);
        SetLongTabular(is_long_tabular_arg);
        SetRotateTabular(rotate_arg);
        string tmp;
        for (i = 0; i < rows_; ++i) {
            getline(is, tmp);
+           cont_row_info[i] = false;
        }
        for (i = 0; i < columns_; ++i) {
            getline(is, tmp);
@@ -1256,6 +1245,7 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
        is >> rows_arg >> columns_arg >> is_long_tabular_arg
           >> rotate_arg >> a >> b >> c >> d;
        Init(rows_arg, columns_arg);
+       cont_row_info = vector<int>(rows_arg);
        SetLongTabular(is_long_tabular_arg);
        SetRotateTabular(rotate_arg);
        endhead = a;
@@ -1267,7 +1257,7 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
            is >> a >> b >> c >> d;
            row_info[i].top_line = a;
            row_info[i].bottom_line = b;
-//     row_info[i].is_cont_row = c;
+           cont_row_info[i] = c;
            row_info[i].newpage = d;
        }
        for (i = 0; i < columns_; ++i) {
@@ -1299,7 +1289,6 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
                cell_info[i][j].alignment = static_cast<char>(b);
                cell_info[i][j].top_line = static_cast<char>(c);
                cell_info[i][j].bottom_line = static_cast<char>(d);
-//                     cell_info[i][j].has_cont_row = static_cast<bool>(e);
                cell_info[i][j].rotate = static_cast<bool>(f);
                cell_info[i][j].linebreaks = static_cast<bool>(g);
                cell_info[i][j].align_special = s1;
@@ -1308,6 +1297,7 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
        }
     }
     set_row_column_number_info();
+
     LyXParagraph * par = new LyXParagraph;
     LyXParagraph * return_par = 0;
     LyXParagraph::footnote_flag footnoteflag = LyXParagraph::NO_FOOTNOTE;
@@ -1315,7 +1305,7 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
     string token, tmptok;
     int pos = 0;
     char depth = 0;
-    LyXFont font(LyXFont::ALL_INHERIT);
+    LyXFont font(LyXFont::ALL_SANE);
 
     while (lex.IsOK()) {
         lex.nextToken();
@@ -1348,6 +1338,7 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
     // now we have the par we should fill the insets with this!
     int cell = 0;
     InsetText *inset = GetCellInset(cell);
+    int row;
 
     for(int i=0; i < par->Last(); ++i) {
        if (par->IsNewline(i)) {
@@ -1358,446 +1349,31 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
                    endl;
                return;
            }
+           row = row_of_cell(cell);
+           if (cont_row_info[row]) {
+               DeleteRow(row);
+               cont_row_info.erase(&cont_row_info[row]);
+               while(!IsFirstCellInRow(--cell));
+           } else {
+               inset = GetCellInset(cell);
+               continue;
+           }
            inset = GetCellInset(cell);
-           continue;
+           row = row_of_cell(cell);
+           if (!cell_info[row_of_cell(cell)][column_of_cell(cell)].linebreaks)
+           {
+               // insert a space instead
+               par->Erase(i);
+               par->InsertChar(i, ' ');
+           }
        }
        par->CopyIntoMinibuffer(i);
        inset->par->InsertFromMinibuffer(inset->par->Last());
     }
+    Reinit();
 }
 
 
-#if 0
-// cell < 0 will tex the preamble
-// returns the number of printed newlines
-int LyXTabular::TexEndOfCell(ostream & os, int cell) const
-{
-    int i;
-    int ret = 0;
-    int tmp; // tmp2;
-    int fcell, nvcell;
-    if (IsLastCell(cell)) {
-        // the very end at the very beginning
-        if (GetLinebreaks(cell))
-               os << "\\smallskip{}}";
-        if (IsMultiColumn(cell))
-               os << '}';
-        if (GetRotateCell(cell)) {
-               os << "\n\\end{sideways}";
-            ++ret;
-        }
-        os << "\\\\\n";
-        ++ret;
-    
-        tmp = 0;
-        fcell = cell; 
-        while (!IsFirstCellInRow(fcell)) --fcell;
-        for (i = 0; i < NumberOfCellsInRow(fcell); ++i) {
-            if (BottomLine(fcell + i))
-                ++tmp;
-        }
-        if (tmp == NumberOfCellsInRow(fcell)) {
-               os << "\\hline ";
-        } else {
-            tmp = 0;
-            for (i = 0; i < NumberOfCellsInRow(fcell); ++i) {
-                if (BottomLine(fcell + i)) {
-                       os << "\\cline{"
-                          << column_of_cell(fcell + i) + 1
-                          << '-'
-                          << right_column_of_cell(fcell + i) + 1
-                          << "} ";
-                    tmp = 1;
-                }
-            }
-        }
-        if (tmp){
-               os << '\n';
-            ++ret;
-        }
-        if (is_long_tabular)
-               os << "\\end{longtable}";
-        else
-               os << "\\end{tabular}";
-        if (rotate) {
-               os << "\n\\end{sideways}";
-            ++ret;
-        }
-    } else {
-        nvcell = cell + 1;
-        if (cell < 0){
-            // preamble
-            if (rotate) {
-                   os << "\\begin{sideways}\n";
-                ++ret;
-            }
-            if (is_long_tabular)
-                   os << "\\begin{longtable}{";
-            else
-                   os << "\\begin{tabular}{";
-            for (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()) {
-                       os << "p{"
-                          << 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;
-                    }
-                }
-                if (column_info[i].right_line)
-                       os << '|';
-            }
-            os << "}\n";
-            ++ret;
-            tmp = 0;
-            if (GetNumberOfCells()) {
-                fcell = 0;
-                for (i = 0; i < NumberOfCellsInRow(fcell); ++i) {
-                    if (TopLine(fcell + i))
-                        ++tmp;
-                }
-                if (tmp == NumberOfCellsInRow(fcell)){
-                       os << "\\hline ";
-                } else {
-                    tmp = 0;
-                    for (i = 0; i < NumberOfCellsInRow(fcell); ++i) {
-                        if (TopLine(fcell + i)) {
-                               os << "\\cline{"
-                                  << column_of_cell(fcell + i) + 1
-                                  << '-'
-                                  << right_column_of_cell(fcell + i) + 1
-                                  << "} ";
-                               tmp = 1;
-                        }
-                    }
-                }
-                if (tmp){
-                       os << '\n';
-                    ++ret;
-                }
-            }
-            if (GetRotateCell(0)) {
-                   os << "\\begin{sideways}\n";
-                ++ret;
-            }
-        } else {
-            // usual cells
-            if (GetLinebreaks(cell))
-                   os << "\\smallskip{}}";
-            if (IsMultiColumn(cell)){
-                   os << '}';
-            }
-            if (GetRotateCell(cell)) {
-                   os << "\n\\end{sideways}";
-                ++ret;
-            }
-            if (IsLastCellInRow(cell)) {
-                int row = row_of_cell(cell);
-                string hline1, hline2;
-                bool print_hline = true;
-                bool flag1 = IsLongTabular() &&
-                    ((row == endhead) || (row == endfirsthead) ||
-                     (row == endfoot) || (row == endlastfoot));
-                ++row;
-                bool flag2 = IsLongTabular() &&
-                    ((row <= endhead) || (row <= endfirsthead) ||
-                     (row <= endfoot) || (row <= endlastfoot));
-                --row;
-                // print the bottom hline only if (otherwise it is doubled):
-                // - is no LongTabular
-                // - there IS a first-header
-                // - the next row is no special header/footer
-                //   & this row is no special header/footer
-                // - the next row is a special header/footer
-                //   & this row is a special header/footer
-                bool pr_top_hline = (flag1 && flag2) || (!flag1 && !flag2) ||
-                    (endfirsthead == endhead);
-                os << "\\\\\n";
-                ++ret;
-                tmp = 0;
-                fcell = cell;
-                while (!IsFirstCellInRow(fcell))
-                    --fcell;
-                for (i = 0; i < NumberOfCellsInRow(cell); ++i) {
-                    if (BottomLine(fcell + i))
-                        ++tmp;
-                }
-                if (tmp == NumberOfCellsInRow(cell)){
-                       os << "\\hline ";
-                    hline1 = "\\hline ";
-                } else {
-                    tmp = 0;
-                    for (i = 0; i < NumberOfCellsInRow(fcell); ++i) {
-                        if (BottomLine(fcell + i)){
-                               os << "\\cline{"
-                                  << column_of_cell(fcell + i) + 1
-                                  << '-'
-                                  << right_column_of_cell(fcell + i) + 1
-                                  << "} ";
-                            hline1 += "\\cline{";
-                            hline1 += tostr(column_of_cell(fcell + i) + 1);
-                            hline1 += '-';
-                            hline1 += tostr(right_column_of_cell(fcell + i) + 1);
-                            hline1 += "} ";
-                            tmp = 1;
-                        }
-                    }
-                }
-                if (tmp){
-                       os << '\n';
-                    ++ret;
-                }
-                if (IsLongTabular() && (row == endfoot)) {
-                       os << "\\endfoot\n";
-                    ++ret;
-                    print_hline = false; // no double line below footer
-                }
-                if (IsLongTabular() && (row == endlastfoot)) {
-                       os << "\\endlastfoot\n";
-                    ++ret;
-                    print_hline = false; // no double line below footer
-                }
-                if (IsLongTabular() && row_info[row].newpage) {
-                       os << "\\newpage\n";
-                    ++ret;
-                    print_hline = false; // no line below a \\newpage-command
-                }
-                tmp = 0;
-                if ((nvcell < numberofcells) &&
-                   (cell < GetNumberOfCells() - 1) && !IsLastCell(cell)) {
-                    fcell = nvcell;
-                    for (i = 0; i < NumberOfCellsInRow(fcell); ++i) {
-                        if (TopLine(fcell + i))
-                            ++tmp;
-                    }
-                    if (tmp == NumberOfCellsInRow(fcell)) {
-                        if (print_hline)
-                               os << "\\hline ";
-                        hline2 = "\\hline ";
-                    } else {
-                        tmp = 0;
-                        for (i = 0; i < NumberOfCellsInRow(fcell); ++i) {
-                            if (TopLine(fcell + i)) {
-                                if (print_hline) {
-                                       os << "\\cline{"
-                                          << column_of_cell(fcell + i) + 1
-                                          << '-'
-                                          << right_column_of_cell(fcell + i) + 1
-                                          << "} ";
-                               }
-                                hline2 += "\\cline{";
-                                hline2 += tostr(column_of_cell(fcell+i)+1);
-                                hline2 += '-';
-                                hline2 += tostr(right_column_of_cell(fcell+i)+1);
-                                hline2 += "} ";
-                                tmp = 1;
-                            }
-                        }
-                    }
-                    if (tmp && print_hline){
-                           os << '\n';
-                        ++ret;
-                    }
-                }
-                // the order here is important as if one defines two
-                // or more things in one line only the first entry is
-                // displayed the other are set to an empty-row. This
-                // is important if I have a footer and want that the
-                // lastfooter is NOT displayed!!!
-                bool sflag2 = (row == endhead) || (row == endfirsthead) ||
-                    (row == endfoot) || (row == endlastfoot);
-                --row;
-                row += 2;
-                bool sflag1 = IsLongTabular() && (row != endhead) &&
-                    (row != endfirsthead) &&
-                    ((row == endfoot) || (row == endlastfoot));
-                --row;
-                if (IsLongTabular() && (row == endhead)) {
-                       os << "\\endhead\n";
-                    ++ret;
-                }
-                if (IsLongTabular() && (row == endfirsthead)) {
-                       os << "\\endfirsthead\n";
-                    ++ret;
-                }
-                if (sflag1) { // add the \hline for next foot row
-                    if (!hline1.empty()) {
-                           os << hline1 + '\n';
-                        ++ret;
-                    }
-                }
-                // add the \hline for the first row
-                if (pr_top_hline && sflag2) {
-                    if (!hline2.empty()) {
-                           os << hline2 + '\n';
-                        ++ret;
-                    }
-                }
-                if (nvcell < numberofcells && GetRotateCell(nvcell)) {
-                       os << "\\begin{sideways}\n";
-                    ++ret;
-                }
-            } else {
-               os << "&\n";
-                ++ret;
-                if (nvcell < numberofcells && GetRotateCell(nvcell)) {
-                       os << "\\begin{sideways}\n";
-                    ++ret;
-                }
-            }
-        }
-        if (nvcell < numberofcells && IsMultiColumn(nvcell)) {
-               os << "\\multicolumn{"
-                  << cells_in_multicolumn(nvcell)
-                  << "}{";
-            if (!cellinfo_of_cell(cell+1)->align_special.empty()) {
-                   os << cellinfo_of_cell(cell+1)->align_special
-                      << "}{";
-            } else {
-                if (LeftLine(nvcell))
-                       os << '|';
-                if (!GetPWidth(nvcell).empty()) {
-                       os << "p{"
-                          << GetPWidth(nvcell)
-                          << '}';
-                } else {
-                    switch (GetAlignment(nvcell)) {
-                   case LYX_ALIGN_LEFT: os << 'l'; break;
-                   case LYX_ALIGN_RIGHT: os << 'r'; break;
-                   default:  os << 'c'; break;
-                    }
-                }
-                if (RightLine(nvcell))
-                       os << '|';
-                //if (column_of_cell(cell+2)!= 0 && LeftLine(cell+2))
-                if (((nvcell + 1) < numberofcells) &&
-                    ((nvcell+1) < numberofcells) &&
-                    (column_of_cell(nvcell+1)!= 0) &&
-                    LeftLine(nvcell+1))
-                       os << '|';
-               
-               os << "}{";
-            }
-        }
-        if (nvcell < numberofcells && GetLinebreaks(nvcell)) {
-               os << "\\parbox[t]{"
-                  << GetPWidth(nvcell)
-                  << "}{\\smallskip{}";
-       }
-    }
-    return ret;
-}
-
-
-// cell <0 will tex the preamble
-// returns the number of printed newlines
-int LyXTabular::RoffEndOfCell(ostream & os, int cell)
-{
-    int ret = 0;
-
-    if (cell == GetNumberOfCells() - 1){
-        // the very end at the very beginning
-//        if (CellHasContRow(cell) >= 0) {
-//             os << "\nT}";
-//           ++ret;
-//        }
-        os << "\n";
-        ++ret;
-        if (row_info[row_of_cell(cell)].bottom_line) {
-               os << "_\n";
-            ++ret;
-        }
-        os << ".TE\n.pl 1c";
-    } else {  
-        if (cell < 0) {
-            int fcell = 0;
-            // preamble
-            os << "\n.pl 500c\n.TS\n";
-            for (int j = 0; j < rows_; ++j) {
-                for (int i = 0; i < columns_; ++i, ++fcell) {
-                    if (column_info[i].left_line)
-                           os << " | ";
-                    if (cell_info[j][i].multicolumn == CELL_PART_OF_MULTICOLUMN)
-                           os << "s";
-                    else {
-                        switch (column_info[i].alignment) {
-                          case LYX_ALIGN_LEFT:
-                                 os << "l";
-                              break;
-                          case LYX_ALIGN_RIGHT:
-                                 os << "r";
-                              break;
-                          default:
-                                 os << "c";
-                              break;
-                        }
-                    }
-                    if (!column_info[i].p_width.empty())
-                           os << "w(" << column_info[i].p_width << ")";
-                    if (column_info[i].right_line)
-                           os << " | ";
-                }
-                if ((j + 1) < rows_) {
-                       os << "\n";
-                    ++ret;
-                }
-            }
-            os << ".\n";
-            ++ret;
-            if (row_info[0].top_line) {
-                   os << "_\n";
-                ++ret;
-            }
-//            if (CellHasContRow(0) >= 0) {
-//                 os << "T{\n";
-//                ++ret;
-//            }
-        } else {
-            // usual cells
-//            if (CellHasContRow(cell) >= 0) {
-//                 os << "\nT}";
-//                ++ret;
-//            }
-            if (right_column_of_cell(cell) == columns_ -1){
-                   os << "\n";
-                ++ret;
-                int row = row_of_cell(cell);
-                if (row_info[row++].bottom_line) {
-                       os << "_\n";
-                    ++ret;
-                }
-                if ((row < rows_) && row_info[row].top_line) {
-                       os << "_\n";
-                    ++ret;
-                }
-            } else
-                   os << "\t";
-//            if ((cell < GetNumberOfCells() - 1) &&
-//                (CellHasContRow(cell+1) >= 0)) {
-//                 os << "T{\n";
-//                ++ret;
-//            }
-        }
-    }
-    return ret;
-}
-
-#endif
-
-
 char const * LyXTabular::GetDocBookAlign(int cell, bool isColumn) const
 {
        int i = isColumn ? cell : column_of_cell(cell);
@@ -1996,8 +1572,6 @@ void LyXTabular::SetMultiColumn(int cell, int number)
     }
     set_row_column_number_info();
     SetWidthOfCell(cell, new_width);
-    if (GetPWidth(cell).empty())
-       GetCellInset(cell)->SetAutoBreakRows(false);
 }
 
 
@@ -2037,8 +1611,6 @@ int LyXTabular::UnsetMultiColumn(int cell)
         }
     }
     set_row_column_number_info();
-    if (GetPWidth(cell).empty())
-       GetCellInset(cell)->SetAutoBreakRows(false);
     return result;
 }
 
@@ -2507,3 +2079,13 @@ InsetText * LyXTabular::GetCellInset(int cell) const
 {
     return cell_info[row_of_cell(cell)][column_of_cell(cell)].inset;
 }
+
+void LyXTabular::Validate(LaTeXFeatures & features) const
+{
+    if (IsLongTabular())
+        features.longtable = true;
+    if (NeedRotating())
+       features.rotating = true;
+    for(int cell = 0; cell < numberofcells; ++cell)
+       GetCellInset(cell)->Validate(features);
+}
index 01cbc001e12a87857760c4ca359d73ea95b611e4..f34e1ae537a74e075bfa9ad5041dfedf24c1480d 100644 (file)
@@ -22,6 +22,7 @@
 
 class InsetTabular;
 class InsetText;
+class LaTeXFeatures;
 
 /* The features the text class offers for tables */ 
 
@@ -257,6 +258,8 @@ public:
     int columns() const { return columns_;}
     ///
     InsetTabular * owner() const { return owner_; }
+    ///
+    void Validate(LaTeXFeatures &) const;
 
 private: //////////////////////////////////////////////////////////////////
     ///