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