summaryrefslogtreecommitdiff
path: root/sc/source/ui/inc/impex.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/inc/impex.hxx')
-rw-r--r--sc/source/ui/inc/impex.hxx191
1 files changed, 191 insertions, 0 deletions
diff --git a/sc/source/ui/inc/impex.hxx b/sc/source/ui/inc/impex.hxx
new file mode 100644
index 000000000000..86a91216edcc
--- /dev/null
+++ b/sc/source/ui/inc/impex.hxx
@@ -0,0 +1,191 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#ifndef SC_IMPEX_HXX
+#define SC_IMPEX_HXX
+
+#include <osl/endian.h>
+#include <sot/exchange.hxx>
+#include "global.hxx"
+#include "address.hxx"
+
+class ScDocShell;
+class ScDocument;
+class SvStream;
+class SfxMedium;
+class ScAsciiOptions;
+
+struct ScExportTextOptions
+{
+ enum NewlineConversion { ToSystem, ToSpace, None };
+ ScExportTextOptions( NewlineConversion eNewlineConversion = ToSystem, sal_Unicode cSeparatorConvertTo = 0, bool bAddQuotes = false ) :
+ meNewlineConversion( eNewlineConversion ), mcSeparatorConvertTo( cSeparatorConvertTo ), mbAddQuotes( bAddQuotes ) {}
+
+ NewlineConversion meNewlineConversion;
+ sal_Unicode mcSeparatorConvertTo; // Convert separator to this character
+ bool mbAddQuotes;
+};
+
+class ScImportExport
+{
+ ScDocShell* pDocSh;
+ ScDocument* pDoc;
+ ScDocument* pUndoDoc;
+ ScRange aRange;
+ String aStreamPath;
+ String aNonConvertibleChars;
+ ULONG nSizeLimit;
+ sal_Unicode cSep; // Separator
+ sal_Unicode cStr; // String Delimiter
+ BOOL bFormulas; // Formeln im Text?
+ BOOL bIncludeFiltered; // include filtered rows? (default true)
+ BOOL bAll; // keine Selektion
+ BOOL bSingle; // Einfachselektion
+ BOOL bUndo; // Mit Undo?
+ BOOL bOverflow; // zuviele Zeilen/Spalten
+ bool mbApi;
+ ScExportTextOptions mExportTextOptions;
+
+ ScAsciiOptions* pExtOptions; // erweiterte Optionen
+
+ BOOL StartPaste(); // Protect-Check, Undo einrichten
+ void EndPaste(); // Undo/Redo-Aktionen, Repaint
+ BOOL Doc2Text( SvStream& );
+ BOOL Text2Doc( SvStream& );
+ BOOL Doc2Sylk( SvStream& );
+ BOOL Sylk2Doc( SvStream& );
+ BOOL Doc2HTML( SvStream&, const String& );
+ BOOL Doc2RTF( SvStream& );
+ BOOL Doc2Dif( SvStream& );
+ BOOL Dif2Doc( SvStream& );
+ BOOL ExtText2Doc( SvStream& ); // mit pExtOptions
+ BOOL RTF2Doc( SvStream&, const String& rBaseURL );
+ BOOL HTML2Doc( SvStream&, const String& rBaseURL );
+
+public:
+ ScImportExport( ScDocument* ); // Gesamtdokument
+ ScImportExport( ScDocument*, const String& ); // Bereichs/Zellangabe
+ ScImportExport( ScDocument*, const ScAddress& );
+ ScImportExport( ScDocument*, const ScRange& );
+ ~ScImportExport();
+
+ void SetExtOptions( const ScAsciiOptions& rOpt );
+
+ BOOL IsDoubleRef() const { return BOOL( !( bAll || bSingle ) ); }
+ BOOL IsSingleRef() const { return bSingle; }
+ BOOL IsNoRef() const { return bAll; }
+ BOOL IsRef() const { return BOOL( !bAll ); }
+
+ const ScRange& GetRange() const { return aRange; }
+
+ BOOL IsUndo() const { return bUndo; }
+ void SetUndo( BOOL b ) { bUndo = b; }
+
+ static BOOL IsFormatSupported( ULONG nFormat );
+ static const sal_Unicode* ScanNextFieldFromString( const sal_Unicode* p,
+ String& rField, sal_Unicode cStr, const sal_Unicode* pSeps, bool bMergeSeps, bool& rbIsQuoted );
+ static void WriteUnicodeOrByteString( SvStream& rStrm, const String& rString, BOOL bZero = FALSE );
+ static void WriteUnicodeOrByteEndl( SvStream& rStrm );
+ static inline BOOL IsEndianSwap( const SvStream& rStrm );
+
+ //! only if stream is only used in own (!) memory
+ static inline void SetNoEndianSwap( SvStream& rStrm );
+
+ sal_Unicode GetSeparator() const { return cSep; }
+ void SetSeparator( sal_Unicode c ) { cSep = c; }
+ sal_Unicode GetDelimiter() const { return cStr; }
+ void SetDelimiter( sal_Unicode c ) { cStr = c; }
+ BOOL IsFormulas() const { return bFormulas; }
+ void SetFormulas( BOOL b ) { bFormulas = b; }
+ BOOL IsIncludeFiltered() const { return bIncludeFiltered; }
+ void SetIncludeFiltered( BOOL b ) { bIncludeFiltered = b; }
+
+ void SetSizeLimit( ULONG nNew ) { nSizeLimit = nNew; } // momentan nur fuer Ascii
+
+ void SetStreamPath( const String& rPath ) { aStreamPath = rPath; }
+ const String& GetStreamPath() const { return aStreamPath; }
+
+ BOOL ImportString( const ::rtl::OUString&, ULONG=FORMAT_STRING );
+ BOOL ExportString( ::rtl::OUString&, ULONG=FORMAT_STRING );
+ BOOL ExportByteString( ByteString&, rtl_TextEncoding, ULONG=FORMAT_STRING );
+
+ BOOL ImportStream( SvStream&, const String& rBaseURL, ULONG=FORMAT_STRING );
+ BOOL ExportStream( SvStream&, const String& rBaseURL, ULONG=FORMAT_STRING );
+
+ BOOL ImportData( const String& rMimeType,
+ const ::com::sun::star::uno::Any & rValue );
+ BOOL ExportData( const String& rMimeType,
+ ::com::sun::star::uno::Any & rValue );
+
+ BOOL IsOverflow() const { return bOverflow; } // nach dem Importieren
+
+ const String& GetNonConvertibleChars() const { return aNonConvertibleChars; }
+
+ bool IsApi() const { return mbApi; }
+ void SetApi( bool bApi ) { mbApi = bApi; }
+ const ScExportTextOptions& GetExportTextOptions() { return mExportTextOptions; }
+ void SetExportTextOptions( const ScExportTextOptions& options ) { mExportTextOptions = options; }
+};
+
+
+// static
+inline BOOL ScImportExport::IsEndianSwap( const SvStream& rStrm )
+{
+#ifdef OSL_BIGENDIAN
+ return rStrm.GetNumberFormatInt() != NUMBERFORMAT_INT_BIGENDIAN;
+#else
+ return rStrm.GetNumberFormatInt() != NUMBERFORMAT_INT_LITTLEENDIAN;
+#endif
+}
+
+// static
+inline void ScImportExport::SetNoEndianSwap( SvStream& rStrm )
+{
+#ifdef OSL_BIGENDIAN
+ rStrm.SetNumberFormatInt( NUMBERFORMAT_INT_BIGENDIAN );
+#else
+ rStrm.SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN );
+#endif
+}
+
+
+// Helper class for importing clipboard strings as streams.
+class ScImportStringStream : public SvMemoryStream
+{
+public:
+ ScImportStringStream( const ::rtl::OUString rStr )
+ : SvMemoryStream( (void*)rStr.getStr(),
+ rStr.getLength() * sizeof(sal_Unicode), STREAM_READ)
+ {
+ SetStreamCharSet( RTL_TEXTENCODING_UNICODE );
+ SetEndianSwap( FALSE );
+ }
+};
+
+
+#endif
+