*** orig/sc/inc/document.hxx Thu Jun 11 01:10:44 2009 --- new/sc/inc/document.hxx Mon Sep 21 10:42:34 2009 *************** *** 515,520 **** --- 515,523 ---- BOOL bColHeaders, BOOL bRowHeaders, BOOL bAdd ); void GetOldChartParameters( const String& rName, ScRangeList& rRanges, BOOL& rColHeaders, BOOL& rRowHeaders ); + + void ChangeChartDataRef( const SCTAB nSrcTab, const SCTAB nDestTab ); + ::com::sun::star::uno::Reference< ::com::sun::star::embed::XEmbeddedObject > FindOleObjectByName( const String& rName ); *** orig/sc/source/core/data/documen9.cxx Sun Mar 8 00:39:38 2009 --- new/sc/source/core/data/documen9.cxx Mon Sep 21 10:47:28 2009 *************** *** 72,77 **** --- 72,78 ---- #include "detfunc.hxx" // for UpdateAllComments #include "editutil.hxx" #include "postit.hxx" + #include "chartlis.hxx" using namespace ::com::sun::star; *************** *** 303,308 **** --- 304,355 ---- } } + void ScDocument::ChangeChartDataRef( const SCTAB nSrcTab, const SCTAB nDestTab ) + { + if( pDrawLayer ) + { + SdrPage* pSrcPage = pDrawLayer->GetPage(static_cast(nSrcTab)); + SdrPage* pDestPage = pDrawLayer->GetPage(static_cast(nDestTab)); + if( pSrcPage && pDestPage ) + { + SdrObjListIter aIter( *pDestPage, IM_FLAT ); + SdrObject* pObject = aIter.Next(); + while( pObject ) + { + if( pObject->GetObjIdentifier() == OBJ_OLE2 && ((SdrOle2Obj*)pObject)->IsChart() ) + { + String aChartName = ((SdrOle2Obj*)pObject)->GetPersistName(); + + uno::Reference< chart2::XChartDocument > xChartDoc( GetChartByName( aChartName ) ); + uno::Reference< chart2::data::XDataReceiver > xReceiver( xChartDoc, uno::UNO_QUERY ); + if( xChartDoc.is() && xReceiver.is() && !xChartDoc->hasInternalDataProvider() ) + { + uno::Sequence aRepresentations( xReceiver->getUsedRangeRepresentations() ); + ScRangeListRef aRanges = new ScRangeList; + sal_Int32 nRangeCount = aRepresentations.getLength(); + for( sal_Int32 i=0; iAppend( aRange ); + } + + lcl_AdjustRanges( *aRanges, nSrcTab, nDestTab, GetTableCount() ); + + if( pChartListenerCollection ) + { + pChartListenerCollection->ChangeListening( aChartName, aRanges ); + SetChartRangeList( aChartName, aRanges ); + } + } + } + pObject = aIter.Next(); + } + } + } + } + sal_Bool ScDocument::IsChart( const SdrObject* pObject ) { // #109985# *** orig/sc/source/ui/view/viewfun2.cxx Sun Mar 8 00:39:45 2009 --- new/sc/source/ui/view/viewfun2.cxx Mon Sep 21 10:41:48 2009 *************** *** 2803,2808 **** --- 2803,2811 ---- nNewTab--; SetTabNo( nNewTab, TRUE ); + + if( bCopy ) + pDoc->ChangeChartDataRef( nTab, nNewTab ); } }