]> git.lyx.org Git - features.git/commitdiff
backport r39757:
authorJürgen Spitzmüller <spitz@lyx.org>
Sat, 1 Oct 2011 07:24:17 +0000 (07:24 +0000)
committerJürgen Spitzmüller <spitz@lyx.org>
Sat, 1 Oct 2011 07:24:17 +0000 (07:24 +0000)
* Fix merging of cells (multicolumn, multirow) when the first cell in the selection is already a multi-cell (bug #7792).

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@39793 a592a061-630c-0410-9148-cb99ea01b6c8

src/insets/InsetTabular.cpp
status.20x

index 680ce1b1af885aa3b161376e753403ba81be7a00..d9509a5fc9cf3831b302e3a98f7aa69f2f7f564d 100644 (file)
@@ -5388,10 +5388,27 @@ void InsetTabular::tabularFeatures(Cursor & cur,
        }
 
        case Tabular::MULTICOLUMN: {
-               if (tabular.isMultiColumn(cur.idx()))
-                       tabularFeatures(cur, Tabular::UNSET_MULTICOLUMN);
-               else
+               if (!cur.selection()) {
+                       if (tabular.isMultiColumn(cur.idx()))
+                               tabularFeatures(cur, Tabular::UNSET_MULTICOLUMN);
+                       else
+                               tabularFeatures(cur, Tabular::SET_MULTICOLUMN);
+                       break;
+               }
+               bool merge = false;
+               for (col_type c = sel_col_start; c <= sel_col_end; ++c) {
+                       row_type const r = sel_row_start;
+                       if (!tabular.isMultiColumn(tabular.cellIndex(r, c))
+                           || (r > sel_row_start && !tabular.isPartOfMultiColumn(r, c)))
+                               merge = true;
+               }
+               // If the selection contains at least one singlecol cell
+               // or multiple multicol cells,
+               // we assume the user will merge is to a single multicol
+               if (merge)
                        tabularFeatures(cur, Tabular::SET_MULTICOLUMN);
+               else
+                       tabularFeatures(cur, Tabular::UNSET_MULTICOLUMN);
                break;
        }
 
@@ -5426,10 +5443,27 @@ void InsetTabular::tabularFeatures(Cursor & cur,
        }
 
        case Tabular::MULTIROW: {
-               if (tabular.isMultiRow(cur.idx()))
-                       tabularFeatures(cur, Tabular::UNSET_MULTIROW);
-               else
+               if (!cur.selection()) {
+                       if (tabular.isMultiRow(cur.idx()))
+                               tabularFeatures(cur, Tabular::UNSET_MULTIROW);
+                       else
+                               tabularFeatures(cur, Tabular::SET_MULTIROW);
+                       break;
+               }
+               bool merge = false;
+               for (row_type r = sel_row_start; r <= sel_row_end; ++r) {
+                       col_type const c = sel_col_start;
+                       if (!tabular.isMultiRow(tabular.cellIndex(r, c))
+                           || (r > sel_row_start && !tabular.isPartOfMultiRow(r, c)))
+                               merge = true;
+               }
+               // If the selection contains at least one singlerow cell
+               // or multiple multirow cells,
+               // we assume the user will merge is to a single multirow
+               if (merge)
                        tabularFeatures(cur, Tabular::SET_MULTIROW);
+               else
+                       tabularFeatures(cur, Tabular::UNSET_MULTIROW);
                break;
        }
 
index ab5a2c561566192cc0440564ab437c2f077b8681..57982a48510e690ae0a26d9ee1e99102793cad8d 100644 (file)
@@ -110,6 +110,9 @@ What's new
 
 - Fix bottom border allocation when setting a multirow (bug 7791).
 
+- Fix merging of cells (multicolumn, multirow) when the first cell in the
+  selection is already a multi-cell (bug 7792).
+
 - Disable interword and protected space lfuns in math, since these spaces
   are not yet supported.