From 506bacb79ab96656de9168d0db3e3159c6bde3b0 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 5 Feb 2021 10:03:04 +0100 Subject: tdf#91920 sw page gutter margin, from top: add DOCX filter ODF filter was already working as-is. Change-Id: I71089a5d0171eba0cd4c2d14bdee6ca9b64193b3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110455 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sw/qa/extras/ooxmlexport/data/gutter-top.docx | Bin 0 -> 13032 bytes sw/qa/extras/ooxmlexport/ooxmlexport16.cxx | 14 ++++++++++++++ sw/source/filter/ww8/docxexport.cxx | 5 +++++ writerfilter/source/dmapper/DomainMapper_Impl.cxx | 4 ++++ writerfilter/source/dmapper/SettingsTable.cxx | 6 ++++++ writerfilter/source/dmapper/SettingsTable.hxx | 1 + 6 files changed, 30 insertions(+) create mode 100644 sw/qa/extras/ooxmlexport/data/gutter-top.docx diff --git a/sw/qa/extras/ooxmlexport/data/gutter-top.docx b/sw/qa/extras/ooxmlexport/data/gutter-top.docx new file mode 100644 index 000000000000..d48cb2846287 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/gutter-top.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx index 37610a23f43f..c3b49f5d0dec 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx @@ -58,6 +58,20 @@ DECLARE_OOXMLEXPORT_TEST(testGutterLeft, "gutter-left.docx") CPPUNIT_ASSERT_EQUAL(static_cast(1270), nGutterMargin); } +CPPUNIT_TEST_FIXTURE(Test, testGutterTop) +{ + load(mpTestDocumentPath, "gutter-top.docx"); + save("Office Open XML Text", maTempFile); + mbExported = true; + xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml"); + CPPUNIT_ASSERT(pXmlSettings); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // i.e. was lost. + assertXPath(pXmlSettings, "/w:settings/w:gutterAtTop", 1); +} + DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf134619_numberingProps, "tdf134619_numberingProps.doc") { // Get the third paragraph's numbering style's 1st level's bullet size diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index 7115e4e2d664..04db5fceda4c 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -1039,6 +1039,11 @@ void DocxExport::WriteSettings() if(isMirroredMargin()) pFS->singleElementNS(XML_w, XML_mirrorMargins); + if (m_rDoc.getIDocumentSettingAccess().get(DocumentSettingId::GUTTER_AT_TOP)) + { + pFS->singleElementNS(XML_w, XML_gutterAtTop); + } + // Embed Fonts if( m_rDoc.getIDocumentSettingAccess().get( DocumentSettingId::EMBED_FONTS )) pFS->singleElementNS(XML_w, XML_embedTrueTypeFonts); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index c2b60fc48f5c..05e82a975173 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -7191,6 +7191,10 @@ void DomainMapper_Impl::ApplySettingsTable() xSettings->setPropertyValue("ProtectForm", uno::makeAny( true )); if( m_pSettingsTable->GetReadOnly() ) xSettings->setPropertyValue("LoadReadonly", uno::makeAny( true )); + if (m_pSettingsTable->GetGutterAtTop()) + { + xSettings->setPropertyValue("GutterAtTop", uno::makeAny(true)); + } } catch(const uno::Exception&) { diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx index 24f0e26e0545..02e0a6f8c4a1 100644 --- a/writerfilter/source/dmapper/SettingsTable.cxx +++ b/writerfilter/source/dmapper/SettingsTable.cxx @@ -275,6 +275,7 @@ struct SettingsTable_Impl OUString m_sCurrentDatabaseDataSource; DocumentProtection_Impl m_DocumentProtection; + bool m_bGutterAtTop = false; SettingsTable_Impl() : m_nDefaultTabStop( 720 ) //default is 1/2 in @@ -586,6 +587,9 @@ void SettingsTable::lcl_sprm(Sprm& rSprm) case NS_ooxml::LN_CT_Compat_noLeading: m_pImpl->m_bNoLeading = nIntValue != 0; break; + case NS_ooxml::LN_CT_Settings_gutterAtTop: + m_pImpl->m_bGutterAtTop = nIntValue != 0; + break; default: { #ifdef DBG_UTIL @@ -885,6 +889,8 @@ bool SettingsTable::GetNoLeading() const return m_pImpl->m_bNoLeading; } +bool SettingsTable::GetGutterAtTop() const { return m_pImpl->m_bGutterAtTop; } + }//namespace dmapper } //namespace writerfilter diff --git a/writerfilter/source/dmapper/SettingsTable.hxx b/writerfilter/source/dmapper/SettingsTable.hxx index f7cf2793861a..79defda867df 100644 --- a/writerfilter/source/dmapper/SettingsTable.hxx +++ b/writerfilter/source/dmapper/SettingsTable.hxx @@ -94,6 +94,7 @@ public: sal_Int32 GetWordCompatibilityMode() const; const OUString& GetCurrentDatabaseDataSource() const; + bool GetGutterAtTop() const; private: // Properties -- cgit v1.2.3