summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorIngrid Halama <iha@openoffice.org>2010-03-10 10:07:29 +0100
committerIngrid Halama <iha@openoffice.org>2010-03-10 10:07:29 +0100
commita4d17fb0d40f2dc13d073df9d38a54c1ff1f3d21 (patch)
tree22fbac7ac7b6dc5c8ddd09f2d123853591549801 /sc
parent6616bad4c5f200c3e3db340682e33ae239a5964c (diff)
chart43: cleanup some chart code
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/charthelper.hxx9
-rwxr-xr-x[-rw-r--r--]sc/source/core/data/documen2.cxx0
-rw-r--r--sc/source/core/data/documen5.cxx285
-rwxr-xr-x[-rw-r--r--]sc/source/core/data/drwlayer.cxx0
-rw-r--r--sc/source/core/tool/charthelper.cxx116
-rw-r--r--sc/source/core/tool/makefile.mk1
-rw-r--r--sc/source/ui/unoobj/chartuno.cxx15
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() ) );