diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-02-21 15:15:08 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-02-21 17:28:40 +0100 |
commit | bbef8b4a93ff840fa6306cc6e41e1e2dd3e6c8fa (patch) | |
tree | 7e81779c4edb6d9f85ddad6432649a715e26fbbf /writerfilter | |
parent | e6d0daefbdb8367384d8e5c217f65118bd8dc565 (diff) |
implement import of RTF_DPLINE
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 4c3994765d0a..9bc8caf93697 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1291,6 +1291,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: SAL_INFO("writerfilter", OSL_THIS_FUNC << ": TODO handle destination '" << lcl_RtfToString(nKeyword) << "'"); // Make sure we skip destinations (even without \*) till we don't handle them @@ -1981,6 +1984,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: SAL_INFO("writerfilter", OSL_THIS_FUNC << ": TODO handle flag '" << lcl_RtfToString(nKeyword) << "'"); aSkip.setParsed(false); @@ -2627,6 +2634,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: SAL_INFO("writerfilter", OSL_THIS_FUNC << ": TODO handle value '" << lcl_RtfToString(nKeyword) << "'"); aSkip.setParsed(false); @@ -3177,6 +3196,22 @@ int RTFDocumentImpl::popState() aFrame = m_aStates.top().aFrame; bPopFrame = true; } + else if (m_aStates.top().nDestinationState == DESTINATION_DRAWINGOBJECT) + { + 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); @@ -3342,6 +3377,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 62429739bb6e..d5cdedca0d34 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. |