tdf#123909 fix event source that refers to a timenode.
p:tn (see below) were treated as delay value instead of timenode id. <p:stCondLst> <p:cond evt="begin" delay="0"> <p:tn val="5"/> </p:cond> </p:stCondLst> Just convert the timenode id to XAnimationNode and set the event source properly. Change-Id: Ib408be6714c6ac70dad7018e544e560cf59a40c0 Reviewed-on: https://gerrit.libreoffice.org/69340 Tested-by: Jenkins Reviewed-by: Mark Hung <marklh9@gmail.com>
This commit is contained in:
@@ -117,6 +117,7 @@ public:
|
|||||||
void applyTextStyles( const oox::core::XmlFilterBase& rFilterBase );
|
void applyTextStyles( const oox::core::XmlFilterBase& rFilterBase );
|
||||||
|
|
||||||
std::map< OUString, css::uno::Reference< css::animations::XAnimationNode > >& getAnimNodesMap() { return maAnimNodesMap; };
|
std::map< OUString, css::uno::Reference< css::animations::XAnimationNode > >& getAnimNodesMap() { return maAnimNodesMap; };
|
||||||
|
css::uno::Reference<css::animations::XAnimationNode> getAnimationNode(const OUString& sId) const;
|
||||||
::oox::drawingml::ShapePtr getShape( const OUString & id ) { return maShapeMap[ id ]; }
|
::oox::drawingml::ShapePtr getShape( const OUString & id ) { return maShapeMap[ id ]; }
|
||||||
::oox::drawingml::ShapeIdMap& getShapeMap() { return maShapeMap; }
|
::oox::drawingml::ShapeIdMap& getShapeMap() { return maShapeMap; }
|
||||||
|
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
#include <com/sun/star/presentation/ParagraphTarget.hpp>
|
#include <com/sun/star/presentation/ParagraphTarget.hpp>
|
||||||
#include <com/sun/star/presentation/ShapeAnimationSubType.hpp>
|
#include <com/sun/star/presentation/ShapeAnimationSubType.hpp>
|
||||||
#include <com/sun/star/animations/Event.hpp>
|
#include <com/sun/star/animations/Event.hpp>
|
||||||
|
#include <com/sun/star/animations/XAnimationNode.hpp>
|
||||||
|
|
||||||
#include <oox/drawingml/shape.hxx>
|
#include <oox/drawingml/shape.hxx>
|
||||||
#include <oox/helper/attributelist.hxx>
|
#include <oox/helper/attributelist.hxx>
|
||||||
@@ -183,6 +184,19 @@ namespace oox { namespace ppt {
|
|||||||
aEvent.Source = aAny;
|
aEvent.Source = aAny;
|
||||||
aAny <<= aEvent;
|
aAny <<= aEvent;
|
||||||
}
|
}
|
||||||
|
else if (mnType == PPT_TOKEN(tn) && (maValue >>= aEvent))
|
||||||
|
{
|
||||||
|
OUString sId;
|
||||||
|
aEvent.Source >>= sId;
|
||||||
|
css::uno::Reference<XAnimationNode> xNode = pSlide->getAnimationNode(sId);
|
||||||
|
if (xNode.is())
|
||||||
|
{
|
||||||
|
aEvent.Source <<= xNode;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
aEvent.Source.clear();
|
||||||
|
aAny <<= aEvent;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
aAny = maValue;
|
aAny = maValue;
|
||||||
|
@@ -98,7 +98,7 @@ namespace oox { namespace ppt {
|
|||||||
|
|
||||||
CondContext::~CondContext( ) throw( )
|
CondContext::~CondContext( ) throw( )
|
||||||
{
|
{
|
||||||
if( maCond.mnType == 0 )
|
if( maCond.mnType == 0 || maCond.mnType == PPT_TOKEN(tn))
|
||||||
{
|
{
|
||||||
maCond.maValue = (maEvent.Trigger == EventTrigger::NONE) ? maEvent.Offset : makeAny( maEvent );
|
maCond.maValue = (maEvent.Trigger == EventTrigger::NONE) ? maEvent.Offset : makeAny( maEvent );
|
||||||
}
|
}
|
||||||
@@ -135,8 +135,8 @@ namespace oox { namespace ppt {
|
|||||||
case PPT_TOKEN( tn ):
|
case PPT_TOKEN( tn ):
|
||||||
{
|
{
|
||||||
maCond.mnType = aElementToken;
|
maCond.mnType = aElementToken;
|
||||||
sal_uInt32 nId = rAttribs.getUnsigned( XML_val, 0 );
|
// Convert the node id string to XAnimationNode later
|
||||||
maCond.maValue <<= nId;
|
maEvent.Source <<= rAttribs.getString(XML_val, OUString());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
case PPT_TOKEN( tgtEl ):
|
case PPT_TOKEN( tgtEl ):
|
||||||
|
@@ -318,6 +318,16 @@ void SlidePersist::hideShapesAsMasterShapes()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference<XAnimationNode> SlidePersist::getAnimationNode(const OUString& sId) const
|
||||||
|
{
|
||||||
|
const auto& pIter = maAnimNodesMap.find(sId);
|
||||||
|
if (pIter != maAnimNodesMap.end())
|
||||||
|
return pIter->second;
|
||||||
|
|
||||||
|
Reference<XAnimationNode> aResult;
|
||||||
|
return aResult;
|
||||||
|
}
|
||||||
|
|
||||||
} }
|
} }
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
@@ -2095,7 +2095,9 @@ void SdOOXMLExportTest2::testTdf44223()
|
|||||||
"audio/x-wav");
|
"audio/x-wav");
|
||||||
|
|
||||||
xmlDocPtr pDoc1 = parseExport(tempFile, "ppt/slides/slide1.xml");
|
xmlDocPtr pDoc1 = parseExport(tempFile, "ppt/slides/slide1.xml");
|
||||||
assertXPath(pDoc1 , "//p:audio/p:cMediaNode/p:tgtEl/p:sndTgt[@r:embed]", 1);
|
|
||||||
|
assertXPath(pDoc1 , "//p:audio/p:cMediaNode/p:cTn/p:stCondLst/p:cond", "evt", "begin");
|
||||||
|
assertXPath(pDoc1 , "//p:audio/p:cMediaNode/p:cTn/p:stCondLst/p:cond", "delay", "0");
|
||||||
|
|
||||||
xmlDocPtr pDoc2 = parseExport(tempFile, "ppt/slides/slide2.xml");
|
xmlDocPtr pDoc2 = parseExport(tempFile, "ppt/slides/slide2.xml");
|
||||||
assertXPath(pDoc2 , "//p:transition/p:sndAc/p:stSnd/p:snd[@r:embed]", 2);
|
assertXPath(pDoc2 , "//p:transition/p:sndAc/p:stSnd/p:snd[@r:embed]", 2);
|
||||||
|
Reference in New Issue
Block a user