From 67315dcfb0664a35fdd34f86242452bc27df6105 Mon Sep 17 00:00:00 2001 From: Markus Mohrhard Date: Thu, 27 Oct 2011 23:53:34 +0200 Subject: use uno for local range name api, it crashs otherwise sometimes --- sc/inc/nameuno.hxx | 10 ++++++---- sc/source/ui/unoobj/nameuno.cxx | 21 +++++++++++---------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/sc/inc/nameuno.hxx b/sc/inc/nameuno.hxx index 9d7ca9351343..c08222632419 100644 --- a/sc/inc/nameuno.hxx +++ b/sc/inc/nameuno.hxx @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -69,7 +70,7 @@ private: ScNamedRangesObj* mpParent; ScDocShell* pDocShell; String aName; - ScTableSheetObj* mpSheet; + com::sun::star::uno::Reference< com::sun::star::container::XNamed > mxSheet; private: ScRangeData* GetRangeData_Impl(); @@ -80,7 +81,8 @@ private: SCTAB GetTab_Impl(); public: - ScNamedRangeObj(ScNamedRangesObj* pParent, ScDocShell* pDocSh, const String& rNm, ScTableSheetObj* pSheet = NULL); + ScNamedRangeObj(ScNamedRangesObj* pParent, ScDocShell* pDocSh, const String& rNm, + com::sun::star::uno::Reference< com::sun::star::container::XNamed > xSheet = com::sun::star::uno::Reference< com::sun::star::container::XNamed > ()); virtual ~ScNamedRangeObj(); virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); @@ -337,9 +339,9 @@ private: virtual ScRangeName* GetRangeName_Impl(); virtual SCTAB GetTab_Impl(); - ScTableSheetObj* mpSheet; + ::com::sun::star::uno::Reference< ::com::sun::star::container::XNamed > mxSheet; public: - ScLocalNamedRangesObj(ScDocShell* pDocSh, ScTableSheetObj* pSheet); + ScLocalNamedRangesObj(ScDocShell* pDocSh, ::com::sun::star::uno::Reference< com::sun::star::container::XNamed > xNamed ); virtual ~ScLocalNamedRangesObj(); }; diff --git a/sc/source/ui/unoobj/nameuno.cxx b/sc/source/ui/unoobj/nameuno.cxx index 3726eb788b0f..7e9a52df2d61 100644 --- a/sc/source/ui/unoobj/nameuno.cxx +++ b/sc/source/ui/unoobj/nameuno.cxx @@ -99,11 +99,11 @@ bool lcl_UserVisibleName(const ScRangeData& rData) return !rData.HasType(RT_DATABASE) && !rData.HasType(RT_SHARED); } -ScNamedRangeObj::ScNamedRangeObj(ScNamedRangesObj* pParent, ScDocShell* pDocSh, const String& rNm, ScTableSheetObj* pSheet) : +ScNamedRangeObj::ScNamedRangeObj(ScNamedRangesObj* pParent, ScDocShell* pDocSh, const String& rNm, Reference xSheet): mpParent(pParent), pDocShell( pDocSh ), aName( rNm ), - mpSheet( pSheet ) + mxSheet( xSheet ) { pDocShell->GetDocument()->AddUnoObject(*this); } @@ -147,13 +147,14 @@ ScRangeData* ScNamedRangeObj::GetRangeData_Impl() SCTAB ScNamedRangeObj::GetTab_Impl() { - if (mpSheet) + if (mxSheet.is()) { if (!pDocShell) return -2; ScDocument* pDoc = pDocShell->GetDocument(); SCTAB nTab; - pDoc->GetTable(mpSheet->getName(), nTab); + rtl::OUString sName = mxSheet->getName(); + pDoc->GetTable(sName, nTab); return nTab; } else @@ -922,9 +923,9 @@ SCTAB ScGlobalNamedRangesObj::GetTab_Impl() //------------------------------------------------------------------------ -ScLocalNamedRangesObj::ScLocalNamedRangesObj( ScDocShell* pDocSh, ScTableSheetObj* pSheet ) +ScLocalNamedRangesObj::ScLocalNamedRangesObj( ScDocShell* pDocSh, uno::Reference xSheet ) : ScNamedRangesObj(pDocSh), - mpSheet(pSheet) + mxSheet(xSheet) { } @@ -937,7 +938,7 @@ ScLocalNamedRangesObj::~ScLocalNamedRangesObj() ScNamedRangeObj* ScLocalNamedRangesObj::GetObjectByName_Impl(const ::rtl::OUString& aName) { if ( pDocShell && hasByName( aName ) ) - return new ScNamedRangeObj( this, pDocShell, String(aName), mpSheet); + return new ScNamedRangeObj( this, pDocShell, String(aName), mxSheet); return NULL; } @@ -947,7 +948,7 @@ ScNamedRangeObj* ScLocalNamedRangesObj::GetObjectByIndex_Impl( sal_uInt16 nIndex if (!pDocShell) return NULL; - rtl::OUString aName = mpSheet->getName(); + rtl::OUString aName = mxSheet->getName(); ScDocument* pDoc = pDocShell->GetDocument(); SCTAB nTab; pDoc->GetTable( aName, nTab ); @@ -963,7 +964,7 @@ ScNamedRangeObj* ScLocalNamedRangesObj::GetObjectByIndex_Impl( sal_uInt16 nIndex if (lcl_UserVisibleName(*itr)) { if (nPos == nIndex) - return new ScNamedRangeObj(this, pDocShell, itr->GetName(), mpSheet); + return new ScNamedRangeObj(this, pDocShell, itr->GetName(), mxSheet); } ++nPos; } @@ -979,7 +980,7 @@ ScRangeName* ScLocalNamedRangesObj::GetRangeName_Impl() SCTAB ScLocalNamedRangesObj::GetTab_Impl() { SCTAB nTab; - pDocShell->GetDocument()->GetTable(mpSheet->getName(), nTab); + pDocShell->GetDocument()->GetTable(mxSheet->getName(), nTab); return nTab; } -- cgit