summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2011-05-12 13:02:28 -0400
committerKohei Yoshida <kyoshida@novell.com>2011-05-13 22:54:10 -0400
commitfb7bd1f00b269501e98cdb60ab342cc384a233e4 (patch)
tree0c02b95fb7bfb6a43221e7db4da769559f1db4c0 /sc
parent239892633323f4733cd4602d8c0d4cad55b2f946 (diff)
Let's make the separation of named DBs clear.
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/dbcolect.hxx37
-rw-r--r--sc/source/core/data/documen2.cxx2
-rw-r--r--sc/source/core/data/documen3.cxx4
-rw-r--r--sc/source/core/tool/dbcolect.cxx134
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(