diff options
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 28 | ||||
-rw-r--r-- | sw/source/core/doc/textboxhelper.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/unocore/unotext.cxx | 4 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxsdrexport.cxx | 12 | ||||
-rw-r--r-- | writerfilter/source/dmapper/GraphicImport.cxx | 33 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastContextHandler.cxx | 37 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastContextHandler.hxx | 3 |
7 files changed, 43 insertions, 78 deletions
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx index e59b25a430a6..abac561df575 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -98,10 +98,10 @@ DECLARE_OOXMLIMPORT_TEST(testTdf129888vml, "tdf129888vml.docx") //to be calculated from the page frame instead of the table: uno::Reference<beans::XPropertySet> xShapeProperties(getShape(1), uno::UNO_QUERY); - sal_Int16 nValue; - xShapeProperties->getPropertyValue("HoriOrientRelation") >>= nValue; + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf129888vml The line shape has bad place!", - text::RelOrientation::PAGE_FRAME, nValue); + false, bValue); } DECLARE_OOXMLIMPORT_TEST(testTdf129888dml, "tdf129888dml.docx") @@ -112,18 +112,18 @@ DECLARE_OOXMLIMPORT_TEST(testTdf129888dml, "tdf129888dml.docx") //to be calculated from the page frame instead of the table: uno::Reference<beans::XPropertySet> xShapeProperties(getShape(1), uno::UNO_QUERY); - sal_Int16 nValue; - xShapeProperties->getPropertyValue("HoriOrientRelation") >>= nValue; + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf129888dml The shape has bad place!", - text::RelOrientation::PAGE_FRAME, nValue); + false, bValue); } DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf130120, "tdf130120.docx") { - //Text for exporting the allowincell attribute: + //Text for exporting the allowincell attribute: xmlDocPtr p_XmlDoc = parseExport("word/document.xml"); assertXPath(p_XmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r/mc:AlternateContent/" - "mc:Choice/w:drawing/wp:anchor","layoutInCell","0"); + "mc:Choice/w:drawing/wp:anchor", "layoutInCell", "0"); } @@ -131,10 +131,10 @@ DECLARE_OOXMLEXPORT_TEST(testTdf87569v, "tdf87569_vml.docx") { //the original tdf87569 sample has vml shapes... uno::Reference<beans::XPropertySet> xShapeProperties(getShape(1), uno::UNO_QUERY); - sal_Int16 nValue; - xShapeProperties->getPropertyValue("HoriOrientRelation") >>= nValue; + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf87569_vml: The Shape is not in the table!", - text::RelOrientation::FRAME, nValue); + true, bValue); } DECLARE_ODFEXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.docx") @@ -249,10 +249,10 @@ DECLARE_OOXMLEXPORT_TEST(testTdf87569d, "tdf87569_drawingml.docx") { //if the original tdf87569 sample is upgraded it will have drawingml shapes... uno::Reference<beans::XPropertySet> xShapeProperties(getShape(1), uno::UNO_QUERY); - sal_Int16 nValue; - xShapeProperties->getPropertyValue("HoriOrientRelation") >>= nValue; + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf87569_drawingml: The Shape is not in the table!", - text::RelOrientation::FRAME, nValue); + true, bValue); } DECLARE_OOXMLEXPORT_TEST(testTdf130610, "tdf130610_bold_in_2_styles.ott") diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index b59bb46f20b0..4f2550f06b52 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -62,8 +62,8 @@ void SwTextBoxHelper::create(SwFrameFormat* pShape) pShape->GetDoc()->GetDocShell()->GetBaseModel(), uno::UNO_QUERY); uno::Reference<text::XTextContentAppend> xTextContentAppend(xTextDocument->getText(), uno::UNO_QUERY); - xTextContentAppend->appendTextContent(xTextFrame, uno::Sequence<beans::PropertyValue>()); + xTextContentAppend->appendTextContent(xTextFrame, uno::Sequence<beans::PropertyValue>()); // Link FLY and DRAW formats, so it becomes a text box (needed for syncProperty calls). uno::Reference<text::XTextFrame> xRealTextFrame(xTextFrame, uno::UNO_QUERY); auto pTextFrame = dynamic_cast<SwXTextFrame*>(xRealTextFrame.get()); @@ -110,6 +110,8 @@ void SwTextBoxHelper::create(SwFrameFormat* pShape) syncProperty(pShape, RES_FRM_SIZE, MID_FRMSIZE_SIZE, uno::makeAny(xShape->getSize())); uno::Reference<beans::XPropertySet> xShapePropertySet(xShape, uno::UNO_QUERY); + syncProperty(pShape, RES_FOLLOW_TEXT_FLOW, MID_FOLLOW_TEXT_FLOW, + xShapePropertySet->getPropertyValue(UNO_NAME_IS_FOLLOWING_TEXT_FLOW)); syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_ORIENT, xShapePropertySet->getPropertyValue(UNO_NAME_HORI_ORIENT)); syncProperty(pShape, RES_HORI_ORIENT, MID_HORIORIENT_RELATION, diff --git a/sw/source/core/unocore/unotext.cxx b/sw/source/core/unocore/unotext.cxx index 734702ad2801..9ef0f55dc08c 100644 --- a/sw/source/core/unocore/unotext.cxx +++ b/sw/source/core/unocore/unotext.cxx @@ -1478,8 +1478,8 @@ SwXText::insertTextContentWithProperties( uno::Reference< text::XTextRange > SAL_CALL SwXText::appendTextContent( const uno::Reference< text::XTextContent >& xTextContent, - const uno::Sequence< beans::PropertyValue >& - rCharacterAndParagraphProperties) + const uno::Sequence< beans::PropertyValue >& rCharacterAndParagraphProperties + ) { // Right now this doesn't need a guard, as it's just calling the insert // version, that has it already. diff --git a/sw/source/filter/ww8/docxsdrexport.cxx b/sw/source/filter/ww8/docxsdrexport.cxx index 72ba3f0a6bc9..fbdee23ebd70 100644 --- a/sw/source/filter/ww8/docxsdrexport.cxx +++ b/sw/source/filter/ww8/docxsdrexport.cxx @@ -471,15 +471,9 @@ void DocxSdrExport::startDMLAnchorInline(const SwFrameFormat* pFrameFormat, cons { uno::Reference<drawing::XShape> xShape((const_cast<SdrObject*>(pObj)->getUnoShape()), uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> propList = lclGetProperty(xShape, "InteropGrabBag"); - if (propList.hasElements()) - { - auto pLclProp = std::find_if( - std::begin(propList), std::end(propList), - [](const beans::PropertyValue& rProp) { return rProp.Name == "LayoutInCell"; }); - if (pLclProp && pLclProp != propList.end()) - pLclProp->Value >>= bLclInTabCell; - } + uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY); + if (xShapeProps.is()) + xShapeProps->getPropertyValue("IsFollowingTextFlow") >>= bLclInTabCell; } if (bLclInTabCell) attrList->add(XML_layoutInCell, "1"); diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index 21570269db42..ce449a6251b2 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -270,7 +270,7 @@ public: ,nVertOrient( text::VertOrientation::NONE ) ,nVertRelation( text::RelOrientation::FRAME ) ,nWrap(text::WrapTextMode_NONE) - ,bLayoutInCell(false) + ,bLayoutInCell(true) ,bOpaque( !rDMapper.IsInHeaderFooter() ) ,bContour(false) ,bContourOutside(true) @@ -662,7 +662,6 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) { uno::Reference< drawing::XShape> xShape; rValue.getAny( ) >>= xShape; - if ( xShape.is( ) ) { // Is it a graphic image @@ -847,7 +846,12 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) eAnchorType = text::TextContentAnchorType_AT_CHARACTER; xShapeProps->setPropertyValue("AnchorType", uno::makeAny(eAnchorType)); - + if (m_pImpl->bLayoutInCell && bTextBox && m_pImpl->rDomainMapper.IsInTable() + && m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME) + m_pImpl->nHoriRelation = text::RelOrientation::FRAME; + if(m_pImpl->rDomainMapper.IsInTable()) + xShapeProps->setPropertyValue(getPropertyName(PROP_FOLLOW_TEXT_FLOW), + uno::makeAny(m_pImpl->bLayoutInCell)); //only the position orientation is handled in applyPosition() m_pImpl->applyPosition(xShapeProps); @@ -884,25 +888,6 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) xShapeProps->setPropertyValue("RotateAngle", uno::makeAny(nRotation)); } - //tdf#109411 If anchored object is in table, Word calculates its position from cell border - //instead of page (what is set in the sample document) - if (xShapeProps) - { - uno::Sequence<beans::PropertyValue> aShapeGrabBag; - xShapeProps->getPropertyValue("InteropGrabBag") >>= aShapeGrabBag; - beans::PropertyValue aLayInCell; - aLayInCell.Name = "LayoutInCell"; - aLayInCell.Value <<= m_pImpl->bLayoutInCell; - aShapeGrabBag.realloc(1 + aShapeGrabBag.size()); - aShapeGrabBag[aShapeGrabBag.size() - 1] = aLayInCell; - xShapeProps->setPropertyValue("InteropGrabBag", - uno::makeAny(aShapeGrabBag)); - } - if (m_pImpl->rDomainMapper.IsInTable() && m_pImpl->bLayoutInCell && - m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME && IsGraphic()) - { - m_pImpl->nHoriRelation = text::RelOrientation::FRAME; - } m_pImpl->applyRelativePosition(xShapeProps, /*bRelativeOnly=*/true); @@ -1370,9 +1355,9 @@ uno::Reference<text::XTextContent> GraphicImport::createGraphicObject(uno::Refer } xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_SURROUND ), uno::makeAny(static_cast<sal_Int32>(m_pImpl->nWrap))); - if( m_pImpl->rDomainMapper.IsInTable() && m_pImpl->bLayoutInCell ) + if( m_pImpl->rDomainMapper.IsInTable()) xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_FOLLOW_TEXT_FLOW ), - uno::makeAny(true)); + uno::makeAny(m_pImpl->bLayoutInCell)); xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_SURROUND_CONTOUR ), uno::makeAny(m_pImpl->bContour)); diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index e369705fc5d3..02a9c782f707 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -37,6 +37,7 @@ #include <dmapper/PropertyIds.hxx> #include <comphelper/propertysequence.hxx> #include <comphelper/sequenceashashmap.hxx> +#include <dmapper/PropertyIds.hxx> static const sal_Unicode uCR = 0xd; static const sal_Unicode uFtnEdnRef = 0x2; @@ -69,7 +70,8 @@ OOXMLFastContextHandler::OOXMLFastContextHandler mpStream(nullptr), mnTableDepth(0), inPositionV(false), - mbLayoutInCell(true), + mbAllowInCell(true), + mbIsVMLfound(false), m_xContext(context), m_bDiscardChildren(false), m_bTookChoice(false) @@ -90,7 +92,8 @@ OOXMLFastContextHandler::OOXMLFastContextHandler(OOXMLFastContextHandler * pCont mpParserState(pContext->mpParserState), mnTableDepth(pContext->mnTableDepth), inPositionV(pContext->inPositionV), - mbLayoutInCell(pContext->mbLayoutInCell), + mbAllowInCell(pContext->mbAllowInCell), + mbIsVMLfound(pContext->mbIsVMLfound), m_xContext(pContext->m_xContext), m_bDiscardChildren(pContext->m_bDiscardChildren), m_bTookChoice(pContext->m_bTookChoice) @@ -1670,34 +1673,15 @@ void OOXMLFastContextHandlerShape::sendShape( Token_t Element ) bool bIsPicture = Element == ( NMSP_dmlPicture | XML_pic ); - //tdf#87569: Fix table layout with correcting anchoring //If anchored object is in table, Word calculates its position from cell border //instead of page (what is set in the sample document) uno::Reference<beans::XPropertySet> xShapePropSet(xShape, uno::UNO_QUERY); - if(xShapePropSet && bIsPicture) //TODO make grabbag for textboxes as well - { - uno::Sequence<beans::PropertyValue> aShapeGrabBag; - xShapePropSet->getPropertyValue("InteropGrabBag") >>= aShapeGrabBag; - beans::PropertyValue aLayInCell; - aLayInCell.Name = "LayoutInCell"; - aLayInCell.Value <<= mbLayoutInCell; - aShapeGrabBag.realloc(1+aShapeGrabBag.size()); - aShapeGrabBag[aShapeGrabBag.size() -1] = aLayInCell; - xShapePropSet->setPropertyValue("InteropGrabBag", uno::makeAny(aShapeGrabBag)); - } - if (mnTableDepth > 0 && mbLayoutInCell) //if we had a table + if (mnTableDepth > 0 && xShapePropSet.is() && mbIsVMLfound) //if we had a table { - sal_Int16 nCurrentHorOriRel = {}; // spurious -Werror=maybe-uninitialized - xShapePropSet->getPropertyValue("HoriOrientRelation") >>= nCurrentHorOriRel; - //and the correction: - if (nCurrentHorOriRel == com::sun::star::text::RelOrientation::PAGE_FRAME) - { - xShapePropSet->setPropertyValue("HoriOrientRelation", - uno::makeAny(text::RelOrientation::FRAME)); - } + xShapePropSet->setPropertyValue(dmapper::getPropertyName(dmapper::PROP_FOLLOW_TEXT_FLOW), + uno::makeAny(mbAllowInCell)); } - // Notify the dmapper that the shape is ready to use if ( !bIsPicture ) { @@ -1748,7 +1732,7 @@ OOXMLFastContextHandlerShape::lcl_createFastChildContext bool bGroupShape = Element == Token_t(NMSP_vml | XML_group); // drawingML version also counts as a group shape. bGroupShape |= mrShapeContext->getStartToken() == Token_t(NMSP_wpg | XML_wgp); - + mbIsVMLfound = (getNamespace(Element) == NMSP_vmlOffice) || (getNamespace(Element) == NMSP_vml); switch (oox::getNamespace(Element)) { case NMSP_doc: @@ -1771,9 +1755,8 @@ OOXMLFastContextHandlerShape::lcl_createFastChildContext this); //tdf129888 store allowincell attribute of the VML shape - mbLayoutInCell = true; if (Attribs->hasAttribute(NMSP_vmlOffice | XML_allowincell)) - mbLayoutInCell + mbAllowInCell = !(Attribs->getValue(NMSP_vmlOffice | XML_allowincell) == "f"); if (!bGroupShape) diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx index 079d49d695c2..5bc4ea382f12 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx @@ -226,7 +226,8 @@ protected: const css::uno::Reference< css::uno::XComponentContext >& getComponentContext() const { return m_xContext;} bool inPositionV; - bool mbLayoutInCell; // o:allowincell + bool mbAllowInCell; // o:allowincell + bool mbIsVMLfound; OOXMLValue::Pointer_t mpGridAfter; private: |