diff options
author | Justin Luth <justin_luth@sil.org> | 2015-09-10 11:41:11 +0300 |
---|---|---|
committer | Justin Luth <justin_luth@sil.org> | 2015-10-19 04:35:55 +0000 |
commit | 664197d95becd516c3dac25a50439078ba61e051 (patch) | |
tree | 85199c219b30c973a1c151b360c490fcfd16bce3 | |
parent | 51df957e1a40d2f3511345c1600c05dd35f34b6b (diff) |
tdf#36117 .docx preserve page vertical alignment after RT
Change-Id: I90174f7a98e9bd01f45ee668f127356ff3e0e4ed
Reviewed-on: https://gerrit.libreoffice.org/18481
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Justin Luth <justin_luth@sil.org>
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx | bin | 0 -> 13309 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport7.cxx | 27 | ||||
-rw-r--r-- | sw/source/core/unocore/unomap.cxx | 1 | ||||
-rw-r--r-- | sw/source/core/unocore/unostyle.cxx | 15 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 21 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.hxx | 3 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 25 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.cxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.hxx | 1 |
9 files changed, 94 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx b/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx Binary files differnew file mode 100644 index 000000000000..70fdec72dde0 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx index f95f5d28a0fb..0b82bcf3654d 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx @@ -23,6 +23,7 @@ #include <com/sun/star/style/LineSpacing.hpp> #include <com/sun/star/style/LineSpacingMode.hpp> #include <com/sun/star/text/GraphicCrop.hpp> +#include <pagedesc.hxx> #include <comphelper/sequenceashashmap.hxx> @@ -1005,6 +1006,32 @@ DECLARE_OOXMLEXPORT_TEST(testExportAdjustmentValue, "tdf91429.docx") assertXPath(pXmlDoc,"/w:document/w:body/w:p/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:prstGeom/a:avLst/a:gd", "fmla", "val 50000"); } +DECLARE_OOXMLEXPORT_TEST(testTextVerticalAdjustment, "tdf36117_verticalAdjustment.docx") +{ + //Preserve the page vertical alignment setting for .docx + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT(pDoc); + + SwPageDesc &Desc = pDoc->GetPageDesc( 0 ); + drawing::TextVerticalAdjust nVA = Desc.GetVerticalAdjustment(); + CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_CENTER, nVA ); + + Desc = pDoc->GetPageDesc( 1 ); + nVA = Desc.GetVerticalAdjustment(); + CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_TOP, nVA ); + + Desc = pDoc->GetPageDesc( 2 ); + nVA = Desc.GetVerticalAdjustment(); + CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_BOTTOM, nVA ); + + Desc = pTextDoc->GetDocShell()->GetDoc()->GetPageDesc( 3 ); + nVA = Desc.GetVerticalAdjustment(); + CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_BLOCK, nVA ); +} + + DECLARE_OOXMLEXPORT_TEST(testTDF87348, "tdf87348_linkedTextboxes.docx") { int followCount=0; diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx index 5d118c6d6ab4..4f38b2567fa8 100644 --- a/sw/source/core/unocore/unomap.cxx +++ b/sw/source/core/unocore/unomap.cxx @@ -1033,6 +1033,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s { OUString(UNO_NAME_SIZE), SID_ATTR_PAGE_SIZE, cppu::UnoType<css::awt::Size>::get(), PROPERTY_NONE, MID_SIZE_SIZE|CONVERT_TWIPS}, { OUString(UNO_NAME_WIDTH), SID_ATTR_PAGE_SIZE, cppu::UnoType<sal_Int32>::get() , PROPERTY_NONE, MID_SIZE_WIDTH|CONVERT_TWIPS}, { OUString(UNO_NAME_HEIGHT), SID_ATTR_PAGE_SIZE, cppu::UnoType<sal_Int32>::get() , PROPERTY_NONE, MID_SIZE_HEIGHT|CONVERT_TWIPS }, + { OUString(UNO_NAME_TEXT_VERT_ADJUST), RES_TEXT_VERT_ADJUST, cppu::UnoType<css::drawing::TextVerticalAdjust>::get(), PROPERTY_NONE, 0 }, { OUString(UNO_NAME_TEXT_COLUMNS), RES_COL, cppu::UnoType<css::text::XTextColumns>::get(), PROPERTY_NONE, MID_COLUMNS}, { OUString(UNO_NAME_TOP_MARGIN), RES_UL_SPACE, cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_UP_MARGIN|CONVERT_TWIPS}, { OUString(UNO_NAME_BOTTOM_MARGIN), RES_UL_SPACE, cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_LO_MARGIN|CONVERT_TWIPS}, diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 3f99c3c2a49f..d297a262bb5b 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -1994,6 +1994,21 @@ static void lcl_SetStyleProperty(const SfxItemPropertySimpleEntry& rEntry, bDone = true; break; } + case RES_TEXT_VERT_ADJUST: + { + if( pDoc ) + { + SwPageDesc* pPageDesc = pDoc->FindPageDesc( rBase.GetOldPageDesc().GetName() ); + if( pPageDesc ) + { + drawing::TextVerticalAdjust nVA; + rValue >>= nVA; + pPageDesc->SetVerticalAdjustment( nVA ); + } + } + bDone = true; + break; + } case FN_UNO_IS_AUTO_UPDATE: { bool bAuto = *static_cast<sal_Bool const *>(aValue.getValue()); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 24b943d0af2a..55d1d6cd09cd 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -5762,6 +5762,27 @@ void DocxAttributeOutput::SectionType( sal_uInt8 nBreakCode ) FSEND ); } +void DocxAttributeOutput::TextVerticalAdjustment( const drawing::TextVerticalAdjust nVA ) +{ + switch( nVA ) + { + case drawing::TextVerticalAdjust_CENTER: + m_pSerializer->singleElementNS( XML_w, XML_vAlign, + FSNS( XML_w, XML_val ), "center", FSEND ); + break; + case drawing::TextVerticalAdjust_BOTTOM: + m_pSerializer->singleElementNS( XML_w, XML_vAlign, + FSNS( XML_w, XML_val ), "bottom", FSEND ); + break; + case drawing::TextVerticalAdjust_BLOCK: //justify + m_pSerializer->singleElementNS( XML_w, XML_vAlign, + FSNS( XML_w, XML_val ), "both", FSEND ); + break; + default: + break; + } +} + void DocxAttributeOutput::StartFont( const OUString& rFamilyName ) const { m_pSerializer->startElementNS( XML_w, XML_font, diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 07e293aa389f..c2ed3795d4a2 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -290,6 +290,9 @@ public: /// msword::ColumnBreak or msword::PageBreak virtual void SectionBreak( sal_uInt8 nC, const WW8_SepInfo* pSectionInfo = NULL ) override; + // preserve DOCX page vertical alignment + virtual void TextVerticalAdjustment( const drawing::TextVerticalAdjust ) SAL_OVERRIDE; + /// Start of the section properties. virtual void StartSection() override; diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 34b84654e929..4132d825d0bc 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -31,6 +31,7 @@ #include <oox/drawingml/drawingmltypes.hxx> #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> #include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp> +#include <com/sun/star/drawing/TextVerticalAdjust.hpp> #include <com/sun/star/table/ShadowFormat.hpp> #include <com/sun/star/text/HoriOrientation.hpp> #include <com/sun/star/text/RelOrientation.hpp> @@ -2305,7 +2306,31 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext ) rContext->Insert(PROP_MIRROR_INDENTS, uno::makeAny( nIntValue != 0 ), true, PARA_GRAB_BAG); break; case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported + break; case NS_ooxml::LN_EG_SectPrContents_vAlign: + { + OSL_ENSURE(pSectionContext, "SectionContext unavailable!"); + if( pSectionContext ) + { + drawing::TextVerticalAdjust nVA = drawing::TextVerticalAdjust_TOP; + switch( nIntValue ) + { + case NS_ooxml::LN_Value_ST_VerticalJc_center: //92367 + nVA = drawing::TextVerticalAdjust_CENTER; + break; + case NS_ooxml::LN_Value_ST_VerticalJc_both: //92368 - justify + nVA = drawing::TextVerticalAdjust_BLOCK; + break; + case NS_ooxml::LN_Value_ST_VerticalJc_bottom: //92369 + nVA = drawing::TextVerticalAdjust_BOTTOM; + break; + default: + break; + } + pSectionContext->Insert( PROP_TEXT_VERTICAL_ADJUST, uno::makeAny( nVA ), true, PARA_GRAB_BAG ); + } + } + break; case NS_ooxml::LN_EG_RPrBase_fitText: break; case NS_ooxml::LN_ffdata: diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index e8b85d745432..426987fb635c 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -277,6 +277,7 @@ OUString getPropertyName( PropertyIds eId ) case PROP_WIDTH_TYPE : sName = "WidthType"; break; case PROP_TBL_LOOK : sName = "TblLook"; break; case PROP_TEXT_RANGE: sName = "TextRange"; break; + case PROP_TEXT_VERTICAL_ADJUST : sName = "TextVerticalAdjust"; break; case PROP_SERVICE_CHAR_STYLE : sName = "com.sun.star.style.CharacterStyle"; break; case PROP_SERVICE_PARA_STYLE : sName = "com.sun.star.style.ParagraphStyle"; break; case PROP_CHARACTER_STYLES : sName = "CharacterStyles"; break; diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index 75a2a9b70ca0..cf3abe89ce97 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -286,6 +286,7 @@ enum PropertyIds ,PROP_TEXT ,PROP_TEXT_COLUMNS ,PROP_TEXT_RANGE + ,PROP_TEXT_VERTICAL_ADJUST ,PROP_TITLE ,PROP_TOKEN_CHAPTER_INFO ,PROP_TOKEN_HYPERLINK_END |