summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/orcusxml.hxx5
-rw-r--r--sc/source/filter/orcus/xmlcontext.cxx16
2 files changed, 15 insertions, 6 deletions
diff --git a/sc/inc/orcusxml.hxx b/sc/inc/orcusxml.hxx
index e16029cf815c..cc41f3b6c3e0 100644
--- a/sc/inc/orcusxml.hxx
+++ b/sc/inc/orcusxml.hxx
@@ -15,6 +15,7 @@
#include <vcl/image.hxx>
#include <vector>
+#include <boost/ptr_container/ptr_vector.hpp>
class SvTreeListEntry;
@@ -37,7 +38,7 @@ struct ScOrcusXMLTreeParam
SC_DLLPUBLIC EntryData(EntryType eType);
};
- typedef std::vector<EntryData> EntryDataVec;
+ typedef boost::ptr_vector<EntryData> UserDataStoreType;
Image maImgElementDefault;
Image maImgElementRepeat;
@@ -47,7 +48,7 @@ struct ScOrcusXMLTreeParam
* Store all custom data instances since the tree control doesn't manage
* the life cycle of user datas.
*/
- EntryDataVec maUserDataStore;
+ UserDataStoreType maUserDataStore;
static SC_DLLPUBLIC EntryData* getUserData(SvTreeListEntry& rEntry);
static SC_DLLPUBLIC const EntryData* getUserData(const SvTreeListEntry& rEntry);
diff --git a/sc/source/filter/orcus/xmlcontext.cxx b/sc/source/filter/orcus/xmlcontext.cxx
index 083972067468..873e2ef8ce4d 100644
--- a/sc/source/filter/orcus/xmlcontext.cxx
+++ b/sc/source/filter/orcus/xmlcontext.cxx
@@ -34,13 +34,20 @@ using namespace com::sun::star;
namespace {
ScOrcusXMLTreeParam::EntryData& setUserDataToEntry(
- SvTreeListEntry& rEntry, ScOrcusXMLTreeParam::EntryDataVec& rStore, ScOrcusXMLTreeParam::EntryType eType)
+ SvTreeListEntry& rEntry, ScOrcusXMLTreeParam::UserDataStoreType& rStore, ScOrcusXMLTreeParam::EntryType eType)
{
- rStore.push_back(ScOrcusXMLTreeParam::EntryData(eType));
+ rStore.push_back(new ScOrcusXMLTreeParam::EntryData(eType));
rEntry.SetUserData(&rStore.back());
return rStore.back();
}
+void setEntityNameToUserData(
+ ScOrcusXMLTreeParam::EntryData& rEntryData,
+ const orcus::xml_structure_tree::entity_name& entity, const orcus::xml_structure_tree::walker& walker)
+{
+ rEntryData.mnNamespaceID = walker.get_xmlns_index(entity.ns);
+}
+
OUString toString(const orcus::xml_structure_tree::entity_name& entity, const orcus::xml_structure_tree::walker& walker)
{
OUStringBuffer aBuf;
@@ -68,7 +75,8 @@ void populateTree(
ScOrcusXMLTreeParam::EntryData& rEntryData = setUserDataToEntry(
*pEntry, rParam.maUserDataStore,
bRepeat ? ScOrcusXMLTreeParam::ElementRepeat : ScOrcusXMLTreeParam::ElementDefault);
- rEntryData.mnNamespaceID = rWalker.get_xmlns_index(rElemName.ns);
+
+ setEntityNameToUserData(rEntryData, rElemName, rWalker);
if (bRepeat)
{
@@ -96,7 +104,7 @@ void populateTree(
ScOrcusXMLTreeParam::EntryData& rAttrData =
setUserDataToEntry(*pAttr, rParam.maUserDataStore, ScOrcusXMLTreeParam::Attribute);
- rAttrData.mnNamespaceID = rWalker.get_xmlns_index(rAttrName.ns);
+ setEntityNameToUserData(rAttrData, rAttrName, rWalker);
rTreeCtrl.SetExpandedEntryBmp(pAttr, rParam.maImgAttribute);
rTreeCtrl.SetCollapsedEntryBmp(pAttr, rParam.maImgAttribute);