diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2021-02-03 11:58:10 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2021-02-09 14:10:22 +0100 |
commit | abcb758941d955bd5f822ae164fdcdd7870d1d55 (patch) | |
tree | 3a98177975e048c639aa60b6c457d8054f18ca94 | |
parent | cf113d719f54cc0839c8ab40f2c53b5f156f9424 (diff) |
tdf#91920 sw page gutter margin: add DOCX filter
- import: convert the gutter twips value to mm100, then map it to the
GutterMargin property of the page style
- export: map SvxLRSpaceItem::m_nGutterMargin to <w:pgMar ... w:gutter="..."/>
(cherry picked from commit b07f6c14a49aea23457b41b0d75390e68fe550b3)
Conflicts:
sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
writerfilter/source/dmapper/PropertyIds.cxx
writerfilter/source/dmapper/PropertyIds.hxx
Change-Id: I971d32ffe4e67c2c5a5518b5aa63cb8514e04e2a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110626
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/gutter-left.docx | bin | 0 -> 11860 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport15.cxx | 13 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 12 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 5 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.cxx | 3 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.hxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.hxx | 2 |
10 files changed, 33 insertions, 7 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/gutter-left.docx b/sw/qa/extras/ooxmlexport/data/gutter-left.docx Binary files differnew file mode 100644 index 000000000000..4dc1cbf615f7 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/gutter-left.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx index 843ef1f3704c..52cfc5c11387 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx @@ -157,6 +157,19 @@ DECLARE_OOXMLEXPORT_TEST(testTdf138953, "croppedAndRotated.odt") CPPUNIT_ASSERT_EQUAL(sal_Int32(8664), frameRect.Width); } +DECLARE_OOXMLEXPORT_TEST(testGutterLeft, "gutter-left.docx") +{ + uno::Reference<beans::XPropertySet> xPageStyle; + getStyles("PageStyles")->getByName("Standard") >>= xPageStyle; + sal_Int32 nGutterMargin{}; + xPageStyle->getPropertyValue("GutterMargin") >>= nGutterMargin; + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1270 + // - Actual : 0 + // i.e. gutter margin was lost. + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1270), nGutterMargin); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 7d614a206c7b..c2776d461c89 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -8323,10 +8323,12 @@ void DocxAttributeOutput::FormatLRSpace( const SvxLRSpaceItem& rLRSpace ) m_pageMargins.nLeft += sal::static_int_cast<sal_uInt16>(rLRSpace.GetLeft()); m_pageMargins.nRight += sal::static_int_cast<sal_uInt16>(rLRSpace.GetRight()); + sal_uInt16 nGutter = rLRSpace.GetGutterMargin(); - AddToAttrList( m_pSectionSpacingAttrList, 2, + AddToAttrList( m_pSectionSpacingAttrList, 3, FSNS( XML_w, XML_left ), OString::number( m_pageMargins.nLeft ).getStr(), - FSNS( XML_w, XML_right ), OString::number( m_pageMargins.nRight ).getStr() ); + FSNS( XML_w, XML_right ), OString::number( m_pageMargins.nRight ).getStr(), + FSNS( XML_w, XML_gutter ), OString::number( nGutter ).getStr() ); } else { @@ -8398,13 +8400,11 @@ void DocxAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace ) // Page Bottom m_pageMargins.nBottom = aDistances.dyaBottom; - AddToAttrList( m_pSectionSpacingAttrList, 5, + AddToAttrList( m_pSectionSpacingAttrList, 4, FSNS( XML_w, XML_header ), OString::number( nHeader ).getStr(), FSNS( XML_w, XML_top ), OString::number( m_pageMargins.nTop ).getStr(), FSNS( XML_w, XML_footer ), OString::number( nFooter ).getStr(), - FSNS( XML_w, XML_bottom ), OString::number( m_pageMargins.nBottom ).getStr(), - // FIXME Page Gutter is not handled ATM, setting to 0 as it's mandatory for OOXML - FSNS( XML_w, XML_gutter ), "0" ); + FSNS( XML_w, XML_bottom ), OString::number( m_pageMargins.nBottom ).getStr() ); } else { diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 7789b54c0f5c..2c47effafd45 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2135,6 +2135,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) pSectionContext->SetLeftMargin( rPageMar.left ); pSectionContext->SetHeaderTop( rPageMar.header ); pSectionContext->SetHeaderBottom( rPageMar.footer ); + pSectionContext->SetGutterMargin(rPageMar.gutter); } break; diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 12e4205096b4..f3bcc7a066c8 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -6552,7 +6552,9 @@ void DomainMapper_Impl::SetPageMarginTwip( PageMarElement eElement, sal_Int32 nV case PAGE_MAR_LEFT : m_aPageMargins.left = nValue; break; case PAGE_MAR_HEADER : m_aPageMargins.header = nValue; break; case PAGE_MAR_FOOTER : m_aPageMargins.footer = nValue; break; - case PAGE_MAR_GUTTER : break; + case PAGE_MAR_GUTTER: + m_aPageMargins.gutter = nValue; + break; } } @@ -6566,6 +6568,7 @@ PageMar::PageMar() , left(right) , header(ConversionHelper::convertTwipToMM100(sal_Int32(720))) , footer(header) + , gutter(0) { } diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index ca5497342082..00621c1db263 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -85,6 +85,7 @@ struct PageMar sal_Int32 left; sal_Int32 header; sal_Int32 footer; + sal_Int32 gutter; public: PageMar(); }; diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index d2393bab7938..d4bfd63925fe 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -356,6 +356,9 @@ OUString getPropertyName( PropertyIds eId ) case PROP_DATATABLE_NAME: sName = "DataTableName"; break; case PROP_DATACOLUMN_NAME: sName = "DataColumnName"; break; case PROP_CHAR_TRANSPARENCE: sName = "CharTransparence"; break; + case PROP_GUTTER_MARGIN: + sName = "GutterMargin"; + break; } assert(sName.getLength()>0); return sName; diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index aa609341b84b..bbd4fdff0bc6 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -356,6 +356,7 @@ enum PropertyIds ,PROP_DATATABLE_NAME ,PROP_DATACOLUMN_NAME ,PROP_CHAR_TRANSPARENCE + ,PROP_GUTTER_MARGIN }; //Returns the UNO string equivalent to eId. diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index dc487df3b45c..24cc9a3e6c31 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -384,6 +384,7 @@ SectionPropertyMap::SectionPropertyMap( bool bIsFirstSection ) , m_nBreakType( -1 ) , m_nLeftMargin( 2540 ) // page left margin, default 1 inch = 1440 twip -> 2540 1/100 mm , m_nRightMargin( 2540 ) // page right margin, default 1 inch = 1440 twip -> 2540 1/100 mm + , m_nGutterMargin(0) , m_nTopMargin( 2540 ) , m_nBottomMargin( 2540 ) , m_nHeaderTop( 1270 ) // 720 twip @@ -1044,6 +1045,7 @@ void SectionPropertyMap::HandleMarginsHeaderFooter( bool bFirstPage, DomainMappe { Insert( PROP_LEFT_MARGIN, uno::makeAny( m_nLeftMargin ) ); Insert( PROP_RIGHT_MARGIN, uno::makeAny( m_nRightMargin ) ); + Insert(PROP_GUTTER_MARGIN, uno::makeAny(m_nGutterMargin)); if ( rDM_Impl.m_oBackgroundColor ) Insert( PROP_BACK_COLOR, uno::makeAny( *rDM_Impl.m_oBackgroundColor ) ); diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index 608496083636..923581fcfb86 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -238,6 +238,7 @@ private: sal_Int32 m_nLeftMargin; sal_Int32 m_nRightMargin; + sal_Int32 m_nGutterMargin; sal_Int32 m_nTopMargin; sal_Int32 m_nBottomMargin; sal_Int32 m_nHeaderTop; @@ -365,6 +366,7 @@ public: void SetBottomMargin( sal_Int32 nSet ) { m_nBottomMargin = nSet; } void SetHeaderTop( sal_Int32 nSet ) { m_nHeaderTop = nSet; } void SetHeaderBottom( sal_Int32 nSet ) { m_nHeaderBottom = nSet; } + void SetGutterMargin( sal_Int32 nGutterMargin ) { m_nGutterMargin = nGutterMargin; } sal_Int32 GetPageWidth() const; void SetGridType( sal_Int32 nSet ) { m_nGridType = nSet; } |