summaryrefslogtreecommitdiff
path: root/chart2/source/model
diff options
context:
space:
mode:
authorIngrid Halama [iha] <Ingrid.Halama@oracle.com>2010-12-10 17:07:53 +0100
committerIngrid Halama [iha] <Ingrid.Halama@oracle.com>2010-12-10 17:07:53 +0100
commiteb3c9dfa087679efb697b3c7b41096021cd67a6b (patch)
treeabf40dcf360f717d2ad2454ce346fe95225df680 /chart2/source/model
parentb2b21642beea1db9120e99e5a0a64d7ece700d09 (diff)
chart46: #i25706# implement date axis - switching to scatter or bubble
Diffstat (limited to 'chart2/source/model')
-rw-r--r--chart2/source/model/template/BubbleDataInterpreter.cxx43
-rw-r--r--chart2/source/model/template/DataInterpreter.cxx8
-rw-r--r--chart2/source/model/template/DataInterpreter.hxx4
-rw-r--r--chart2/source/model/template/XYDataInterpreter.cxx31
4 files changed, 48 insertions, 38 deletions
diff --git a/chart2/source/model/template/BubbleDataInterpreter.cxx b/chart2/source/model/template/BubbleDataInterpreter.cxx
index 1f26fff907e4..27fee7d35aff 100644
--- a/chart2/source/model/template/BubbleDataInterpreter.cxx
+++ b/chart2/source/model/template/BubbleDataInterpreter.cxx
@@ -77,16 +77,17 @@ chart2::InterpretedData SAL_CALL BubbleDataInterpreter::interpretDataSource(
Reference< data::XLabeledDataSequence > xCategories;
bool bHasCategories = HasCategories( aArguments, aData );
+ bool bUseCategoriesAsX = UseCategoriesAsX( aArguments );
- bool bHasXValues = false;
+ bool bSetXValues = false;
sal_Int32 nDataSeqCount = aData.getLength();
- bHasXValues = bHasCategories ? ( (nDataSeqCount-1) > 2 && (nDataSeqCount-1) % 2 != 0 )
+ bSetXValues = bHasCategories ? ( (nDataSeqCount-1) > 2 && (nDataSeqCount-1) % 2 != 0 )
:( nDataSeqCount > 2 && nDataSeqCount % 2 != 0 );
bool bCategoriesUsed = false;
bool bNextIsYValues = bHasCategories ? nDataSeqCount>2 : nDataSeqCount>1;
- for( sal_Int32 nDataIdx = 0; nDataIdx < aData.getLength(); ++nDataIdx )
+ for( sal_Int32 nDataIdx = 0; nDataIdx < nDataSeqCount; ++nDataIdx )
{
try
{
@@ -94,10 +95,17 @@ chart2::InterpretedData SAL_CALL BubbleDataInterpreter::interpretDataSource(
{
xCategories.set( aData[nDataIdx] );
if( xCategories.is())
+ {
SetRole( xCategories->getValues(), C2U("categories"));
+ if( bUseCategoriesAsX )
+ {
+ bSetXValues = false;
+ bNextIsYValues = nDataSeqCount > 2;
+ }
+ }
bCategoriesUsed = true;
}
- else if( !xValuesX.is() && bHasXValues )
+ else if( !xValuesX.is() && bSetXValues )
{
xValuesX.set( aData[nDataIdx] );
if( xValuesX.is())
@@ -115,7 +123,7 @@ chart2::InterpretedData SAL_CALL BubbleDataInterpreter::interpretDataSource(
aSizeValuesVector.push_back( aData[nDataIdx] );
if( aData[nDataIdx].is())
SetRole( aData[nDataIdx]->getValues(), C2U("values-size"));
- bNextIsYValues = true;
+ bNextIsYValues = (nDataSeqCount-(nDataIdx+1)) >= 2;//two or more left
}
}
catch( uno::Exception & ex )
@@ -132,26 +140,19 @@ chart2::InterpretedData SAL_CALL BubbleDataInterpreter::interpretDataSource(
Reference< data::XLabeledDataSequence > xClonedXValues = xValuesX;
Reference< util::XCloneable > xCloneableX( xValuesX, uno::UNO_QUERY );
- for( size_t nCount = 0; nCount < aSizeValuesVector.size(); ++nCount, ++nSeriesIndex )
+ for( size_t nN = 0; nN < aSizeValuesVector.size(); ++nN, ++nSeriesIndex )
{
- sal_Int32 nDataSequenceCount = 2;
- if( xValuesX.is() )
- nDataSequenceCount = 3;
- else if( aYValuesVector.empty() )
- nDataSequenceCount = 1;
-
- Sequence< Reference< data::XLabeledDataSequence > > aNewData( nDataSequenceCount );
- sal_Int32 nDataIndex = 0;
+ vector< Reference< data::XLabeledDataSequence > > aNewData;
if( xValuesX.is() )
{
- if( nCount > 0 && xCloneableX.is() )
+ if( nN > 0 && xCloneableX.is() )
xClonedXValues.set( xCloneableX->createClone(), uno::UNO_QUERY );
- aNewData[nDataIndex++] = xClonedXValues;
+ aNewData.push_back( xClonedXValues );
}
- if( aYValuesVector.size() > nCount )
- aNewData[nDataIndex++] = aYValuesVector[nCount];
- if( aSizeValuesVector.size() > nCount )
- aNewData[nDataIndex++] = aSizeValuesVector[nCount];
+ if( aYValuesVector.size() > nN )
+ aNewData.push_back( aYValuesVector[nN] );
+ if( aSizeValuesVector.size() > nN )
+ aNewData.push_back( aSizeValuesVector[nN] );
Reference< XDataSeries > xSeries;
if( nSeriesIndex < aSeriesToReUse.getLength())
@@ -161,7 +162,7 @@ chart2::InterpretedData SAL_CALL BubbleDataInterpreter::interpretDataSource(
OSL_ASSERT( xSeries.is() );
Reference< data::XDataSink > xSink( xSeries, uno::UNO_QUERY );
OSL_ASSERT( xSink.is() );
- xSink->setData( aNewData );
+ xSink->setData( ContainerHelper::ContainerToSequence( aNewData ) );
aSeriesVec.push_back( xSeries );
}
diff --git a/chart2/source/model/template/DataInterpreter.cxx b/chart2/source/model/template/DataInterpreter.cxx
index b619553ee959..b4a748e4e022 100644
--- a/chart2/source/model/template/DataInterpreter.cxx
+++ b/chart2/source/model/template/DataInterpreter.cxx
@@ -394,6 +394,14 @@ bool DataInterpreter::HasCategories(
return bHasCategories;
}
+bool DataInterpreter::UseCategoriesAsX( const Sequence< beans::PropertyValue > & rArguments )
+{
+ bool bUseCategoriesAsX = true;
+ if( rArguments.getLength() > 0 )
+ GetProperty( rArguments, C2U(("UseCategoriesAsX"))) >>= bUseCategoriesAsX;
+ return bUseCategoriesAsX;
+}
+
// ------------------------------------------------------------
Sequence< OUString > DataInterpreter::getSupportedServiceNames_Static()
diff --git a/chart2/source/model/template/DataInterpreter.hxx b/chart2/source/model/template/DataInterpreter.hxx
index a2d6201fc023..d0f2ee922059 100644
--- a/chart2/source/model/template/DataInterpreter.hxx
+++ b/chart2/source/model/template/DataInterpreter.hxx
@@ -73,6 +73,10 @@ public:
::com::sun::star::uno::Reference<
::com::sun::star::chart2::data::XLabeledDataSequence > > & rData );
+ static bool UseCategoriesAsX(
+ const ::com::sun::star::uno::Sequence<
+ ::com::sun::star::beans::PropertyValue > & rArguments );
+
protected:
// ____ XDataInterpreter ____
virtual ::com::sun::star::chart2::InterpretedData SAL_CALL interpretDataSource(
diff --git a/chart2/source/model/template/XYDataInterpreter.cxx b/chart2/source/model/template/XYDataInterpreter.cxx
index 839c0cbac510..965e3a058f58 100644
--- a/chart2/source/model/template/XYDataInterpreter.cxx
+++ b/chart2/source/model/template/XYDataInterpreter.cxx
@@ -75,11 +75,12 @@ chart2::InterpretedData SAL_CALL XYDataInterpreter::interpretDataSource(
vector< Reference< data::XLabeledDataSequence > > aSequencesVec;
Reference< data::XLabeledDataSequence > xCategories;
- // check for categories. If true, the the categories bet parked in the axis scale, but not used via setting the Axistype to Not CATEGORY
bool bHasCategories = HasCategories( aArguments, aData );
+ bool bUseCategoriesAsX = UseCategoriesAsX( aArguments );
// parse data
bool bCategoriesUsed = false;
+ bool bSetXValues = aData.getLength()>(bCategoriesUsed?2:1);
for( sal_Int32 nDataIdx= 0; nDataIdx < aData.getLength(); ++nDataIdx )
{
try
@@ -88,10 +89,14 @@ chart2::InterpretedData SAL_CALL XYDataInterpreter::interpretDataSource(
{
xCategories.set( aData[nDataIdx] );
if( xCategories.is())
+ {
SetRole( xCategories->getValues(), C2U("categories"));
+ if( bUseCategoriesAsX )
+ bSetXValues = false;
+ }
bCategoriesUsed = true;
}
- else if( !xValuesX.is() && (aData.getLength()>(bCategoriesUsed?2:1)) )
+ else if( !xValuesX.is() && bSetXValues )
{
xValuesX.set( aData[nDataIdx] );
if( xValuesX.is())
@@ -123,22 +128,14 @@ chart2::InterpretedData SAL_CALL XYDataInterpreter::interpretDataSource(
for( ;aSequencesVecIt != aSequencesVec.end(); ++aSequencesVecIt, ++nSeriesIndex )
{
- Sequence< Reference< data::XLabeledDataSequence > > aNewData(xValuesX.is()?2:1);
- if( aSequencesVecIt != aSequencesVec.begin() &&
- xCloneable.is() )
- {
- xClonedXValues.set( xCloneable->createClone(), uno::UNO_QUERY );
- }
+ vector< Reference< data::XLabeledDataSequence > > aNewData;
+ if( aSequencesVecIt != aSequencesVec.begin() && xCloneable.is() )
+ xClonedXValues.set( xCloneable->createClone(), uno::UNO_QUERY );
if( xValuesX.is() )
- {
- aNewData[0] = xClonedXValues;
- aNewData[1] = (*aSequencesVecIt);
- }
- else
- {
- aNewData[0] = (*aSequencesVecIt);
- }
+ aNewData.push_back( xClonedXValues );
+
+ aNewData.push_back( *aSequencesVecIt );
Reference< XDataSeries > xSeries;
if( nSeriesIndex < aSeriesToReUse.getLength())
@@ -148,7 +145,7 @@ chart2::InterpretedData SAL_CALL XYDataInterpreter::interpretDataSource(
OSL_ASSERT( xSeries.is() );
Reference< data::XDataSink > xSink( xSeries, uno::UNO_QUERY );
OSL_ASSERT( xSink.is() );
- xSink->setData( aNewData );
+ xSink->setData( ContainerHelper::ContainerToSequence( aNewData ) );
aSeriesVec.push_back( xSeries );
}