summaryrefslogtreecommitdiff
path: root/sc/source/ui/unoobj/filtuno.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/unoobj/filtuno.cxx')
-rw-r--r--sc/source/ui/unoobj/filtuno.cxx317
1 files changed, 317 insertions, 0 deletions
diff --git a/sc/source/ui/unoobj/filtuno.cxx b/sc/source/ui/unoobj/filtuno.cxx
new file mode 100644
index 000000000000..efe804784a40
--- /dev/null
+++ b/sc/source/ui/unoobj/filtuno.cxx
@@ -0,0 +1,317 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+
+
+#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
+#include <tools/urlobj.hxx>
+#include <vcl/msgbox.hxx>
+#include <unotools/ucbstreamhelper.hxx>
+
+#include "editutil.hxx"
+#include "filtuno.hxx"
+#include "miscuno.hxx"
+#include "unoguard.hxx"
+#include "scdll.hxx"
+#include "imoptdlg.hxx"
+#include "asciiopt.hxx"
+#include "docsh.hxx"
+#include "globstr.hrc"
+
+
+#include "sc.hrc" //CHINA001
+#include "scabstdlg.hxx" //CHINA001
+#include "i18npool/lang.h"
+
+#include <memory>
+
+using namespace ::com::sun::star;
+using ::rtl::OUStringBuffer;
+
+//------------------------------------------------------------------------
+
+#define SCFILTEROPTIONSOBJ_SERVICE "com.sun.star.ui.dialogs.FilterOptionsDialog"
+#define SCFILTEROPTIONSOBJ_IMPLNAME "com.sun.star.comp.Calc.FilterOptionsDialog"
+
+SC_SIMPLE_SERVICE_INFO( ScFilterOptionsObj, SCFILTEROPTIONSOBJ_IMPLNAME, SCFILTEROPTIONSOBJ_SERVICE )
+
+#define SC_UNONAME_FILENAME "URL"
+#define SC_UNONAME_FILTERNAME "FilterName"
+#define SC_UNONAME_FILTEROPTIONS "FilterOptions"
+#define SC_UNONAME_INPUTSTREAM "InputStream"
+
+//------------------------------------------------------------------------
+
+ScFilterOptionsObj::ScFilterOptionsObj() :
+ bExport( sal_False )
+{
+}
+
+ScFilterOptionsObj::~ScFilterOptionsObj()
+{
+}
+
+// stuff for exService_...
+
+uno::Reference<uno::XInterface> SAL_CALL ScFilterOptionsObj_CreateInstance(
+ const uno::Reference<lang::XMultiServiceFactory>& )
+{
+ ScUnoGuard aGuard;
+ ScDLL::Init();
+ return (::cppu::OWeakObject*) new ScFilterOptionsObj;
+}
+
+rtl::OUString ScFilterOptionsObj::getImplementationName_Static()
+{
+ return rtl::OUString::createFromAscii( SCFILTEROPTIONSOBJ_IMPLNAME );
+}
+
+uno::Sequence<rtl::OUString> ScFilterOptionsObj::getSupportedServiceNames_Static()
+{
+ uno::Sequence<rtl::OUString> aRet(1);
+ rtl::OUString* pArray = aRet.getArray();
+ pArray[0] = rtl::OUString::createFromAscii( SCFILTEROPTIONSOBJ_SERVICE );
+ return aRet;
+}
+
+// XPropertyAccess
+
+uno::Sequence<beans::PropertyValue> SAL_CALL ScFilterOptionsObj::getPropertyValues() throw(uno::RuntimeException)
+{
+ uno::Sequence<beans::PropertyValue> aRet(1);
+ beans::PropertyValue* pArray = aRet.getArray();
+
+ pArray[0].Name = rtl::OUString::createFromAscii( SC_UNONAME_FILTEROPTIONS );
+ pArray[0].Value <<= aFilterOptions;
+
+ return aRet;
+}
+
+void SAL_CALL ScFilterOptionsObj::setPropertyValues( const uno::Sequence<beans::PropertyValue>& aProps )
+ throw(beans::UnknownPropertyException, beans::PropertyVetoException,
+ lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
+{
+ const beans::PropertyValue* pPropArray = aProps.getConstArray();
+ long nPropCount = aProps.getLength();
+ for (long i = 0; i < nPropCount; i++)
+ {
+ const beans::PropertyValue& rProp = pPropArray[i];
+ String aPropName(rProp.Name);
+
+ if ( aPropName.EqualsAscii( SC_UNONAME_FILENAME ) )
+ rProp.Value >>= aFileName;
+ else if ( aPropName.EqualsAscii( SC_UNONAME_FILTERNAME ) )
+ rProp.Value >>= aFilterName;
+ else if ( aPropName.EqualsAscii( SC_UNONAME_FILTEROPTIONS ) )
+ rProp.Value >>= aFilterOptions;
+ else if ( aPropName.EqualsAscii( SC_UNONAME_INPUTSTREAM ) )
+ rProp.Value >>= xInputStream;
+ }
+}
+
+// XExecutableDialog
+
+void SAL_CALL ScFilterOptionsObj::setTitle( const ::rtl::OUString& /* aTitle */ ) throw(uno::RuntimeException)
+{
+ // not used
+}
+
+sal_Int16 SAL_CALL ScFilterOptionsObj::execute() throw(uno::RuntimeException)
+{
+ sal_Int16 nRet = ui::dialogs::ExecutableDialogResults::CANCEL;
+
+ String aFilterString( aFilterName );
+
+ ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
+ DBG_ASSERT(pFact, "ScAbstractFactory create fail!");
+
+ if ( !bExport && aFilterString == ScDocShell::GetAsciiFilterName() )
+ {
+ // ascii import is special...
+
+ INetURLObject aURL( aFileName );
+ String aExt(aURL.getExtension());
+ String aPrivDatName(aURL.getName());
+ sal_Unicode cAsciiDel;
+ if (aExt.EqualsIgnoreCaseAscii("CSV"))
+ cAsciiDel = ',';
+ else
+ cAsciiDel = '\t';
+
+ SvStream* pInStream = NULL;
+ if ( xInputStream.is() )
+ pInStream = utl::UcbStreamHelper::CreateStream( xInputStream );
+
+ //CHINA001 ScImportAsciiDlg* pDlg = new ScImportAsciiDlg( NULL, aPrivDatName, pInStream, cAsciiDel );
+ AbstractScImportAsciiDlg* pDlg = pFact->CreateScImportAsciiDlg( NULL, aPrivDatName, pInStream, RID_SCDLG_ASCII, cAsciiDel);
+ DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
+ if ( pDlg->Execute() == RET_OK )
+ {
+ ScAsciiOptions aOptions;
+ pDlg->GetOptions( aOptions );
+ pDlg->SaveParameters();
+ aFilterOptions = aOptions.WriteToString();
+ nRet = ui::dialogs::ExecutableDialogResults::OK;
+ }
+ delete pDlg;
+ delete pInStream;
+ }
+ else if ( aFilterString == ScDocShell::GetWebQueryFilterName() || aFilterString == ScDocShell::GetHtmlFilterName() )
+ {
+ if (bExport)
+ nRet = ui::dialogs::ExecutableDialogResults::OK; // export HTML without dialog
+ else
+ {
+ // HTML import.
+ ::std::auto_ptr<AbstractScTextImportOptionsDlg> pDlg(
+ pFact->CreateScTextImportOptionsDlg(NULL, RID_SCDLG_TEXT_IMPORT_OPTIONS));
+
+ if (pDlg->Execute() == RET_OK)
+ {
+ LanguageType eLang = pDlg->GetLanguageType();
+ OUStringBuffer aBuf;
+
+ aBuf.append(String::CreateFromInt32(static_cast<sal_Int32>(eLang)));
+ aBuf.append(sal_Unicode(' '));
+ aBuf.append(pDlg->IsDateConversionSet() ? sal_Unicode('1') : sal_Unicode('0'));
+ aFilterOptions = aBuf.makeStringAndClear();
+ nRet = ui::dialogs::ExecutableDialogResults::OK;
+ }
+ }
+ }
+ else
+ {
+ sal_Bool bMultiByte = sal_True;
+ sal_Bool bDBEnc = sal_False;
+ sal_Bool bAscii = sal_False;
+
+ sal_Unicode cStrDel = '"';
+ sal_Unicode cAsciiDel = ';';
+ rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW;
+
+ String aTitle;
+
+ if ( aFilterString == ScDocShell::GetAsciiFilterName() )
+ {
+ // ascii export (import is handled above)
+
+ INetURLObject aURL( aFileName );
+ String aExt(aURL.getExtension());
+ if (aExt.EqualsIgnoreCaseAscii("CSV"))
+ cAsciiDel = ',';
+ else
+ cAsciiDel = '\t';
+
+ aTitle = ScGlobal::GetRscString( STR_EXPORT_ASCII );
+ bAscii = sal_True;
+ }
+ else if ( aFilterString == ScDocShell::GetLotusFilterName() )
+ {
+ // lotus is only imported
+ DBG_ASSERT( !bExport, "Filter Options for Lotus Export is not implemented" );
+
+ aTitle = ScGlobal::GetRscString( STR_IMPORT_LOTUS );
+ eEncoding = RTL_TEXTENCODING_IBM_437;
+ }
+ else if ( aFilterString == ScDocShell::GetDBaseFilterName() )
+ {
+ if ( bExport )
+ {
+ // dBase export
+ aTitle = ScGlobal::GetRscString( STR_EXPORT_DBF );
+ }
+ else
+ {
+ // dBase import
+ aTitle = ScGlobal::GetRscString( STR_IMPORT_DBF );
+ }
+ // common for dBase import/export
+ eEncoding = RTL_TEXTENCODING_IBM_850;
+ bDBEnc = sal_True;
+ }
+ else if ( aFilterString == ScDocShell::GetDifFilterName() )
+ {
+ if ( bExport )
+ {
+ // DIF export
+ aTitle = ScGlobal::GetRscString( STR_EXPORT_DIF );
+ }
+ else
+ {
+ // DIF import
+ aTitle = ScGlobal::GetRscString( STR_IMPORT_DIF );
+ }
+ // common for DIF import/export
+ eEncoding = RTL_TEXTENCODING_MS_1252;
+ }
+
+ ScImportOptions aOptions( cAsciiDel, cStrDel, eEncoding);
+//CHINA001 ScImportOptionsDlg* pDlg = new ScImportOptionsDlg( NULL, bAscii,
+//CHINA001 &aOptions, &aTitle, bMultiByte, bDBEnc,
+//CHINA001 !bExport );
+//CHINA001
+
+ AbstractScImportOptionsDlg* pDlg = pFact->CreateScImportOptionsDlg( NULL, RID_SCDLG_IMPORTOPT,
+ bAscii, &aOptions, &aTitle, bMultiByte, bDBEnc,
+ !bExport);
+ DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
+ if ( pDlg->Execute() == RET_OK )
+ {
+ pDlg->GetImportOptions( aOptions );
+ if ( bAscii )
+ aFilterOptions = aOptions.BuildString();
+ else
+ aFilterOptions = aOptions.aStrFont;
+ nRet = ui::dialogs::ExecutableDialogResults::OK;
+ }
+ delete pDlg;
+ }
+
+ xInputStream.clear(); // don't hold the stream longer than necessary
+
+ return nRet;
+}
+
+// XImporter
+
+void SAL_CALL ScFilterOptionsObj::setTargetDocument( const uno::Reference<lang::XComponent>& /* xDoc */ )
+ throw(lang::IllegalArgumentException, uno::RuntimeException)
+{
+ bExport = sal_False;
+}
+
+// XExporter
+
+void SAL_CALL ScFilterOptionsObj::setSourceDocument( const uno::Reference<lang::XComponent>& /* xDoc */ )
+ throw(lang::IllegalArgumentException, uno::RuntimeException)
+{
+ bExport = sal_True;
+}
+