]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insettabular.C
ws changes only
[lyx.git] / src / insets / insettabular.C
index 3847968f66eae8c915e7b5b971a3a19612503404..232ada36a41988e15a875d0d91b44ac17de5a06c 100644 (file)
@@ -5,59 +5,52 @@
  *
  * \author Jürgen Vigna
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
 #include <config.h>
 
 #include "insettabular.h"
-#include "insettext.h"
 
 #include "buffer.h"
+#include "bufferparams.h"
 #include "BufferView.h"
-#include "lfuns.h"
 #include "debug.h"
-#include "dimension.h"
 #include "funcrequest.h"
+#include "FuncStatus.h"
 #include "gettext.h"
 #include "language.h"
-#include "LaTeXFeatures.h"
-#include "Lsstream.h"
+#include "LColor.h"
 #include "lyx_cb.h"
-#include "lyxfunc.h"
-#include "lyxlength.h"
 #include "lyxlex.h"
-#include "lyxtext.h"
+#include "metricsinfo.h"
+#include "paragraph.h"
+#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "undo_funcs.h"
 #include "WordLangTuple.h"
-#include "metricsinfo.h"
 
 #include "frontends/Alert.h"
-#include "frontends/Dialogs.h"
 #include "frontends/font_metrics.h"
 #include "frontends/LyXView.h"
 #include "frontends/Painter.h"
 
-#include "support/LAssert.h"
-#include "support/lstrings.h"
-
-#include <fstream>
-#include <algorithm>
-#include <cstdlib>
+#include "support/std_sstream.h"
+#include <iostream>
 
+using lyx::graphics::PreviewLoader;
 
-using namespace lyx::support;
-using namespace lyx::graphics;
+using lyx::support::ltrim;
+using lyx::support::strToInt;
 
-using std::vector;
-using std::ostream;
-using std::ifstream;
-using std::max;
 using std::endl;
-using std::swap;
 using std::max;
+using std::swap;
+using std::string;
 using std::auto_ptr;
+using std::istringstream;
+using std::ostream;
+using std::ostringstream;
 
 
 namespace {
@@ -91,7 +84,7 @@ TabularFeature tabularFeature[] =
        { LyXTabular::ALIGN_BLOCK, "align-block" },
        { LyXTabular::VALIGN_TOP, "valign-top" },
        { LyXTabular::VALIGN_BOTTOM, "valign-bottom" },
-       { LyXTabular::VALIGN_CENTER, "valign-center" },
+       { LyXTabular::VALIGN_MIDDLE, "valign-middle" },
        { LyXTabular::M_TOGGLE_LINE_TOP, "m-toggle-line-top" },
        { LyXTabular::M_TOGGLE_LINE_BOTTOM, "m-toggle-line-bottom" },
        { LyXTabular::M_TOGGLE_LINE_LEFT, "m-toggle-line-left" },
@@ -101,7 +94,7 @@ TabularFeature tabularFeature[] =
        { LyXTabular::M_ALIGN_CENTER, "m-align-center" },
        { LyXTabular::M_VALIGN_TOP, "m-valign-top" },
        { LyXTabular::M_VALIGN_BOTTOM, "m-valign-bottom" },
-       { LyXTabular::M_VALIGN_CENTER, "m-valign-center" },
+       { LyXTabular::M_VALIGN_MIDDLE, "m-valign-middle" },
        { LyXTabular::MULTICOLUMN, "multicolumn" },
        { LyXTabular::SET_ALL_LINES, "set-all-lines" },
        { LyXTabular::UNSET_ALL_LINES, "unset-all-lines" },
@@ -154,9 +147,10 @@ bool InsetTabular::hasPasteBuffer() const
 
 
 InsetTabular::InsetTabular(Buffer const & buf, int rows, int columns)
-       : tabular(buf.params, this, max(rows, 1), max(columns, 1)),
+       : tabular(buf.params(), max(rows, 1), max(columns, 1)),
          buffer_(&buf), cursorx_(0), cursory_(0)
 {
+       tabular.setOwner(this);
        // for now make it always display as display() inset
        // just for test!!!
        the_locking_inset = 0;
@@ -172,10 +166,10 @@ InsetTabular::InsetTabular(Buffer const & buf, int rows, int columns)
 
 
 InsetTabular::InsetTabular(InsetTabular const & tab)
-       : UpdatableInset(tab),
-               tabular(tab.buffer_->params, this, tab.tabular),
+       : UpdatableInset(tab), tabular(tab.tabular),
                buffer_(tab.buffer_), cursorx_(0), cursory_(0)
 {
+       tabular.setOwner(this);
        the_locking_inset = 0;
        old_locking_inset = 0;
        locked = false;
@@ -200,15 +194,15 @@ auto_ptr<InsetBase> InsetTabular::clone() const
 }
 
 
-Buffer const * InsetTabular::buffer() const
+Buffer const & InsetTabular::buffer() const
 {
-       return buffer_;
+       return *buffer_;
 }
 
 
 BufferView * InsetTabular::view() const
 {
-       Assert(false);
+       BOOST_ASSERT(false);
        return 0;
 }
 
@@ -219,14 +213,14 @@ void InsetTabular::buffer(Buffer * b)
 }
 
 
-void InsetTabular::write(Buffer const * buf, ostream & os) const
+void InsetTabular::write(Buffer const & buf, ostream & os) const
 {
        os << "Tabular" << endl;
        tabular.write(buf, os);
 }
 
 
-void InsetTabular::read(Buffer const * buf, LyXLex & lex)
+void InsetTabular::read(Buffer const & buf, LyXLex & lex)
 {
        bool const old_format = (lex.getString() == "\\LyXTable");
 
@@ -254,7 +248,7 @@ void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
        //      mi.base.textwidth << "\n";
        if (!mi.base.bv) {
                lyxerr << "InsetTabular::metrics: need bv" << endl;
-               Assert(0);
+               BOOST_ASSERT(false);
        }
 
        calculate_dimensions_of_cells(mi);
@@ -370,7 +364,7 @@ void InsetTabular::drawCellLines(Painter & pain, int x, int y,
 void InsetTabular::drawCellSelection(Painter & pain, int x, int y,
                                     int row, int column, int cell) const
 {
-       Assert(hasSelection());
+       BOOST_ASSERT(hasSelection());
        int cs = tabular.column_of_cell(sel_cell_start);
        int ce = tabular.column_of_cell(sel_cell_end);
        if (cs > ce) {
@@ -421,7 +415,7 @@ void InsetTabular::insetUnlock(BufferView * bv)
 
 void InsetTabular::updateLocal(BufferView * bv) const
 {
-       bv->updateInset();
+       bv->updateInset(this);
        if (locked)
                resetPos(bv);
 }
@@ -631,12 +625,12 @@ void InsetTabular::lfunMouseMotion(FuncRequest const & cmd)
 }
 
 
-InsetOld::RESULT InsetTabular::localDispatch(FuncRequest const & cmd)
+dispatch_result InsetTabular::localDispatch(FuncRequest const & cmd)
 {
        // We need to save the value of the_locking_inset as the call to
        // the_locking_inset->localDispatch might unlock it.
        old_locking_inset = the_locking_inset;
-       RESULT result = UpdatableInset::localDispatch(cmd);
+       dispatch_result result = UpdatableInset::localDispatch(cmd);
        BufferView * bv = cmd.view();
 
        if (cmd.action == LFUN_INSET_EDIT) {
@@ -855,14 +849,14 @@ InsetOld::RESULT InsetTabular::localDispatch(FuncRequest const & cmd)
                        updateLocal(bv);
                break;
        case LFUN_NEXT: {
-               if (hs) 
+               if (hs)
                        clearSelection();
                int column = actcol;
                unlockInsetInInset(bv, the_locking_inset);
-               if (bv->text->top_y() + bv->painter().paperHeight() <
+               if (bv->top_y() + bv->painter().paperHeight() <
                    top_baseline + tabular.getHeightOfTabular())
                        {
-                               bv->scrollDocView(bv->text->top_y() + bv->painter().paperHeight());
+                               bv->scrollDocView(bv->top_y() + bv->painter().paperHeight());
                                actcell = tabular.getCellBelow(first_visible_cell) + column;
                        } else {
                                actcell = tabular.getFirstCellInRow(tabular.rows() - 1) + column;
@@ -877,7 +871,7 @@ InsetOld::RESULT InsetTabular::localDispatch(FuncRequest const & cmd)
                int column = actcol;
                unlockInsetInInset(bv, the_locking_inset);
                if (top_baseline < 0) {
-                       bv->scrollDocView(bv->text->top_y() - bv->painter().paperHeight());
+                       bv->scrollDocView(bv->top_y() - bv->painter().paperHeight());
                        if (top_baseline > 0)
                                actcell = column;
                        else
@@ -945,7 +939,7 @@ InsetOld::RESULT InsetTabular::localDispatch(FuncRequest const & cmd)
                // no break here!
        case LFUN_DELETE:
                recordUndo(bv, Undo::DELETE);
-               cutSelection(bv->buffer()->params);
+               cutSelection(bv->buffer()->params());
                updateLocal(bv);
                break;
        case LFUN_COPY:
@@ -984,7 +978,7 @@ InsetOld::RESULT InsetTabular::localDispatch(FuncRequest const & cmd)
                        }
                        maxCols = max(cols, maxCols);
                        delete paste_tabular;
-                       paste_tabular = new LyXTabular(bv->buffer()->params,
+                       paste_tabular = new LyXTabular(bv->buffer()->params(),
                                                       this, rows, maxCols);
                        string::size_type op = 0;
                        int cell = 0;
@@ -1084,29 +1078,29 @@ InsetOld::RESULT InsetTabular::localDispatch(FuncRequest const & cmd)
 }
 
 
-int InsetTabular::latex(Buffer const * buf, ostream & os,
+int InsetTabular::latex(Buffer const & buf, ostream & os,
                        LatexRunParams const & runparams) const
 {
        return tabular.latex(buf, os, runparams);
 }
 
 
-int InsetTabular::ascii(Buffer const * buf, ostream & os, int ll) const
+int InsetTabular::ascii(Buffer const & buf, ostream & os, int ll) const
 {
        if (ll > 0)
-               return tabular.ascii(buf, os, (int)parOwner()->params().depth(),
+               return tabular.ascii(buf, os, ownerPar(buf, this).params().depth(),
                                      false, 0);
        return tabular.ascii(buf, os, 0, false, 0);
 }
 
 
-int InsetTabular::linuxdoc(Buffer const * buf, ostream & os) const
+int InsetTabular::linuxdoc(Buffer const & buf, ostream & os) const
 {
        return tabular.linuxdoc(buf,os);
 }
 
 
-int InsetTabular::docbook(Buffer const * buf, ostream & os, bool mixcont) const
+int InsetTabular::docbook(Buffer const & buf, ostream & os, bool mixcont) const
 {
        int ret = 0;
        InsetOld * master;
@@ -1306,7 +1300,7 @@ void InsetTabular::resetPos(BufferView * bv) const
        }
        // we need this only from here on!!!
        ++in_reset_pos;
-       static int const offset = ADD_TO_TABULAR_WIDTH + 2;
+       int const offset = ADD_TO_TABULAR_WIDTH + 2;
        int new_x = getCellXPos(actcell);
        int old_x = cursorx_;
        new_x += offset;
@@ -1359,7 +1353,7 @@ void InsetTabular::resetPos(BufferView * bv) const
 }
 
 
-InsetOld::RESULT InsetTabular::moveRight(BufferView * bv, bool lock)
+dispatch_result InsetTabular::moveRight(BufferView * bv, bool lock)
 {
        if (lock && !old_locking_inset) {
                if (activateCellInset(bv))
@@ -1377,7 +1371,7 @@ InsetOld::RESULT InsetTabular::moveRight(BufferView * bv, bool lock)
 }
 
 
-InsetOld::RESULT InsetTabular::moveLeft(BufferView * bv, bool lock)
+dispatch_result InsetTabular::moveLeft(BufferView * bv, bool lock)
 {
        bool moved = isRightToLeft(bv) ? moveNextCell(bv) : movePrevCell(bv);
        if (!moved)
@@ -1391,7 +1385,7 @@ InsetOld::RESULT InsetTabular::moveLeft(BufferView * bv, bool lock)
 }
 
 
-InsetOld::RESULT InsetTabular::moveUp(BufferView * bv, bool lock)
+dispatch_result InsetTabular::moveUp(BufferView * bv, bool lock)
 {
        int const ocell = actcell;
        actcell = tabular.getCellAbove(actcell);
@@ -1412,7 +1406,7 @@ InsetOld::RESULT InsetTabular::moveUp(BufferView * bv, bool lock)
 }
 
 
-InsetOld::RESULT InsetTabular::moveDown(BufferView * bv, bool lock)
+dispatch_result InsetTabular::moveDown(BufferView * bv, bool lock)
 {
        int const ocell = actcell;
        actcell = tabular.getCellBelow(actcell);
@@ -1454,7 +1448,7 @@ bool InsetTabular::moveNextCell(BufferView * bv, bool lock)
        }
        if (lock) {
                bool rtl = tabular.getCellInset(actcell).paragraphs.begin()->
-                       isRightToLeftPar(bv->buffer()->params);
+                       isRightToLeftPar(bv->buffer()->params());
                activateCellInset(bv, 0, 0, mouse_button::none, !rtl);
        }
        resetPos(bv);
@@ -1483,7 +1477,7 @@ bool InsetTabular::movePrevCell(BufferView * bv, bool lock)
        }
        if (lock) {
                bool rtl = tabular.getCellInset(actcell).paragraphs.begin()->
-                       isRightToLeftPar(bv->buffer()->params);
+                       isRightToLeftPar(bv->buffer()->params());
                activateCellInset(bv, 0, 0, mouse_button::none, !rtl);
        }
        resetPos(bv);
@@ -1613,9 +1607,9 @@ void InsetTabular::tabularFeatures(BufferView * bv,
                setVAlign = LyXTabular::LYX_VALIGN_BOTTOM;
                break;
 
-       case LyXTabular::M_VALIGN_CENTER:
-       case LyXTabular::VALIGN_CENTER:
-               setVAlign = LyXTabular::LYX_VALIGN_CENTER;
+       case LyXTabular::M_VALIGN_MIDDLE:
+       case LyXTabular::VALIGN_MIDDLE:
+               setVAlign = LyXTabular::LYX_VALIGN_MIDDLE;
                break;
 
        default:
@@ -1639,12 +1633,11 @@ void InsetTabular::tabularFeatures(BufferView * bv,
 
        case LyXTabular::SET_PWIDTH:
        {
-               LyXLength const vallen(value);
-               LyXLength const & tmplen = tabular.getColumnPWidth(actcell);
+               LyXLength const len(value);
+               LyXLength const & oldlen = tabular.getColumnPWidth(actcell);
 
-               bool const update = (tmplen != vallen);
-               tabular.setColumnPWidth(actcell, vallen);
-               if (update) {
+               tabular.setColumnPWidth(actcell, len);
+               if (oldlen != len) {
                        // We need this otherwise we won't resize
                        // the insettext of the active cell (if any)
                        // until later (see InsetText::do_resize)
@@ -1652,10 +1645,10 @@ void InsetTabular::tabularFeatures(BufferView * bv,
                        bv->update();
                }
 
-               if (vallen.zero()
+               if (len.zero()
                    && tabular.getAlignment(actcell, true) == LYX_ALIGN_BLOCK)
                        tabularFeatures(bv, LyXTabular::ALIGN_CENTER, string());
-               else if (!vallen.zero()
+               else if (!len.zero()
                         && tabular.getAlignment(actcell, true) != LYX_ALIGN_BLOCK)
                        tabularFeatures(bv, LyXTabular::ALIGN_BLOCK, string());
                break;
@@ -1663,12 +1656,10 @@ void InsetTabular::tabularFeatures(BufferView * bv,
 
        case LyXTabular::SET_MPWIDTH:
        {
-               LyXLength const vallen(value);
-               LyXLength const & tmplen = tabular.getPWidth(actcell);
-
-               bool const update = (tmplen != vallen);
-               tabular.setMColumnPWidth(actcell, vallen);
-               if (update) {
+               LyXLength const len(value);
+               LyXLength const & oldlen = tabular.getPWidth(actcell);
+               tabular.setMColumnPWidth(actcell, len);
+               if (oldlen != len) {
                        // We need this otherwise we won't resize
                        // the insettext of the active cell (if any)
                        // until later (see InsetText::do_resize)
@@ -1685,13 +1676,15 @@ void InsetTabular::tabularFeatures(BufferView * bv,
        case LyXTabular::APPEND_ROW:
                // append the row into the tabular
                unlockInsetInInset(bv, the_locking_inset);
-               tabular.appendRow(bv->buffer()->params, actcell);
+               tabular.appendRow(bv->buffer()->params(), actcell);
+               tabular.setOwner(this);
                updateLocal(bv);
                break;
        case LyXTabular::APPEND_COLUMN:
                // append the column into the tabular
                unlockInsetInInset(bv, the_locking_inset);
-               tabular.appendColumn(bv->buffer()->params, actcell);
+               tabular.appendColumn(bv->buffer()->params(), actcell);
+               tabular.setOwner(this);
                actcell = tabular.getCellNumber(row, column);
                updateLocal(bv);
                break;
@@ -1795,11 +1788,11 @@ void InsetTabular::tabularFeatures(BufferView * bv,
 
        case LyXTabular::M_VALIGN_TOP:
        case LyXTabular::M_VALIGN_BOTTOM:
-       case LyXTabular::M_VALIGN_CENTER:
+       case LyXTabular::M_VALIGN_MIDDLE:
                flag = false;
        case LyXTabular::VALIGN_TOP:
        case LyXTabular::VALIGN_BOTTOM:
-       case LyXTabular::VALIGN_CENTER:
+       case LyXTabular::VALIGN_MIDDLE:
                for (int i = sel_row_start; i <= sel_row_end; ++i)
                        for (int j = sel_col_start; j <= sel_col_end; ++j)
                                tabular.setVAlignment(
@@ -1979,7 +1972,7 @@ bool InsetTabular::insetHit(BufferView *, int x, int) const
 }
 
 
-void InsetTabular::deleteLyXText(BufferView * bv, bool recursive) const
+void InsetTabular::deleteLyXText(BufferView * /*bv*/, bool /*recursive*/) const
 {
        //resizeLyXText(bv, recursive);
 }
@@ -2130,10 +2123,10 @@ FuncStatus InsetTabular::getStatus(string const & what) const
                status.setOnOff(tabular.getVAlignment(actcell, flag) == LyXTabular::LYX_VALIGN_BOTTOM);
                break;
 
-       case LyXTabular::M_VALIGN_CENTER:
+       case LyXTabular::M_VALIGN_MIDDLE:
                flag = false;
-       case LyXTabular::VALIGN_CENTER:
-               status.setOnOff(tabular.getVAlignment(actcell, flag) == LyXTabular::LYX_VALIGN_CENTER);
+       case LyXTabular::VALIGN_MIDDLE:
+               status.setOnOff(tabular.getVAlignment(actcell, flag) == LyXTabular::LYX_VALIGN_MIDDLE);
                break;
 
        case LyXTabular::SET_LONGTABULAR:
@@ -2193,9 +2186,10 @@ FuncStatus InsetTabular::getStatus(string const & what) const
 }
 
 
-void InsetTabular::getLabelList(std::vector<string> & list) const
+void InsetTabular::getLabelList(Buffer const & buffer,
+                               std::vector<string> & list) const
 {
-       tabular.getLabelList(list);
+       tabular.getLabelList(buffer, list);
 }
 
 
@@ -2219,7 +2213,8 @@ bool InsetTabular::copySelection(BufferView * bv)
                swap(sel_row_start, sel_row_end);
 
        delete paste_tabular;
-       paste_tabular = new LyXTabular(bv->buffer()->params, this, tabular);
+       paste_tabular = new LyXTabular(tabular);
+       paste_tabular->setOwner(this);
 
        for (int i = 0; i < sel_row_start; ++i)
                paste_tabular->deleteRow(0);
@@ -2244,9 +2239,9 @@ bool InsetTabular::copySelection(BufferView * bv)
                                    true, true);
 
        ostringstream os;
-       paste_tabular->ascii(bv->buffer(), os,
-                            (int)parOwner()->params().depth(), true, '\t');
-       bv->stuffClipboard(STRCONV(os.str()));
+       paste_tabular->ascii(*bv->buffer(), os,
+                            ownerPar(*bv->buffer(), this).params().depth(), true, '\t');
+       bv->stuffClipboard(os.str());
        return true;
 }
 
@@ -2309,7 +2304,8 @@ bool InsetTabular::cutSelection(BufferParams const & bp)
 
        for (int i = sel_row_start; i <= sel_row_end; ++i)
                for (int j = sel_col_start; j <= sel_col_end; ++j)
-                       tabular.getCellInset(tabular.getCellNumber(i, j)).clear(bp.tracking_changes);
+                       tabular.getCellInset(tabular.getCellNumber(i, j))
+                               .clear(bp.tracking_changes);
        return true;
 }
 
@@ -2409,7 +2405,7 @@ InsetTabular::selectNextWordToSpellcheck(BufferView * bv, float & value) const
 WordLangTuple InsetTabular::selectNextWordInt(BufferView * bv, float & value) const
 {
        // when entering this function the inset should be ALWAYS locked!
-       Assert(the_locking_inset);
+       BOOST_ASSERT(the_locking_inset);
 
        WordLangTuple word(the_locking_inset->selectNextWordToSpellcheck(bv, value));
        if (!word.word().empty())
@@ -2537,18 +2533,14 @@ bool InsetTabular::insetAllowed(InsetOld::Code code) const
 
 bool InsetTabular::forceDefaultParagraphs(InsetOld const * in) const
 {
-       const int cell = tabular.getCellFromInset(in, actcell);
+       const int cell = tabular.getCellFromInset(in);
 
        if (cell != -1)
                return tabular.getPWidth(cell).zero();
 
        // well we didn't obviously find it so maybe our owner knows more
-       if (owner())
-               return owner()->forceDefaultParagraphs(in);
-
-       lyxerr << "If we're here there is really something strange going on!"
-              << endl;
-       return false;
+       BOOST_ASSERT(owner());
+       return owner()->forceDefaultParagraphs(in);
 }
 
 
@@ -2585,8 +2577,9 @@ bool InsetTabular::insertAsciiString(BufferView * bv, string const & buf,
        int row = 0;
        if (usePaste) {
                delete paste_tabular;
-               paste_tabular = new LyXTabular(bv->buffer()->params,
-                                              this, rows, maxCols);
+               paste_tabular = new LyXTabular(bv->buffer()->params(),
+                                              rows, maxCols);
+               paste_tabular->setOwner(this);
                loctab = paste_tabular;
                cols = 0;
        } else {
@@ -2674,7 +2667,7 @@ string const InsetTabularMailer::inset2string(Buffer const &) const
 
 int InsetTabularMailer::string2params(string const & in, InsetTabular & inset)
 {
-       istringstream data(STRCONV(in));
+       istringstream data(in);
        LyXLex lex(0,0);
        lex.setStream(data);
 
@@ -2711,9 +2704,8 @@ int InsetTabularMailer::string2params(string const & in, InsetTabular & inset)
        if (!lex.isOK())
                return -1;
 
-       Buffer const * const buffer = inset.buffer();
-       if (buffer)
-               inset.read(buffer, lex);
+       Buffer const & buffer = inset.buffer();
+       inset.read(buffer, lex);
 
        // We can't set the active cell, but we can tell the frontend
        // what it is.
@@ -2723,13 +2715,11 @@ int InsetTabularMailer::string2params(string const & in, InsetTabular & inset)
 
 string const InsetTabularMailer::params2string(InsetTabular const & inset)
 {
-       Buffer const * const buffer = inset.buffer();
-       if (!buffer)
-               return string();
+       Buffer const & buffer = inset.buffer();
 
        ostringstream data;
        data << name_ << " \\active_cell " << inset.getActCell() << '\n';
        inset.write(buffer, data);
        data << "\\end_inset\n";
-       return STRCONV(data.str());
+       return data.str();
 }