summaryrefslogtreecommitdiff
path: root/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'writerperfect/source/calc/MSWorksCalcImportFilter.cxx')
-rw-r--r--writerperfect/source/calc/MSWorksCalcImportFilter.cxx71
1 files changed, 66 insertions, 5 deletions
diff --git a/writerperfect/source/calc/MSWorksCalcImportFilter.cxx b/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
index d8976389ded0..f68b4a00eab6 100644
--- a/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
+++ b/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
@@ -14,6 +14,7 @@
#include <libwps/libwps.h>
+#include "writerperfect/WPFTEncodingDialog.hxx"
#include "MSWorksCalcImportFilter.hxx"
using com::sun::star::uno::Sequence;
@@ -26,18 +27,78 @@ using com::sun::star::uno::XComponentContext;
bool MSWorksCalcImportFilter::doImportDocument(librevenge::RVNGInputStream &rInput, OdsGenerator &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("");
+ if ((kind == libwps::WPS_SPREADSHEET || kind == libwps::WPS_DATABASE) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT) && needEncoding)
+ {
+ OUString title, encoding;
+ if (creator == libwps::WPS_MSWORKS)
+ {
+ title="Import MsWorks files(libwps)";
+ encoding="CP850";
+ }
+ else if (creator == libwps::WPS_LOTUS)
+ {
+ title="Import Lotus files(libwps)";
+ encoding="CP437";
+ }
+ else if (creator == libwps::WPS_SYMPHONY)
+ {
+ title="Import Symphony files(libwps)";
+ encoding="CP437";
+ }
+ else
+ {
+ title="Import Quattro Pro files(libwps)";
+ encoding="CP437";
+ }
+ try
+ {
+ 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 MSWorksCalcImportFilter::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_SPREADSHEET || kind == libwps::WPS_DATABASE) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT))
+ if ((kind == libwps::WPS_SPREADSHEET || kind == libwps::WPS_DATABASE) && confidence == libwps::WPS_CONFIDENCE_EXCELLENT)
{
- rTypeName = "calc_MS_Works_Document";
- return true;
+ if (creator == libwps::WPS_MSWORKS)
+ {
+ rTypeName = "calc_MS_Works_Document";
+ return true;
+ }
+ if (creator == libwps::WPS_LOTUS || creator == libwps::WPS_SYMPHONY)
+ {
+ rTypeName = "calc_WPS_Lotus_Document";
+ return true;
+ }
+ if (creator == libwps::WPS_QUATTRO_PRO)
+ {
+ rTypeName = "calc_WPS_QPro_Document";
+ return true;
+ }
}
return false;