cui/source/inc/paragrph.hxx | 1 + cui/source/tabpages/paragrph.cxx | 24 +++++++++++++++++++++++- cui/uiconfig/ui/textflowpage.ui | 20 ++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-)
New commits: commit 698b38a18f5f70fd8d50968bc50951aba7085175 Author: László Németh <[email protected]> AuthorDate: Mon Mar 3 18:56:30 2025 +0100 Commit: László Németh <[email protected]> CommitDate: Tue Mar 4 08:49:54 2025 +0100 tdf#165354 sw cui: implement HyphenationKeepLine – part 3 Add check box "Move Line" to the Hyphenate Across section of the Text Flow paragraph settings. Note: this is the MSO interoperability option of MS Word Layout Option "Use Word 2013 rules for hyphenation between pages and columns". "Move Line" is sensitive only if Hyphenate Across Column, Page or Spread are disabled (MS Word Layout Option "Allow hyphenation between pages or columns"). Default value of HyphenationKeepLine is true, i.e. if "Move Line" is disabled. Enabling Hyphenation Across Spread not only grays out "Move Line", but disables it, too, to force the default value, which may be better for interoperability and typography, too (see description of commit 3e02ffb76c484a05cdc140d8a10bc3d993fe8320). Follow-up to commit f8b9cd8fd13897094a014ad06df406f0c78adc62 "tdf#165354 sw xmloff: implement HyphenationKeepLine – part 2" and commit 3e02ffb76c484a05cdc140d8a10bc3d993fe8320 "tdf#i165354 sw offapi DOCX: implement HyphenationKeepLine – part 1". Change-Id: Ibc4f3b904bfe1a676195d166a334910c12760ddd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182446 Tested-by: Jenkins Reviewed-by: László Németh <[email protected]> diff --git a/cui/source/inc/paragrph.hxx b/cui/source/inc/paragrph.hxx index 3a1ef5d455ad..e8806dcdac7c 100644 --- a/cui/source/inc/paragrph.hxx +++ b/cui/source/inc/paragrph.hxx @@ -277,6 +277,7 @@ private: std::unique_ptr<weld::CheckButton> m_xAcrossColumnBox; std::unique_ptr<weld::CheckButton> m_xAcrossPageBox; std::unique_ptr<weld::CheckButton> m_xAcrossSpreadBox; + std::unique_ptr<weld::CheckButton> m_xAcrossMoveLineBox; void HyphenClickHdl(); void PageNumBoxClickHdl(); diff --git a/cui/source/tabpages/paragrph.cxx b/cui/source/tabpages/paragrph.cxx index ea8b6a4def38..501ee10d4f72 100644 --- a/cui/source/tabpages/paragrph.cxx +++ b/cui/source/tabpages/paragrph.cxx @@ -1659,6 +1659,7 @@ bool SvxExtParagraphTabPage::FillItemSet( SfxItemSet* rOutSet ) if ( m_xHyphenBox->get_state_changed_from_saved() || m_xHyphenNoCapsBox->get_state_changed_from_saved() || m_xHyphenNoLastWordBox->get_state_changed_from_saved() || + m_xAcrossMoveLineBox->get_state_changed_from_saved() || m_xExtHyphenBeforeBox->get_value_changed_from_saved() || m_xExtHyphenAfterBox->get_value_changed_from_saved() || m_xExtCompoundHyphenBeforeBox->get_value_changed_from_saved() || @@ -1675,6 +1676,7 @@ bool SvxExtParagraphTabPage::FillItemSet( SfxItemSet* rOutSet ) aHyphen.SetHyphen( eHyphenState == TRISTATE_TRUE ); aHyphen.SetNoCapsHyphenation(m_xHyphenNoCapsBox->get_state() != TRISTATE_TRUE); aHyphen.SetNoLastWordHyphenation(m_xHyphenNoLastWordBox->get_state() != TRISTATE_TRUE); + aHyphen.SetKeepLine(m_xAcrossMoveLineBox->get_state() != TRISTATE_TRUE); if ( eHyphenState == TRISTATE_TRUE ) { @@ -1934,7 +1936,6 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet ) m_xHyphenBox->set_state(bIsHyphen ? TRISTATE_TRUE : TRISTATE_FALSE); m_xHyphenNoCapsBox->set_state(rHyphen.IsNoCapsHyphenation() ? TRISTATE_FALSE : TRISTATE_TRUE); m_xHyphenNoLastWordBox->set_state(rHyphen.IsNoLastWordHyphenation() ? TRISTATE_FALSE : TRISTATE_TRUE); - m_xExtHyphenBeforeBox->set_value(rHyphen.GetMinLead()); m_xExtHyphenAfterBox->set_value(rHyphen.GetMinTrail()); m_xExtCompoundHyphenBeforeBox->set_value(rHyphen.GetCompoundMinLead()); @@ -1946,6 +1947,8 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet ) m_xAcrossColumnBox->set_state(!rHyphen.IsKeep() || rHyphen.GetKeepType() < 3 ? TRISTATE_TRUE : TRISTATE_FALSE); m_xAcrossPageBox->set_state(!rHyphen.IsKeep() || rHyphen.GetKeepType() < 2 ? TRISTATE_TRUE : TRISTATE_FALSE); m_xAcrossSpreadBox->set_state(!rHyphen.IsKeep() || rHyphen.GetKeepType() == 0 ? TRISTATE_TRUE : TRISTATE_FALSE); + // always disable MoveLine, if hyphenation is forbidden across spreads + m_xAcrossMoveLineBox->set_state( m_xAcrossSpreadBox->get_state() == TRISTATE_TRUE || rHyphen.IsKeepLine() ? TRISTATE_FALSE : TRISTATE_TRUE); aAcrossParagraphState.bTriStateEnabled = false; aAcrossColumnState.bTriStateEnabled = false; aAcrossPageState.bTriStateEnabled = false; @@ -1956,6 +1959,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet ) m_xHyphenBox->set_state(TRISTATE_INDET); m_xHyphenNoCapsBox->set_state(TRISTATE_INDET); m_xHyphenNoLastWordBox->set_state(TRISTATE_INDET); + m_xAcrossMoveLineBox->set_state(TRISTATE_INDET); } bool bEnable = bItemAvailable && bIsHyphen; m_xHyphenNoCapsBox->set_sensitive(bEnable); @@ -1977,6 +1981,9 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet ) m_xAcrossColumnBox->set_sensitive(bEnable); m_xAcrossPageBox->set_sensitive(bEnable); m_xAcrossSpreadBox->set_sensitive(bEnable); + // always gray out MoveLine, if hyphenation is forbidden across spreads + bool bAcrossSpread = m_xAcrossSpreadBox->get_state() == TRISTATE_TRUE; + m_xAcrossMoveLineBox->set_sensitive( bEnable && !bAcrossSpread ); switch (rSet->GetItemState(SID_ATTR_PARA_PAGENUM)) { @@ -2233,6 +2240,7 @@ void SvxExtParagraphTabPage::ChangesApplied() m_xHyphenBox->save_state(); m_xHyphenNoCapsBox->save_state(); m_xHyphenNoLastWordBox->save_state(); + m_xAcrossMoveLineBox->save_state(); m_xExtHyphenBeforeBox->save_value(); m_xExtHyphenAfterBox->save_value(); m_xExtCompoundHyphenBeforeBox->save_value(); @@ -2324,6 +2332,7 @@ SvxExtParagraphTabPage::SvxExtParagraphTabPage(weld::Container* pPage, weld::Dia , m_xAcrossColumnBox(m_xBuilder->weld_check_button(u"checkAcrossColumn"_ustr)) , m_xAcrossPageBox(m_xBuilder->weld_check_button(u"checkAcrossPage"_ustr)) , m_xAcrossSpreadBox(m_xBuilder->weld_check_button(u"checkAcrossSpread"_ustr)) + , m_xAcrossMoveLineBox(m_xBuilder->weld_check_button(u"checkMoveLine"_ustr)) { // this page needs ExchangeSupport SetExchangeSupport(); @@ -2370,6 +2379,7 @@ SvxExtParagraphTabPage::SvxExtParagraphTabPage(weld::Container* pPage, weld::Dia m_xHyphenBox->set_sensitive(false); m_xHyphenNoCapsBox->set_sensitive(false); m_xHyphenNoLastWordBox->set_sensitive(false); + m_xAcrossMoveLineBox->set_sensitive(false); m_xBeforeText->set_sensitive(false); m_xExtHyphenBeforeBox->set_sensitive(false); m_xAfterText->set_sensitive(false); @@ -2531,6 +2541,8 @@ void SvxExtParagraphTabPage::HyphenClickHdl() m_xAcrossColumnBox->set_sensitive(bEnable); m_xAcrossPageBox->set_sensitive(bEnable); m_xAcrossSpreadBox->set_sensitive(bEnable); + // only sensitive, if the hyphenation is disabled accross spreads + m_xAcrossMoveLineBox->set_sensitive( m_xAcrossSpreadBox->get_state() != TRISTATE_TRUE ); m_xHyphenBox->set_state(bEnable ? TRISTATE_TRUE : TRISTATE_FALSE); } @@ -2640,6 +2652,7 @@ IMPL_LINK(SvxExtParagraphTabPage, AcrossParagraphHdl_Impl, weld::Toggleable&, rT m_xAcrossColumnBox->set_state( TRISTATE_FALSE ); m_xAcrossPageBox->set_state( TRISTATE_FALSE ); m_xAcrossSpreadBox->set_state( TRISTATE_FALSE ); + m_xAcrossMoveLineBox->set_sensitive( true ); } } @@ -2650,6 +2663,7 @@ IMPL_LINK(SvxExtParagraphTabPage, AcrossColumnHdl_Impl, weld::Toggleable&, rTogg { m_xAcrossPageBox->set_state( TRISTATE_FALSE ); m_xAcrossSpreadBox->set_state( TRISTATE_FALSE ); + m_xAcrossMoveLineBox->set_sensitive( true ); } else m_xAcrossParagraphBox->set_state( TRISTATE_TRUE ); @@ -2664,7 +2678,10 @@ IMPL_LINK(SvxExtParagraphTabPage, AcrossPageHdl_Impl, weld::Toggleable&, rToggle m_xAcrossColumnBox->set_state( TRISTATE_TRUE ); } else + { m_xAcrossSpreadBox->set_state( TRISTATE_FALSE ); + m_xAcrossMoveLineBox->set_sensitive( true ); + } } IMPL_LINK(SvxExtParagraphTabPage, AcrossSpreadHdl_Impl, weld::Toggleable&, rToggle, void) @@ -2676,6 +2693,11 @@ IMPL_LINK(SvxExtParagraphTabPage, AcrossSpreadHdl_Impl, weld::Toggleable&, rTogg m_xAcrossColumnBox->set_state( TRISTATE_TRUE ); m_xAcrossPageBox->set_state( TRISTATE_TRUE ); } + // only sensitive, if the hyphenation is disabled accross spreads + bool bAcrossSpread = m_xAcrossSpreadBox->get_state() == TRISTATE_TRUE; + m_xAcrossMoveLineBox->set_sensitive( !bAcrossSpread ); + if ( bAcrossSpread ) + m_xAcrossMoveLineBox->set_state( TRISTATE_FALSE ); } SvxAsianTabPage::SvxAsianTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet) diff --git a/cui/uiconfig/ui/textflowpage.ui b/cui/uiconfig/ui/textflowpage.ui index cbfa4fc69e1a..6434b4096035 100644 --- a/cui/uiconfig/ui/textflowpage.ui +++ b/cui/uiconfig/ui/textflowpage.ui @@ -469,6 +469,26 @@ <property name="top-attach">3</property> </packing> </child> + <child> + <object class="GtkCheckButton" id="checkMoveLine"> + <property name="label" translatable="yes" context="textflowpage|checkMoveLine">Move Line</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> + <property name="inconsistent">True</property> + <property name="draw-indicator">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="checkMoveLine-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="textflowpage|extended_tip|checkMoveLine">Deselect this check box, if you don't want to move the entire hyphenated line to the next text block.</property> + </object> + </child> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">3</property> + </packing> + </child> </object> <packing> <property name="left-attach">0</property>
