]> git.lyx.org Git - features.git/blobdiff - src/mathed/math_gridinset.C
the 'tabular unifiaction patch' (even with the removal of duplicated menu
[features.git] / src / mathed / math_gridinset.C
index 57a30f4e41e0168a7d512643b7b82bf5352fd896..f578582589584f19495325e2bee565e6ba557e97 100644 (file)
@@ -578,6 +578,25 @@ void MathGridInset::delRow(row_type row)
 }
 
 
+void MathGridInset::copyRow(row_type row)
+{
+       addRow(row);
+       for (col_type col = 0; col < ncols(); ++col)
+               cells_[(row + 1) * ncols() + col] = cells_[row * ncols() + col];
+}
+
+
+void MathGridInset::swapRow(row_type row)
+{
+       if (nrows() == 1)
+               return;
+       if (row + 1 == nrows())
+               --row;
+       for (col_type col = 0; col < ncols(); ++col)
+               swap(cells_[row * ncols() + col], cells_[(row + 1) * ncols() + col]);
+}
+
+
 void MathGridInset::addCol(col_type newcol)
 {
        const col_type nc = ncols();
@@ -621,6 +640,25 @@ void MathGridInset::delCol(col_type col)
 }
 
 
+void MathGridInset::copyCol(col_type col)
+{
+       addCol(col);
+       for (row_type row = 0; row < nrows(); ++row)
+               cells_[row * ncols() + col + 1] = cells_[row * ncols() + col];
+}
+
+
+void MathGridInset::swapCol(col_type col)
+{
+       if (ncols() == 1)
+               return;
+       if (col + 1 == ncols())
+               --col;
+       for (row_type row = 0; row < nrows(); ++row)
+               swap(cells_[row * ncols() + col], cells_[row * ncols() + col + 1]);
+}
+
+
 int MathGridInset::cellXOffset(idx_type idx) const
 {
        col_type c = col(idx);
@@ -968,41 +1006,49 @@ MathInset::result_type MathGridInset::dispatch
                        return DISPATCHED_POP;
                }
 
-               case LFUN_MATH_HALIGN:
-                       halign((cmd.argument + "c")[0], col(idx));
-                       return DISPATCHED_POP;
-
-               case LFUN_MATH_VALIGN:
-                       valign((cmd.argument + "c")[0]);
-                       return DISPATCHED_POP;
-
-               case LFUN_MATH_ROW_INSERT:
-                       addRow(row(idx));
-                       return DISPATCHED_POP;
-
-               case LFUN_MATH_ROW_DELETE:
-                       delRow(row(idx));
-                       if (idx > nargs())
-                               idx -= ncols();
-                       return DISPATCHED_POP;
-
-               case LFUN_MATH_COLUMN_INSERT: {
-                       row_type r = row(idx);
-                       col_type c = col(idx);
-                       addFancyCol(c);
-                       idx = index(r, c);
-                       return DISPATCHED_POP;
-               }
-
-               case LFUN_MATH_COLUMN_DELETE: {
-                       row_type r = row(idx);
-                       col_type c = col(idx);
-                       delFancyCol(col(idx));
-                       idx = index(r, c);
-                       if (idx > nargs())
-                               idx -= ncols();
+               case LFUN_TABULAR_FEATURE:
+                       //lyxerr << "handling tabular-feature " << cmd.argument << "\n";
+                       if (cmd.argument == "valign-top")
+                               valign('t');
+                       else if (cmd.argument == "valign-center")
+                               valign('c');
+                       else if (cmd.argument == "valign-bottom")
+                               valign('b');
+                       else if (cmd.argument == "align-left")
+                               halign('l', col(idx));
+                       else if (cmd.argument == "align-right")
+                               halign('r', col(idx));
+                       else if (cmd.argument == "align-center")
+                               halign('c', col(idx));
+                       else if (cmd.argument == "append-row")
+                               addRow(row(idx));
+                       else if (cmd.argument == "delete-row") {
+                               delRow(row(idx));
+                               if (idx > nargs())
+                                       idx -= ncols();
+                       } else if (cmd.argument == "copy-row")
+                               copyRow(row(idx));
+                       else if (cmd.argument == "swap-row")
+                               swapRow(row(idx));
+                       else if (cmd.argument == "append-column") {
+                               row_type r = row(idx);
+                               col_type c = col(idx);
+                               addCol(c);
+                               idx = index(r, c);
+                       } else if (cmd.argument == "delete-column") {
+                               row_type r = row(idx);
+                               col_type c = col(idx);
+                               delCol(col(idx));
+                               idx = index(r, c);
+                               if (idx > nargs())
+                                       idx -= ncols();
+                       } else if (cmd.argument == "copy-column")
+                               copyCol(col(idx));
+                       else if (cmd.argument == "swap-column")
+                               swapCol(col(idx));
+                       else 
+                               return UNDISPATCHED;
                        return DISPATCHED_POP;
-               }
 
                case LFUN_PASTE: {
                        //lyxerr << "pasting '" << cmd.argument << "'\n";