xref: /trunk/main/sc/inc/dbcolect.hxx (revision 22407013)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SC_DBCOLECT_HXX
25 #define SC_DBCOLECT_HXX
26 
27 #include "scdllapi.h"
28 #include "collect.hxx"
29 #include "global.hxx"		// MAXQUERY
30 #include "sortparam.hxx"	// MAXSORT
31 #include "refreshtimer.hxx"
32 #include "address.hxx"
33 #include "scdllapi.h"
34 
35 //------------------------------------------------------------------------
36 
37 class ScDocument;
38 
39 //------------------------------------------------------------------------
40 
41 class ScDBData : public ScDataObject, public ScRefreshTimer
42 {
43 friend class ScDBCollection;
44 private:
45 	// DBParam
46 	String			aName;
47 	SCTAB			nTable;
48 	SCCOL      	    nStartCol;
49 	SCROW			nStartRow;
50 	SCCOL			nEndCol;
51 	SCROW			nEndRow;
52 	sal_Bool			bByRow;
53 	sal_Bool			bHasHeader;
54 	sal_Bool			bDoSize;
55 	sal_Bool			bKeepFmt;
56 	sal_Bool			bStripData;
57 	// SortParam
58 	sal_Bool			bSortCaseSens;
59 	sal_Bool			bIncludePattern;
60 	sal_Bool			bSortInplace;
61 	sal_Bool			bSortUserDef;
62 	sal_uInt16			nSortUserIndex;
63 	SCTAB			nSortDestTab;
64 	SCCOL			nSortDestCol;
65 	SCROW			nSortDestRow;
66 	sal_Bool			bDoSort[MAXSORT];
67 	SCCOLROW		nSortField[MAXSORT];
68 	sal_Bool			bAscending[MAXSORT];
69 	::com::sun::star::lang::Locale aSortLocale;
70 	String			aSortAlgorithm;
71 	// QueryParam
72 	sal_Bool			bQueryInplace;
73 	sal_Bool			bQueryCaseSens;
74 	sal_Bool			bQueryRegExp;
75 	sal_Bool			bQueryDuplicate;
76 	SCTAB			nQueryDestTab;
77 	SCCOL			nQueryDestCol;
78 	SCROW			nQueryDestRow;
79 	sal_Bool			bDoQuery[MAXQUERY];
80 	SCCOLROW		nQueryField[MAXQUERY];
81 	ScQueryOp		eQueryOp[MAXQUERY];
82 	sal_Bool			bQueryByString[MAXQUERY];
83     bool            bQueryByDate[MAXQUERY];
84 	String*			pQueryStr[MAXQUERY];
85 	double			nQueryVal[MAXQUERY];
86 	ScQueryConnect  eQueryConnect[MAXQUERY];
87 	sal_Bool			bIsAdvanced;		// sal_True if created by advanced filter
88 	ScRange			aAdvSource;			// source range
89 	// SubTotalParam
90 	sal_Bool			bSubRemoveOnly;
91 	sal_Bool			bSubReplace;
92 	sal_Bool			bSubPagebreak;
93 	sal_Bool			bSubCaseSens;
94 	sal_Bool			bSubDoSort;
95 	sal_Bool			bSubAscending;
96 	sal_Bool			bSubIncludePattern;
97 	sal_Bool			bSubUserDef;
98 	sal_uInt16			nSubUserIndex;
99 	sal_Bool			bDoSubTotal[MAXSUBTOTAL];
100 	SCCOL			nSubField[MAXSUBTOTAL];
101 	SCCOL			nSubTotals[MAXSUBTOTAL];
102 	SCCOL*			pSubTotals[MAXSUBTOTAL];
103 	ScSubTotalFunc*	pFunctions[MAXSUBTOTAL];
104 	// Datenbank-Import
105 	sal_Bool			bDBImport;
106 	String			aDBName;
107 	String			aDBStatement;
108 	sal_Bool			bDBNative;
109 	sal_Bool			bDBSelection;		// nicht im Param: Wenn Selektion, Update sperren
110 	sal_Bool			bDBSql;				// aDBStatement ist SQL und kein Name
111 	sal_uInt8			nDBType;			// enum DBObject (bisher nur dbTable, dbQuery)
112 
113 	sal_uInt16			nIndex; 			// eindeutiger Index fuer Formeln
114 	sal_Bool			bAutoFilter;		// AutoFilter? (nicht gespeichert)
115 	sal_Bool			bModified;			// wird bei UpdateReference gesetzt/geloescht
116 
117     using ScRefreshTimer::operator==;
118 
119 public:
120 			SC_DLLPUBLIC ScDBData(const String& rName,
121 					 SCTAB nTab,
122 					 SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
123 					 sal_Bool bByR = sal_True, sal_Bool bHasH = sal_True);
124 			ScDBData(const ScDBData& rData);
125 			~ScDBData();
126 
127 	virtual	ScDataObject*	Clone() const;
128 
129 			ScDBData&	operator= (const ScDBData& rData);
130 
131 			sal_Bool		operator== (const ScDBData& rData) const;
132 
GetName() const133 			const String& GetName() const				{ return aName; }
GetName(String & rName) const134 			void		GetName(String& rName) const	{ rName = aName; }
SetName(const String & rName)135 			void		SetName(const String& rName)	{ aName = rName; }
136 			void		GetArea(SCTAB& rTab, SCCOL& rCol1, SCROW& rRow1, SCCOL& rCol2, SCROW& rRow2) const;
137 			SC_DLLPUBLIC void		GetArea(ScRange& rRange) const;
138 			void		SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2);
139 
140             bool IsInternalUnnamed() const;
141             bool IsInternalForAutoFilter() const;
142 
143             void		MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2);
IsByRow() const144 			sal_Bool		IsByRow() const 				{ return bByRow; }
SetByRow(sal_Bool bByR)145 			void		SetByRow(sal_Bool bByR) 			{ bByRow = bByR; }
HasHeader() const146 			sal_Bool		HasHeader() const 				{ return bHasHeader; }
SetHeader(sal_Bool bHasH)147 			void		SetHeader(sal_Bool bHasH) 			{ bHasHeader = bHasH; }
SetIndex(sal_uInt16 nInd)148             void        SetIndex(sal_uInt16 nInd)           { nIndex = nInd; }
GetIndex() const149 			sal_uInt16		GetIndex() const				{ return nIndex; }
IsDoSize() const150 			sal_Bool		IsDoSize() const				{ return bDoSize; }
SetDoSize(sal_Bool bSet)151 			void		SetDoSize(sal_Bool bSet)			{ bDoSize = bSet; }
IsKeepFmt() const152 			sal_Bool		IsKeepFmt() const				{ return bKeepFmt; }
SetKeepFmt(sal_Bool bSet)153 			void		SetKeepFmt(sal_Bool bSet)			{ bKeepFmt = bSet; }
IsStripData() const154 			sal_Bool		IsStripData() const				{ return bStripData; }
SetStripData(sal_Bool bSet)155 			void		SetStripData(sal_Bool bSet)			{ bStripData = bSet; }
156 
157 //UNUSED2008-05  sal_Bool		IsBeyond(SCROW nMaxRow) const;
158 
159 			String		GetSourceString() const;
160 			String		GetOperations() const;
161 
162 			void		GetSortParam(ScSortParam& rSortParam) const;
163 			void		SetSortParam(const ScSortParam& rSortParam);
164 
165 			SC_DLLPUBLIC void		GetQueryParam(ScQueryParam& rQueryParam) const;
166 			SC_DLLPUBLIC void		SetQueryParam(const ScQueryParam& rQueryParam);
167 			SC_DLLPUBLIC sal_Bool		GetAdvancedQuerySource(ScRange& rSource) const;
168 			SC_DLLPUBLIC void		SetAdvancedQuerySource(const ScRange* pSource);
169 
170 			void		GetSubTotalParam(ScSubTotalParam& rSubTotalParam) const;
171 			void		SetSubTotalParam(const ScSubTotalParam& rSubTotalParam);
172 
173 			void		GetImportParam(ScImportParam& rImportParam) const;
174 			void		SetImportParam(const ScImportParam& rImportParam);
175 
176 			sal_Bool		IsDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bStartOnly) const;
177 			sal_Bool		IsDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const;
178 
HasImportParam() const179 			sal_Bool		HasImportParam() const	 { return bDBImport; }
HasQueryParam() const180 			sal_Bool		HasQueryParam() const	 { return bDoQuery[0]; }
HasSortParam() const181 			sal_Bool		HasSortParam() const	 { return bDoSort[0]; }
HasSubTotalParam() const182 			sal_Bool		HasSubTotalParam() const { return bDoSubTotal[0]; }
183 
HasImportSelection() const184 			sal_Bool		HasImportSelection() const		{ return bDBSelection; }
SetImportSelection(sal_Bool bSet)185 			void		SetImportSelection(sal_Bool bSet)	{ bDBSelection = bSet; }
186 
HasAutoFilter() const187 			sal_Bool		HasAutoFilter() const 		{ return bAutoFilter; }
SetAutoFilter(sal_Bool bSet)188 			void		SetAutoFilter(sal_Bool bSet)	{ bAutoFilter = bSet; }
189 
IsModified() const190 			sal_Bool		IsModified() const			{ return bModified; }
SetModified(sal_Bool bMod)191 			void		SetModified(sal_Bool bMod)		{ bModified = bMod; }
192 };
193 
194 
195 //------------------------------------------------------------------------
196 class SC_DLLPUBLIC ScDBCollection : public ScSortedCollection
197 {
198 
199 private:
200 	Link		aRefreshHandler;
201 	ScDocument* pDoc;
202 	sal_uInt16 nEntryIndex;			// Zaehler fuer die eindeutigen Indizes
203 
204 public:
ScDBCollection(sal_uInt16 nLim=4,sal_uInt16 nDel=4,sal_Bool bDup=sal_False,ScDocument * pDocument=NULL)205 	ScDBCollection(sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = sal_False, ScDocument* pDocument = NULL) :
206 					ScSortedCollection	( nLim, nDel, bDup ),
207 					pDoc				( pDocument ),
208 					nEntryIndex			( SC_START_INDEX_DB_COLL )	// oberhalb der Namen
209 					{}
ScDBCollection(const ScDBCollection & rScDBCollection)210 	ScDBCollection(const ScDBCollection& rScDBCollection) :
211 					ScSortedCollection	( rScDBCollection ),
212 					pDoc 				( rScDBCollection.pDoc ),
213 					nEntryIndex			( rScDBCollection.nEntryIndex)
214 					{}
215 
Clone() const216 	virtual	ScDataObject*	Clone() const { return new ScDBCollection(*this); }
operator [](const sal_uInt16 nIndex) const217 			ScDBData*	operator[]( const sal_uInt16 nIndex) const {return (ScDBData*)At(nIndex);}
218 	virtual	short		Compare(ScDataObject* pKey1, ScDataObject* pKey2) const;
219 	virtual	sal_Bool		IsEqual(ScDataObject* pKey1, ScDataObject* pKey2) const;
220 			ScDBData*	GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bStartOnly) const;
221             ScDBData* GetDBAtArea(
222                 const SCTAB nTab,
223                 const SCCOL nCol1,
224                 const SCROW nRow1,
225                 const SCCOL nCol2,
226                 const SCROW nRow2 ) const;
227 			ScDBData*       GetFilterDBAtTable(SCTAB nTab) const;
228 
229 	sal_Bool	SearchName( const String& rName, sal_uInt16& rIndex ) const;
230 
231     void    DeleteOnTab( SCTAB nTab );
232 	void	UpdateReference(UpdateRefMode eUpdateRefMode,
233 								SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
234 								SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
235 								SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
236 	void	UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos );
237 
238 	ScDBData* FindIndex(sal_uInt16 nIndex);
GetEntryIndex()239 	sal_uInt16 	GetEntryIndex()					{ return nEntryIndex; }
SetEntryIndex(sal_uInt16 nInd)240 	void 	SetEntryIndex(sal_uInt16 nInd)		{ nEntryIndex = nInd; }
241 	virtual sal_Bool Insert(ScDataObject* pScDataObject);
242 
SetRefreshHandler(const Link & rLink)243 	void			SetRefreshHandler( const Link& rLink )
244 						{ aRefreshHandler = rLink; }
GetRefreshHandler() const245 	const Link&		GetRefreshHandler() const	{ return aRefreshHandler; }
246     String      GetNewDefaultDBName();
247     /*sal_Bool        IsFiltered(SCTAB nTab, SCROW nRow);*/
248 };
249 
250 #endif
251