summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-02-03 11:58:10 +0100
committerMiklos Vajna <vmiklos@collabora.com>2021-02-09 14:10:22 +0100
commitabcb758941d955bd5f822ae164fdcdd7870d1d55 (patch)
tree3a98177975e048c639aa60b6c457d8054f18ca94
parentcf113d719f54cc0839c8ab40f2c53b5f156f9424 (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.docxbin0 -> 11860 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport15.cxx13
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx12
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx1
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx5
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx1
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx3
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx1
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx2
-rw-r--r--writerfilter/source/dmapper/PropertyMap.hxx2
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
new file mode 100644
index 000000000000..4dc1cbf615f7
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/gutter-left.docx
Binary files differ
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; }