diff options
author | osnola <alonso@loria.fr> | 2015-05-18 10:21:10 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2015-05-19 08:24:59 +0200 |
commit | f9568335a653f72732f9c8ebf007cf8850021ff9 (patch) | |
tree | ad5c96cbe2636c58a46692f92a1f127e5b2c4453 /writerperfect/source/writer/MSWorksImportFilter.cxx | |
parent | fa76bbbe9869b0a009e6e05df1130fac5b4fc15a (diff) |
upload libwps 0.4.0
Change-Id: I9da61333b7c46d20cf7010553929b141ec011d84
Diffstat (limited to 'writerperfect/source/writer/MSWorksImportFilter.cxx')
-rw-r--r-- | writerperfect/source/writer/MSWorksImportFilter.cxx | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/writerperfect/source/writer/MSWorksImportFilter.cxx b/writerperfect/source/writer/MSWorksImportFilter.cxx index 61c54f5779b4..f06a21a08ee6 100644 --- a/writerperfect/source/writer/MSWorksImportFilter.cxx +++ b/writerperfect/source/writer/MSWorksImportFilter.cxx @@ -9,11 +9,13 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <boost/scoped_ptr.hpp> #include <com/sun/star/uno/Reference.h> #include <cppuhelper/supportsservice.hxx> #include <libwps/libwps.h> +#include "writerperfect/WPFTEncodingDialog.hxx" #include "MSWorksImportFilter.hxx" using com::sun::star::uno::Sequence; @@ -33,13 +35,41 @@ static bool handleEmbeddedWKSObject(const librevenge::RVNGBinaryData &data, OdfD bool MSWorksImportFilter::doImportDocument(librevenge::RVNGInputStream &rInput, OdtGenerator &rGenerator, utl::MediaDescriptor &) { - return libwps::WPS_OK == libwps::WPSDocument::parse(&rInput, &rGenerator); + libwps::WPSKind kind = libwps::WPS_TEXT; + libwps::WPSCreator creator; + bool needEncoding; + const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&rInput, kind, creator, needEncoding); + + std::string fileEncoding(""); + try + { + if ((kind == libwps::WPS_TEXT) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT) && needEncoding) + { + OUString title("Import MsWorks files(libwps)"); + OUString encoding("CP850"); + const ScopedVclPtrInstance<writerperfect::WPFTEncodingDialog> pDlg(nullptr, &title, &encoding); + if (pDlg->Execute() == RET_OK) + { + if (!pDlg->GetEncoding().isEmpty()) + fileEncoding=pDlg->GetEncoding().toUtf8().getStr(); + } + // we can fail because we are in headless mode, the user has cancelled conversion, ... + else if (pDlg->hasUserCalledCancel()) + return false; + } + } + catch (...) + { + } + return libwps::WPS_OK == libwps::WPSDocument::parse(&rInput, &rGenerator, "", fileEncoding.c_str()); } bool MSWorksImportFilter::doDetectFormat(librevenge::RVNGInputStream &rInput, OUString &rTypeName) { libwps::WPSKind kind = libwps::WPS_TEXT; - const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&rInput, kind); + libwps::WPSCreator creator; + bool needEncoding; + const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&rInput, kind, creator, needEncoding); if ((kind == libwps::WPS_TEXT) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT)) { |