xref: /AOO41X/main/sc/inc/dbcolect.hxx (revision 8e8ee8fefdac26d905672cc573c35fd0ae1f9356)
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