summaryrefslogtreecommitdiff
path: root/sc/source/ui/docshell/docfunc.cxx
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-06-15 23:04:51 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-06-15 23:04:51 +0200
commit1b363f632110e80ead67ff376e92e4487556ca55 (patch)
tree688e71242bbb22aaf83949ca842eac7400f66972 /sc/source/ui/docshell/docfunc.cxx
parentfc067a78706abc237ce20cab670406a7790ec37e (diff)
add local range names to ScNamePasteDlg
Diffstat (limited to 'sc/source/ui/docshell/docfunc.cxx')
-rw-r--r--sc/source/ui/docshell/docfunc.cxx24
1 files changed, 19 insertions, 5 deletions
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index ffe7fcd539c4..40615a7447f7 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -4708,20 +4708,28 @@ sal_Bool ScDocFunc::InsertNameList( const ScAddress& rStartPos, sal_Bool bApi )
{
ScDocShellModificator aModificator( rDocShell );
-
sal_Bool bDone = false;
ScDocument* pDoc = rDocShell.GetDocument();
- const sal_Bool bRecord = pDoc->IsUndoEnabled();
+ const bool bRecord = pDoc->IsUndoEnabled();
SCTAB nTab = rStartPos.Tab();
ScDocument* pUndoDoc = NULL;
- ScRangeName* pList = pDoc->GetRangeName();
+ //local names have higher priority than global names
+ ScRangeName* pLocalList = pDoc->GetRangeName(nTab);
sal_uInt16 nValidCount = 0;
+ ScRangeName::iterator itrLocalBeg = pLocalList->begin(), itrLocalEnd = pLocalList->end();
+ for (ScRangeName::iterator itr = itrLocalBeg; itr != itrLocalEnd; ++itr)
+ {
+ const ScRangeData& r = *itr;
+ if (!r.HasType(RT_DATABASE) && !r.HasType(RT_SHARED))
+ ++nValidCount;
+ }
+ ScRangeName* pList = pDoc->GetRangeName();
ScRangeName::iterator itrBeg = pList->begin(), itrEnd = pList->end();
for (ScRangeName::iterator itr = itrBeg; itr != itrEnd; ++itr)
{
const ScRangeData& r = *itr;
- if (!r.HasType(RT_DATABASE) && !r.HasType(RT_SHARED))
+ if (!r.HasType(RT_DATABASE) && !r.HasType(RT_SHARED) && !pLocalList->findByName(r.GetName()))
++nValidCount;
}
@@ -4747,12 +4755,18 @@ sal_Bool ScDocFunc::InsertNameList( const ScAddress& rStartPos, sal_Bool bApi )
ScRangeData** ppSortArray = new ScRangeData* [ nValidCount ];
sal_uInt16 j = 0;
- for (ScRangeName::iterator itr = itrBeg; itr != itrEnd; ++itr)
+ for (ScRangeName::iterator itr = itrLocalBeg; itr != itrLocalEnd; ++itr)
{
ScRangeData& r = *itr;
if (!r.HasType(RT_DATABASE) && !r.HasType(RT_SHARED))
ppSortArray[j++] = &r;
}
+ for (ScRangeName::iterator itr = itrBeg; itr != itrEnd; ++itr)
+ {
+ ScRangeData& r = *itr;
+ if (!r.HasType(RT_DATABASE) && !r.HasType(RT_SHARED) && !pLocalList->findByName(r.GetName()))
+ ppSortArray[j++] = &r;
+ }
#ifndef ICC
qsort( (void*)ppSortArray, nValidCount, sizeof(ScRangeData*),
&ScRangeData_QsortNameCompare );