oox/source/drawingml/textfield.cxx | 19 ++++++- sd/qa/unit/data/odp/numfmt.odp |binary sd/qa/unit/data/pptx/numfmt.pptx |binary sd/qa/unit/export-tests.cxx | 90 +++++++++++++++++++++++++++++++++++++ 4 files changed, 107 insertions(+), 2 deletions(-)
New commits: commit 2b0669eec0d86e973a7d8def8744c522bbf8af8b Author: Rosemary Sebastian <rosemarys...@gmail.com> Date: Mon Jan 25 12:40:35 2016 +0530 Format the datetime fields properly on import Make sure that, after export, the datetime fields in impress are imported with the correct number format. Change-Id: I5565fef69b3a62e7dd59ea0d39cde151fb0af976 Reviewed-on: https://gerrit.libreoffice.org/21610 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Katarina Behrens <katarina.behr...@cib.de> diff --git a/oox/source/drawingml/textfield.cxx b/oox/source/drawingml/textfield.cxx index 135ef31..7c5fba0 100644 --- a/oox/source/drawingml/textfield.cxx +++ b/oox/source/drawingml/textfield.cxx @@ -60,7 +60,6 @@ void lclCreateTextFields( std::list< Reference< XTextField > > & aFields, { Reference< XInterface > xIface; Reference< XMultiServiceFactory > xFactory( xModel, UNO_QUERY_THROW ); - if( sType.startsWith("datetime")) { OString s = OUStringToOString( sType, RTL_TEXTENCODING_UTF8); @@ -69,6 +68,7 @@ void lclCreateTextFields( std::list< Reference< XTextField > > & aFields, { bool bIsDate = true; int idx = p.toInt32(); + sal_uInt16 nNumFmt; // OSL_TRACE( "OOX: p = %s, %d", p.pData->buffer, idx ); xIface = xFactory->createInstance( "com.sun.star.text.TextField.DateTime" ); aFields.push_back( Reference< XTextField > ( xIface, UNO_QUERY ) ); @@ -79,10 +79,14 @@ void lclCreateTextFields( std::list< Reference< XTextField > > & aFields, { case 1: // Date dd/mm/yyyy // this is the default format... + nNumFmt = 5; + xProps->setPropertyValue("NumberFormat", makeAny(nNumFmt)); break; case 2: // Date Day, Month dd, yyyy break; case 3: // Date dd Month yyyy + nNumFmt = 3; + xProps->setPropertyValue("NumberFormat", makeAny(nNumFmt)); break; case 4: // Date Month dd, yyyy break; @@ -100,17 +104,28 @@ void lclCreateTextFields( std::list< Reference< XTextField > > & aFields, break; case 10: // Time H:MM bIsDate = false; + nNumFmt = 3; + xProps->setPropertyValue("NumberFormat", makeAny(nNumFmt)); break; case 11: // Time H:MM:SS bIsDate = false; // this is the default format + nNumFmt = 2; + xProps->setPropertyValue("NumberFormat", makeAny(nNumFmt)); break; case 12: // Time H:MM PM bIsDate = false; + nNumFmt = 6; + xProps->setPropertyValue("NumberFormat", makeAny(nNumFmt)); break; case 13: // Time H:MM:SS PM bIsDate = false; + nNumFmt = 7; + xProps->setPropertyValue("NumberFormat", makeAny(nNumFmt)); break; + default: + nNumFmt = 2; + xProps->setPropertyValue("NumberFormat", makeAny(nNumFmt)); } xProps->setPropertyValue( "IsDate", makeAny( bIsDate ) ); xProps->setPropertyValue( "IsFixed", makeAny( false ) ); @@ -190,4 +205,4 @@ sal_Int32 TextField::insertAt( } } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file diff --git a/sd/qa/unit/data/odp/numfmt.odp b/sd/qa/unit/data/odp/numfmt.odp new file mode 100644 index 0000000..6fd32ce Binary files /dev/null and b/sd/qa/unit/data/odp/numfmt.odp differ diff --git a/sd/qa/unit/data/pptx/numfmt.pptx b/sd/qa/unit/data/pptx/numfmt.pptx new file mode 100755 index 0000000..aca6927 Binary files /dev/null and b/sd/qa/unit/data/pptx/numfmt.pptx differ diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx index 211cff2..17ecbd2 100644 --- a/sd/qa/unit/export-tests.cxx +++ b/sd/qa/unit/export-tests.cxx @@ -137,6 +137,8 @@ public: void testParaMarginAndindentation(); void testTransparentBackground(); void testExportTransitionsPPTX(); + void testDatetimeFieldNumberFormat(); + void testDatetimeFieldNumberFormatPPTX(); void testFdo90607(); void testTdf91378(); @@ -188,6 +190,8 @@ public: CPPUNIT_TEST(testExportTransitionsPPTX); CPPUNIT_TEST(testTdf92527); + CPPUNIT_TEST(testDatetimeFieldNumberFormat); + CPPUNIT_TEST(testDatetimeFieldNumberFormatPPTX); CPPUNIT_TEST_SUITE_END(); @@ -1499,6 +1503,92 @@ void SdExportTest::testTdf92527() xDocShRef->DoClose(); } +namespace { + +void matchNumberFormat( int nPage, uno::Reference< text::XTextRange > xRun) +{ + uno::Reference< beans::XPropertySet > xPropSet( xRun, uno::UNO_QUERY_THROW ); + + uno::Reference<text::XTextField> xField; + xPropSet->getPropertyValue("TextField") >>= xField; + CPPUNIT_ASSERT_MESSAGE("Where is the text field?", xField.is() ); + + xPropSet.set(xField, uno::UNO_QUERY); + sal_Int32 nNumFmt; + xPropSet->getPropertyValue("NumberFormat") >>= nNumFmt; + switch( nPage ) + { + case 0: // 13/02/96 + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number formats of Date fields don't match", sal_Int32(2), nNumFmt); + break; + case 1: // 13/02/1996 + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number formats of Date fields don't match", sal_Int32(5), nNumFmt); + break; + case 2: // 13 February 1996 + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number formats of Date fields don't match", sal_Int32(3), nNumFmt); + break; + case 3: // 13:49:38 + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number formats of Time fields don't match", sal_Int32(2), nNumFmt); + break; + case 4: // 13:49 + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number formats of Time fields don't match", sal_Int32(3), nNumFmt); + break; + case 5: // 01:49 PM + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number formats of Time fields don't match", sal_Int32(6), nNumFmt); + break; + case 6: // 01:49:38 PM + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number formats of Time fields don't match", sal_Int32(7), nNumFmt); + } +} + +} + +void SdExportTest::testDatetimeFieldNumberFormat() +{ + ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/odp/numfmt.odp"), ODP); + + xDocShRef = saveAndReload( xDocShRef, PPTX ); + + for(sal_uInt16 i = 0; i <= 6; ++i) + { + // get TextShape 1 from page i + uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, i, xDocShRef ) ); + + // Get first paragraph + uno::Reference<text::XTextRange> xParagraph( getParagraphFromShape( 0, xShape ) ); + + // first chunk of text + uno::Reference<text::XTextRange> xRun( getRunFromParagraph( 0, xParagraph ) ); + + matchNumberFormat( i, xRun ); + } + + xDocShRef->DoClose(); +} + +void SdExportTest::testDatetimeFieldNumberFormatPPTX() +{ + ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/numfmt.pptx"), PPTX); + + xDocShRef = saveAndReload( xDocShRef, PPTX ); + + for(sal_uInt16 i = 0; i <= 6; ++i) + { + // get TextShape 1 from page i + uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, i, xDocShRef ) ); + + // Get first paragraph + uno::Reference<text::XTextRange> xParagraph( getParagraphFromShape( 0, xShape ) ); + + // first chunk of text + uno::Reference<text::XTextRange> xRun( getRunFromParagraph( 0, xParagraph ) ); + + matchNumberFormat( i, xRun ); + } + + xDocShRef->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits