summaryrefslogtreecommitdiff
path: root/sc
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
parentfc067a78706abc237ce20cab670406a7790ec37e (diff)
add local range names to ScNamePasteDlg
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/scabstdlg.hxx2
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.cxx4
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.hxx2
-rw-r--r--sc/source/ui/docshell/docfunc.cxx24
-rw-r--r--sc/source/ui/inc/namepast.hxx2
-rw-r--r--sc/source/ui/miscdlgs/namepast.cxx11
-rw-r--r--sc/source/ui/view/cellsh1.cxx3
-rw-r--r--sc/source/ui/view/editsh.cxx3
8 files changed, 37 insertions, 14 deletions
diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx
index 87495b5da1ab..cfdbdcfd365b 100644
--- a/sc/inc/scabstdlg.hxx
+++ b/sc/inc/scabstdlg.hxx
@@ -417,7 +417,7 @@ public:
virtual AbstractScNameCreateDlg * CreateScNameCreateDlg ( Window * pParent, sal_uInt16 nFlags, int nId ) = 0; //add for ScNameCreateDlg
virtual AbstractScNamePasteDlg * CreateScNamePasteDlg ( Window * pParent, const ScRangeName* pList, //add for ScNamePasteDlg
- int nId , sal_Bool bInsList=sal_True ) = 0;
+ const ScRangeName* pLocalList, int nId , bool bInsList=true ) = 0;
virtual AbstractScPivotFilterDlg * CreateScPivotFilterDlg ( Window* pParent, //add for ScPivotFilterDlg
const SfxItemSet& rArgSet, sal_uInt16 nSourceTab , int nId ) = 0;
diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx
index 10e1013cf1bf..773dfd081496 100644
--- a/sc/source/ui/attrdlg/scdlgfact.cxx
+++ b/sc/source/ui/attrdlg/scdlgfact.cxx
@@ -1180,13 +1180,13 @@ AbstractScNameCreateDlg * ScAbstractDialogFactory_Impl::CreateScNameCreateDlg (
AbstractScNamePasteDlg * ScAbstractDialogFactory_Impl::CreateScNamePasteDlg ( Window * pParent, const ScRangeName* pList,
- int nId , sal_Bool bInsList )
+ const ScRangeName* pLocalList, int nId , bool bInsList )
{
ScNamePasteDlg * pDlg=NULL;
switch ( nId )
{
case RID_SCDLG_NAMES_PASTE :
- pDlg = new ScNamePasteDlg( pParent, pList, bInsList );
+ pDlg = new ScNamePasteDlg( pParent, pList, pLocalList, bInsList );
break;
default:
break;
diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx
index defd1c7694f7..2de66973efee 100644
--- a/sc/source/ui/attrdlg/scdlgfact.hxx
+++ b/sc/source/ui/attrdlg/scdlgfact.hxx
@@ -501,7 +501,7 @@ public:
virtual AbstractScNameCreateDlg * CreateScNameCreateDlg ( Window * pParent, sal_uInt16 nFlags, int nId ); //add for ScNameCreateDlg
virtual AbstractScNamePasteDlg * CreateScNamePasteDlg ( Window * pParent, const ScRangeName* pList, //add for ScNamePasteDlg
- int nId , sal_Bool bInsList=sal_True );
+ const ScRangeName* pLocalList, int nId , bool bInsList=true );
virtual AbstractScPivotFilterDlg * CreateScPivotFilterDlg ( Window* pParent, //add for ScPivotFilterDlg
const SfxItemSet& rArgSet, sal_uInt16 nSourceTab , int nId );
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 );
diff --git a/sc/source/ui/inc/namepast.hxx b/sc/source/ui/inc/namepast.hxx
index c90c20904ffe..a5d7e8127ab7 100644
--- a/sc/source/ui/inc/namepast.hxx
+++ b/sc/source/ui/inc/namepast.hxx
@@ -51,7 +51,7 @@ protected:
HelpButton aHelpButton;
PushButton aInsListButton;
public:
- ScNamePasteDlg( Window * pParent, const ScRangeName* pList, sal_Bool bInsList=sal_True );
+ ScNamePasteDlg( Window * pParent, const ScRangeName* pList, const ScRangeName* pLocalList, bool bInsList=true );
String GetSelectedName() const;
};
diff --git a/sc/source/ui/miscdlgs/namepast.cxx b/sc/source/ui/miscdlgs/namepast.cxx
index 1f28fc4a9258..7c469c23b559 100644
--- a/sc/source/ui/miscdlgs/namepast.cxx
+++ b/sc/source/ui/miscdlgs/namepast.cxx
@@ -43,7 +43,7 @@
//==================================================================
-ScNamePasteDlg::ScNamePasteDlg( Window * pParent, const ScRangeName* pList, sal_Bool bInsList )
+ScNamePasteDlg::ScNamePasteDlg( Window * pParent, const ScRangeName* pList, const ScRangeName* pLocalList, bool bInsList )
: ModalDialog( pParent, ScResId( RID_SCDLG_NAMES_PASTE ) ),
aLabelText ( this, ScResId( FT_LABEL ) ),
aNameList ( this, ScResId( LB_ENTRYLIST ) ),
@@ -60,13 +60,20 @@ ScNamePasteDlg::ScNamePasteDlg( Window * pParent, const ScRangeName* pList, sal_
aNameList.SetSelectHdl( LINK( this,ScNamePasteDlg,ListSelHdl) );
aNameList.SetDoubleClickHdl( LINK( this,ScNamePasteDlg,ListDblClickHdl) );
- ScRangeName::const_iterator itr = pList->begin(), itrEnd = pList->end();
+ ScRangeName::const_iterator itr = pLocalList->begin(), itrEnd = pLocalList->end();
for (; itr != itrEnd; ++itr)
{
if (!itr->HasType(RT_DATABASE) && !itr->HasType(RT_SHARED))
aNameList.InsertEntry(itr->GetName());
}
+ itr = pList->begin(), itrEnd = pList->end();
+ for (; itr != itrEnd; ++itr)
+ {
+ if (!itr->HasType(RT_DATABASE) && !itr->HasType(RT_SHARED) && !pLocalList->findByName(itr->GetName()))
+ aNameList.InsertEntry(itr->GetName());
+ }
+
ListSelHdl( &aNameList );
FreeResource();
diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx
index 78b56a169977..a959020dea79 100644
--- a/sc/source/ui/view/cellsh1.cxx
+++ b/sc/source/ui/view/cellsh1.cxx
@@ -1807,10 +1807,11 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
case FID_INSERT_NAME:
{
ScDocument* pDoc = GetViewData()->GetDocument();
+ SCTAB nTab = GetViewData()->GetTabNo();
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
- AbstractScNamePasteDlg* pDlg = pFact->CreateScNamePasteDlg( pTabViewShell->GetDialogParent(), pDoc->GetRangeName(), RID_SCDLG_NAMES_PASTE );
+ AbstractScNamePasteDlg* pDlg = pFact->CreateScNamePasteDlg( pTabViewShell->GetDialogParent(), pDoc->GetRangeName(), pDoc->GetRangeName(nTab), RID_SCDLG_NAMES_PASTE );
OSL_ENSURE(pDlg, "Dialog create fail!");
switch( pDlg->Execute() )
{
diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx
index 7ae92f454151..858983587f6a 100644
--- a/sc/source/ui/view/editsh.cxx
+++ b/sc/source/ui/view/editsh.cxx
@@ -420,10 +420,11 @@ void ScEditShell::Execute( SfxRequest& rReq )
case FID_INSERT_NAME:
{
ScDocument* pDoc = pViewData->GetDocument();
+ SCTAB nTab = pViewData->GetTabNo();
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
- AbstractScNamePasteDlg* pDlg = pFact->CreateScNamePasteDlg( pViewData->GetDialogParent(), pDoc->GetRangeName(), RID_SCDLG_NAMES_PASTE, false );
+ AbstractScNamePasteDlg* pDlg = pFact->CreateScNamePasteDlg( pViewData->GetDialogParent(), pDoc->GetRangeName(), pDoc->GetRangeName(nTab), RID_SCDLG_NAMES_PASTE, false );
OSL_ENSURE(pDlg, "Dialog create fail!");
short nRet = pDlg->Execute();
// pDlg is needed below