[Libreoffice-commits] core.git: 3 commits - sw/qa writerfilter/source
Miklos Vajna
vmiklos at suse.cz
Wed Apr 10 04:13:26 PDT 2013
sw/qa/extras/rtfimport/rtfimport.cxx | 15 ++++++++-------
writerfilter/source/rtftok/rtfdocumentimpl.cxx | 5 +++++
writerfilter/source/rtftok/rtfdocumentimpl.hxx | 2 ++
writerfilter/source/rtftok/rtfsdrimport.cxx | 25 ++++++++++++++++++++-----
4 files changed, 35 insertions(+), 12 deletions(-)
New commits:
commit 92e74798a753b5eb595a5964cc8efe70e3a6e56b
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Wed Apr 10 13:07:54 2013 +0200
RTF import of new-style frames: fix txflTextFlow shape property
Change-Id: If6febeaea00b384ea36d470264c04dfb4c7afd24
diff --git a/writerfilter/source/rtftok/rtfsdrimport.cxx b/writerfilter/source/rtftok/rtfsdrimport.cxx
index f856099..15f54f4 100644
--- a/writerfilter/source/rtftok/rtfsdrimport.cxx
+++ b/writerfilter/source/rtftok/rtfsdrimport.cxx
@@ -136,6 +136,7 @@ void RTFSdrImport::resolve(RTFShape& rShape)
uno::Any aLineColor = uno::makeAny(COL_BLACK);
// Default line width is 0.75 pt (26 mm100) in Word, 0 in Writer.
uno::Any aLineWidth = uno::makeAny(sal_Int32(26));
+ text::WritingMode eWritingMode = text::WritingMode_LR_TB;
for (std::vector< std::pair<OUString, OUString> >::iterator i = rShape.aProperties.begin();
i != rShape.aProperties.end(); ++i)
@@ -206,10 +207,7 @@ void RTFSdrImport::resolve(RTFShape& rShape)
else if (i->first == "txflTextFlow" && xPropertySet.is())
{
if (i->second.toInt32() == 1)
- {
- aAny <<= text::WritingMode_TB_RL;
- xPropertySet->setPropertyValue("TextWritingMode", aAny);
- }
+ eWritingMode = text::WritingMode_TB_RL;
}
else if (i->first == "fLine" && xPropertySet.is())
resolveFLine(xPropertySet, i->second.toInt32());
@@ -373,6 +371,11 @@ void RTFSdrImport::resolve(RTFShape& rShape)
xPropertySet->setPropertyValue("LineWidth", aLineWidth);
if (rShape.oZ)
resolveDhgt(xPropertySet, *rShape.oZ);
+ if (bTextFrame)
+ // Writer textframes implement text::WritingMode2, which is a different data type.
+ xPropertySet->setPropertyValue("WritingMode", uno::makeAny(sal_Int16(eWritingMode)));
+ else
+ xPropertySet->setPropertyValue("TextWritingMode", uno::makeAny(eWritingMode));
}
if (nType == ESCHER_ShpInst_PictureFrame) // picture frame
commit 9a8306a18998b42b387eb83128c82abbcfdd87a3
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Wed Apr 10 12:22:03 2013 +0200
RTF import of new-style frames: fix name
Change-Id: Ifa8e79fb9c4b9ad5a0bf64466cefad91b6bbeb0c
diff --git a/writerfilter/source/rtftok/rtfsdrimport.cxx b/writerfilter/source/rtftok/rtfsdrimport.cxx
index 3cb4038..f856099 100644
--- a/writerfilter/source/rtftok/rtfsdrimport.cxx
+++ b/writerfilter/source/rtftok/rtfsdrimport.cxx
@@ -26,6 +26,7 @@
* instead of those above.
*/
+#include <com/sun/star/container/XNamed.hpp>
#include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
#include <com/sun/star/drawing/LineStyle.hpp>
@@ -171,7 +172,15 @@ void RTFSdrImport::resolve(RTFShape& rShape)
xPropertySet->setPropertyValue("FillColor", aAny);
}
else if ( i->first == "wzName" )
- xPropertySet->setPropertyValue("Name", uno::makeAny(i->second));
+ {
+ if (bTextFrame)
+ {
+ uno::Reference<container::XNamed> xNamed(xShape, uno::UNO_QUERY);
+ xNamed->setName(i->second);
+ }
+ else
+ xPropertySet->setPropertyValue("Name", uno::makeAny(i->second));
+ }
else if ( i->first == "wzDescription" )
xPropertySet->setPropertyValue("Description", uno::makeAny(i->second));
else if ( i->first == "pib" )
commit 91a151085a9e8e77e30c0e21740f211fd5eedd95
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Wed Apr 10 11:55:22 2013 +0200
restore disabled rtfimport tests
There were two problems here:
- Writer textframes don't have an AnchorPosition property, use
compareRegionStarts() instead
- turns out DOC/DOCX import doesn't create Write textframes when the
shape has no text, doing so in the RTF import fixes the other two
testcase as well.
Change-Id: Ib2b4a0b7f8317d300fd532daea22568e33eceb53
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index dc776d9..89c96f4 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -46,6 +46,7 @@
#include <com/sun/star/text/XTextGraphicObjectsSupplier.hpp>
#include <com/sun/star/text/XTextFieldsSupplier.hpp>
#include <com/sun/star/text/XTextFramesSupplier.hpp>
+#include <com/sun/star/text/XTextRangeCompare.hpp>
#include <com/sun/star/text/XTextTablesSupplier.hpp>
#include <com/sun/star/text/XTextTable.hpp>
#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
@@ -401,10 +402,14 @@ void Test::testFdo45187()
uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
// There should be two shapes.
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xDraws->getCount());
-#if 0
+
// They should be anchored to different paragraphs.
- CPPUNIT_ASSERT(getProperty<awt::Point>(xDraws->getByIndex(0), "AnchorPosition").Y != getProperty<awt::Point>(xDraws->getByIndex(1), "AnchorPosition").Y);
-#endif
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextRangeCompare> xTextRangeCompare(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xAnchor0 = uno::Reference<text::XTextContent>(xDraws->getByIndex(0), uno::UNO_QUERY)->getAnchor();
+ uno::Reference<text::XTextRange> xAnchor1 = uno::Reference<text::XTextContent>(xDraws->getByIndex(1), uno::UNO_QUERY)->getAnchor();
+ // Was 0 ("starts at the same position"), should be 1 ("starts before")
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xTextRangeCompare->compareRegionStarts(xAnchor0, xAnchor1));
}
void Test::testFdo46662()
@@ -752,11 +757,9 @@ void Test::testFdo52066()
* xray ThisComponent.DrawPage(0).Size.Height
*/
uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
-#if 0
uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
uno::Reference<drawing::XShape> xShape(xDraws->getByIndex(0), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(sal_Int32(TWIP_TO_MM100(19)), xShape->getSize().Height);
-#endif
}
void Test::testFdo48033_53594()
@@ -1167,7 +1170,6 @@ void Test::testFdo59638()
void Test::testFdo60722()
{
-#if 0
// The problem was that the larger shape was over the smaller one, and not the other way around.
uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
@@ -1183,7 +1185,6 @@ void Test::testFdo60722()
xShape.set(xDraws->getByIndex(2), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(sal_uInt32(26), getProperty<sal_uInt32>(xShape, "LineWidth"));
CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), getProperty<sal_uInt32>(xShape, "LineColor"));
-#endif
}
void Test::testFdo61909()
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index b458bff..1df9d61 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -612,6 +612,11 @@ RTFParserState& RTFDocumentImpl::getDefaultState()
return m_pSuperstream->getDefaultState();
}
+RTFBuffer_t RTFDocumentImpl::getShapetextBuffer()
+{
+ return m_aShapetextBuffer;
+}
+
void RTFDocumentImpl::resolve(Stream & rMapper)
{
m_pMapperStream = &rMapper;
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index 16e1493..8ebf601 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -478,6 +478,8 @@ namespace writerfilter {
rtl_TextEncoding getEncoding(sal_uInt32 nFontIndex);
/// Get the default parser state.
RTFParserState& getDefaultState();
+ /// Get the shape text buffer;
+ RTFBuffer_t getShapetextBuffer();
private:
SvStream& Strm();
diff --git a/writerfilter/source/rtftok/rtfsdrimport.cxx b/writerfilter/source/rtftok/rtfsdrimport.cxx
index 6d296a4..3cb4038 100644
--- a/writerfilter/source/rtftok/rtfsdrimport.cxx
+++ b/writerfilter/source/rtftok/rtfsdrimport.cxx
@@ -149,6 +149,7 @@ void RTFSdrImport::resolve(RTFShape& rShape)
break;
case ESCHER_ShpInst_Rectangle:
case ESCHER_ShpInst_TextBox:
+ if (!m_rImport.getShapetextBuffer().empty())
{
createShape("com.sun.star.text.TextFrame", xShape, xPropertySet);
bTextFrame = true;
@@ -156,6 +157,8 @@ void RTFSdrImport::resolve(RTFShape& rShape)
for (size_t j = 0; j < aDefaults.size(); ++j)
xPropertySet->setPropertyValue(aDefaults[j].Name, aDefaults[j].Value);
}
+ else
+ bCustom = true;
break;
default:
bCustom = true;
More information about the Libreoffice-commits
mailing list