Author: spitz
Date: Sat Oct  1 09:24:17 2011
New Revision: 39793
URL: http://www.lyx.org/trac/changeset/39793

Log:
backport r39757:

* Fix merging of cells (multicolumn, multirow) when the first cell in the 
selection is already a multi-cell (bug #7792).

Modified:
   lyx-devel/branches/BRANCH_2_0_X/src/insets/InsetTabular.cpp
   lyx-devel/branches/BRANCH_2_0_X/status.20x

Modified: lyx-devel/branches/BRANCH_2_0_X/src/insets/InsetTabular.cpp
==============================================================================
--- lyx-devel/branches/BRANCH_2_0_X/src/insets/InsetTabular.cpp Sat Oct  1 
03:29:47 2011        (r39792)
+++ lyx-devel/branches/BRANCH_2_0_X/src/insets/InsetTabular.cpp Sat Oct  1 
09:24:17 2011        (r39793)
@@ -5388,10 +5388,27 @@
        }
 
        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 @@
        }
 
        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;
        }
 

Modified: lyx-devel/branches/BRANCH_2_0_X/status.20x
==============================================================================
--- lyx-devel/branches/BRANCH_2_0_X/status.20x  Sat Oct  1 03:29:47 2011        
(r39792)
+++ lyx-devel/branches/BRANCH_2_0_X/status.20x  Sat Oct  1 09:24:17 2011        
(r39793)
@@ -110,6 +110,9 @@
 
 - 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.
 

Reply via email to