sc/source/core/tool/rangeutl.cxx | 29 ++++++++++++++++---- sc/source/ui/app/inputwin.cxx | 56 ++++++++++++++++++++++++++------------- sc/source/ui/namedlg/namedlg.cxx | 4 ++ sc/source/ui/navipi/content.cxx | 49 ++++++++++++++++++++++++---------- 4 files changed, 100 insertions(+), 38 deletions(-)
New commits: commit 7a195b81bee5c84e01186463b44ad3c551046f33 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Sep 24 16:03:49 2011 +0200 Manage Names: braodcast change in range names now directly diff --git a/sc/source/ui/namedlg/namedlg.cxx b/sc/source/ui/namedlg/namedlg.cxx index 494a6d0..47ff629 100644 --- a/sc/source/ui/namedlg/namedlg.cxx +++ b/sc/source/ui/namedlg/namedlg.cxx @@ -45,6 +45,8 @@ #include "namedlg.hxx" #include "viewdata.hxx" +#include "sfx2/app.hxx" + #include <vcl/msgbox.hxx> #include <map> @@ -472,6 +474,7 @@ bool ScNameDlg::AddPushed() maBtnAdd.Disable(); maUndoStack.push( new ScNameManagerUndoAdd( pRangeName, new ScRangeData(*pNewEntry) )); UpdateNames(); + SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) ); } } else @@ -506,6 +509,7 @@ void ScNameDlg::RemovePushed() maUndoStack.push( new ScNameManagerUndoDelete( pRangeName, new ScRangeData(*pData) )); pRangeName->erase(*pData); UpdateNames(); + SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) ); } } } commit ae992dbe6c2ae729fe69f1b48d4fade7be90e849 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Sep 24 15:48:01 2011 +0200 add local range names to "Name Box"/ScPosWnd diff --git a/sc/source/core/tool/rangeutl.cxx b/sc/source/core/tool/rangeutl.cxx index d5af7ec..2a0ceb0 100644 --- a/sc/source/core/tool/rangeutl.cxx +++ b/sc/source/core/tool/rangeutl.cxx @@ -293,7 +293,6 @@ sal_Bool ScRangeUtil::MakeRangeFromName ( sal_Int32 nEndPos = aName.lastIndexOf(')'); sal_Int32 nStartPos = aName.lastIndexOfAsciiL(" (",2); SCTAB nTable = nCurTab; - std::cout << "nStartPos: " << nStartPos << " nEndPos: " << nEndPos << std::endl; if (nEndPos != -1 && nStartPos != -1) { rtl::OUString aSheetName = aName.copy(nStartPos+2, nEndPos-nStartPos-2); diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx index c0b0979..6c26f3d 100644 --- a/sc/source/ui/app/inputwin.cxx +++ b/sc/source/ui/app/inputwin.cxx @@ -1810,6 +1810,19 @@ void ScPosWnd::SetPos( const String& rPosStr ) } } +namespace { + +rtl::OUString createLocalRangeName(const rtl::OUString& rName, const rtl::OUString& rTableName) +{ + rtl::OUStringBuffer aString (rName); + aString.append(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ("))); + aString.append(rTableName); + aString.append(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(")"))); + return aString.makeStringAndClear(); +} + +} + void ScPosWnd::FillRangeNames() { Clear(); @@ -1819,32 +1832,39 @@ void ScPosWnd::FillRangeNames() { ScDocument* pDoc = ((ScDocShell*)pObjSh)->GetDocument(); - // per Hand sortieren, weil Funktionen nicht sortiert werden: - + ScRange aDummy; + std::set<rtl::OUString> aSet; ScRangeName* pRangeNames = pDoc->GetRangeName(); if (!pRangeNames->empty()) { - ScRange aDummy; - std::vector<const ScRangeData*> aSortArray; - ScRangeName::const_iterator itr = pRangeNames->begin(), itrEnd = pRangeNames->end(); - for (; itr != itrEnd; ++itr) + ScRangeName::const_iterator itrBeg = pRangeNames->begin(), itrEnd = pRangeNames->end(); + for (ScRangeName::const_iterator itr = itrBeg; itr != itrEnd; ++itr) { if (itr->IsValidReference(aDummy)) - aSortArray.push_back(&(*itr)); + aSet.insert(itr->GetName()); } + } + for (SCTAB i = 0; i < pDoc->GetTableCount(); ++i) + { + ScRangeName* pLocalRangeName = pDoc->GetRangeName(i); + if (pLocalRangeName && !pLocalRangeName->empty()) + { + rtl::OUString aTableName; + pDoc->GetName(i, aTableName); + for (ScRangeName::const_iterator itr = pLocalRangeName->begin(); itr != pLocalRangeName->end(); ++itr) + { + if (itr->IsValidReference(aDummy)) + aSet.insert(createLocalRangeName(itr->GetName(), aTableName)); + } + } + } - if (!aSortArray.empty()) + if (!aSet.empty()) + { + for (std::set<rtl::OUString>::iterator itr = aSet.begin(); + itr != aSet.end(); ++itr) { -#ifndef ICC - size_t n = aSortArray.size(); - qsort( (void*)&aSortArray[0], n, sizeof(ScRangeData*), - &ScRangeData_QsortNameCompare ); -#else - qsort( (void*)&aSortArray[0], n, sizeof(ScRangeData*), - ICCQsortNameCompare ); -#endif - for (size_t i = 0; i < n; ++i) - InsertEntry(aSortArray[i]->GetName()); + InsertEntry(*itr); } } } commit e9159d142a4f25bff88da3dd90e163135ae0bdfa Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Sep 24 15:11:02 2011 +0200 handle local range names from name box/navigator correctly diff --git a/sc/source/core/tool/rangeutl.cxx b/sc/source/core/tool/rangeutl.cxx index e0a00dc..d5af7ec 100644 --- a/sc/source/core/tool/rangeutl.cxx +++ b/sc/source/core/tool/rangeutl.cxx @@ -44,6 +44,8 @@ #include "externalrefmgr.hxx" #include "compiler.hxx" +#include <iostream> + using ::rtl::OUString; using ::rtl::OUStringBuffer; using ::formula::FormulaGrammar; @@ -286,13 +288,29 @@ sal_Bool ScRangeUtil::MakeRangeFromName ( if( eScope==RUTL_NAMES ) { - //first check for local range names - ScRangeName* pRangeNames = pDoc->GetRangeName( nCurTab ); + //first handle ui names like local1 (Sheet1), which point to a local range name + rtl::OUString aName(rName); + sal_Int32 nEndPos = aName.lastIndexOf(')'); + sal_Int32 nStartPos = aName.lastIndexOfAsciiL(" (",2); + SCTAB nTable = nCurTab; + std::cout << "nStartPos: " << nStartPos << " nEndPos: " << nEndPos << std::endl; + if (nEndPos != -1 && nStartPos != -1) + { + rtl::OUString aSheetName = aName.copy(nStartPos+2, nEndPos-nStartPos-2); + if (pDoc->GetTable(aSheetName, nTable)) + { + aName = aName.copy(0, nStartPos); + } + else + nTable = nCurTab; + } + //then check for local range names + ScRangeName* pRangeNames = pDoc->GetRangeName( nTable ); ScRangeData* pData = NULL; if ( pRangeNames ) - pData = pRangeNames->findByName(rName); + pData = pRangeNames->findByName(aName); if (!pData) - pData = pDoc->GetRangeName()->findByName(rName); + pData = pDoc->GetRangeName()->findByName(aName); if (pData) { String aStrArea; @@ -301,7 +319,7 @@ sal_Bool ScRangeUtil::MakeRangeFromName ( pData->GetSymbol( aStrArea ); - if ( IsAbsArea( aStrArea, pDoc, nCurTab, + if ( IsAbsArea( aStrArea, pDoc, nTable, NULL, &aStartPos, &aEndPos, rDetails ) ) { nTab = aStartPos.Tab(); @@ -315,7 +333,7 @@ sal_Bool ScRangeUtil::MakeRangeFromName ( { CutPosString( aStrArea, aStrArea ); - if ( IsAbsPos( aStrArea, pDoc, nCurTab, + if ( IsAbsPos( aStrArea, pDoc, nTable, NULL, &aStartPos, rDetails ) ) { nTab = aStartPos.Tab(); commit 3b6fc983f4c29dbe59f19a3451b12ac17b88286f Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Sep 24 04:29:37 2011 +0200 show local range names in navigator diff --git a/sc/source/ui/navipi/content.cxx b/sc/source/ui/navipi/content.cxx index 5c07de0..25330e7 100644 --- a/sc/source/ui/navipi/content.cxx +++ b/sc/source/ui/navipi/content.cxx @@ -653,6 +653,18 @@ void ScContentTree::GetTableNames() } } +namespace { + +rtl::OUString createLocalRangeName(const rtl::OUString& rName, const rtl::OUString& rTableName) +{ + rtl::OUStringBuffer aString (rName); + aString.append(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ("))); + aString.append(rTableName); + aString.append(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(")"))); + return aString.makeStringAndClear(); +} +} + void ScContentTree::GetAreaNames() { if ( nRootType && nRootType != SC_CONTENT_RANGENAME ) // ausgeblendet ? @@ -662,30 +674,39 @@ void ScContentTree::GetAreaNames() if (!pDoc) return; + ScRange aDummy; + std::set<rtl::OUString> aSet; ScRangeName* pRangeNames = pDoc->GetRangeName(); if (!pRangeNames->empty()) { - ScRange aDummy; ScRangeName::const_iterator itrBeg = pRangeNames->begin(), itrEnd = pRangeNames->end(); - std::vector<const ScRangeData*> aSortArray; for (ScRangeName::const_iterator itr = itrBeg; itr != itrEnd; ++itr) { if (itr->IsValidReference(aDummy)) - aSortArray.push_back(&(*itr)); + aSet.insert(itr->GetName()); } + } + for (SCTAB i = 0; i < pDoc->GetTableCount(); ++i) + { + ScRangeName* pLocalRangeName = pDoc->GetRangeName(i); + if (pLocalRangeName && !pLocalRangeName->empty()) + { + rtl::OUString aTableName; + pDoc->GetName(i, aTableName); + for (ScRangeName::const_iterator itr = pLocalRangeName->begin(); itr != pLocalRangeName->end(); ++itr) + { + if (itr->IsValidReference(aDummy)) + aSet.insert(createLocalRangeName(itr->GetName(), aTableName)); + } + } + } - if (!aSortArray.empty()) + if (!aSet.empty()) + { + for (std::set<rtl::OUString>::iterator itr = aSet.begin(); + itr != aSet.end(); ++itr) { -#ifndef ICC - size_t n = aSortArray.size(); - qsort( (void*)&aSortArray[0], n, sizeof(ScRangeData*), - &ScRangeData_QsortNameCompare ); -#else - qsort( (void*)&aSortArray[0], n, sizeof(ScRangeData*), - ICCQsortNameCompare ); -#endif - for (size_t i = 0; i < n; ++i) - InsertContent(SC_CONTENT_RANGENAME, aSortArray[i]->GetName()); + InsertContent(SC_CONTENT_RANGENAME, *itr); } } } _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits