summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2015-10-15 18:56:22 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2015-10-15 20:10:28 +0200
commit65dedbd9c776afd9adf513336df80ef50d30934e (patch)
tree26510b8430cad6376203f71f72e434ed932428e0
parent04a7df738aae3b255c1faa80fa79262602eaead7 (diff)
store external range names in the cache, td#88179
Change-Id: I00b41f9b1fc2aec6f66c613cc02328b2968dca8d
-rw-r--r--sc/inc/externalrefmgr.hxx1
-rw-r--r--sc/source/ui/docshell/externalrefmgr.cxx27
2 files changed, 26 insertions, 2 deletions
diff --git a/sc/inc/externalrefmgr.hxx b/sc/inc/externalrefmgr.hxx
index d29006fbc5a3..af8921d17069 100644
--- a/sc/inc/externalrefmgr.hxx
+++ b/sc/inc/externalrefmgr.hxx
@@ -234,6 +234,7 @@ public:
ScExternalRefCache::TokenArrayRef getRangeNameTokens(sal_uInt16 nFileId, const OUString& rName);
void setRangeNameTokens(sal_uInt16 nFileId, const OUString& rName, TokenArrayRef pArray);
bool isValidRangeName(sal_uInt16 nFileId, const OUString& rName) const;
+ void setRangeName(sal_uInt16 nFileId, const OUString& rName);
void setCellData(sal_uInt16 nFileId, const OUString& rTabName,
SCCOL nCol, SCROW nRow, TokenRef pToken, sal_uLong nFmtIndex);
diff --git a/sc/source/ui/docshell/externalrefmgr.cxx b/sc/source/ui/docshell/externalrefmgr.cxx
index 19bd2ca0e9d7..89c6234b13b0 100644
--- a/sc/source/ui/docshell/externalrefmgr.cxx
+++ b/sc/source/ui/docshell/externalrefmgr.cxx
@@ -714,6 +714,18 @@ bool ScExternalRefCache::isValidRangeName(sal_uInt16 nFileId, const OUString& rN
return rMap.count(rName) > 0;
}
+void ScExternalRefCache::setRangeName(sal_uInt16 nFileId, const OUString& rName)
+{
+ osl::MutexGuard aGuard(&maMtxDocs);
+
+ DocItem* pDoc = getDocItem(nFileId);
+ if (!pDoc)
+ return;
+
+ OUString aUpperName = ScGlobal::pCharClass->uppercase(rName);
+ pDoc->maRealRangeNameMap.insert(NamePairMap::value_type(aUpperName, rName));
+}
+
void ScExternalRefCache::setCellData(sal_uInt16 nFileId, const OUString& rTabName, SCCOL nCol, SCROW nRow,
TokenRef pToken, sal_uLong nFmtIndex)
{
@@ -1999,7 +2011,12 @@ bool ScExternalRefManager::isValidRangeName(sal_uInt16 nFileId, const OUString&
if (pSrcDoc)
{
// Only check the presence of the name.
- return hasRangeName(*pSrcDoc, rName);
+ if (hasRangeName(*pSrcDoc, rName))
+ {
+ maRefCache.setRangeName(nFileId, rName);
+ return true;
+ }
+ return false;
}
if (maRefCache.isValidRangeName(nFileId, rName))
@@ -2011,7 +2028,13 @@ bool ScExternalRefManager::isValidRangeName(sal_uInt16 nFileId, const OUString&
// failed to load document from disk.
return false;
- return hasRangeName(*pSrcDoc, rName);
+ if (hasRangeName(*pSrcDoc, rName))
+ {
+ maRefCache.setRangeName(nFileId, rName);
+ return true;
+ }
+
+ return false;
}
void ScExternalRefManager::refreshAllRefCells(sal_uInt16 nFileId)