diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-06-15 23:04:51 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-06-15 23:04:51 +0200 |
commit | 1b363f632110e80ead67ff376e92e4487556ca55 (patch) | |
tree | 688e71242bbb22aaf83949ca842eac7400f66972 /sc | |
parent | fc067a78706abc237ce20cab670406a7790ec37e (diff) |
add local range names to ScNamePasteDlg
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/scabstdlg.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/attrdlg/scdlgfact.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/attrdlg/scdlgfact.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/docshell/docfunc.cxx | 24 | ||||
-rw-r--r-- | sc/source/ui/inc/namepast.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/miscdlgs/namepast.cxx | 11 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh1.cxx | 3 | ||||
-rw-r--r-- | sc/source/ui/view/editsh.cxx | 3 |
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 |