summaryrefslogtreecommitdiff
path: root/sc/source
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-01-05 17:26:25 +0000
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-01-07 01:33:08 +0100
commit34b417914e041e93ddbf6035b855658d3b947636 (patch)
tree6b91ed98482656f74057f8cb6a334fa6c4b98247 /sc/source
parent12e9d6aaf7b228fcec19200ba18a27070617413a (diff)
handle relative refs in name dialogs correctly
Diffstat (limited to 'sc/source')
-rw-r--r--sc/source/core/tool/rangenam.cxx9
-rw-r--r--sc/source/ui/inc/namemgrtable.hxx4
-rw-r--r--sc/source/ui/namedlg/namedlg.cxx2
-rw-r--r--sc/source/ui/namedlg/namemgrtable.cxx7
-rw-r--r--sc/source/ui/namedlg/namepast.cxx5
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));