summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorMark Hung <marklh9@gmail.com>2018-08-30 22:53:26 +0800
committerMark Hung <marklh9@gmail.com>2018-09-03 12:37:56 +0200
commitee883e6156668f1c6b9117b5f8507fd192584de8 (patch)
tree6be6b1fae479479009569758df2bf807ef900d91 /sd
parent651a2dee1c8c5bb084aa6b84fd7171f35ff52305 (diff)
sd/pptx export: utility class to further refactor.
Add NodeContext to wrap reference of XAnimationNode and bMainSeqChild so that the node under processing can be get via getCurrentNode() and isMainSeqChild() instead passing arround via parameters. Change-Id: Ie4be58211f4194fc2a24aa951c2110911c91d94e Reviewed-on: https://gerrit.libreoffice.org/59876 Tested-by: Jenkins Reviewed-by: Mark Hung <marklh9@gmail.com>
Diffstat (limited to 'sd')
-rw-r--r--sd/source/filter/eppt/pptx-animations.cxx57
1 files changed, 52 insertions, 5 deletions
diff --git a/sd/source/filter/eppt/pptx-animations.cxx b/sd/source/filter/eppt/pptx-animations.cxx
index 3f7600fc74ce..65d17800e2df 100644
--- a/sd/source/filter/eppt/pptx-animations.cxx
+++ b/sd/source/filter/eppt/pptx-animations.cxx
@@ -18,6 +18,7 @@
*/
#include <o3tl/any.hxx>
+#include <o3tl/make_unique.hxx>
#include <oox/token/namespaces.hxx>
#include <oox/token/tokens.hxx>
#include "epptooxml.hxx"
@@ -451,9 +452,24 @@ sal_Int32 convertNodeType(sal_Int16 nType)
return xmlNodeType;
}
+class NodeContext;
+
+typedef std::unique_ptr<NodeContext> NodeContextPtr;
+
+class NodeContext
+{
+ const Reference<XAnimationNode>& mxNode;
+ const bool mbMainSeqChild;
+
+public:
+ NodeContext(const Reference<XAnimationNode>& xNode, bool bMainSeqChild);
+ const Reference<XAnimationNode>& getNode() const { return mxNode; }
+ bool isMainSeqChild() const { return mbMainSeqChild; }
+};
+
class PPTXAnimationExport
{
- void WriteAnimationNode(const Reference<XAnimationNode>& rXNode, bool bMainSeqChild);
+ void WriteAnimationNode(const NodeContextPtr& pContext);
void WriteAnimationNodeAnimate(const Reference<XAnimationNode>& rXNode, sal_Int32 nXmlNodeType,
bool bMainSeqChild);
void WriteAnimationNodeAnimateInside(const Reference<XAnimationNode>& rXNode,
@@ -464,9 +480,12 @@ class PPTXAnimationExport
void WriteAnimationNodeCommonPropsStart(const Reference<XAnimationNode>& rXNode,
bool bMainSeqChild);
void WriteAnimationTarget(const Any& rTarget);
+ bool isMainSeqChild();
+ const Reference<XAnimationNode>& getCurrentNode();
PowerPointExport& mrPowerPointExport;
const FSHelperPtr& mpFS;
+ const NodeContext* mpContext;
public:
PPTXAnimationExport(PowerPointExport& rExport, const FSHelperPtr& pFS);
@@ -490,7 +509,20 @@ void WriteAnimations(const FSHelperPtr& pFS, const Reference<XDrawPage>& rXDrawP
PPTXAnimationExport::PPTXAnimationExport(PowerPointExport& rExport, const FSHelperPtr& pFS)
: mrPowerPointExport(rExport)
, mpFS(pFS)
+ , mpContext(nullptr)
+{
+}
+
+bool PPTXAnimationExport::isMainSeqChild()
{
+ assert(mpContext);
+ return mpContext->isMainSeqChild();
+}
+
+const Reference<XAnimationNode>& PPTXAnimationExport::getCurrentNode()
+{
+ assert(mpContext);
+ return mpContext->getNode();
}
void PPTXAnimationExport::WriteAnimationTarget(const Any& rTarget)
@@ -953,7 +985,10 @@ void PPTXAnimationExport::WriteAnimationNodeCommonPropsStart(
{
Reference<XAnimationNode> xChildNode(xEnumeration->nextElement(), UNO_QUERY);
if (xChildNode.is())
- WriteAnimationNode(xChildNode, nType == EffectNodeType::MAIN_SEQUENCE);
+ {
+ WriteAnimationNode(o3tl::make_unique<NodeContext>(
+ xChildNode, nType == EffectNodeType::MAIN_SEQUENCE));
+ }
} while (xEnumeration->hasMoreElements());
mpFS->endElementNS(XML_p, XML_childTnLst);
@@ -1040,9 +1075,14 @@ void PPTXAnimationExport::WriteAnimationNodeCommand(const Reference<XAnimationNo
}
}
-void PPTXAnimationExport::WriteAnimationNode(const Reference<XAnimationNode>& rXNode,
- bool bMainSeqChild)
+void PPTXAnimationExport::WriteAnimationNode(const NodeContextPtr& pContext)
{
+ const NodeContext* pSavedContext = mpContext;
+ mpContext = pContext.get();
+
+ const Reference<XAnimationNode>& rXNode = getCurrentNode();
+ bool bMainSeqChild = isMainSeqChild();
+
SAL_INFO("sd.eppt", "export node type: " << rXNode->getType());
sal_Int32 xmlNodeType = convertNodeType(rXNode->getType());
@@ -1090,6 +1130,8 @@ void PPTXAnimationExport::WriteAnimationNode(const Reference<XAnimationNode>& rX
SAL_WARN("sd.eppt", "unhandled animation node: " << rXNode->getType());
break;
}
+
+ mpContext = pSavedContext;
}
void PPTXAnimationExport::WriteAnimations(const Reference<XDrawPage>& rXDrawPage)
@@ -1110,7 +1152,7 @@ void PPTXAnimationExport::WriteAnimations(const Reference<XDrawPage>& rXDrawPage
mpFS->startElementNS(XML_p, XML_timing, FSEND);
mpFS->startElementNS(XML_p, XML_tnLst, FSEND);
- WriteAnimationNode(xNode, false);
+ WriteAnimationNode(o3tl::make_unique<NodeContext>(xNode, false));
mpFS->endElementNS(XML_p, XML_tnLst);
mpFS->endElementNS(XML_p, XML_timing);
@@ -1120,4 +1162,9 @@ void PPTXAnimationExport::WriteAnimations(const Reference<XDrawPage>& rXDrawPage
}
}
+NodeContext::NodeContext(const Reference<XAnimationNode>& xNode, bool bMainSeqChild)
+ : mxNode(xNode)
+ , mbMainSeqChild(bMainSeqChild)
+{
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */