From 792fb5b96f1008804ab51dc0ebf4f07a07ad9537 Mon Sep 17 00:00:00 2001 From: Markus Mohrhard Date: Tue, 29 Nov 2011 10:39:01 +0100 Subject: ManageNames: only calculate formula for visible range names --- sc/source/ui/namedlg/namemgrtable.cxx | 54 +++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 6 deletions(-) (limited to 'sc/source/ui/namedlg') diff --git a/sc/source/ui/namedlg/namemgrtable.cxx b/sc/source/ui/namedlg/namemgrtable.cxx index d471c7467cc7..de9e3862b65e 100644 --- a/sc/source/ui/namedlg/namemgrtable.cxx +++ b/sc/source/ui/namedlg/namemgrtable.cxx @@ -60,7 +60,8 @@ String createEntryString(const ScRangeNameLine& rLine) ScRangeManagerTable::ScRangeManagerTable( Window* pWindow, boost::ptr_map& rRangeMap ): SvTabListBox( pWindow, WB_SORT | WB_HSCROLL | WB_CLIPCHILDREN | WB_TABSTOP ), maHeaderBar( pWindow, WB_BUTTONSTYLE | WB_BOTTOMBORDER ), - maGlobalString( ScGlobal::GetRscString(STR_GLOBAL_SCOPE)) + maGlobalString( ScGlobal::GetRscString(STR_GLOBAL_SCOPE)), + mrRangeMap( rRangeMap ) { Size aBoxSize( pWindow->GetOutputSizePixel() ); @@ -84,12 +85,16 @@ ScRangeManagerTable::ScRangeManagerTable( Window* pWindow, boost::ptr_map& rRangeMap) +void ScRangeManagerTable::Init() { Clear(); - for (boost::ptr_map::const_iterator itr = rRangeMap.begin(); - itr != rRangeMap.end(); ++itr) + for (boost::ptr_map::const_iterator itr = mrRangeMap.begin(); + itr != mrRangeMap.end(); ++itr) { const ScRangeName* pLocalRangeName = itr->second; ScRangeNameLine aLine; @@ -134,13 +139,44 @@ void ScRangeManagerTable::Init(const boost::ptr_map& if (!it->second->HasType(RT_DATABASE) && !it->second->HasType(RT_SHARED)) { aLine.aName = it->second->GetName(); - it->second->GetSymbol(aLine.aExpression); addEntry(aLine); } } } } +const ScRangeData* ScRangeManagerTable::findRangeData(const ScRangeNameLine& rLine) +{ + const ScRangeName* pRangeName; + if (rLine.aScope == maGlobalString) + pRangeName = mrRangeMap.find(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_GLOBAL_RANGE_NAME)))->second; + else + pRangeName = mrRangeMap.find(rLine.aScope)->second; + + return pRangeName->findByUpperName(ScGlobal::pCharClass->upper(rLine.aName)); +} + + + +void ScRangeManagerTable::CheckForFormulaString() +{ + for (SvLBoxEntry* pEntry = GetFirstEntryInView(); pEntry ; pEntry = GetNextEntryInView(pEntry)) + { + std::map::const_iterator itr = maCalculatedFormulaEntries.find(pEntry); + if (itr == maCalculatedFormulaEntries.end() || itr->second == false) + { + ScRangeNameLine aLine; + GetLine( aLine, pEntry); + const ScRangeData* pData = findRangeData( aLine ); + rtl::OUString aFormulaString; + pData->GetSymbol(aFormulaString); + SetEntryText(aFormulaString, pEntry, 1); + maCalculatedFormulaEntries.insert( std::pair(pEntry, true) ); + } + + } +} + void ScRangeManagerTable::DeleteSelectedEntries() { if (GetSelectionCount()) @@ -237,5 +273,11 @@ IMPL_LINK( ScRangeManagerTable, HeaderEndDragHdl, void*, EMPTYARG) return 0; } +IMPL_LINK( ScRangeManagerTable, ScrollHdl, void*, EMPTYARG) +{ + CheckForFormulaString(); + return 0; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit