Kaydet (Commit) 9c2dfa9b authored tarafından Markus Mohrhard's avatar Markus Mohrhard

activate basic gnumeric support in experimental mode

Please note that this is nothing mroe than a technical demo showing the
great opportunities provided by orcus.
It only imports some basic objects for now but provides the basis for
the future calc filter framework.

Change-Id: I6c6fb8d07e33482b2efdcbbe9a0f43224c5aa5a1
üst cb9cc446
......@@ -32,6 +32,9 @@
#include <services.h>
#include <comphelper/interaction.hxx>
#include <framework/interaction.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/configuration.hxx>
#include "officecfg/Office/Common.hxx"
#include <com/sun/star/task/ErrorCodeRequest.hpp>
#include <com/sun/star/uno/RuntimeException.hpp>
......@@ -703,15 +706,22 @@ LoadEnv::EContentType LoadEnv::classifyContent(const ::rtl::OUString&
namespace {
#if 1
#if 0
// TODO: We will reinstate this function later, so don't remove this!
bool queryOrcusTypeAndFilter(const uno::Sequence<beans::PropertyValue>&, OUString&, OUString&)
{
return false;
}
#else
// TODO: We will reinstate this function later, so don't remove this!
bool queryOrcusTypeAndFilter(const uno::Sequence<beans::PropertyValue>& rDescriptor, OUString& rType, OUString& rFilter)
{
// depending on the experimental mode
uno::Reference< uno::XComponentContext > xContext = comphelper::getProcessComponentContext();
if (!xContext.is() || !officecfg::Office::Common::Misc::ExperimentalMode::get(xContext))
{
return false;
}
OUString aURL;
sal_Int32 nSize = rDescriptor.getLength();
for (sal_Int32 i = 0; i < nSize; ++i)
......@@ -727,13 +737,21 @@ bool queryOrcusTypeAndFilter(const uno::Sequence<beans::PropertyValue>& rDescrip
if (aURL.isEmpty() || aURL.copy(0,8).equalsIgnoreAsciiCase("private:"))
return false;
if (aURL.endsWith(".csv"))
if(aURL.endsWith(".gnumeric"))
{
rType = "generic_Text";
rFilter = "orcus-gnumeric";
return true;
}
#if 0
else if (aURL.endsWith(".csv"))
{
// Use .csv as the first test file type.
rType = "generic_Text";
rFilter = "orcus-test-filter";
return true;
}
#endif
return false;
}
......
......@@ -29,6 +29,8 @@ public:
virtual bool importCSV(ScDocument& rDoc, const rtl::OUString& rPath) const = 0;
virtual bool importGnumeric(ScDocument& rDoc, const rtl::OUString& rPath) const = 0;
/**
* Create a context for XML file. The context object stores session
* information for each unique XML file. You must create a new context
......
......@@ -21,6 +21,7 @@ public:
static rtl::OString toSystemPath(const rtl::OUString& rPath);
virtual bool importCSV(ScDocument& rDoc, const rtl::OUString& rPath) const;
virtual bool importGnumeric(ScDocument& rDoc, const rtl::OUString& rPath) const;
virtual ScOrcusXMLContext* createXMLContext(ScDocument& rDoc, const rtl::OUString& rPath) const;
};
......
......@@ -17,6 +17,8 @@
#include <boost/ptr_container/ptr_vector.hpp>
#include <map>
class ScDocument;
class ScOrcusSheet;
class ScRangeData;
......
......@@ -16,6 +16,7 @@
#include <orcus/spreadsheet/import_interface.hpp>
#include <orcus/orcus_csv.hpp>
#include <orcus/orcus_gnumeric.hpp>
#include <orcus/global.hpp>
#ifdef WNT
......@@ -50,6 +51,26 @@ bool ScOrcusFiltersImpl::importCSV(ScDocument& rDoc, const OUString& rPath) cons
return true;
}
bool ScOrcusFiltersImpl::importGnumeric(ScDocument& rDoc, const OUString& rPath) const
{
ScOrcusFactory aFactory(rDoc);
OString aSysPath = toSystemPath(rPath);
const char* path = aSysPath.getStr();
try
{
orcus::orcus_gnumeric filter(&aFactory);
filter.read_file(path);
}
catch (const std::exception& e)
{
SAL_WARN("sc", "Unable to load gnumeric file! " << e.what());
return false;
}
return true;
}
ScOrcusXMLContext* ScOrcusFiltersImpl::createXMLContext(ScDocument& rDoc, const rtl::OUString& rPath) const
{
return new ScOrcusXMLContextImpl(rDoc, rPath);
......
......@@ -1426,7 +1426,7 @@ bool ScDocShell::LoadExternal(SfxMedium& rMed, const OUString& rProvider)
if (!pOrcus)
return false;
if (!pOrcus->importCSV(aDocument, rMed.GetName()))
if (!pOrcus->importGnumeric(aDocument, rMed.GetName()))
return false;
FinishedLoading(SFX_LOADED_MAINDOCUMENT | SFX_LOADED_IMAGES);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment