From: Juergen Spitzmueller Date: Mon, 1 Apr 2019 07:26:09 +0000 (+0200) Subject: Fix left/right border UI when toggling formal X-Git-Tag: lyx-2.4.0dev-acb2ca7b~2272 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=00de6c4be7db826e0035a412b0e19ffe940a5a44;p=lyx.git Fix left/right border UI when toggling formal Fixes: #9835 --- diff --git a/src/frontends/qt4/GuiTabular.cpp b/src/frontends/qt4/GuiTabular.cpp index dd25e9dad5..b162458b3e 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()), @@ -377,6 +378,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 += ' '; @@ -790,7 +810,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; @@ -814,12 +834,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 e9e6fe2f27..692e331d28 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); @@ -68,6 +70,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 2bb49f8781..bbe4e6cd1f 100644 --- a/src/insets/InsetTabular.cpp +++ b/src/insets/InsetTabular.cpp @@ -965,17 +965,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 9bc1746195..182b419bdd 100644 --- a/src/insets/InsetTabular.h +++ b/src/insets/InsetTabular.h @@ -413,9 +413,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