| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the 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 |
| { |
| friend class ScDBCollection; |
| private: |
| // DBParam |
| String aName; |
| SCTAB nTable; |
| SCCOL nStartCol; |
| SCROW nStartRow; |
| SCCOL nEndCol; |
| SCROW nEndRow; |
| sal_Bool bByRow; |
| sal_Bool bHasHeader; |
| sal_Bool bDoSize; |
| sal_Bool bKeepFmt; |
| sal_Bool bStripData; |
| // SortParam |
| sal_Bool bSortCaseSens; |
| sal_Bool bIncludePattern; |
| sal_Bool bSortInplace; |
| sal_Bool bSortUserDef; |
| sal_uInt16 nSortUserIndex; |
| SCTAB nSortDestTab; |
| SCCOL nSortDestCol; |
| SCROW nSortDestRow; |
| sal_Bool bDoSort[MAXSORT]; |
| SCCOLROW nSortField[MAXSORT]; |
| sal_Bool bAscending[MAXSORT]; |
| ::com::sun::star::lang::Locale aSortLocale; |
| String aSortAlgorithm; |
| // QueryParam |
| sal_Bool bQueryInplace; |
| sal_Bool bQueryCaseSens; |
| sal_Bool bQueryRegExp; |
| sal_Bool bQueryDuplicate; |
| SCTAB nQueryDestTab; |
| SCCOL nQueryDestCol; |
| SCROW nQueryDestRow; |
| sal_Bool bDoQuery[MAXQUERY]; |
| SCCOLROW nQueryField[MAXQUERY]; |
| ScQueryOp eQueryOp[MAXQUERY]; |
| sal_Bool bQueryByString[MAXQUERY]; |
| bool bQueryByDate[MAXQUERY]; |
| String* pQueryStr[MAXQUERY]; |
| double nQueryVal[MAXQUERY]; |
| ScQueryConnect eQueryConnect[MAXQUERY]; |
| sal_Bool bIsAdvanced; // sal_True if created by advanced filter |
| ScRange aAdvSource; // source range |
| // SubTotalParam |
| sal_Bool bSubRemoveOnly; |
| sal_Bool bSubReplace; |
| sal_Bool bSubPagebreak; |
| sal_Bool bSubCaseSens; |
| sal_Bool bSubDoSort; |
| sal_Bool bSubAscending; |
| sal_Bool bSubIncludePattern; |
| sal_Bool bSubUserDef; |
| sal_uInt16 nSubUserIndex; |
| sal_Bool bDoSubTotal[MAXSUBTOTAL]; |
| SCCOL nSubField[MAXSUBTOTAL]; |
| SCCOL nSubTotals[MAXSUBTOTAL]; |
| SCCOL* pSubTotals[MAXSUBTOTAL]; |
| ScSubTotalFunc* pFunctions[MAXSUBTOTAL]; |
| // Datenbank-Import |
| sal_Bool bDBImport; |
| String aDBName; |
| String aDBStatement; |
| sal_Bool bDBNative; |
| sal_Bool bDBSelection; // nicht im Param: Wenn Selektion, Update sperren |
| sal_Bool bDBSql; // aDBStatement ist SQL und kein Name |
| sal_uInt8 nDBType; // enum DBObject (bisher nur dbTable, dbQuery) |
| |
| sal_uInt16 nIndex; // eindeutiger Index fuer Formeln |
| sal_Bool bAutoFilter; // AutoFilter? (nicht gespeichert) |
| sal_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, |
| sal_Bool bByR = sal_True, sal_Bool bHasH = sal_True); |
| ScDBData(const ScDBData& rData); |
| ~ScDBData(); |
| |
| virtual ScDataObject* Clone() const; |
| |
| ScDBData& operator= (const ScDBData& rData); |
| |
| sal_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) const; |
| SC_DLLPUBLIC void GetArea(ScRange& rRange) const; |
| void SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2); |
| |
| bool IsInternalUnnamed() const; |
| bool IsInternalForAutoFilter() const; |
| |
| void MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2); |
| sal_Bool IsByRow() const { return bByRow; } |
| void SetByRow(sal_Bool bByR) { bByRow = bByR; } |
| sal_Bool HasHeader() const { return bHasHeader; } |
| void SetHeader(sal_Bool bHasH) { bHasHeader = bHasH; } |
| void SetIndex(sal_uInt16 nInd) { nIndex = nInd; } |
| sal_uInt16 GetIndex() const { return nIndex; } |
| sal_Bool IsDoSize() const { return bDoSize; } |
| void SetDoSize(sal_Bool bSet) { bDoSize = bSet; } |
| sal_Bool IsKeepFmt() const { return bKeepFmt; } |
| void SetKeepFmt(sal_Bool bSet) { bKeepFmt = bSet; } |
| sal_Bool IsStripData() const { return bStripData; } |
| void SetStripData(sal_Bool bSet) { bStripData = bSet; } |
| |
| //UNUSED2008-05 sal_Bool IsBeyond(SCROW nMaxRow) const; |
| |
| 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 sal_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); |
| |
| sal_Bool IsDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bStartOnly) const; |
| sal_Bool IsDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const; |
| |
| sal_Bool HasImportParam() const { return bDBImport; } |
| sal_Bool HasQueryParam() const { return bDoQuery[0]; } |
| sal_Bool HasSortParam() const { return bDoSort[0]; } |
| sal_Bool HasSubTotalParam() const { return bDoSubTotal[0]; } |
| |
| sal_Bool HasImportSelection() const { return bDBSelection; } |
| void SetImportSelection(sal_Bool bSet) { bDBSelection = bSet; } |
| |
| sal_Bool HasAutoFilter() const { return bAutoFilter; } |
| void SetAutoFilter(sal_Bool bSet) { bAutoFilter = bSet; } |
| |
| sal_Bool IsModified() const { return bModified; } |
| void SetModified(sal_Bool bMod) { bModified = bMod; } |
| }; |
| |
| |
| //------------------------------------------------------------------------ |
| class SC_DLLPUBLIC ScDBCollection : public ScSortedCollection |
| { |
| |
| private: |
| Link aRefreshHandler; |
| ScDocument* pDoc; |
| sal_uInt16 nEntryIndex; // Zaehler fuer die eindeutigen Indizes |
| |
| public: |
| ScDBCollection(sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = sal_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 sal_uInt16 nIndex) const {return (ScDBData*)At(nIndex);} |
| virtual short Compare(ScDataObject* pKey1, ScDataObject* pKey2) const; |
| virtual sal_Bool IsEqual(ScDataObject* pKey1, ScDataObject* pKey2) const; |
| ScDBData* GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bStartOnly) const; |
| ScDBData* GetDBAtArea( |
| const SCTAB nTab, |
| const SCCOL nCol1, |
| const SCROW nRow1, |
| const SCCOL nCol2, |
| const SCROW nRow2 ) const; |
| ScDBData* GetFilterDBAtTable(SCTAB nTab) const; |
| |
| sal_Bool SearchName( const String& rName, sal_uInt16& 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(sal_uInt16 nIndex); |
| sal_uInt16 GetEntryIndex() { return nEntryIndex; } |
| void SetEntryIndex(sal_uInt16 nInd) { nEntryIndex = nInd; } |
| virtual sal_Bool Insert(ScDataObject* pScDataObject); |
| |
| void SetRefreshHandler( const Link& rLink ) |
| { aRefreshHandler = rLink; } |
| const Link& GetRefreshHandler() const { return aRefreshHandler; } |
| String GetNewDefaultDBName(); |
| /*sal_Bool IsFiltered(SCTAB nTab, SCROW nRow);*/ |
| }; |
| |
| #endif |