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