diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-02-21 15:15:08 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-03-01 12:21:03 +0100 |
commit | 059172306a4c4f8fc800a539d9fb1266301822ad (patch) | |
tree | fffd07309c90a8085b4b7609f096dab2af94faf9 /writerfilter | |
parent | e804bce8fa4c68ca018d9921d090771cc8836daf (diff) |
implement import of RTF_DPLINE, regression from LO 3.4
(cherry picked from commits bbef8b4a93ff840fa6306cc6e41e1e2dd3e6c8fa and
456a59b24d4ba5ac341f76b4302e82b687e97f69)
Signed-off-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 36 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.hxx | 12 |
2 files changed, 47 insertions, 1 deletions
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 7f1569e0baf6..a5f35787e273 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1285,6 +1285,9 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword) // This destination should be ignored by readers that support nested tables. m_aStates.top().nDestinationState = DESTINATION_SKIP; break; + case RTF_DO: + m_aStates.top().nDestinationState = DESTINATION_DRAWINGOBJECT; + break; default: #if OSL_DEBUG_LEVEL > 1 OSL_TRACE("%s: TODO handle destination '%s'", OSL_THIS_FUNC, lcl_RtfToString(nKeyword)); @@ -1963,6 +1966,10 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword) case RTF_POSXL: m_aStates.top().aFrame.nHoriAlign = NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_left; break; case RTF_POSXR: m_aStates.top().aFrame.nHoriAlign = NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_right; break; + case RTF_DPLINE: + m_aStates.top().aDrawingObject.xShape.set(getModelFactory()->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.LineShape"))), uno::UNO_QUERY); + m_aStates.top().aDrawingObject.xPropertySet.set(m_aStates.top().aDrawingObject.xShape, uno::UNO_QUERY); + break; default: #if OSL_DEBUG_LEVEL > 1 OSL_TRACE("%s: TODO handle flag '%s'", OSL_THIS_FUNC, lcl_RtfToString(nKeyword)); @@ -2610,6 +2617,18 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) lcl_putNestedAttribute(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_spacing, NS_ooxml::LN_CT_Spacing_after, pIntValue); break; + case RTF_DPX: + m_aStates.top().aDrawingObject.nLeft = TWIP_TO_MM100(nParam); + break; + case RTF_DPY: + m_aStates.top().aDrawingObject.nTop = TWIP_TO_MM100(nParam); + break; + case RTF_DPXSIZE: + m_aStates.top().aDrawingObject.nRight = TWIP_TO_MM100(nParam); + break; + case RTF_DPYSIZE: + m_aStates.top().aDrawingObject.nBottom = TWIP_TO_MM100(nParam); + break; default: #if OSL_DEBUG_LEVEL > 1 OSL_TRACE("%s: TODO handle value '%s'", OSL_THIS_FUNC, lcl_RtfToString(nKeyword)); @@ -3163,6 +3182,22 @@ int RTFDocumentImpl::popState() aFrame = m_aStates.top().aFrame; bPopFrame = true; } + else if (m_aStates.top().nDestinationState == DESTINATION_DRAWINGOBJECT && m_aStates.top().aDrawingObject.xShape.is()) + { + RTFDrawingObject& rDrawing = m_aStates.top().aDrawingObject; + uno::Reference<drawing::XShape> xShape(rDrawing.xShape); + xShape->setPosition(awt::Point(rDrawing.nLeft, rDrawing.nTop)); + xShape->setSize(awt::Size(rDrawing.nRight, rDrawing.nBottom)); + uno::Reference<drawing::XDrawPageSupplier> xDrawSupplier( m_xDstDoc, uno::UNO_QUERY); + if ( xDrawSupplier.is() ) + { + uno::Reference< drawing::XShapes > xShapes( xDrawSupplier->getDrawPage(), uno::UNO_QUERY ); + if ( xShapes.is() ) + xShapes->add( xShape ); + } + Mapper().startShape(xShape); + Mapper().endShape(); + } // See if we need to end a track change RTFValue::Pointer_t pTrackchange = m_aStates.top().aCharacterSprms.find(NS_ooxml::LN_trackchange); @@ -3323,6 +3358,7 @@ RTFParserState::RTFParserState() aLevelNumbers(), aPicture(), aShape(), + aDrawingObject(), aFrame(), nCellX(0), nCells(0), diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index 90ecc98bd4ee..98fa57c9733f 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -108,7 +108,8 @@ namespace writerfilter { DESTINATION_ANNOTATIONDATE, DESTINATION_ANNOTATIONAUTHOR, DESTINATION_FALT, - DESTINATION_FLYMAINCONTENT + DESTINATION_FLYMAINCONTENT, + DESTINATION_DRAWINGOBJECT }; enum RTFBorderState @@ -180,6 +181,14 @@ namespace writerfilter { int nBottom; }; + /// Stores the properties of a drawing object. + class RTFDrawingObject : public RTFShape + { + public: + uno::Reference<drawing::XShape> xShape; + uno::Reference<beans::XPropertySet> xPropertySet; + }; + /// Stores the properties of a picture. class RTFPicture { @@ -262,6 +271,7 @@ namespace writerfilter { RTFPicture aPicture; RTFShape aShape; + RTFDrawingObject aDrawingObject; RTFFrame aFrame; /// Current cellx value. |