diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-01-05 17:26:25 +0000 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-01-07 01:33:08 +0100 |
commit | 34b417914e041e93ddbf6035b855658d3b947636 (patch) | |
tree | 6b91ed98482656f74057f8cb6a334fa6c4b98247 /sc/source | |
parent | 12e9d6aaf7b228fcec19200ba18a27070617413a (diff) |
handle relative refs in name dialogs correctly
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/core/tool/rangenam.cxx | 9 | ||||
-rw-r--r-- | sc/source/ui/inc/namemgrtable.hxx | 4 | ||||
-rw-r--r-- | sc/source/ui/namedlg/namedlg.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/namedlg/namemgrtable.cxx | 7 | ||||
-rw-r--r-- | sc/source/ui/namedlg/namepast.cxx | 5 |
5 files changed, 21 insertions, 6 deletions
diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx index a4715122a98f..8ebcc7655485 100644 --- a/sc/source/core/tool/rangenam.cxx +++ b/sc/source/core/tool/rangenam.cxx @@ -277,6 +277,15 @@ void ScRangeData::GetSymbol( OUString& rSymbol, const FormulaGrammar::Grammar eG rSymbol = aStr; } +void ScRangeData::GetSymbol( OUString& rSymbol, const ScAddress& rPos, const FormulaGrammar::Grammar eGrammar ) const +{ + String aStr; + ScCompiler aComp(pDoc, rPos, *pCode); + aComp.SetGrammar(eGrammar); + aComp.CreateStringFromTokenArray( aStr ); + rSymbol = aStr; +} + void ScRangeData::UpdateSymbol( rtl::OUStringBuffer& rBuffer, const ScAddress& rPos, const FormulaGrammar::Grammar eGrammar ) { diff --git a/sc/source/ui/inc/namemgrtable.hxx b/sc/source/ui/inc/namemgrtable.hxx index 3023e29eef2f..3646164a7d5e 100644 --- a/sc/source/ui/inc/namemgrtable.hxx +++ b/sc/source/ui/inc/namemgrtable.hxx @@ -31,6 +31,7 @@ #include <vcl/ctrl.hxx> #include "scresid.hxx" +#include "address.hxx" #include <vector> #include <boost/ptr_container/ptr_map.hpp> @@ -71,6 +72,7 @@ private: // otherwise opening the dialog with a lot of range names is extremelly slow because // we would calculate all formula strings during opening std::map<SvLBoxEntry*, bool> maCalculatedFormulaEntries; + const ScAddress maPos; void GetLine(ScRangeNameLine& aLine, SvLBoxEntry* pEntry); void Init(); @@ -78,7 +80,7 @@ private: const ScRangeData* findRangeData(const ScRangeNameLine& rLine); public: - ScRangeManagerTable( Window* pParent, boost::ptr_map<rtl::OUString, ScRangeName>& aTabRangeNames ); + ScRangeManagerTable( Window* pParent, boost::ptr_map<rtl::OUString, ScRangeName>& aTabRangeNames, const ScAddress& rPos ); virtual ~ScRangeManagerTable(); void addEntry( const ScRangeNameLine& rLine, bool bSetCurEntry = true ); diff --git a/sc/source/ui/namedlg/namedlg.cxx b/sc/source/ui/namedlg/namedlg.cxx index a4859865617f..56c50e8d4b5f 100644 --- a/sc/source/ui/namedlg/namedlg.cxx +++ b/sc/source/ui/namedlg/namedlg.cxx @@ -144,7 +144,7 @@ void ScNameDlg::Init() //init UI maFtInfo.SetStyle(WB_VCENTER); - mpRangeManagerTable = new ScRangeManagerTable(&maNameMgrCtrl, maRangeMap); + mpRangeManagerTable = new ScRangeManagerTable(&maNameMgrCtrl, maRangeMap, maCursorPos); mpRangeManagerTable->SetSelectHdl( LINK( this, ScNameDlg, SelectionChangedHdl_Impl ) ); mpRangeManagerTable->SetDeselectHdl( LINK( this, ScNameDlg, SelectionChangedHdl_Impl ) ); diff --git a/sc/source/ui/namedlg/namemgrtable.cxx b/sc/source/ui/namedlg/namemgrtable.cxx index 7f8eb6bf3e06..b9164d36b8c5 100644 --- a/sc/source/ui/namedlg/namemgrtable.cxx +++ b/sc/source/ui/namedlg/namemgrtable.cxx @@ -57,11 +57,12 @@ String createEntryString(const ScRangeNameLine& rLine) return aRet; } -ScRangeManagerTable::ScRangeManagerTable( Window* pWindow, boost::ptr_map<rtl::OUString, ScRangeName>& rRangeMap ): +ScRangeManagerTable::ScRangeManagerTable( Window* pWindow, boost::ptr_map<rtl::OUString, ScRangeName>& rRangeMap, const ScAddress& rPos ): SvTabListBox( pWindow, WB_SORT | WB_HSCROLL | WB_CLIPCHILDREN | WB_TABSTOP ), maHeaderBar( pWindow, WB_BUTTONSTYLE | WB_BOTTOMBORDER ), maGlobalString( ScGlobal::GetRscString(STR_GLOBAL_SCOPE)), - mrRangeMap( rRangeMap ) + mrRangeMap( rRangeMap ), + maPos( rPos ) { Size aBoxSize( pWindow->GetOutputSizePixel() ); @@ -172,7 +173,7 @@ void ScRangeManagerTable::CheckForFormulaString() GetLine( aLine, pEntry); const ScRangeData* pData = findRangeData( aLine ); rtl::OUString aFormulaString; - pData->GetSymbol(aFormulaString); + pData->GetSymbol(aFormulaString, maPos); SetEntryText(aFormulaString, pEntry, 1); maCalculatedFormulaEntries.insert( std::pair<SvLBoxEntry*, bool>(pEntry, true) ); } diff --git a/sc/source/ui/namedlg/namepast.cxx b/sc/source/ui/namedlg/namepast.cxx index 41939554843c..68a406f69fb2 100644 --- a/sc/source/ui/namedlg/namepast.cxx +++ b/sc/source/ui/namedlg/namepast.cxx @@ -38,6 +38,7 @@ #include "docsh.hxx" #include "miscdlgs.hrc" #include "rangenam.hxx" +#include "viewdata.hxx" //================================================================== @@ -62,7 +63,9 @@ ScNamePasteDlg::ScNamePasteDlg( Window * pParent, ScDocShell* pShell, bool ) aRangeMap.insert(aTemp, new ScRangeName(*itr->second)); } - mpTable = new ScRangeManagerTable(&maCtrl, aRangeMap); + ScViewData* pViewData = pShell->GetViewData(); + ScAddress aPos(pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo()); + mpTable = new ScRangeManagerTable(&maCtrl, aRangeMap, aPos); maBtnPaste.SetClickHdl( LINK( this, ScNamePasteDlg, ButtonHdl) ); maBtnPasteAll.SetClickHdl( LINK( this, ScNamePasteDlg, ButtonHdl)); |