From: Scott Kostyshak Date: Fri, 14 Feb 2014 02:17:20 +0000 (-0500) Subject: Fix alignment rendering of multirow in LyX (#8976) X-Git-Tag: 2.2.0alpha1~1943 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=43d464cca086c5b20f15ba71318da8f4598e613e;p=features.git Fix alignment rendering of multirow in LyX (#8976) Multirow cells now have the same alignment rendering in LyX as in the output. The alignment of a multirow can change as long as the column is not of fixed width. If the column is of fixed width, the multirow is left-aligned. When setting a multirow, the alignment is copied from the last cell in the selection. --- diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp index 113715a60c..6c68a3386c 100644 --- a/src/insets/InsetTabular.cpp +++ b/src/insets/InsetTabular.cpp @@ -1154,7 +1154,7 @@ void Tabular::setColumnPWidth(Cursor & cur, idx_type cell, col_type const c = cellColumn(cell); column_info[c].p_width = width; - // reset the vertical alignment to top if the fixed with + // reset the vertical alignment to top if the fixed width // is removed or zero because only fixed width columns can // have a vertical alignment if (column_info[c].p_width.zero()) @@ -1164,6 +1164,8 @@ void Tabular::setColumnPWidth(Cursor & cur, idx_type cell, // because of multicolumns toggleFixedWidth(cur, cellInset(cell).get(), !getPWidth(cell).zero()); + if (isMultiRow(cell)) + setAlignment(cell, LYX_ALIGN_LEFT, false); } // cur paragraph can become invalid after paragraphs were merged if (cur.pit() > cur.lastpit()) @@ -1715,7 +1717,8 @@ bool Tabular::hasMultiRow(row_type r) const } Tabular::idx_type Tabular::setMultiRow(idx_type cell, idx_type number, - bool const bottom_border) + bool const bottom_border, + LyXAlignment const halign) { idx_type const col = cellColumn(cell); idx_type const row = cellRow(cell); @@ -1731,10 +1734,10 @@ Tabular::idx_type Tabular::setMultiRow(idx_type cell, idx_type number, // be changed for the whole table row, // support changing this only for the multirow cell can be done via // \multirowsetup - // this feature would be a fileformat change - // until LyX supports this, use the deault alignment of multirow - // cells: left - cs.alignment = LYX_ALIGN_LEFT; + if (getPWidth(cell).zero()) + cs.alignment = halign; + else + cs.alignment = LYX_ALIGN_LEFT; // set the bottom line of the last selected cell setBottomLine(cell, bottom_border); @@ -5704,7 +5707,8 @@ void InsetTabular::tabularFeatures(Cursor & cur, // check whether we are completely in a multirow if (!tabular.isMultiRow(cur.idx())) tabular.setMultiRow(cur.idx(), 1, - tabular.bottomLine(cur.idx())); + tabular.bottomLine(cur.idx()), + tabular.getAlignment(cur.idx())); break; } // we have a selection so this means we just add all this @@ -5713,7 +5717,8 @@ void InsetTabular::tabularFeatures(Cursor & cur, row_type const row_start = tabular.cellRow(s_start); row_type const row_end = tabular.cellRow(cur.selEnd().idx()); cur.idx() = tabular.setMultiRow(s_start, row_end - row_start + 1, - tabular.bottomLine(cur.selEnd().idx())); + tabular.bottomLine(cur.selEnd().idx()), + tabular.getAlignment(cur.selEnd().idx())); cur.pit() = 0; cur.pos() = 0; cur.setSelection(false); diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h index 4b1cf83673..be1a67f51f 100644 --- a/src/insets/InsetTabular.h +++ b/src/insets/InsetTabular.h @@ -525,7 +525,8 @@ public: bool hasMultiRow(row_type r) const; /// idx_type setMultiRow(idx_type cell, idx_type number, - bool const bottom_border); + bool const bottom_border, + LyXAlignment const halign); /// void unsetMultiRow(idx_type cell); ///