From 9d05ac5c9124608cdbc989161794fe56aa839e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20St=C3=B6hr?= Date: Tue, 11 Sep 2012 02:10:29 +0200 Subject: [PATCH] Fix UI for decimal table alignment (bug #8285) Fixes 2 issues: 1. LyX uses for a decimal alignment a multicolumn and having for a cell a multicolumn _and_ a multirow is invalid LaTeX. 2. It was impossible to unset a decimal alignment via the context menu or toolbar button. --- src/frontends/qt4/GuiTabular.cpp | 15 +++++++++++---- src/insets/InsetTabular.cpp | 5 ++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/frontends/qt4/GuiTabular.cpp b/src/frontends/qt4/GuiTabular.cpp index 79706d41c5..ee4d1dfe7b 100644 --- a/src/frontends/qt4/GuiTabular.cpp +++ b/src/frontends/qt4/GuiTabular.cpp @@ -209,6 +209,13 @@ void GuiTabular::checkEnabled() hAlignCO->setEnabled(!(multirowCB->isChecked() && !widgetsToLength(columnWidthED, columnWidthUnitLC).empty()) && specialAlignmentED->text().isEmpty()); + // decimal alignment is only possible for non-multicol and non-multirow cells + if ((multicolumnCB->isChecked() || multirowCB->isChecked()) + && hAlignCO->findText(qt_("At Decimal Separator"))) + hAlignCO->removeItem(3); + else if (!multicolumnCB->isChecked() && !multirowCB->isChecked() + && !hAlignCO->findText(qt_("At Decimal Separator"))) + hAlignCO->addItem(qt_("At Decimal Separator"), toqstr("decimal")); bool const dalign = hAlignCO->itemData(hAlignCO->currentIndex()).toString() == QString("decimal"); decimalPointED->setEnabled(dalign); @@ -304,8 +311,8 @@ void GuiTabular::checkEnabled() captionStatusCB->setEnabled(funcEnabled(Tabular::TOGGLE_LTCAPTION) && longtabular); - multicolumnCB->setEnabled(funcEnabled(Tabular::MULTICOLUMN)); - multirowCB->setEnabled(funcEnabled(Tabular::MULTIROW)); + multicolumnCB->setEnabled(funcEnabled(Tabular::MULTICOLUMN) && !dalign); + multirowCB->setEnabled(funcEnabled(Tabular::MULTIROW) && !dalign); bool const enable_mr = multirowCB->isChecked(); multirowOffsetLA->setEnabled(enable_mr); multirowOffsetED->setEnabled(enable_mr); @@ -824,7 +831,7 @@ void GuiTabular::paramsToDialog(Inset const * inset) hAlignCO->addItem(qt_("Right"), toqstr("right")); if (!multicol && !pwidth.zero()) hAlignCO->addItem(qt_("Justified"), toqstr("justified")); - if (!multicol) + if (!multicol && !multirow) hAlignCO->addItem(qt_("At Decimal Separator"), toqstr("decimal")); string align; @@ -846,7 +853,7 @@ void GuiTabular::paramsToDialog(Inset const * inset) } case LYX_ALIGN_DECIMAL: { - if (!multicol) + if (!multicol && !multirow) align = "decimal"; break; } diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp index 58505cc45c..d96de8fa36 100644 --- a/src/insets/InsetTabular.cpp +++ b/src/insets/InsetTabular.cpp @@ -5234,7 +5234,10 @@ void InsetTabular::tabularFeatures(Cursor & cur, break; case Tabular::ALIGN_DECIMAL: - setAlign = LYX_ALIGN_DECIMAL; + if (tabular.column_info[tabular.cellColumn(cur.idx())].alignment == LYX_ALIGN_DECIMAL) + setAlign = LYX_ALIGN_LEFT; + else + setAlign = LYX_ALIGN_DECIMAL; break; case Tabular::M_VALIGN_TOP: