summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
Diffstat (limited to 'oox')
-rw-r--r--oox/Library_oox.mk1
-rw-r--r--oox/source/helper/grabbagstack.cxx93
2 files changed, 94 insertions, 0 deletions
diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk
index d17626750b49..cdda38a17929 100644
--- a/oox/Library_oox.mk
+++ b/oox/Library_oox.mk
@@ -217,6 +217,7 @@ $(eval $(call gb_Library_add_exception_objects,oox,\
oox/source/helper/binarystreambase \
oox/source/helper/containerhelper \
oox/source/helper/graphichelper \
+ oox/source/helper/grabbagstack \
oox/source/helper/modelobjecthelper \
oox/source/helper/progressbar \
oox/source/helper/propertymap \
diff --git a/oox/source/helper/grabbagstack.cxx b/oox/source/helper/grabbagstack.cxx
new file mode 100644
index 000000000000..ee7ec7079ec0
--- /dev/null
+++ b/oox/source/helper/grabbagstack.cxx
@@ -0,0 +1,93 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include "oox/helper/grabbagstack.hxx"
+#include <com/sun/star/uno/Sequence.hxx>
+
+namespace oox
+{
+
+using namespace css::beans;
+using namespace css::uno;
+
+GrabBagStack::GrabBagStack(OUString aName)
+{
+ mCurrentElement.maName = aName;
+}
+
+GrabBagStack::~GrabBagStack()
+{}
+
+OUString GrabBagStack::getCurrentName()
+{
+ return mCurrentElement.maName;
+}
+
+PropertyValue GrabBagStack::getRootProperty()
+{
+ while(!mStack.empty())
+ pop();
+
+ PropertyValue aProperty;
+ aProperty.Name = mCurrentElement.maName;
+
+ Sequence<PropertyValue> aSequence(mCurrentElement.maPropertyList.size());
+ PropertyValue* pSequence = aSequence.getArray();
+ std::vector<PropertyValue>::iterator i;
+ for (i = mCurrentElement.maPropertyList.begin(); i != mCurrentElement.maPropertyList.end(); ++i)
+ *pSequence++ = *i;
+
+ aProperty.Value = makeAny(aSequence);
+
+ return aProperty;
+}
+
+void GrabBagStack::appendElement(OUString aName, Any aAny)
+{
+ PropertyValue aValue;
+ aValue.Name = aName;
+ aValue.Value = aAny;
+ mCurrentElement.maPropertyList.push_back(aValue);
+}
+
+void GrabBagStack::push(OUString aKey)
+{
+ mStack.push(mCurrentElement);
+ mCurrentElement.maName = aKey;
+ mCurrentElement.maPropertyList.clear();
+}
+
+void GrabBagStack::pop()
+{
+ OUString aName = mCurrentElement.maName;
+ Sequence<PropertyValue> aSequence(mCurrentElement.maPropertyList.size());
+ PropertyValue* pSequence = aSequence.getArray();
+ std::vector<PropertyValue>::iterator i;
+ for (i = mCurrentElement.maPropertyList.begin(); i != mCurrentElement.maPropertyList.end(); ++i)
+ *pSequence++ = *i;
+
+ mCurrentElement = mStack.top();
+ mStack.pop();
+ appendElement(aName, makeAny(aSequence));
+}
+
+void GrabBagStack::addInt32(OUString aElementName, sal_Int32 aIntValue)
+{
+ appendElement(aElementName, makeAny(aIntValue));
+}
+
+void GrabBagStack::addString(OUString aElementName, OUString aStringValue)
+{
+ appendElement(aElementName, makeAny(aStringValue));
+}
+
+} // namespace oox
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */