]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetTabular.cpp
Make listings dialog translatable (mostly strings from InsetListingsParams), fix...
[lyx.git] / src / insets / InsetTabular.cpp
index adb374719be151c1d0e6c4d4a86fd23fcfa8b76a..f9c8d3fe520c7c3b1d58a2dc8bd52940bf3da089 100644 (file)
@@ -34,7 +34,7 @@
 #include "Language.h"
 #include "LaTeXFeatures.h"
 #include "Color.h"
-#include "lyx_cb.h"
+#include "callback.h"
 #include "Lexer.h"
 #include "MetricsInfo.h"
 #include "OutputParams.h"
@@ -46,7 +46,7 @@
 #include "support/convert.h"
 #include "support/lstrings.h"
 
-#include "frontends/Alert.h"
+#include "frontends/alert.h"
 #include "frontends/Clipboard.h"
 #include "frontends/Painter.h"
 #include "frontends/Selection.h"
@@ -151,8 +151,10 @@ TabularFeature tabularFeature[] =
        { Tabular::SET_MPWIDTH, "set-mpwidth" },
        { Tabular::SET_ROTATE_TABULAR, "set-rotate-tabular" },
        { Tabular::UNSET_ROTATE_TABULAR, "unset-rotate-tabular" },
+       { Tabular::TOGGLE_ROTATE_TABULAR, "toggle-rotate-tabular" },
        { Tabular::SET_ROTATE_CELL, "set-rotate-cell" },
        { Tabular::UNSET_ROTATE_CELL, "unset-rotate-cell" },
+       { Tabular::TOGGLE_ROTATE_CELL, "toggle-rotate-cell" },
        { Tabular::SET_USEBOX, "set-usebox" },
        { Tabular::SET_LTHEAD, "set-lthead" },
        { Tabular::UNSET_LTHEAD, "unset-lthead" },
@@ -1097,7 +1099,7 @@ void toggleFixedWidth(Cursor & cur, InsetText * inset, bool fixedWidth)
        cur.push(*inset);
        // undo information has already been recorded
        inset->getText(0)->setLayout(*cur.bv().buffer(), 0, cur.lastpit() + 1,
-                       bp.getLyXTextClass().defaultLayoutName());
+                       bp.getTextClass().defaultLayoutName());
        cur.pop();
 }
 
@@ -2803,7 +2805,7 @@ void Tabular::setCellInset(row_type row, col_type column,
 
 
 Tabular::idx_type
-Tabular::getCellFromInset(InsetBase const * inset) const
+Tabular::getCellFromInset(Inset const * inset) const
 {
        // is this inset part of the tabular?
        if (!inset) {
@@ -2874,7 +2876,7 @@ InsetTabular::InsetTabular(Buffer const & buf, row_type rows,
 
 
 InsetTabular::InsetTabular(InsetTabular const & tab)
-       : InsetOld(tab), tabular(tab.tabular),
+       : Inset(tab), tabular(tab.tabular),
                buffer_(tab.buffer_), scx_(0), is_deleted_(false)
 {}
 
@@ -2886,9 +2888,9 @@ InsetTabular::~InsetTabular()
 }
 
 
-auto_ptr<InsetBase> InsetTabular::doClone() const
+auto_ptr<Inset> InsetTabular::doClone() const
 {
-       return auto_ptr<InsetBase>(new InsetTabular(*this));
+       return auto_ptr<Inset>(new InsetTabular(*this));
 }
 
 
@@ -3103,8 +3105,8 @@ void InsetTabular::drawCellLines(Painter & pain, int x, int y,
        Color::color onoffcol = Color::tabularonoffline;
 
        if (erased) {
-               col = Color::strikeout;
-               onoffcol = Color::strikeout;
+               col = Color::deletedtext;
+               onoffcol = Color::deletedtext;
        }
 
        if (!tabular.topAlreadyDrawn(cell)) {
@@ -3194,7 +3196,7 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
 
                if (cmd.button() == mouse_button::button2) {
                        if (cap::selection()) {
-                               // See comment in LyXText::dispatch why we
+                               // See comment in Text::dispatch why we
                                // do this
                                // FIXME This does not use paste_tabular,
                                // another reason why paste_tabular should go.
@@ -3284,7 +3286,7 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
                cell(cur.idx())->dispatch(cur, cmd);
                cur.dispatched(); // override the cell's decision
                if (sl == cur.top())
-                       // if our LyXText didn't do anything to the cursor
+                       // if our Text didn't do anything to the cursor
                        // then we try to put the cursor into the cell below
                        // setting also the right targetX.
                        if (tabular.row_of_cell(cur.idx()) != tabular.rows() - 1) {
@@ -3314,13 +3316,13 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
                cell(cur.idx())->dispatch(cur, cmd);
                cur.dispatched(); // override the cell's decision
                if (sl == cur.top())
-                       // if our LyXText didn't do anything to the cursor
+                       // if our Text didn't do anything to the cursor
                        // then we try to put the cursor into the cell above
                        // setting also the right targetX.
                        if (tabular.row_of_cell(cur.idx()) != 0) {
                                cur.idx() = tabular.getCellAbove(cur.idx());
                                cur.pit() = cur.lastpit();
-                               LyXText const * text = cell(cur.idx())->getText(0);
+                               Text const * text = cell(cur.idx())->getText(0);
                                TextMetrics const & tm = cur.bv().textMetrics(text);
                                ParagraphMetrics const & pm =
                                        tm.parMetrics(cur.lastpit());
@@ -3542,11 +3544,12 @@ bool InsetTabular::getStatus(Cursor & cur, FuncRequest const & cmd,
 
                row_type sel_row_start = 0;
                row_type sel_row_end = 0;
-               col_type dummy;
+               col_type sel_col_start = 0;
+               col_type sel_col_end = 0;
                Tabular::ltType dummyltt;
                bool flag = true;
 
-               getSelection(cur, sel_row_start, sel_row_end, dummy, dummy);
+               getSelection(cur, sel_row_start, sel_row_end, sel_col_start, sel_col_end);
 
                switch (action) {
                case Tabular::SET_PWIDTH:
@@ -3647,6 +3650,7 @@ bool InsetTabular::getStatus(Cursor & cur, FuncRequest const & cmd,
                        status.setOnOff(!tabular.isLongTabular());
                        break;
 
+               case Tabular::TOGGLE_ROTATE_TABULAR:
                case Tabular::SET_ROTATE_TABULAR:
                        status.setOnOff(tabular.getRotateTabular());
                        break;
@@ -3655,12 +3659,15 @@ bool InsetTabular::getStatus(Cursor & cur, FuncRequest const & cmd,
                        status.setOnOff(!tabular.getRotateTabular());
                        break;
 
+               case Tabular::TOGGLE_ROTATE_CELL:
                case Tabular::SET_ROTATE_CELL:
-                       status.setOnOff(tabular.getRotateCell(cur.idx()));
+                       status.setOnOff(!oneCellHasRotationState(false, 
+                               sel_row_start, sel_row_end, sel_col_start, sel_col_end));
                        break;
 
                case Tabular::UNSET_ROTATE_CELL:
-                       status.setOnOff(!tabular.getRotateCell(cur.idx()));
+                       status.setOnOff(!oneCellHasRotationState(true, 
+                               sel_row_start, sel_row_end, sel_col_start, sel_col_end));
                        break;
 
                case Tabular::SET_USEBOX:
@@ -3804,7 +3811,7 @@ int InsetTabular::docbook(Buffer const & buf, odocstream & os,
                           OutputParams const & runparams) const
 {
        int ret = 0;
-       InsetBase * master = 0;
+       Inset * master = 0;
 
 #ifdef WITH_WARNINGS
 #warning Why not pass a proper DocIterator here?
@@ -3813,7 +3820,7 @@ int InsetTabular::docbook(Buffer const & buf, odocstream & os,
        // if the table is inside a float it doesn't need the informaltable
        // wrapper. Search for it.
        for (master = owner(); master; master = master->owner())
-               if (master->lyxCode() == InsetBase::FLOAT_CODE)
+               if (master->lyxCode() == Inset::FLOAT_CODE)
                        break;
 #endif
 
@@ -3883,7 +3890,7 @@ int InsetTabular::dist(BufferView & bv, idx_type const cell, int x, int y) const
 {
        int xx = 0;
        int yy = 0;
-       InsetBase const & inset = *tabular.getCellInset(cell);
+       Inset const & inset = *tabular.getCellInset(cell);
        Point o = bv.coordCache().getInsets().xy(&inset);
        int const xbeg = o.x_ - tabular.getBeginningOfTextInCell(cell);
        int const xend = xbeg + tabular.getWidthOfColumn(cell);
@@ -3910,7 +3917,7 @@ int InsetTabular::dist(BufferView & bv, idx_type const cell, int x, int y) const
 }
 
 
-InsetBase * InsetTabular::editXY(Cursor & cur, int x, int y)
+Inset * InsetTabular::editXY(Cursor & cur, int x, int y)
 {
        //lyxerr << "InsetTabular::editXY: " << this << endl;
        cur.selection() = false;
@@ -4079,6 +4086,20 @@ static void checkLongtableSpecial(Tabular::ltType & ltt,
        }
 }
 
+bool InsetTabular::oneCellHasRotationState(bool rotated,
+               row_type row_start, row_type row_end, 
+               col_type col_start, col_type col_end) const {
+
+       for (row_type i = row_start; i <= row_end; ++i) {
+               for (col_type j = col_start; j <= col_end; ++j) {
+                       if (tabular.getRotateCell(tabular.getCellNumber(i, j)) 
+                               == rotated) {
+                               return true;
+                       }
+               }
+       }
+       return false;
+}
 
 void InsetTabular::tabularFeatures(Cursor & cur,
        Tabular::Feature feature, string const & value)
@@ -4339,6 +4360,10 @@ void InsetTabular::tabularFeatures(Cursor & cur,
                tabular.setRotateTabular(false);
                break;
 
+       case Tabular::TOGGLE_ROTATE_TABULAR:
+               tabular.setRotateTabular(!tabular.getRotateTabular());
+               break;
+
        case Tabular::SET_ROTATE_CELL:
                for (row_type i = sel_row_start; i <= sel_row_end; ++i)
                        for (col_type j = sel_col_start; j <= sel_col_end; ++j)
@@ -4353,6 +4378,18 @@ void InsetTabular::tabularFeatures(Cursor & cur,
                                        tabular.getCellNumber(i, j), false);
                break;
 
+       case Tabular::TOGGLE_ROTATE_CELL:
+               {
+               bool oneNotRotated = oneCellHasRotationState(false,
+                       sel_row_start, sel_row_end, sel_col_start, sel_col_end);
+               
+               for (row_type i = sel_row_start; i <= sel_row_end; ++i)
+                       for (col_type j = sel_col_start; j <= sel_col_end; ++j)
+                               tabular.setRotateCell(tabular.getCellNumber(i, j), 
+                                                                         oneNotRotated);
+               }
+               break;
+
        case Tabular::SET_USEBOX: {
                Tabular::BoxType val = Tabular::BoxType(convert<int>(value));
                if (val == tabular.getUsebox(cur.idx()))
@@ -4627,7 +4664,7 @@ void InsetTabular::getSelection(Cursor & cur,
 }
 
 
-LyXText * InsetTabular::getText(int idx) const
+Text * InsetTabular::getText(int idx) const
 {
        return size_t(idx) < nargs() ? cell(idx)->getText(0) : 0;
 }
@@ -4725,7 +4762,7 @@ bool InsetTabular::insertPlaintextString(BufferView & bv, docstring const & buf,
                        if (cols < columns) {
                                shared_ptr<InsetText> inset = loctab->getCellInset(cell);
                                Paragraph & par = inset->text_.getPar(0);
-                               LyXFont const font = inset->text_.getFont(buffer, par, 0);
+                               Font const font = inset->text_.getFont(buffer, par, 0);
                                inset->setText(buf.substr(op, p - op), font,
                                               buffer.params().trackChanges);
                                ++cols;
@@ -4737,7 +4774,7 @@ bool InsetTabular::insertPlaintextString(BufferView & bv, docstring const & buf,
                        if (cols < columns) {
                                shared_ptr<InsetText> inset = tabular.getCellInset(cell);
                                Paragraph & par = inset->text_.getPar(0);
-                               LyXFont const font = inset->text_.getFont(buffer, par, 0);
+                               Font const font = inset->text_.getFont(buffer, par, 0);
                                inset->setText(buf.substr(op, p - op), font,
                                               buffer.params().trackChanges);
                        }
@@ -4754,7 +4791,7 @@ bool InsetTabular::insertPlaintextString(BufferView & bv, docstring const & buf,
        if (cell < cells && op < len) {
                shared_ptr<InsetText> inset = loctab->getCellInset(cell);
                Paragraph & par = inset->text_.getPar(0);
-               LyXFont const font = inset->text_.getFont(buffer, par, 0);
+               Font const font = inset->text_.getFont(buffer, par, 0);
                inset->setText(buf.substr(op, len - op), font,
                        buffer.params().trackChanges);
        }