sc/source/filter/orcus/orcusfiltersimpl.cxx | 54 ++++++++++++++++++++++++++-- sc/source/ui/xmlsource/xmlsourcedlg.cxx | 9 ---- 2 files changed, 51 insertions(+), 12 deletions(-)
New commits: commit c90b17535f7580f55e670305bd5ca3bbfc0636d3 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Wed Oct 3 09:47:07 2012 -0400 Populate the tree box with real xml structure tree. Change-Id: Ia91340cee5e25b118ae72a62e0d94cdc976bc14e diff --git a/sc/source/filter/orcus/orcusfiltersimpl.cxx b/sc/source/filter/orcus/orcusfiltersimpl.cxx index e5c5507..0afaee4 100644 --- a/sc/source/filter/orcus/orcusfiltersimpl.cxx +++ b/sc/source/filter/orcus/orcusfiltersimpl.cxx @@ -17,6 +17,9 @@ #define __ORCUS_STATIC_LIB #include <orcus/spreadsheet/import_interface.hpp> #include <orcus/orcus_csv.hpp> +#include <orcus/xml_structure_tree.hpp> +#include <orcus/xml_namespace.hpp> +#include <orcus/global.hpp> #include <boost/ptr_container/ptr_vector.hpp> @@ -170,14 +173,59 @@ bool ScOrcusFiltersImpl::importCSV(ScDocument& rDoc, const OUString& rPath) cons return true; } -bool ScOrcusFiltersImpl::loadXMLStructure(const OUString& rPath, SvTreeListBox& /*rTree*/) const +void populateTree(SvTreeListBox& rTree, orcus::xml_structure_tree::walker& rWalker, const orcus::xml_structure_tree::element_name& rElemName, SvLBoxEntry* pParent) +{ + OUString aName(rElemName.name.get(), rElemName.name.size(), RTL_TEXTENCODING_UTF8); + SvLBoxEntry* pEntry = rTree.InsertEntry(aName, pParent); + if (pParent) + rTree.Expand(pParent); + + orcus::xml_structure_tree::element_names_type aChildElements; + rWalker.get_children(aChildElements); + + orcus::xml_structure_tree::element_names_type::const_iterator it = aChildElements.begin(); + orcus::xml_structure_tree::element_names_type::const_iterator itEnd = aChildElements.end(); + for (; it != itEnd; ++it) + { + rWalker.descend(*it); + populateTree(rTree, rWalker, *it, pEntry); + rWalker.ascend(); + } +} + +bool ScOrcusFiltersImpl::loadXMLStructure(const OUString& rPath, SvTreeListBox& rTree) const { INetURLObject aURL(rPath); OString aSysPath = rtl::OUStringToOString(aURL.getFSysPath(SYSTEM_PATH), RTL_TEXTENCODING_UTF8); const char* path = aSysPath.getStr(); - fprintf(stdout, "ScOrcusFiltersImpl::loadXMLStructure: path = '%s'\n", path); - // TODO: Load the tree box. + // TODO: Use our own stream loading call instead of one from orcus. + std::string aStrm; + orcus::load_file_content(path, aStrm); + + if (aStrm.empty()) + return false; + + orcus::xmlns_repository aNsRepo; // xml namespace repository. + orcus::xml_structure_tree aTree(aNsRepo); + try + { + aTree.parse(&aStrm[0], aStrm.size()); + } + catch (const std::exception&) + { + // Parsing of this XML file failed. + return false; + } + + rTree.Clear(); + + orcus::xml_structure_tree::walker aWalker = aTree.get_walker(); + + // Root element. + orcus::xml_structure_tree::element aElem = aWalker.root(); + populateTree(rTree, aWalker, aElem.name, NULL); + return true; } diff --git a/sc/source/ui/xmlsource/xmlsourcedlg.cxx b/sc/source/ui/xmlsource/xmlsourcedlg.cxx index e94d132..39ccbe5 100644 --- a/sc/source/ui/xmlsource/xmlsourcedlg.cxx +++ b/sc/source/ui/xmlsource/xmlsourcedlg.cxx @@ -29,15 +29,6 @@ ScXMLSourceTree::ScXMLSourceTree(Window* pParent, const ResId& rResId) : { SetDefaultExpandedEntryBmp(maImgElemDefault); SetDefaultCollapsedEntryBmp(maImgElemDefault); - - SvLBoxEntry* p = InsertEntry(OUString("Test1")); - p = InsertEntry(OUString("Test2")); - SvLBoxEntry* pPar = p; - p = InsertEntry(OUString("Test3"), p); - Expand(pPar); - pPar = p; - p = InsertEntry(OUString("Test4"), p); - Expand(pPar); } ScXMLSourceDlg::ScXMLSourceDlg(Window* pParent, ScDocument* pDoc) : _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits