diff options
author | Ingrid Halama <iha@openoffice.org> | 2010-03-10 10:07:29 +0100 |
---|---|---|
committer | Ingrid Halama <iha@openoffice.org> | 2010-03-10 10:07:29 +0100 |
commit | a4d17fb0d40f2dc13d073df9d38a54c1ff1f3d21 (patch) | |
tree | 22fbac7ac7b6dc5c8ddd09f2d123853591549801 /sc | |
parent | 6616bad4c5f200c3e3db340682e33ae239a5964c (diff) |
chart43: cleanup some chart code
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/charthelper.hxx | 9 | ||||
-rwxr-xr-x[-rw-r--r--] | sc/source/core/data/documen2.cxx | 0 | ||||
-rw-r--r-- | sc/source/core/data/documen5.cxx | 285 | ||||
-rwxr-xr-x[-rw-r--r--] | sc/source/core/data/drwlayer.cxx | 0 | ||||
-rw-r--r-- | sc/source/core/tool/charthelper.cxx | 116 | ||||
-rw-r--r-- | sc/source/core/tool/makefile.mk | 1 | ||||
-rw-r--r-- | sc/source/ui/unoobj/chartuno.cxx | 15 |
7 files changed, 212 insertions, 214 deletions
diff --git a/sc/inc/charthelper.hxx b/sc/inc/charthelper.hxx index 561aa0026e60..50b8586bdace 100644 --- a/sc/inc/charthelper.hxx +++ b/sc/inc/charthelper.hxx @@ -32,6 +32,10 @@ #include "address.hxx" #include "global.hxx" +#include <com/sun/star/chart2/XChartDocument.hpp> + +class SdrObject; + /** Use this to handle charts in a calc document */ class ScChartHelper @@ -40,6 +44,11 @@ public: static USHORT DoUpdateAllCharts( ScDocument* pDoc ); static USHORT DoUpdateCharts( const ScAddress& rPos, ScDocument* pDoc ); //use this to replace ScDBFunc::DoUpdateCharts in future static void AdjustRangesOfChartsOnDestinationPage( ScDocument* pSrcDoc, ScDocument* pDestDoc, const SCTAB nSrcTab, const SCTAB nDestTab ); + static ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > GetChartFromSdrObject( SdrObject* pObject ); + static void GetChartRanges( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& xChartDoc, + ::com::sun::star::uno::Sequence< rtl::OUString >& rRanges ); + static void SetChartRanges( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& xChartDoc, + const ::com::sun::star::uno::Sequence< rtl::OUString >& rRanges ); }; #endif diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index c08fb7a10228..c08fb7a10228 100644..100755 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx diff --git a/sc/source/core/data/documen5.cxx b/sc/source/core/data/documen5.cxx index 14a88abd32ca..55eb2a8e7721 100644 --- a/sc/source/core/data/documen5.cxx +++ b/sc/source/core/data/documen5.cxx @@ -64,107 +64,12 @@ #include "miscuno.hxx" #include "chart2uno.hxx" +#include "charthelper.hxx" using namespace ::com::sun::star; // ----------------------------------------------------------------------- -void lcl_GetChartRanges( const uno::Reference< chart2::XChartDocument >& xChartDoc, - uno::Sequence< rtl::OUString >& rRanges ) -{ - rRanges.realloc(0); - uno::Reference< chart2::data::XDataSource > xDataSource( xChartDoc, uno::UNO_QUERY ); - if( !xDataSource.is() ) - return; - //uno::Reference< chart2::data::XDataProvider > xProvider = xChartDoc->getDataProvider(); - - uno::Sequence< uno::Reference< chart2::data::XLabeledDataSequence > > aLabeledDataSequences( xDataSource->getDataSequences() ); - rRanges.realloc(2*aLabeledDataSequences.getLength()); - sal_Int32 nRealCount=0; - for( sal_Int32 nN=0;nN<aLabeledDataSequences.getLength();nN++) - { - uno::Reference< chart2::data::XLabeledDataSequence > xLabeledSequence( aLabeledDataSequences[nN] ); - if(!xLabeledSequence.is()) - continue; - uno::Reference< chart2::data::XDataSequence > xLabel( xLabeledSequence->getLabel()); - uno::Reference< chart2::data::XDataSequence > xValues( xLabeledSequence->getValues()); - - if( xLabel.is()) - rRanges[nRealCount++] = xLabel->getSourceRangeRepresentation(); - if( xValues.is()) - rRanges[nRealCount++] = xValues->getSourceRangeRepresentation(); - } - rRanges.realloc(nRealCount); -} - -void lcl_SetChartRanges( const uno::Reference< chart2::XChartDocument >& xChartDoc, - const uno::Sequence< rtl::OUString >& rRanges ) -{ - uno::Reference< chart2::data::XDataSource > xDataSource( xChartDoc, uno::UNO_QUERY ); - if( !xDataSource.is() ) - return; - uno::Reference< chart2::data::XDataProvider > xDataProvider = xChartDoc->getDataProvider(); - if( !xDataProvider.is() ) - return; - - uno::Reference< frame::XModel > xModel( xChartDoc, uno::UNO_QUERY ); - if( xModel.is() ) - xModel->lockControllers(); - - try - { - rtl::OUString aPropertyNameRole( ::rtl::OUString::createFromAscii("Role") ); - - uno::Sequence< uno::Reference< chart2::data::XLabeledDataSequence > > aLabeledDataSequences( xDataSource->getDataSequences() ); - sal_Int32 nRange=0; - for( sal_Int32 nN=0; (nN<aLabeledDataSequences.getLength()) && (nRange<rRanges.getLength()); nN++ ) - { - uno::Reference< chart2::data::XLabeledDataSequence > xLabeledSequence( aLabeledDataSequences[nN] ); - if(!xLabeledSequence.is()) - continue; - uno::Reference< beans::XPropertySet > xLabel( xLabeledSequence->getLabel(), uno::UNO_QUERY ); - uno::Reference< beans::XPropertySet > xValues( xLabeledSequence->getValues(), uno::UNO_QUERY ); - - if( xLabel.is()) - { - // the range string must be in Calc A1 format. - uno::Reference< chart2::data::XDataSequence > xNewSeq( - xDataProvider->createDataSequenceByRangeRepresentation( rRanges[nRange++] )); - - uno::Reference< beans::XPropertySet > xNewProps( xNewSeq, uno::UNO_QUERY ); - if( xNewProps.is() ) - xNewProps->setPropertyValue( aPropertyNameRole, xLabel->getPropertyValue( aPropertyNameRole ) ); - - xLabeledSequence->setLabel( xNewSeq ); - } - - if( !(nRange<rRanges.getLength()) ) - break; - - if( xValues.is()) - { - // the range string must be in Calc A1 format. - uno::Reference< chart2::data::XDataSequence > xNewSeq( - xDataProvider->createDataSequenceByRangeRepresentation( rRanges[nRange++] )); - - uno::Reference< beans::XPropertySet > xNewProps( xNewSeq, uno::UNO_QUERY ); - if( xNewProps.is() ) - xNewProps->setPropertyValue( aPropertyNameRole, xValues->getPropertyValue( aPropertyNameRole ) ); - - xLabeledSequence->setValues( xNewSeq ); - } - } - } - catch ( uno::Exception& ex ) - { - (void)ex; - DBG_ERROR("Exception in lcl_SetChartRanges - invalid range string?"); - } - - if( xModel.is() ) - xModel->unlockControllers(); -} - void lcl_GetChartParameters( const uno::Reference< chart2::XChartDocument >& xChartDoc, rtl::OUString& rRanges, chart::ChartDataRowSource& rDataRowSource, bool& rHasCategories, bool& rFirstCellAsLabel ) @@ -363,14 +268,7 @@ uno::Reference< chart2::XChartDocument > ScDocument::GetChartByName( const Strin if ( pObject->GetObjIdentifier() == OBJ_OLE2 && ((SdrOle2Obj*)pObject)->GetPersistName() == rChartName ) { - uno::Reference< embed::XEmbeddedObject > xIPObj = ((SdrOle2Obj*)pObject)->GetObjRef(); - if ( xIPObj.is() ) - { - svt::EmbeddedObjectRef::TryRunningState( xIPObj ); - - uno::Reference< util::XCloseable > xComponent = xIPObj->getComponent(); - xReturn.set( uno::Reference< chart2::XChartDocument >( xComponent, uno::UNO_QUERY ) ); - } + xReturn.set( ScChartHelper::GetChartFromSdrObject( pObject ) ); return xReturn; } pObject = aIter.Next(); @@ -386,7 +284,7 @@ void ScDocument::GetChartRanges( const String& rChartName, ::std::vector< ScRang if ( xChartDoc.is() ) { uno::Sequence< rtl::OUString > aRangeStrings; - lcl_GetChartRanges( xChartDoc, aRangeStrings ); + ScChartHelper::GetChartRanges( xChartDoc, aRangeStrings ); for( sal_Int32 nN=0; nN<aRangeStrings.getLength(); nN++ ) { ScRangeList aRanges; @@ -410,7 +308,7 @@ void ScDocument::SetChartRanges( const String& rChartName, const ::std::vector< aScRangeList.Format( sRangeStr, SCR_ABS_3D, this ); aRangeStrings[nN]=sRangeStr; } - lcl_SetChartRanges( xChartDoc, aRangeStrings ); + ScChartHelper::SetChartRanges( xChartDoc, aRangeStrings ); } } @@ -435,32 +333,25 @@ void ScDocument::GetOldChartParameters( const String& rName, if ( pObject->GetObjIdentifier() == OBJ_OLE2 && ((SdrOle2Obj*)pObject)->GetPersistName() == rName ) { - uno::Reference< embed::XEmbeddedObject > xIPObj = ((SdrOle2Obj*)pObject)->GetObjRef(); - if ( xIPObj.is() ) + uno::Reference< chart2::XChartDocument > xChartDoc( ScChartHelper::GetChartFromSdrObject( pObject ) ); + if ( xChartDoc.is() ) { - svt::EmbeddedObjectRef::TryRunningState( xIPObj ); - - uno::Reference< util::XCloseable > xComponent = xIPObj->getComponent(); - uno::Reference< chart2::XChartDocument > xChartDoc( xComponent, uno::UNO_QUERY ); - if ( xChartDoc.is() ) + chart::ChartDataRowSource eDataRowSource = chart::ChartDataRowSource_COLUMNS; + bool bHasCategories = false; + bool bFirstCellAsLabel = false; + rtl::OUString aRangesStr; + lcl_GetChartParameters( xChartDoc, aRangesStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); + + rRanges.Parse( aRangesStr, this ); + if ( eDataRowSource == chart::ChartDataRowSource_COLUMNS ) { - chart::ChartDataRowSource eDataRowSource = chart::ChartDataRowSource_COLUMNS; - bool bHasCategories = false; - bool bFirstCellAsLabel = false; - rtl::OUString aRangesStr; - lcl_GetChartParameters( xChartDoc, aRangesStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); - - rRanges.Parse( aRangesStr, this ); - if ( eDataRowSource == chart::ChartDataRowSource_COLUMNS ) - { - rRowHeaders = bHasCategories; - rColHeaders = bFirstCellAsLabel; - } - else - { - rColHeaders = bHasCategories; - rRowHeaders = bFirstCellAsLabel; - } + rRowHeaders = bHasCategories; + rColHeaders = bFirstCellAsLabel; + } + else + { + rColHeaders = bHasCategories; + rRowHeaders = bFirstCellAsLabel; } } return; @@ -489,75 +380,68 @@ void ScDocument::UpdateChartArea( const String& rChartName, if ( pObject->GetObjIdentifier() == OBJ_OLE2 && ((SdrOle2Obj*)pObject)->GetPersistName() == rChartName ) { - uno::Reference< embed::XEmbeddedObject > xIPObj = ((SdrOle2Obj*)pObject)->GetObjRef(); - if ( xIPObj.is() ) + uno::Reference< chart2::XChartDocument > xChartDoc( ScChartHelper::GetChartFromSdrObject( pObject ) ); + uno::Reference< chart2::data::XDataReceiver > xReceiver( xChartDoc, uno::UNO_QUERY ); + if ( xChartDoc.is() && xReceiver.is() ) { - svt::EmbeddedObjectRef::TryRunningState( xIPObj ); + ScRangeListRef aNewRanges; + chart::ChartDataRowSource eDataRowSource = chart::ChartDataRowSource_COLUMNS; + bool bHasCategories = false; + bool bFirstCellAsLabel = false; + rtl::OUString aRangesStr; + lcl_GetChartParameters( xChartDoc, aRangesStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); - uno::Reference< util::XCloseable > xComponent = xIPObj->getComponent(); - uno::Reference< chart2::XChartDocument > xChartDoc( xComponent, uno::UNO_QUERY ); - uno::Reference< chart2::data::XDataReceiver > xReceiver( xComponent, uno::UNO_QUERY ); - if ( xChartDoc.is() && xReceiver.is() ) - { - ScRangeListRef aNewRanges; - chart::ChartDataRowSource eDataRowSource = chart::ChartDataRowSource_COLUMNS; - bool bHasCategories = false; - bool bFirstCellAsLabel = false; - rtl::OUString aRangesStr; - lcl_GetChartParameters( xChartDoc, aRangesStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); + sal_Bool bInternalData = xChartDoc->hasInternalDataProvider(); - sal_Bool bInternalData = xChartDoc->hasInternalDataProvider(); + if ( bAdd && !bInternalData ) + { + // append to old ranges, keep other settings - if ( bAdd && !bInternalData ) - { - // append to old ranges, keep other settings + aNewRanges = new ScRangeList; + aNewRanges->Parse( aRangesStr, this ); - aNewRanges = new ScRangeList; - aNewRanges->Parse( aRangesStr, this ); + ULONG nAddCount = rNewList->Count(); + for ( ULONG nAdd=0; nAdd<nAddCount; nAdd++ ) + aNewRanges->Append( *rNewList->GetObject(nAdd) ); + } + else + { + // directly use new ranges (only eDataRowSource is used from old settings) - ULONG nAddCount = rNewList->Count(); - for ( ULONG nAdd=0; nAdd<nAddCount; nAdd++ ) - aNewRanges->Append( *rNewList->GetObject(nAdd) ); + if ( eDataRowSource == chart::ChartDataRowSource_COLUMNS ) + { + bHasCategories = bRowHeaders; + bFirstCellAsLabel = bColHeaders; } else { - // directly use new ranges (only eDataRowSource is used from old settings) - - if ( eDataRowSource == chart::ChartDataRowSource_COLUMNS ) - { - bHasCategories = bRowHeaders; - bFirstCellAsLabel = bColHeaders; - } - else - { - bHasCategories = bColHeaders; - bFirstCellAsLabel = bRowHeaders; - } - aNewRanges = rNewList; + bHasCategories = bColHeaders; + bFirstCellAsLabel = bRowHeaders; } + aNewRanges = rNewList; + } - if ( bInternalData && pShell ) - { - // Calc -> DataProvider - uno::Reference< chart2::data::XDataProvider > xDataProvider = new ScChart2DataProvider( this ); - xReceiver->attachDataProvider( xDataProvider ); - uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( - pShell->GetModel(), uno::UNO_QUERY ); - xReceiver->attachNumberFormatsSupplier( xNumberFormatsSupplier ); - } + if ( bInternalData && pShell ) + { + // Calc -> DataProvider + uno::Reference< chart2::data::XDataProvider > xDataProvider = new ScChart2DataProvider( this ); + xReceiver->attachDataProvider( xDataProvider ); + uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( + pShell->GetModel(), uno::UNO_QUERY ); + xReceiver->attachNumberFormatsSupplier( xNumberFormatsSupplier ); + } - String sRangeStr; - aNewRanges->Format( sRangeStr, SCR_ABS_3D, this, GetAddressConvention() ); + String sRangeStr; + aNewRanges->Format( sRangeStr, SCR_ABS_3D, this, GetAddressConvention() ); - lcl_SetChartParameters( xReceiver, sRangeStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); + lcl_SetChartParameters( xReceiver, sRangeStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); - pChartListenerCollection->ChangeListening( rChartName, aNewRanges ); + pChartListenerCollection->ChangeListening( rChartName, aNewRanges ); - // ((SdrOle2Obj*)pObject)->GetNewReplacement(); - // pObject->ActionChanged(); + // ((SdrOle2Obj*)pObject)->GetNewReplacement(); + // pObject->ActionChanged(); - return; // nicht weitersuchen - } + return; // nicht weitersuchen } } pObject = aIter.Next(); @@ -823,31 +707,24 @@ void ScDocument::SetChartRangeList( const String& rChartName, if ( pObject->GetObjIdentifier() == OBJ_OLE2 && ((SdrOle2Obj*)pObject)->GetPersistName() == rChartName ) { - uno::Reference< embed::XEmbeddedObject > xIPObj = ((SdrOle2Obj*)pObject)->GetObjRef(); - if ( xIPObj.is() ) + uno::Reference< chart2::XChartDocument > xChartDoc( ScChartHelper::GetChartFromSdrObject( pObject ) ); + uno::Reference< chart2::data::XDataReceiver > xReceiver( xChartDoc, uno::UNO_QUERY ); + if ( xChartDoc.is() && xReceiver.is() ) { - svt::EmbeddedObjectRef::TryRunningState( xIPObj ); - - uno::Reference< util::XCloseable > xComponent = xIPObj->getComponent(); - uno::Reference< chart2::XChartDocument > xChartDoc( xComponent, uno::UNO_QUERY ); - uno::Reference< chart2::data::XDataReceiver > xReceiver( xComponent, uno::UNO_QUERY ); - if ( xChartDoc.is() && xReceiver.is() ) - { - ScRangeListRef aNewRanges; - chart::ChartDataRowSource eDataRowSource = chart::ChartDataRowSource_COLUMNS; - bool bHasCategories = false; - bool bFirstCellAsLabel = false; - rtl::OUString aRangesStr; - lcl_GetChartParameters( xChartDoc, aRangesStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); + ScRangeListRef aNewRanges; + chart::ChartDataRowSource eDataRowSource = chart::ChartDataRowSource_COLUMNS; + bool bHasCategories = false; + bool bFirstCellAsLabel = false; + rtl::OUString aRangesStr; + lcl_GetChartParameters( xChartDoc, aRangesStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); - String sRangeStr; - rNewRangeListRef->Format( sRangeStr, SCR_ABS_3D, this, GetAddressConvention() ); + String sRangeStr; + rNewRangeListRef->Format( sRangeStr, SCR_ABS_3D, this, GetAddressConvention() ); - lcl_SetChartParameters( xReceiver, sRangeStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); + lcl_SetChartParameters( xReceiver, sRangeStr, eDataRowSource, bHasCategories, bFirstCellAsLabel ); - // don't modify pChartListenerCollection here, called from there - return; - } + // don't modify pChartListenerCollection here, called from there + return; } } pObject = aIter.Next(); diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx index 4e9de6179809..4e9de6179809 100644..100755 --- a/sc/source/core/data/drwlayer.cxx +++ b/sc/source/core/data/drwlayer.cxx diff --git a/sc/source/core/tool/charthelper.cxx b/sc/source/core/tool/charthelper.cxx index 68fab5e6d2a1..1b2cde3d4a6d 100644 --- a/sc/source/core/tool/charthelper.cxx +++ b/sc/source/core/tool/charthelper.cxx @@ -180,3 +180,119 @@ void ScChartHelper::AdjustRangesOfChartsOnDestinationPage( ScDocument* pSrcDoc, } } } + +//static +uno::Reference< chart2::XChartDocument > ScChartHelper::GetChartFromSdrObject( SdrObject* pObject ) +{ + uno::Reference< chart2::XChartDocument > xReturn; + if( pObject ) + { + if( pObject->GetObjIdentifier() == OBJ_OLE2 && ((SdrOle2Obj*)pObject)->IsChart() ) + { + uno::Reference< embed::XEmbeddedObject > xIPObj = ((SdrOle2Obj*)pObject)->GetObjRef(); + if( xIPObj.is() ) + { + svt::EmbeddedObjectRef::TryRunningState( xIPObj ); + uno::Reference< util::XCloseable > xComponent = xIPObj->getComponent(); + xReturn.set( uno::Reference< chart2::XChartDocument >( xComponent, uno::UNO_QUERY ) ); + } + } + } + return xReturn; +} + +void ScChartHelper::GetChartRanges( const uno::Reference< chart2::XChartDocument >& xChartDoc, + uno::Sequence< rtl::OUString >& rRanges ) +{ + rRanges.realloc(0); + uno::Reference< chart2::data::XDataSource > xDataSource( xChartDoc, uno::UNO_QUERY ); + if( !xDataSource.is() ) + return; + //uno::Reference< chart2::data::XDataProvider > xProvider = xChartDoc->getDataProvider(); + + uno::Sequence< uno::Reference< chart2::data::XLabeledDataSequence > > aLabeledDataSequences( xDataSource->getDataSequences() ); + rRanges.realloc(2*aLabeledDataSequences.getLength()); + sal_Int32 nRealCount=0; + for( sal_Int32 nN=0;nN<aLabeledDataSequences.getLength();nN++) + { + uno::Reference< chart2::data::XLabeledDataSequence > xLabeledSequence( aLabeledDataSequences[nN] ); + if(!xLabeledSequence.is()) + continue; + uno::Reference< chart2::data::XDataSequence > xLabel( xLabeledSequence->getLabel()); + uno::Reference< chart2::data::XDataSequence > xValues( xLabeledSequence->getValues()); + + if( xLabel.is()) + rRanges[nRealCount++] = xLabel->getSourceRangeRepresentation(); + if( xValues.is()) + rRanges[nRealCount++] = xValues->getSourceRangeRepresentation(); + } + rRanges.realloc(nRealCount); +} + +void ScChartHelper::SetChartRanges( const uno::Reference< chart2::XChartDocument >& xChartDoc, + const uno::Sequence< rtl::OUString >& rRanges ) +{ + uno::Reference< chart2::data::XDataSource > xDataSource( xChartDoc, uno::UNO_QUERY ); + if( !xDataSource.is() ) + return; + uno::Reference< chart2::data::XDataProvider > xDataProvider = xChartDoc->getDataProvider(); + if( !xDataProvider.is() ) + return; + + uno::Reference< frame::XModel > xModel( xChartDoc, uno::UNO_QUERY ); + if( xModel.is() ) + xModel->lockControllers(); + + try + { + rtl::OUString aPropertyNameRole( ::rtl::OUString::createFromAscii("Role") ); + + uno::Sequence< uno::Reference< chart2::data::XLabeledDataSequence > > aLabeledDataSequences( xDataSource->getDataSequences() ); + sal_Int32 nRange=0; + for( sal_Int32 nN=0; (nN<aLabeledDataSequences.getLength()) && (nRange<rRanges.getLength()); nN++ ) + { + uno::Reference< chart2::data::XLabeledDataSequence > xLabeledSequence( aLabeledDataSequences[nN] ); + if(!xLabeledSequence.is()) + continue; + uno::Reference< beans::XPropertySet > xLabel( xLabeledSequence->getLabel(), uno::UNO_QUERY ); + uno::Reference< beans::XPropertySet > xValues( xLabeledSequence->getValues(), uno::UNO_QUERY ); + + if( xLabel.is()) + { + // the range string must be in Calc A1 format. + uno::Reference< chart2::data::XDataSequence > xNewSeq( + xDataProvider->createDataSequenceByRangeRepresentation( rRanges[nRange++] )); + + uno::Reference< beans::XPropertySet > xNewProps( xNewSeq, uno::UNO_QUERY ); + if( xNewProps.is() ) + xNewProps->setPropertyValue( aPropertyNameRole, xLabel->getPropertyValue( aPropertyNameRole ) ); + + xLabeledSequence->setLabel( xNewSeq ); + } + + if( !(nRange<rRanges.getLength()) ) + break; + + if( xValues.is()) + { + // the range string must be in Calc A1 format. + uno::Reference< chart2::data::XDataSequence > xNewSeq( + xDataProvider->createDataSequenceByRangeRepresentation( rRanges[nRange++] )); + + uno::Reference< beans::XPropertySet > xNewProps( xNewSeq, uno::UNO_QUERY ); + if( xNewProps.is() ) + xNewProps->setPropertyValue( aPropertyNameRole, xValues->getPropertyValue( aPropertyNameRole ) ); + + xLabeledSequence->setValues( xNewSeq ); + } + } + } + catch ( uno::Exception& ex ) + { + (void)ex; + DBG_ERROR("Exception in ScChartHelper::SetChartRanges - invalid range string?"); + } + + if( xModel.is() ) + xModel->unlockControllers(); +} diff --git a/sc/source/core/tool/makefile.mk b/sc/source/core/tool/makefile.mk index 0bc433a7b187..5f3f42d4b985 100644 --- a/sc/source/core/tool/makefile.mk +++ b/sc/source/core/tool/makefile.mk @@ -115,6 +115,7 @@ SLOFILES = \ EXCEPTIONSFILES= \ $(SLO)$/addincol.obj \ $(SLO)$/cellkeytranslator.obj \ + $(SLO)$/charthelper.obj \ $(SLO)$/chartarr.obj \ $(SLO)$/chartlis.obj \ $(SLO)$/chartlock.obj \ diff --git a/sc/source/ui/unoobj/chartuno.cxx b/sc/source/ui/unoobj/chartuno.cxx index 5feabe72207d..201c411ea45c 100644 --- a/sc/source/ui/unoobj/chartuno.cxx +++ b/sc/source/ui/unoobj/chartuno.cxx @@ -480,20 +480,15 @@ void ScChartObj::GetData_Impl( ScRangeListRef& rRanges, bool& rColHeaders, bool& { bool bFound = false; ScDocument* pDoc = (pDocShell? pDocShell->GetDocument(): 0); - uno::Reference< embed::XEmbeddedObject > xIPObj; + if( pDoc ) - xIPObj.set( pDoc->FindOleObjectByName( aChartName ), uno::UNO_QUERY ); - if( xIPObj.is()) { - //make sure that the chart is loaded - svt::EmbeddedObjectRef::TryRunningState( xIPObj ); - - uno::Reference< chart2::XChartDocument > xChartDoc( xIPObj->getComponent(), uno::UNO_QUERY ); - uno::Reference< chart2::data::XDataReceiver > xReceiver( xChartDoc, uno::UNO_QUERY ); - if( xReceiver.is() ) + uno::Reference< chart2::XChartDocument > xChartDoc( pDoc->GetChartByName( aChartName ) ); + if( xChartDoc.is() ) { + uno::Reference< chart2::data::XDataReceiver > xReceiver( xChartDoc, uno::UNO_QUERY ); uno::Reference< chart2::data::XDataProvider > xProvider = xChartDoc->getDataProvider(); - if( xProvider.is() ) + if( xReceiver.is() && xProvider.is() ) { uno::Sequence< beans::PropertyValue > aArgs( xProvider->detectArguments( xReceiver->getUsedData() ) ); |