summaryrefslogtreecommitdiff
path: root/sc/inc/rangeutl.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/inc/rangeutl.hxx')
-rw-r--r--sc/inc/rangeutl.hxx321
1 files changed, 321 insertions, 0 deletions
diff --git a/sc/inc/rangeutl.hxx b/sc/inc/rangeutl.hxx
new file mode 100644
index 000000000000..ea5d2a901b54
--- /dev/null
+++ b/sc/inc/rangeutl.hxx
@@ -0,0 +1,321 @@
+/*************************************************************************
+ *
+ * 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_RANGEUTL_HXX
+#define SC_RANGEUTL_HXX
+
+#include "address.hxx"
+#include <tools/string.hxx>
+#include "scdllapi.h"
+#include <com/sun/star/table/CellAddress.hpp>
+#include <com/sun/star/table/CellRangeAddress.hpp>
+#include <com/sun/star/uno/Sequence.hxx>
+
+//------------------------------------------------------------------------
+
+class SvStream;
+
+class ScArea;
+class ScDocument;
+class ScRange;
+class ScRangeName;
+class ScRangeList;
+class ScDBCollection;
+
+enum RutlNameScope { RUTL_NONE=0, RUTL_NAMES, RUTL_DBASE };
+
+//------------------------------------------------------------------------
+
+class SC_DLLPUBLIC ScRangeUtil
+{
+public:
+ ScRangeUtil() {}
+ ~ScRangeUtil() {}
+
+ BOOL MakeArea ( const String& rAreaStr,
+ ScArea& rArea,
+ ScDocument* pDoc,
+ SCTAB nTab,
+ ScAddress::Details const & rDetails = ScAddress::detailsOOOa1 ) const;
+
+ void CutPosString ( const String& theAreaStr,
+ String& thePosStr ) const;
+
+ BOOL IsAbsTabArea ( const String& rAreaStr,
+ ScDocument* pDoc,
+ ScArea*** pppAreas = 0,
+ USHORT* pAreaCount = 0,
+ BOOL bAcceptCellRef = FALSE,
+ ScAddress::Details const & rDetails = ScAddress::detailsOOOa1 ) const;
+
+ BOOL IsAbsArea ( const String& rAreaStr,
+ ScDocument* pDoc,
+ SCTAB nTab,
+ String* pCompleteStr = 0,
+ ScRefAddress* pStartPos = 0,
+ ScRefAddress* pEndPos = 0,
+ ScAddress::Details const & rDetails = ScAddress::detailsOOOa1 ) const;
+
+ BOOL IsRefArea ( const String&,
+ ScDocument*,
+ SCTAB,
+ String* = 0,
+ ScRefAddress* = 0 ) const
+ { return FALSE; }
+
+ BOOL IsAbsPos ( const String& rPosStr,
+ ScDocument* pDoc,
+ SCTAB nTab,
+ String* pCompleteStr = 0,
+ ScRefAddress* pPosTripel = 0,
+ ScAddress::Details const & rDetails = ScAddress::detailsOOOa1 ) const;
+
+ BOOL MakeRangeFromName ( const String& rName,
+ ScDocument* pDoc,
+ SCTAB nCurTab,
+ ScRange& rRange,
+ RutlNameScope eScope=RUTL_NAMES,
+ ScAddress::Details const & rDetails = ScAddress::detailsOOOa1 ) const;
+};
+
+//------------------------------------------------------------------------
+
+class SC_DLLPUBLIC ScRangeStringConverter
+{
+public:
+
+// helper methods
+ static void AssignString(
+ ::rtl::OUString& rString,
+ const ::rtl::OUString& rNewStr,
+ sal_Bool bAppendStr,
+ sal_Unicode cSeperator = ' ');
+
+ static sal_Int32 IndexOf(
+ const ::rtl::OUString& rString,
+ sal_Unicode cSearchChar,
+ sal_Int32 nOffset,
+ sal_Unicode cQuote = '\'');
+
+ static sal_Int32 IndexOfDifferent(
+ const ::rtl::OUString& rString,
+ sal_Unicode cSearchChar,
+ sal_Int32 nOffset );
+
+ static sal_Int32 GetTokenCount(
+ const ::rtl::OUString& rString,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+
+ static void GetTokenByOffset(
+ ::rtl::OUString& rToken,
+ const ::rtl::OUString& rString,
+ sal_Int32& nOffset,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+
+ static void AppendTableName(
+ ::rtl::OUStringBuffer& rBuf,
+ const ::rtl::OUString& rTabName,
+ sal_Unicode cQuote = '\'');
+
+// String to Range core
+ static sal_Bool GetAddressFromString(
+ ScAddress& rAddress,
+ const ::rtl::OUString& rAddressStr,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Int32& nOffset,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+ static sal_Bool GetRangeFromString(
+ ScRange& rRange,
+ const ::rtl::OUString& rRangeStr,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Int32& nOffset,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+ static sal_Bool GetRangeListFromString(
+ ScRangeList& rRangeList,
+ const ::rtl::OUString& rRangeListStr,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+
+ static sal_Bool GetAreaFromString(
+ ScArea& rArea,
+ const ::rtl::OUString& rRangeStr,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Int32& nOffset,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+
+// String to Range API
+ static sal_Bool GetAddressFromString(
+ ::com::sun::star::table::CellAddress& rAddress,
+ const ::rtl::OUString& rAddressStr,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Int32& nOffset,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+ static sal_Bool GetRangeFromString(
+ ::com::sun::star::table::CellRangeAddress& rRange,
+ const ::rtl::OUString& rRangeStr,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Int32& nOffset,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+ static sal_Bool GetRangeListFromString(
+ ::com::sun::star::uno::Sequence< ::com::sun::star::table::CellRangeAddress >& rRangeSeq,
+ const ::rtl::OUString& rRangeListStr,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_Unicode cQuote = '\'');
+
+// Range to String core
+ static void GetStringFromAddress(
+ ::rtl::OUString& rString,
+ const ScAddress& rAddress,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_Bool bAppendStr = sal_False,
+ sal_uInt16 nFormatFlags = (SCA_VALID | SCA_TAB_3D) );
+ static void GetStringFromRange(
+ ::rtl::OUString& rString,
+ const ScRange& rRange,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_Bool bAppendStr = sal_False,
+ sal_uInt16 nFormatFlags = (SCA_VALID | SCA_TAB_3D) );
+ static void GetStringFromRangeList(
+ ::rtl::OUString& rString,
+ const ScRangeList* pRangeList,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_uInt16 nFormatFlags = (SCA_VALID | SCA_TAB_3D));
+
+ static void GetStringFromArea(
+ ::rtl::OUString& rString,
+ const ScArea& rArea,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_Bool bAppendStr = sal_False,
+ sal_uInt16 nFormatFlags = (SCA_VALID | SCA_TAB_3D) );
+
+// Range to String API
+ static void GetStringFromAddress(
+ ::rtl::OUString& rString,
+ const ::com::sun::star::table::CellAddress& rAddress,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_Bool bAppendStr = sal_False,
+ sal_uInt16 nFormatFlags = (SCA_VALID | SCA_TAB_3D) );
+ static void GetStringFromRange(
+ ::rtl::OUString& rString,
+ const ::com::sun::star::table::CellRangeAddress& rRange,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_Bool bAppendStr = sal_False,
+ sal_uInt16 nFormatFlags = (SCA_VALID | SCA_TAB_3D) );
+ static void GetStringFromRangeList(
+ ::rtl::OUString& rString,
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::table::CellRangeAddress >& rRangeSeq,
+ const ScDocument* pDocument,
+ formula::FormulaGrammar::AddressConvention eConv,
+ sal_Unicode cSeperator = ' ',
+ sal_uInt16 nFormatFlags = (SCA_VALID | SCA_TAB_3D) );
+
+// XML Range to Calc Range
+ static void GetStringFromXMLRangeString(
+ ::rtl::OUString& rString,
+ const ::rtl::OUString& rXMLRange,
+ ScDocument* pDoc );
+};
+
+//------------------------------------------------------------------------
+
+class ScArea
+{
+public:
+ ScArea( SCTAB tab = 0,
+ SCCOL colStart = 0,
+ SCROW rowStart = 0,
+ SCCOL colEnd = 0,
+ SCROW rowEnd = 0 );
+
+ ScArea( const ScArea& r );
+
+ ScArea& operator= ( const ScArea& r );
+ BOOL operator== ( const ScArea& r ) const;
+ BOOL operator!= ( const ScArea& r ) const { return !( operator==(r) ); }
+
+public:
+ SCTAB nTab;
+ SCCOL nColStart;
+ SCROW nRowStart;
+ SCCOL nColEnd;
+ SCROW nRowEnd;
+};
+
+//------------------------------------------------------------------------
+
+//
+// gibt Bereiche mit Referenz und alle DB-Bereiche zurueck
+//
+
+class SC_DLLPUBLIC ScAreaNameIterator
+{
+private:
+ ScRangeName* pRangeName;
+ ScDBCollection* pDBCollection;
+ BOOL bFirstPass;
+ USHORT nPos;
+ String aStrNoName;
+
+public:
+ ScAreaNameIterator( ScDocument* pDoc );
+ ~ScAreaNameIterator() {}
+
+ BOOL Next( String& rName, ScRange& rRange );
+ BOOL WasDBName() const { return !bFirstPass; }
+};
+
+
+#endif // SC_RANGEUTL_HXX
+