diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2015-10-15 18:56:22 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2015-10-15 20:10:28 +0200 |
commit | 65dedbd9c776afd9adf513336df80ef50d30934e (patch) | |
tree | 26510b8430cad6376203f71f72e434ed932428e0 | |
parent | 04a7df738aae3b255c1faa80fa79262602eaead7 (diff) |
store external range names in the cache, td#88179
Change-Id: I00b41f9b1fc2aec6f66c613cc02328b2968dca8d
-rw-r--r-- | sc/inc/externalrefmgr.hxx | 1 | ||||
-rw-r--r-- | sc/source/ui/docshell/externalrefmgr.cxx | 27 |
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) |