Kaydet (Commit) a21204ec authored tarafından Szymon Kłos's avatar Szymon Kłos Kaydeden (comit) Andras Timar

tdf#90627 Don't save empty conditions

Change-Id: I5a953c1b0fff7bf41a59360a8f52596264ddf266
Reviewed-on: https://gerrit.libreoffice.org/51293Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarSzymon Kłos <szymon.klos@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/51455Reviewed-by: 's avatarAndras Timar <andras.timar@collabora.com>
Tested-by: 's avatarAndras Timar <andras.timar@collabora.com>
üst 03a5a78a
......@@ -130,6 +130,7 @@ public:
void testTdf115394Zero();
/// SmartArt animated elements
void testTdf104792();
void testTdf90627();
CPPUNIT_TEST_SUITE(SdOOXMLExportTest2);
......@@ -180,6 +181,7 @@ public:
CPPUNIT_TEST(testTdf115394);
CPPUNIT_TEST(testTdf115394Zero);
CPPUNIT_TEST(testTdf104792);
CPPUNIT_TEST(testTdf90627);
CPPUNIT_TEST_SUITE_END();
......@@ -1215,6 +1217,19 @@ void SdOOXMLExportTest2::testTdf104792()
xDocShRef->DoClose();
}
void SdOOXMLExportTest2::testTdf90627()
{
::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/odp/tdf90627.odp"), ODP);
utl::TempFile tempFile;
xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
xmlDocPtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
// Don't export empty conditions
assertXPath(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst[1]/p:seq/p:cTn/p:childTnLst[1]/p:par[2]/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:endCondLst", 0);
xDocShRef->DoClose();
}
CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest2);
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -103,8 +103,8 @@ protected:
static void WriteAnimateTo( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Any& rValue, const OUString& rAttributeName );
static void WriteAnimateValues( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimate >& rXAnimate );
static void WriteAnimationCondition( const ::sax_fastparser::FSHelperPtr& pFS, css::uno::Any& rAny, bool bWriteEvent, bool bMainSeqChild );
static void WriteAnimationCondition( const ::sax_fastparser::FSHelperPtr& pFS, const char* pDelay, const char* pEvent, double fDelay, bool bHasFDelay );
static void WriteAnimationCondition( const ::sax_fastparser::FSHelperPtr& pFS, css::uno::Any const & rAny, bool bWriteEvent, bool bMainSeqChild, sal_Int32 nToken );
static void WriteAnimationCondition( const ::sax_fastparser::FSHelperPtr& pFS, const char* pDelay, const char* pEvent, double fDelay, bool bHasFDelay, sal_Int32 nToken );
void WriteAnimations( const ::sax_fastparser::FSHelperPtr& pFS );
static void WriteAnimationAttributeName( const ::sax_fastparser::FSHelperPtr& pFS, const OUString& rAttributeName );
void WriteAnimationNode( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimationNode >& rXNode, bool bMainSeqChild );
......
......@@ -1250,29 +1250,35 @@ void PowerPointExport::WriteAnimationNodeAnimateInside( const FSHelperPtr& pFS,
WriteAnimateTo( pFS, rXAnimate->getTo(), rXAnimate->getAttributeName() );
}
void PowerPointExport::WriteAnimationCondition( const FSHelperPtr& pFS, const char* pDelay, const char* pEvent, double fDelay, bool bHasFDelay )
void PowerPointExport::WriteAnimationCondition(const FSHelperPtr& pFS, const char* pDelay, const char* pEvent, double fDelay, bool bHasFDelay, sal_Int32 nToken)
{
if( bHasFDelay || pDelay || pEvent ) {
if( !pEvent )
pFS->singleElementNS( XML_p, XML_cond,
XML_delay, bHasFDelay ? I64S( (sal_uInt32) (fDelay*1000.0) ) : pDelay,
FSEND );
else {
pFS->startElementNS( XML_p, XML_cond,
XML_delay, bHasFDelay ? I64S( (sal_uInt32) (fDelay*1000.0) ) : pDelay,
XML_evt, pEvent,
FSEND );
if (bHasFDelay || pDelay || pEvent)
{
pFS->startElementNS(XML_p, nToken, FSEND);
if (!pEvent)
pFS->singleElementNS(XML_p, XML_cond,
XML_delay, bHasFDelay ? I64S(static_cast<sal_uInt32>(fDelay*1000.0)) : pDelay,
FSEND);
else
{
pFS->startElementNS(XML_p, XML_cond,
XML_delay, bHasFDelay ? I64S(static_cast<sal_uInt32>(fDelay*1000.0)) : pDelay,
XML_evt, pEvent,
FSEND);
pFS->startElementNS( XML_p, XML_tgtEl, FSEND );
pFS->singleElementNS( XML_p, XML_sldTgt, FSEND );
pFS->endElementNS( XML_p, XML_tgtEl );
pFS->startElementNS( XML_p, XML_tgtEl, FSEND );
pFS->singleElementNS( XML_p, XML_sldTgt, FSEND );
pFS->endElementNS( XML_p, XML_tgtEl );
pFS->endElementNS( XML_p, XML_cond );
}
pFS->endElementNS(XML_p, XML_cond);
}
pFS->endElementNS(XML_p, nToken);
}
}
void PowerPointExport::WriteAnimationCondition( const FSHelperPtr& pFS, Any& rAny, bool bWriteEvent, bool bMainSeqChild )
void PowerPointExport::WriteAnimationCondition(const FSHelperPtr& pFS, Any const& rAny, bool bWriteEvent, bool bMainSeqChild, sal_Int32 nToken)
{
bool bHasFDelay = false;
double fDelay = 0;
......@@ -1355,7 +1361,7 @@ void PowerPointExport::WriteAnimationCondition( const FSHelperPtr& pFS, Any& rAn
}
}
WriteAnimationCondition( pFS, pDelay, pEvent, fDelay, bHasFDelay );
WriteAnimationCondition(pFS, pDelay, pEvent, fDelay, bHasFDelay, nToken);
}
void PowerPointExport::WriteAnimationNodeCommonPropsStart( const FSHelperPtr& pFS, const Reference< XAnimationNode >& rXNode, bool bSingle, bool bMainSeqChild )
......@@ -1501,26 +1507,22 @@ void PowerPointExport::WriteAnimationNodeCommonPropsStart( const FSHelperPtr& pF
if( aAny.hasValue() ) {
Sequence< Any > aCondSeq;
pFS->startElementNS( XML_p, XML_stCondLst, FSEND );
if( aAny >>= aCondSeq ) {
for( int i = 0; i < aCondSeq.getLength(); i ++ )
WriteAnimationCondition( pFS, aCondSeq[ i ], false, bMainSeqChild );
WriteAnimationCondition( pFS, aCondSeq[ i ], false, bMainSeqChild, XML_stCondLst );
} else
WriteAnimationCondition( pFS, aAny, false, bMainSeqChild );
pFS->endElementNS( XML_p, XML_stCondLst );
WriteAnimationCondition( pFS, aAny, false, bMainSeqChild, XML_stCondLst );
}
aAny = rXNode->getEnd();
if( aAny.hasValue() ) {
Sequence< Any > aCondSeq;
pFS->startElementNS( XML_p, XML_endCondLst, FSEND );
if( aAny >>= aCondSeq ) {
for( int i = 0; i < aCondSeq.getLength(); i ++ )
WriteAnimationCondition( pFS, aCondSeq[ i ], false, bMainSeqChild );
WriteAnimationCondition( pFS, aCondSeq[ i ], false, bMainSeqChild, XML_endCondLst );
} else
WriteAnimationCondition( pFS, aAny, false, bMainSeqChild );
pFS->endElementNS( XML_p, XML_endCondLst );
WriteAnimationCondition( pFS, aAny, false, bMainSeqChild, XML_endCondLst );
}
Reference< XEnumerationAccess > xEnumerationAccess( rXNode, UNO_QUERY );
......@@ -1556,13 +1558,8 @@ void PowerPointExport::WriteAnimationNodeSeq( const FSHelperPtr& pFS, const Refe
WriteAnimationNodeCommonPropsStart( pFS, rXNode, true, bMainSeqChild );
pFS->startElementNS( XML_p, XML_prevCondLst, FSEND );
WriteAnimationCondition( pFS, nullptr, "onPrev", 0, true );
pFS->endElementNS( XML_p, XML_prevCondLst );
pFS->startElementNS( XML_p, XML_nextCondLst, FSEND );
WriteAnimationCondition( pFS, nullptr, "onNext", 0, true );
pFS->endElementNS( XML_p, XML_nextCondLst );
WriteAnimationCondition(pFS, nullptr, "onPrev", 0, true, XML_prevCondLst);
WriteAnimationCondition(pFS, nullptr, "onNext", 0, true, XML_nextCondLst);
pFS->endElementNS( XML_p, XML_seq );
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment