diff --git a/src/frontends/qt4/GuiTabular.cpp b/src/frontends/qt4/GuiTabular.cpp index 63cd3836c0..e4719d170b 100644 --- a/src/frontends/qt4/GuiTabular.cpp +++ b/src/frontends/qt4/GuiTabular.cpp @@ -47,7 +47,8 @@ namespace frontend { GuiTabular::GuiTabular(QWidget * parent) : InsetParamsWidget(parent), firstheader_suppressable_(false), - lastfooter_suppressable_(false) + lastfooter_suppressable_(false), orig_leftborder_(GuiSetBorder::LINE_UNDEF), + orig_rightborder_(GuiSetBorder::LINE_UNDEF) { setupUi(this); @@ -79,9 +80,9 @@ GuiTabular::GuiTabular(QWidget * parent) connect(interlinespaceUnitLC, SIGNAL(selectionChanged(lyx::Length::UNIT)), this, SLOT(checkEnabled())); connect(booktabsRB, SIGNAL(clicked(bool)), - this, SLOT(checkEnabled())); + this, SLOT(booktabs_toggled(bool))); connect(borderDefaultRB, SIGNAL(clicked(bool)), - this, SLOT(checkEnabled())); + this, SLOT(nonbooktabs_toggled(bool))); connect(borderSetPB, SIGNAL(clicked()), this, SLOT(borderSet_clicked())); connect(borderUnsetPB, SIGNAL(clicked()), @@ -365,6 +366,25 @@ void GuiTabular::borderUnset_clicked() } +void GuiTabular::booktabs_toggled(bool const check) +{ + // when switching from formal, restore the left/right lines + if (!check) { + borders->setLeft(orig_leftborder_); + borders->setRight(orig_rightborder_); + } + // repaint the setborder widget + borders->update(); + checkEnabled(); +} + + +void GuiTabular::nonbooktabs_toggled(bool const check) +{ + booktabs_toggled(!check); +} + + static void setParam(string & param_str, Tabular::Feature f, string const & arg = string()) { param_str += ' '; @@ -769,7 +789,7 @@ void GuiTabular::paramsToDialog(Inset const * inset) } // In what follows, we check the borders of all selected cells, - // and if there are diverging settings, we use the LINE_UNDECIDED + // and if there are diverging settings, we use the LINE_UNDEF // border status. GuiSetBorder::BorderState lt = GuiSetBorder::LINE_UNDEF; GuiSetBorder::BorderState lb = GuiSetBorder::LINE_UNDEF; @@ -793,12 +813,18 @@ void GuiTabular::paramsToDialog(Inset const * inset) lb = borderState(lb, tabular.bottomLine(cc)); ll = borderState(ll, tabular.leftLine(cc)); lr = borderState(lr, tabular.rightLine(cc)); + // store left/right borders for the case of formal/nonformal switch + orig_leftborder_ = borderState(ll, tabular.leftLine(cc, true)); + orig_rightborder_ = borderState(lr, tabular.rightLine(cc, true)); } } else { lt = tabular.topLine(cell) ? GuiSetBorder::LINE_SET : GuiSetBorder::LINE_UNSET; lb = tabular.bottomLine(cell) ? GuiSetBorder::LINE_SET : GuiSetBorder::LINE_UNSET; ll = tabular.leftLine(cell) ? GuiSetBorder::LINE_SET : GuiSetBorder::LINE_UNSET; lr = tabular.rightLine(cell) ? GuiSetBorder::LINE_SET : GuiSetBorder::LINE_UNSET; + // store left/right borders for the case of formal/nonformal switch + orig_leftborder_ = tabular.leftLine(cell, true) ? GuiSetBorder::LINE_SET : GuiSetBorder::LINE_UNSET; + orig_rightborder_ = tabular.rightLine(cell, true) ? GuiSetBorder::LINE_SET : GuiSetBorder::LINE_UNSET; } borders->setTop(lt); borders->setBottom(lb); diff --git a/src/frontends/qt4/GuiTabular.h b/src/frontends/qt4/GuiTabular.h index 2cba4810aa..f56abdacfb 100644 --- a/src/frontends/qt4/GuiTabular.h +++ b/src/frontends/qt4/GuiTabular.h @@ -33,6 +33,8 @@ private Q_SLOTS: void checkEnabled(); void borderSet_clicked(); void borderUnset_clicked(); + void booktabs_toggled(bool const check); + void nonbooktabs_toggled(bool const check); void on_topspaceCO_activated(int index); void on_bottomspaceCO_activated(int index); void on_interlinespaceCO_activated(int index); @@ -67,6 +69,10 @@ private: bool firstheader_suppressable_; /// bool lastfooter_suppressable_; + /// + GuiSetBorder::BorderState orig_leftborder_; + /// + GuiSetBorder::BorderState orig_rightborder_; }; } // namespace frontend diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp index f9a78e1d6b..375d7561b6 100644 --- a/src/insets/InsetTabular.cpp +++ b/src/insets/InsetTabular.cpp @@ -956,17 +956,17 @@ bool Tabular::bottomLine(idx_type const cell) const } -bool Tabular::leftLine(idx_type cell) const +bool Tabular::leftLine(idx_type cell, bool const ignore_bt) const { - if (use_booktabs) + if (use_booktabs && !ignore_bt) return false; return cellInfo(cell).left_line; } -bool Tabular::rightLine(idx_type cell) const +bool Tabular::rightLine(idx_type cell, bool const ignore_bt) const { - if (use_booktabs) + if (use_booktabs && !ignore_bt) return false; return cellInfo(cell).right_line; } diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h index 1a8bf33243..ddb02763fc 100644 --- a/src/insets/InsetTabular.h +++ b/src/insets/InsetTabular.h @@ -402,9 +402,13 @@ public: /// Returns true if there is a topline, returns false if not bool bottomLine(idx_type cell) const; /// Returns true if there is a topline, returns false if not - bool leftLine(idx_type cell) const; + /// If \p ignore_bt is true, we return the state as if booktabs was + /// not used + bool leftLine(idx_type cell, bool const ignore_bt = false) const; /// Returns true if there is a topline, returns false if not - bool rightLine(idx_type cell) const; + /// If \p ignore_bt is true, we return the state as if booktabs was + /// not used + bool rightLine(idx_type cell, bool const ignore_bt = false) const; /// return space occupied by the second horizontal line and /// interline space above row \p row in pixels diff --git a/status.23x b/status.23x index edfeea5175..7a75ce55e7 100644 --- a/status.23x +++ b/status.23x @@ -178,6 +178,8 @@ What's new - Fix display of formal table bottom line with multirows (bug 11445). +- Fix left/right border UI when toggling formal table style (bug 9835). + * INTERNALS