sc/inc/rangenam.hxx | 1 sc/inc/reftokenhelper.hxx | 1 sc/source/core/tool/rangenam.cxx | 9 +++++ sc/source/core/tool/reftokenhelper.cxx | 54 --------------------------------- sc/source/core/tool/token.cxx | 10 +----- sc/source/ui/inc/namemgrtable.hxx | 4 +- sc/source/ui/namedlg/namedlg.cxx | 2 - sc/source/ui/namedlg/namemgrtable.cxx | 7 ++-- sc/source/ui/namedlg/namepast.cxx | 5 ++- 9 files changed, 25 insertions(+), 68 deletions(-)
New commits: commit 5b8deb57c6782b77fcf180ef6097f71b6e1b07d2 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Jan 5 18:35:05 2012 +0100 simplify code a bit diff --git a/sc/inc/reftokenhelper.hxx b/sc/inc/reftokenhelper.hxx index c076f34..9119e3e 100644 --- a/sc/inc/reftokenhelper.hxx +++ b/sc/inc/reftokenhelper.hxx @@ -58,7 +58,6 @@ public: const sal_Unicode cSep, ::formula::FormulaGrammar::Grammar eGrammar); static bool getRangeFromToken(ScRange& rRange, const ScTokenRef& pToken, bool bExternal = false); - static bool getAbsRangeFromToken(ScRange& rRange, const ScTokenRef& pToken, const ScAddress& rPos, bool bExternal = false); static void getRangeListFromTokens(ScRangeList& rRangeList, const ::std::vector<ScTokenRef>& pTokens); diff --git a/sc/source/core/tool/reftokenhelper.cxx b/sc/source/core/tool/reftokenhelper.cxx index 364556c..2a32e12 100644 --- a/sc/source/core/tool/reftokenhelper.cxx +++ b/sc/source/core/tool/reftokenhelper.cxx @@ -146,25 +146,6 @@ void singleRefToAddr(const ScSingleRefData& rRef, ScAddress& rAddr) rAddr.SetTab(rRef.nTab); } -//returns an absolute address in reference to rPos -void singleRefToAbsAddr(const ScSingleRefData& rRef, ScAddress& rAddr, const ScAddress& rPos) -{ - if (rRef.IsColRel()) - rAddr.SetCol(rRef.nRelCol + rPos.Col()); - else - rAddr.SetCol(rRef.nCol); - - if (rRef.IsRowRel()) - rAddr.SetRow(rRef.nRelRow + rPos.Row()); - else - rAddr.SetRow(rRef.nRow); - - if (rRef.IsTabRel()) - rAddr.SetTab(rRef.nRelTab + rPos.Tab()); - else - rAddr.SetTab(rRef.nTab); -} - } bool ScRefTokenHelper::getRangeFromToken(ScRange& rRange, const ScTokenRef& pToken, bool bExternal) @@ -202,41 +183,6 @@ bool ScRefTokenHelper::getRangeFromToken(ScRange& rRange, const ScTokenRef& pTok return false; } -bool ScRefTokenHelper::getAbsRangeFromToken(ScRange& rRange, const ScTokenRef& pToken, const ScAddress& rPos, bool bExternal) -{ - StackVar eType = pToken->GetType(); - switch (pToken->GetType()) - { - case svSingleRef: - case svExternalSingleRef: - { - if ((eType == svExternalSingleRef && !bExternal) || - (eType == svSingleRef && bExternal)) - return false; - - const ScSingleRefData& rRefData = pToken->GetSingleRef(); - singleRefToAbsAddr(rRefData, rRange.aStart, rPos); - rRange.aEnd = rRange.aStart; - return true; - } - case svDoubleRef: - case svExternalDoubleRef: - { - if ((eType == svExternalDoubleRef && !bExternal) || - (eType == svDoubleRef && bExternal)) - return false; - - const ScComplexRefData& rRefData = pToken->GetDoubleRef(); - singleRefToAbsAddr(rRefData.Ref1, rRange.aStart, rPos); - singleRefToAbsAddr(rRefData.Ref2, rRange.aEnd, rPos); - return true; - } - default: - ; // do nothing - } - return false; -} - void ScRefTokenHelper::getRangeListFromTokens(ScRangeList& rRangeList, const vector<ScTokenRef>& rTokens) { vector<ScTokenRef>::const_iterator itr = rTokens.begin(), itrEnd = rTokens.end(); diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 8196b8a..83be799 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -1823,7 +1823,6 @@ namespace { void GetExternalTableData(const ScDocument* pOldDoc, const ScDocument* pNewDoc, const SCTAB nTab, rtl::OUString& rTabName, sal_uInt16& rFileId) { rtl::OUString aFileName = pOldDoc->GetFileURL();; - std::cout << aFileName << std::endl; rFileId = pNewDoc->GetExternalRefManager()->getExternalFileId(aFileName); rTabName = pOldDoc->GetCopyTabName(nTab); if (rTabName.isEmpty()) @@ -1839,7 +1838,9 @@ bool IsInCopyRange( const ScRange& rRange, const ScDocument* pClipDoc ) bool SkipReference(ScToken* pToken, const ScAddress& rPos, const ScDocument* pOldDoc, bool bRangeName) { ScRange aRange; - if (!ScRefTokenHelper::getAbsRangeFromToken(aRange, pToken, rPos)) + + pToken->CalcAbsIfRel(rPos); + if (!ScRefTokenHelper::getRangeFromToken(aRange, pToken)) return true; if (bRangeName && aRange.aStart.Tab() == rPos.Tab()) commit ac7f046d27b4e47361f44efe252fca867a0a1d02 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Jan 5 18:28:05 2012 +0100 remove unneeded debug statements diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 6ef4346..8196b8a 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -52,9 +52,6 @@ #include "externalrefmgr.hxx" #include "document.hxx" -#include <iostream> -#include <rtl/oustringostreaminserter.hxx> - using ::std::vector; #include <com/sun/star/sheet/ComplexReference.hpp> @@ -1831,13 +1828,11 @@ void GetExternalTableData(const ScDocument* pOldDoc, const ScDocument* pNewDoc, rTabName = pOldDoc->GetCopyTabName(nTab); if (rTabName.isEmpty()) pOldDoc->GetName(nTab, rTabName); - std::cout << "TabName: " << rTabName << std::endl; } bool IsInCopyRange( const ScRange& rRange, const ScDocument* pClipDoc ) { ScClipParam& rClipParam = const_cast<ScDocument*>(pClipDoc)->GetClipParam(); - std::cout << "Col: " << rRange.aStart.Col() << "Row: " << rRange.aStart.Row() << "Tab: " << rRange.aStart.Tab() << std::endl; return rClipParam.maRanges.In(rRange); } commit cb76b35b60b3194e45627edc293e3ce7a652941f Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Jan 5 18:26:25 2012 +0100 handle relative refs in name dialogs correctly diff --git a/sc/inc/rangenam.hxx b/sc/inc/rangenam.hxx index 4b4f8d9..0e8de43 100644 --- a/sc/inc/rangenam.hxx +++ b/sc/inc/rangenam.hxx @@ -135,6 +135,7 @@ public: sal_uInt32 GetUnoType() const; SC_DLLPUBLIC void GetSymbol( String& rSymbol, const formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_DEFAULT ) const; SC_DLLPUBLIC void GetSymbol( rtl::OUString& rSymbol, const formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_DEFAULT ) const; + SC_DLLPUBLIC void GetSymbol( rtl::OUString& rSymbol, const ScAddress& rPos, const formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_DEFAULT ) const; void UpdateSymbol( rtl::OUStringBuffer& rBuffer, const ScAddress&, const formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_DEFAULT ); void UpdateReference( UpdateRefMode eUpdateRefMode, diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx index a471512..8ebcc76 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 3023e29..3646164 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 a485986..56c50e8 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 7f8eb6b..b9164d3 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 4193955..68a406f 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)); _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits