diff options
author | Kohei Yoshida <kyoshida@novell.com> | 2011-05-12 13:02:28 -0400 |
---|---|---|
committer | Kohei Yoshida <kyoshida@novell.com> | 2011-05-13 22:54:10 -0400 |
commit | fb7bd1f00b269501e98cdb60ab342cc384a233e4 (patch) | |
tree | 0c02b95fb7bfb6a43221e7db4da769559f1db4c0 /sc | |
parent | 239892633323f4733cd4602d8c0d4cad55b2f946 (diff) |
Let's make the separation of named DBs clear.
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/dbcolect.hxx | 37 | ||||
-rw-r--r-- | sc/source/core/data/documen2.cxx | 2 | ||||
-rw-r--r-- | sc/source/core/data/documen3.cxx | 4 | ||||
-rw-r--r-- | sc/source/core/tool/dbcolect.cxx | 134 |
4 files changed, 117 insertions, 60 deletions
diff --git a/sc/inc/dbcolect.hxx b/sc/inc/dbcolect.hxx index 840b738f7f66..5d7b94017839 100644 --- a/sc/inc/dbcolect.hxx +++ b/sc/inc/dbcolect.hxx @@ -160,21 +160,48 @@ public: class SC_DLLPUBLIC ScDBCollection { - typedef ::boost::ptr_set<ScDBData, ScDBData::less> NamedDBsType; public: typedef ::boost::ptr_vector<ScDBData> AnonDBsType; + class NamedDBs + { + friend class ScDBCollection; + + typedef ::boost::ptr_set<ScDBData, ScDBData::less> DBsType; + DBsType maDBs; + ScDBCollection& mrParent; + ScDocument& mrDoc; + NamedDBs(ScDBCollection& rParent, ScDocument& rDoc); + NamedDBs(const NamedDBs& r); + public: + typedef DBsType::iterator iterator; + typedef DBsType::const_iterator const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + ScDBData* findByIndex(sal_uInt16 nIndex); + ScDBData* findByName(const ::rtl::OUString& rName); + bool insert(ScDBData* p); + void erase(iterator itr); + bool empty() const; + size_t size() const; + }; + private: Link aRefreshHandler; ScDocument* pDoc; sal_uInt16 nEntryIndex; // counter for unique indices - NamedDBsType maNamedDBs; + NamedDBs maNamedDBs; AnonDBsType maAnonDBs; public: ScDBCollection(ScDocument* pDocument); ScDBCollection(const ScDBCollection& r); + NamedDBs& getNamedDBs(); + const ScDBData* GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bStartOnly) const; const ScDBData* GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const; const ScDBData* GetFilterDBAtTable(SCTAB nTab) const; @@ -194,12 +221,6 @@ public: { aRefreshHandler = rLink; } const Link& GetRefreshHandler() const { return aRefreshHandler; } - ScDBData* findByIndex(sal_uInt16 nIndex); - ScDBData* findByName(const ::rtl::OUString& rName); - bool insert(ScDBData* p); - bool empty() const; - size_t size() const; - const ScDBData* findAnonAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, bool bStartOnly) const; const ScDBData* findAnonByRange(const ScRange& rRange) const; ScDBData* getAnonByRange(const ScRange& rRange); diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 9afb15ddfdd3..0ec3c1c594c4 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -251,7 +251,7 @@ ScDocument::ScDocument( ScDocumentMode eMode, for (SCTAB i=1; i<=MAXTAB; i++) pTab[i] = NULL; - pDBCollection = new ScDBCollection( 4, 4, false, this ); + pDBCollection = new ScDBCollection(this); pSelectionAttr = NULL; pChartCollection = new ScChartCollection; apTemporaryChartLock = std::auto_ptr< ScTemporaryChartLock >( new ScTemporaryChartLock(this) ); diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx index 583ea6cc8956..17214889fd77 100644 --- a/sc/source/core/data/documen3.cxx +++ b/sc/source/core/data/documen3.cxx @@ -180,8 +180,8 @@ void ScDocument::SetDBCollection( ScDBCollection* pNewDBCollection, sal_Bool bRe if ( pDBCollection ) { - sal_uInt16 nOldCount = pDBCollection->GetCount(); - for (sal_uInt16 nOld=0; nOld<nOldCount; nOld++) + size_t nOldCount = pDBCollection->size(); + for (size_t nOld = 0; nOld < nOldCount; ++nOld) { ScDBData* pOldData = (*pDBCollection)[nOld]; if ( pOldData->HasAutoFilter() ) diff --git a/sc/source/core/tool/dbcolect.cxx b/sc/source/core/tool/dbcolect.cxx index a720480f93ea..1e11791d3248 100644 --- a/sc/source/core/tool/dbcolect.cxx +++ b/sc/source/core/tool/dbcolect.cxx @@ -636,16 +636,92 @@ public: } +ScDBCollection::NamedDBs::NamedDBs(ScDBCollection& rParent, ScDocument& rDoc) : + mrParent(rParent), mrDoc(rDoc) {} + +ScDBCollection::NamedDBs::NamedDBs(const NamedDBs& r) : + maDBs(r.maDBs), mrParent(r.mrParent), mrDoc(r.mrDoc) {} + +ScDBCollection::NamedDBs::iterator ScDBCollection::NamedDBs::begin() +{ + return maDBs.begin(); +} + +ScDBCollection::NamedDBs::iterator ScDBCollection::NamedDBs::end() +{ + return maDBs.end(); +} + +ScDBCollection::NamedDBs::const_iterator ScDBCollection::NamedDBs::begin() const +{ + return maDBs.begin(); +} + +ScDBCollection::NamedDBs::const_iterator ScDBCollection::NamedDBs::end() const +{ + return maDBs.end(); +} + +ScDBData* ScDBCollection::NamedDBs::findByIndex(sal_uInt16 nIndex) +{ + DBsType::iterator itr = find_if( + maDBs.begin(), maDBs.end(), FindByIndex(nIndex)); + return itr == maDBs.end() ? NULL : &(*itr); +} + +ScDBData* ScDBCollection::NamedDBs::findByName(const ::rtl::OUString& rName) +{ + DBsType::iterator itr = find_if( + maDBs.begin(), maDBs.end(), FindByName(rName)); + return itr == maDBs.end() ? NULL : &(*itr); +} + +bool ScDBCollection::NamedDBs::insert(ScDBData* p) +{ + auto_ptr<ScDBData> pData(p); + if (!pData->GetIndex()) + pData->SetIndex(mrParent.nEntryIndex++); + + pair<DBsType::iterator, bool> r = maDBs.insert(pData); + + if (r.second && pData->HasImportParam() && !pData->HasImportSelection()) + { + pData->SetRefreshHandler(mrParent.GetRefreshHandler()); + pData->SetRefreshControl(mrDoc.GetRefreshTimerControlAddress()); + } + return r.second; +} + +void ScDBCollection::NamedDBs::erase(iterator itr) +{ + maDBs.erase(itr); +} + +bool ScDBCollection::NamedDBs::empty() const +{ + return maDBs.empty(); +} + +size_t ScDBCollection::NamedDBs::size() const +{ + return maDBs.size(); +} + ScDBCollection::ScDBCollection(ScDocument* pDocument) : - pDoc(pDocument), nEntryIndex(SC_START_INDEX_DB_COLL) {} + pDoc(pDocument), nEntryIndex(SC_START_INDEX_DB_COLL), maNamedDBs(*this, *pDocument) {} ScDBCollection::ScDBCollection(const ScDBCollection& r) : - pDoc(r.pDoc), nEntryIndex(r.nEntryIndex), maAnonDBs(r.maAnonDBs) {} + pDoc(r.pDoc), nEntryIndex(r.nEntryIndex), maNamedDBs(r.maNamedDBs), maAnonDBs(r.maAnonDBs) {} + +ScDBCollection::NamedDBs& ScDBCollection::getNamedDBs() +{ + return maNamedDBs; +} const ScDBData* ScDBCollection::GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bStartOnly) const { // First, search the global named db ranges. - NamedDBsType::const_iterator itr = find_if( + NamedDBs::DBsType::const_iterator itr = find_if( maNamedDBs.begin(), maNamedDBs.end(), FindByCursor(nCol, nRow, nTab, bStartOnly)); if (itr != maNamedDBs.end()) return &(*itr); @@ -668,7 +744,7 @@ const ScDBData* ScDBCollection::GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1 { // First, search the global named db ranges. ScRange aRange(nCol1, nRow1, nTab, nCol2, nRow2, nTab); - NamedDBsType::const_iterator itr = find_if( + NamedDBs::DBsType::const_iterator itr = find_if( maNamedDBs.begin(), maNamedDBs.end(), FindByRange(aRange)); if (itr != maNamedDBs.end()) return &(*itr); @@ -689,7 +765,7 @@ const ScDBData* ScDBCollection::GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1 const ScDBData* ScDBCollection::GetFilterDBAtTable(SCTAB nTab) const { - NamedDBsType::const_iterator itr = find_if( + NamedDBs::DBsType::const_iterator itr = find_if( maNamedDBs.begin(), maNamedDBs.end(), FindFilterDBByTable(nTab)); return itr == maNamedDBs.end() ? NULL : &(*itr); @@ -699,9 +775,9 @@ void ScDBCollection::DeleteOnTab( SCTAB nTab ) { FindByTable func(nTab); // First, collect the positions of all items that need to be deleted. - ::std::vector<NamedDBsType::iterator> v; + ::std::vector<NamedDBs::DBsType::iterator> v; { - NamedDBsType::iterator itr = maNamedDBs.begin(), itrEnd = maNamedDBs.end(); + NamedDBs::DBsType::iterator itr = maNamedDBs.begin(), itrEnd = maNamedDBs.end(); for (; itr != itrEnd; ++itr) { if (func(*itr)) @@ -710,7 +786,7 @@ void ScDBCollection::DeleteOnTab( SCTAB nTab ) } // Delete them all. - ::std::vector<NamedDBsType::iterator>::iterator itr = v.begin(), itrEnd = v.end(); + ::std::vector<NamedDBs::DBsType::iterator>::iterator itr = v.begin(), itrEnd = v.end(); for (; itr != itrEnd; ++itr) maNamedDBs.erase(*itr); @@ -753,7 +829,7 @@ void ScDBCollection::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos ) ScDBData* ScDBCollection::GetDBNearCursor(SCCOL nCol, SCROW nRow, SCTAB nTab ) { ScDBData* pNearData = NULL; - NamedDBsType::iterator itr = maNamedDBs.begin(), itrEnd = maNamedDBs.end(); + NamedDBs::DBsType::iterator itr = maNamedDBs.begin(), itrEnd = maNamedDBs.end(); for (; itr != itrEnd; ++itr) { SCTAB nAreaTab; @@ -777,46 +853,6 @@ ScDBData* ScDBCollection::GetDBNearCursor(SCCOL nCol, SCROW nRow, SCTAB nTab ) return pDoc->GetAnonymousDBData(nTab); // "unbenannt" nur zurueck, wenn sonst nichts gefunden } -ScDBData* ScDBCollection::findByIndex(sal_uInt16 nIndex) -{ - NamedDBsType::iterator itr = find_if( - maNamedDBs.begin(), maNamedDBs.end(), FindByIndex(nIndex)); - return itr == maNamedDBs.end() ? NULL : &(*itr); -} - -ScDBData* ScDBCollection::findByName(const ::rtl::OUString& rName) -{ - NamedDBsType::iterator itr = find_if( - maNamedDBs.begin(), maNamedDBs.end(), FindByName(rName)); - return itr == maNamedDBs.end() ? NULL : &(*itr); -} - -bool ScDBCollection::insert(ScDBData* p) -{ - auto_ptr<ScDBData> pData(p); - if (!pData->GetIndex()) - pData->SetIndex(nEntryIndex++); - - pair<NamedDBsType::iterator, bool> r = maNamedDBs.insert(pData); - - if (r.second && pData->HasImportParam() && !pData->HasImportSelection()) - { - pData->SetRefreshHandler(GetRefreshHandler()); - pData->SetRefreshControl(pDoc->GetRefreshTimerControlAddress()); - } - return r.second; -} - -bool ScDBCollection::empty() const -{ - return maNamedDBs.empty(); -} - -size_t ScDBCollection::size() const -{ - return maNamedDBs.size(); -} - const ScDBData* ScDBCollection::findAnonAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, bool bStartOnly) const { AnonDBsType::const_iterator itr = find_if( |