diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2014-03-27 18:46:16 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2014-03-27 22:57:43 +0100 |
commit | b3b843481db30df80e39869052b57ec929e18ea8 (patch) | |
tree | 3346c75bbfd3fd46153e1bd66c7c2852800cbfca /sd | |
parent | 65db69dd9c1febf4920b09918bf84ee4bb6ec2f6 (diff) |
write (no)wrap of text only for custom shapes to .pptx (fdo#71961)
Apparently checking the TextWordWrap property in DrawingML::WriteText()
gives false by default for objects that do not have it set, which happens
to be everything except for custom shapes, which seem to be the only ones
to actually obey it. So all normal text would be exported as nowrap to .pptx
and read back as custom shape that has non-wrapping text.
I tried to make the property return true (which is what it should be in practice),
but that appears to be an exercise in futility, or I'm not mad enough to follow
the complicated property sets and whatnot. So just write it out only for custom
shapes. UNO purists, if any, are welcome to change the dynamic_cast to something
UNO-better if they manage without an ambiguous base class error.
Change-Id: I3ed906285fde88d902ac9c801986a82a7515638b
Diffstat (limited to 'sd')
-rw-r--r-- | sd/qa/unit/data/fdo71961.odp | bin | 0 -> 23506 bytes | |||
-rw-r--r-- | sd/qa/unit/import-tests.cxx | 35 |
2 files changed, 35 insertions, 0 deletions
diff --git a/sd/qa/unit/data/fdo71961.odp b/sd/qa/unit/data/fdo71961.odp Binary files differnew file mode 100644 index 000000000000..323fbe82a82c --- /dev/null +++ b/sd/qa/unit/data/fdo71961.odp diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index 382fe693220c..81f6b8a47d3c 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -66,6 +66,7 @@ public: void testN862510_1(); void testN862510_2(); void testN862510_3(); + void testFdo71961(); CPPUNIT_TEST_SUITE(SdFiltersTest); CPPUNIT_TEST(testDocumentLayout); @@ -86,6 +87,7 @@ public: CPPUNIT_TEST(testN862510_1); CPPUNIT_TEST(testN862510_2); CPPUNIT_TEST(testN862510_3); + CPPUNIT_TEST(testFdo71961); CPPUNIT_TEST_SUITE_END(); }; @@ -625,6 +627,39 @@ void SdFiltersTest::testStrictOOXML() CPPUNIT_ASSERT_MESSAGE( "failed to load shape", xShape.is() ); } +void SdFiltersTest::testFdo71961() +{ + ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/fdo71961.odp")); + CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() ); + CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() ); + + xDocShRef = saveAndReload( xDocShRef, PPTX ); + CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() ); + CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() ); + + SdDrawDocument *pDoc = xDocShRef->GetDoc(); + CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL ); + const SdrPage *pPage = pDoc->GetPage (1); + CPPUNIT_ASSERT_MESSAGE( "no page", pPage != NULL ); + + // Export to .pptx changes all text frames to custom shape objects, which obey TextWordWrap property + // (which is false for text frames otherwise and is ignored). Check that frames that should wrap still do. + SdrObjCustomShape *pTxtObj = dynamic_cast<SdrObjCustomShape *>( pPage->GetObj( 1 )); + CPPUNIT_ASSERT_MESSAGE( "no text object", pTxtObj != NULL); + CPPUNIT_ASSERT_EQUAL( OUString( "Text to be always wrapped" ), pTxtObj->GetOutlinerParaObject()->GetTextObject().GetText(0)); + CPPUNIT_ASSERT_EQUAL( true, (static_cast<const SdrTextWordWrapItem&>(pTxtObj->GetMergedItem(SDRATTR_TEXT_WORDWRAP))).GetValue()); + + pTxtObj = dynamic_cast<SdrObjCustomShape *>( pPage->GetObj( 2 )); + CPPUNIT_ASSERT_MESSAGE( "no text object", pTxtObj != NULL); + CPPUNIT_ASSERT_EQUAL( OUString( "Custom shape non-wrapped text" ), pTxtObj->GetOutlinerParaObject()->GetTextObject().GetText(0)); + CPPUNIT_ASSERT_EQUAL( false, (static_cast<const SdrTextWordWrapItem&>(pTxtObj->GetMergedItem(SDRATTR_TEXT_WORDWRAP))).GetValue()); + + pTxtObj = dynamic_cast<SdrObjCustomShape *>( pPage->GetObj( 3 )); + CPPUNIT_ASSERT_MESSAGE( "no text object", pTxtObj != NULL); + CPPUNIT_ASSERT_EQUAL( OUString( "Custom shape wrapped text" ), pTxtObj->GetOutlinerParaObject()->GetTextObject().GetText(0)); + CPPUNIT_ASSERT_EQUAL( true, (static_cast<const SdrTextWordWrapItem&>(pTxtObj->GetMergedItem(SDRATTR_TEXT_WORDWRAP))).GetValue()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdFiltersTest); CPPUNIT_PLUGIN_IMPLEMENT(); |