summaryrefslogtreecommitdiff
path: root/sc/inc/dbcolect.hxx
blob: 95d2649daf3f773a9bd888100bd438845e7eae00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
 *
 * 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_DBCOLECT_HXX
#define SC_DBCOLECT_HXX

#include "scdllapi.h"
#include "collect.hxx"
#include "global.hxx"		// MAXQUERY
#include "sortparam.hxx"	// MAXSORT
#include "refreshtimer.hxx"
#include "address.hxx"
#include "scdllapi.h"

//------------------------------------------------------------------------

class ScDocument;

//------------------------------------------------------------------------

class ScDBData : public ScDataObject, public ScRefreshTimer
{

private:
    // DBParam
    String			aName;
    SCTAB			nTable;
    SCCOL      	    nStartCol;
    SCROW			nStartRow;
    SCCOL			nEndCol;
    SCROW			nEndRow;
    BOOL			bByRow;
    BOOL			bHasHeader;
    BOOL			bDoSize;
    BOOL			bKeepFmt;
    BOOL			bStripData;
    // SortParam
    BOOL			bSortCaseSens;
    BOOL			bSortNaturalSort;
    BOOL			bIncludePattern;
    BOOL			bSortInplace;
    BOOL			bSortUserDef;
    USHORT			nSortUserIndex;
    SCTAB			nSortDestTab;
    SCCOL			nSortDestCol;
    SCROW			nSortDestRow;
    BOOL			bDoSort[MAXSORT];
    SCCOLROW		nSortField[MAXSORT];
    BOOL			bAscending[MAXSORT];
    ::com::sun::star::lang::Locale aSortLocale;
    String			aSortAlgorithm;
    // QueryParam
    BOOL			bQueryInplace;
    BOOL			bQueryCaseSens;
    BOOL			bQueryRegExp;
    BOOL			bQueryDuplicate;
    SCTAB			nQueryDestTab;
    SCCOL			nQueryDestCol;
    SCROW			nQueryDestRow;
    BOOL			bDoQuery[MAXQUERY];
    SCCOLROW		nQueryField[MAXQUERY];
    ScQueryOp		eQueryOp[MAXQUERY];
    BOOL			bQueryByString[MAXQUERY];
    bool            bQueryByDate[MAXQUERY];
    String*			pQueryStr[MAXQUERY];
    double			nQueryVal[MAXQUERY];
    ScQueryConnect  eQueryConnect[MAXQUERY];
    BOOL			bIsAdvanced;		// TRUE if created by advanced filter
    ScRange			aAdvSource;			// source range
    SCROW           nDynamicEndRow;
    // SubTotalParam
    BOOL			bSubRemoveOnly;
    BOOL			bSubReplace;
    BOOL			bSubPagebreak;
    BOOL			bSubCaseSens;
    BOOL			bSubDoSort;
    BOOL			bSubAscending;
    BOOL			bSubIncludePattern;
    BOOL			bSubUserDef;
    USHORT			nSubUserIndex;
    BOOL			bDoSubTotal[MAXSUBTOTAL];
    SCCOL			nSubField[MAXSUBTOTAL];
    SCCOL			nSubTotals[MAXSUBTOTAL];
    SCCOL*			pSubTotals[MAXSUBTOTAL];
    ScSubTotalFunc*	pFunctions[MAXSUBTOTAL];
    // Datenbank-Import
    BOOL			bDBImport;
    String			aDBName;
    String			aDBStatement;
    BOOL			bDBNative;
    BOOL			bDBSelection;		// nicht im Param: Wenn Selektion, Update sperren
    BOOL			bDBSql;				// aDBStatement ist SQL und kein Name
    BYTE			nDBType;			// enum DBObject (bisher nur dbTable, dbQuery)

    USHORT			nIndex; 			// eindeutiger Index fuer Formeln
    BOOL			bAutoFilter;		// AutoFilter? (nicht gespeichert)
    BOOL			bModified;			// wird bei UpdateReference gesetzt/geloescht

    using ScRefreshTimer::operator==;

public:
            SC_DLLPUBLIC ScDBData(const String& rName,
                     SCTAB nTab,
                     SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
                     BOOL bByR = TRUE, BOOL bHasH = TRUE);
            ScDBData(const ScDBData& rData);
            ~ScDBData();

    virtual	ScDataObject*	Clone() const;

            ScDBData&	operator= (const ScDBData& rData);

            BOOL		operator== (const ScDBData& rData) const;

            const String& GetName() const				{ return aName; }
            void		GetName(String& rName) const	{ rName = aName; }
            void		SetName(const String& rName)	{ aName = rName; }
            void		GetArea(SCTAB& rTab, SCCOL& rCol1, SCROW& rRow1, SCCOL& rCol2, SCROW& rRow2, bool bUseDynamicRange = false) const;
            SC_DLLPUBLIC void		GetArea(ScRange& rRange, bool bUseDynamicRange = false) const;
            void		SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2);
            void        SetDynamicEndRow(SCROW nRow);
            void		MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2);
            BOOL		IsByRow() const 				{ return bByRow; }
            void		SetByRow(BOOL bByR) 			{ bByRow = bByR; }
            BOOL		HasHeader() const 				{ return bHasHeader; }
            void		SetHeader(BOOL bHasH) 			{ bHasHeader = bHasH; }
            void        SetIndex(USHORT nInd)           { nIndex = nInd; }
            USHORT		GetIndex() const				{ return nIndex; }
            BOOL		IsDoSize() const				{ return bDoSize; }
            void		SetDoSize(BOOL bSet)			{ bDoSize = bSet; }
            BOOL		IsKeepFmt() const				{ return bKeepFmt; }
            void		SetKeepFmt(BOOL bSet)			{ bKeepFmt = bSet; }
            BOOL		IsStripData() const				{ return bStripData; }
            void		SetStripData(BOOL bSet)			{ bStripData = bSet; }

            String		GetSourceString() const;
            String		GetOperations() const;

            void		GetSortParam(ScSortParam& rSortParam) const;
            void		SetSortParam(const ScSortParam& rSortParam);

            SC_DLLPUBLIC void		GetQueryParam(ScQueryParam& rQueryParam) const;
            SC_DLLPUBLIC void		SetQueryParam(const ScQueryParam& rQueryParam);
            SC_DLLPUBLIC BOOL		GetAdvancedQuerySource(ScRange& rSource) const;
            SC_DLLPUBLIC void		SetAdvancedQuerySource(const ScRange* pSource);

            void		GetSubTotalParam(ScSubTotalParam& rSubTotalParam) const;
            void		SetSubTotalParam(const ScSubTotalParam& rSubTotalParam);

            void		GetImportParam(ScImportParam& rImportParam) const;
            void		SetImportParam(const ScImportParam& rImportParam);

            BOOL		IsDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, BOOL bStartOnly) const;
            BOOL		IsDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const;

            BOOL		HasImportParam() const	 { return bDBImport; }
            BOOL		HasQueryParam() const	 { return bDoQuery[0]; }
            BOOL		HasSortParam() const	 { return bDoSort[0]; }
            BOOL		HasSubTotalParam() const { return bDoSubTotal[0]; }

            BOOL		HasImportSelection() const		{ return bDBSelection; }
            void		SetImportSelection(BOOL bSet)	{ bDBSelection = bSet; }

            BOOL		HasAutoFilter() const 		{ return bAutoFilter; }
            void		SetAutoFilter(BOOL bSet)	{ bAutoFilter = bSet; }

            BOOL		IsModified() const			{ return bModified; }
            void		SetModified(BOOL bMod)		{ bModified = bMod; }
};


//------------------------------------------------------------------------
class SC_DLLPUBLIC ScDBCollection : public ScSortedCollection
{

private:
    Link		aRefreshHandler;
    ScDocument* pDoc;
    USHORT nEntryIndex;			// Zaehler fuer die eindeutigen Indizes

public:
    ScDBCollection(USHORT nLim = 4, USHORT nDel = 4, BOOL bDup = FALSE, ScDocument* pDocument = NULL) :
                    ScSortedCollection	( nLim, nDel, bDup ),
                    pDoc				( pDocument ),
                    nEntryIndex			( SC_START_INDEX_DB_COLL )	// oberhalb der Namen
                    {}
    ScDBCollection(const ScDBCollection& rScDBCollection) :
                    ScSortedCollection	( rScDBCollection ),
                    pDoc 				( rScDBCollection.pDoc ),
                    nEntryIndex			( rScDBCollection.nEntryIndex)
                    {}

    virtual	ScDataObject*	Clone() const { return new ScDBCollection(*this); }
            ScDBData*	operator[]( const USHORT nIndex) const {return (ScDBData*)At(nIndex);}
    virtual	short		Compare(ScDataObject* pKey1, ScDataObject* pKey2) const;
    virtual	BOOL		IsEqual(ScDataObject* pKey1, ScDataObject* pKey2) const;
            ScDBData*	GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, BOOL bStartOnly) const;
            ScDBData*	GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const;

    BOOL	SearchName( const String& rName, USHORT& rIndex ) const;

    void    DeleteOnTab( SCTAB nTab );
    void	UpdateReference(UpdateRefMode eUpdateRefMode,
                                SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
                                SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
                                SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
    void	UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos );

    ScDBData* FindIndex(USHORT nIndex);
    USHORT 	GetEntryIndex()					{ return nEntryIndex; }
    void 	SetEntryIndex(USHORT nInd)		{ nEntryIndex = nInd; }
    virtual BOOL Insert(ScDataObject* pScDataObject);

    void			SetRefreshHandler( const Link& rLink )
                        { aRefreshHandler = rLink; }
    const Link&		GetRefreshHandler() const	{ return aRefreshHandler; }
};

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */