summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/source/controller/dialogs/DialogModel.cxx9
-rw-r--r--chart2/source/controller/dialogs/DialogModel.hxx3
-rw-r--r--chart2/source/controller/dialogs/tp_DataSource.cxx5
-rw-r--r--chart2/source/inc/ChartTypeTemplate.hxx5
-rw-r--r--chart2/source/inc/DataInterpreter.hxx9
-rw-r--r--chart2/source/inc/DataSourceHelper.hxx7
-rw-r--r--chart2/source/inc/DiagramHelper.hxx8
-rw-r--r--chart2/source/inc/LabeledDataSequence.hxx4
-rw-r--r--chart2/source/model/template/BubbleDataInterpreter.cxx9
-rw-r--r--chart2/source/model/template/ChartTypeTemplate.cxx3
-rw-r--r--chart2/source/model/template/ColumnLineDataInterpreter.cxx1
-rw-r--r--chart2/source/model/template/DataInterpreter.cxx45
-rw-r--r--chart2/source/model/template/StockDataInterpreter.cxx9
-rw-r--r--chart2/source/model/template/XYDataInterpreter.cxx11
-rw-r--r--chart2/source/tools/AxisHelper.cxx3
-rw-r--r--chart2/source/tools/DataSourceHelper.cxx6
-rw-r--r--chart2/source/tools/DiagramHelper.cxx39
-rw-r--r--chart2/source/tools/InternalDataProvider.cxx6
18 files changed, 133 insertions, 49 deletions
diff --git a/chart2/source/controller/dialogs/DialogModel.cxx b/chart2/source/controller/dialogs/DialogModel.cxx
index 13c7571b4b17..cef69be4ecc3 100644
--- a/chart2/source/controller/dialogs/DialogModel.cxx
+++ b/chart2/source/controller/dialogs/DialogModel.cxx
@@ -34,6 +34,7 @@
#include <ThreeDHelper.hxx>
#include <ChartModel.hxx>
#include <BaseCoordinateSystem.hxx>
+#include <LabeledDataSequence.hxx>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/chart2/AxisType.hpp>
@@ -595,15 +596,15 @@ void DialogModel::deleteSeries(
DataSeriesHelper::deleteSeries( xSeries, xChartType );
}
-Reference< data::XLabeledDataSequence > DialogModel::getCategories() const
+rtl::Reference< LabeledDataSequence > DialogModel::getCategories() const
{
- Reference< data::XLabeledDataSequence > xResult;
+ rtl::Reference< LabeledDataSequence > xResult;
try
{
if( m_xChartDocument.is())
{
rtl::Reference< Diagram > xDiagram( m_xChartDocument->getFirstChartDiagram());
- xResult.set( DiagramHelper::getCategoriesFromDiagram( xDiagram ));
+ xResult = DiagramHelper::getCategoriesFromDiagram( xDiagram );
}
}
catch( const uno::Exception & )
@@ -636,7 +637,7 @@ void DialogModel::setCategories( const Reference< chart2::data::XLabeledDataSequ
OUString DialogModel::getCategoriesRange() const
{
- Reference< data::XLabeledDataSequence > xLSeq( getCategories());
+ rtl::Reference< LabeledDataSequence > xLSeq( getCategories());
OUString aRange;
if( xLSeq.is())
{
diff --git a/chart2/source/controller/dialogs/DialogModel.hxx b/chart2/source/controller/dialogs/DialogModel.hxx
index fd3ef59b1fd5..edc87d2e9356 100644
--- a/chart2/source/controller/dialogs/DialogModel.hxx
+++ b/chart2/source/controller/dialogs/DialogModel.hxx
@@ -49,6 +49,7 @@ class ChartType;
class ChartTypeTemplate;
class DataSeries;
struct InterpretedData;
+class LabeledDataSequence;
class RangeSelectionHelper;
struct DialogModelTimeBasedInfo
@@ -119,7 +120,7 @@ public:
const css::uno::Reference< css::chart2::XDataSeries > & xSeries,
const rtl::Reference< ::chart::ChartType > & xChartType );
- css::uno::Reference< css::chart2::data::XLabeledDataSequence >
+ rtl::Reference< ::chart::LabeledDataSequence >
getCategories() const;
void setCategories( const css::uno::Reference< css::chart2::data::XLabeledDataSequence > & xCategories );
diff --git a/chart2/source/controller/dialogs/tp_DataSource.cxx b/chart2/source/controller/dialogs/tp_DataSource.cxx
index d9e19e8c5da4..e208db89a6ff 100644
--- a/chart2/source/controller/dialogs/tp_DataSource.cxx
+++ b/chart2/source/controller/dialogs/tp_DataSource.cxx
@@ -29,6 +29,7 @@
#include <DataSeriesHelper.hxx>
#include <ControllerLockGuard.hxx>
#include <DataSourceHelper.hxx>
+#include <LabeledDataSequence.hxx>
#include "DialogModel.hxx"
#include <o3tl/safeint.hxx>
#include <TabPageNotifiable.hxx>
@@ -752,7 +753,7 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField)
if (bAll || (pField == m_xEDT_CATEGORIES.get()))
{
- Reference< data::XLabeledDataSequence > xLabeledSeq( m_rDialogModel.getCategories() );
+ rtl::Reference< LabeledDataSequence > xLabeledSeq( m_rDialogModel.getCategories() );
if( xDataProvider.is())
{
OUString aRange(m_xEDT_CATEGORIES->get_text());
@@ -761,7 +762,7 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField)
// create or change categories
if( !xLabeledSeq.is())
{
- xLabeledSeq.set( DataSourceHelper::createLabeledDataSequence() );
+ xLabeledSeq = DataSourceHelper::createLabeledDataSequence();
m_rDialogModel.setCategories( xLabeledSeq );
}
try
diff --git a/chart2/source/inc/ChartTypeTemplate.hxx b/chart2/source/inc/ChartTypeTemplate.hxx
index a6f67d3fa6c7..1997c88e145e 100644
--- a/chart2/source/inc/ChartTypeTemplate.hxx
+++ b/chart2/source/inc/ChartTypeTemplate.hxx
@@ -41,6 +41,7 @@ class BaseCoordinateSystem;
class ChartType;
class Diagram;
class DataInterpreter;
+class LabeledDataSequence;
/** For creating diagrams and modifying existing diagrams. A base class that
implements XChartTypeTemplate and offers some tooling for classes that
@@ -249,8 +250,8 @@ private:
css::uno::Sequence<
css::uno::Reference<
css::chart2::XDataSeries > > > & aSeriesSeq,
- const css::uno::Reference<
- css::chart2::data::XLabeledDataSequence >& xCategories,
+ const rtl::Reference<
+ LabeledDataSequence >& xCategories,
const std::vector< rtl::Reference< ChartType > > & aOldChartTypesSeq);
};
diff --git a/chart2/source/inc/DataInterpreter.hxx b/chart2/source/inc/DataInterpreter.hxx
index 561b86f2bfee..d804f4e3eecb 100644
--- a/chart2/source/inc/DataInterpreter.hxx
+++ b/chart2/source/inc/DataInterpreter.hxx
@@ -30,6 +30,7 @@
namespace chart
{
class DataSeries;
+class LabeledDataSequence;
/** offers tooling to interpret different data sources in a structural
and chart-type-dependent way.
@@ -37,7 +38,7 @@ class DataSeries;
struct InterpretedData
{
css::uno::Sequence< css::uno::Sequence< css::uno::Reference<css::chart2::XDataSeries> > > Series;
- css::uno::Reference<css::chart2::data::XLabeledDataSequence> Categories;
+ rtl::Reference<::chart::LabeledDataSequence> Categories;
};
/** offers tooling to interpret different data sources in a structural
@@ -69,10 +70,16 @@ public:
static bool HasCategories(
const css::uno::Sequence< css::beans::PropertyValue > & rArguments,
const css::uno::Sequence< css::uno::Reference< css::chart2::data::XLabeledDataSequence > > & rData );
+ static bool HasCategories(
+ const css::uno::Sequence< css::beans::PropertyValue > & rArguments,
+ const std::vector< rtl::Reference< LabeledDataSequence > > & rData );
static bool UseCategoriesAsX(
const css::uno::Sequence< css::beans::PropertyValue > & rArguments );
+ static std::vector<rtl::Reference<LabeledDataSequence>> getDataSequences(
+ const css::uno::Reference< css::chart2::data::XDataSource >& xSource);
+
// ____ DataInterpreter ____
/** Interprets the given data.
diff --git a/chart2/source/inc/DataSourceHelper.hxx b/chart2/source/inc/DataSourceHelper.hxx
index 3956ab9d05b5..35aefbd67a6a 100644
--- a/chart2/source/inc/DataSourceHelper.hxx
+++ b/chart2/source/inc/DataSourceHelper.hxx
@@ -36,6 +36,7 @@ namespace com::sun::star::frame { class XModel; }
namespace chart
{
class Diagram;
+class LabeledDataSequence;
class OOO_DLLPUBLIC_CHARTTOOLS DataSourceHelper
{
@@ -50,16 +51,16 @@ public:
static css::uno::Reference< css::chart2::data::XDataSequence >
createCachedDataSequence( const OUString & rSingleText );
- static css::uno::Reference< css::chart2::data::XLabeledDataSequence >
+ static rtl::Reference< LabeledDataSequence >
createLabeledDataSequence(
const css::uno::Reference< css::chart2::data::XDataSequence >& xValues ,
const css::uno::Reference< css::chart2::data::XDataSequence >& xLabels );
- static css::uno::Reference< css::chart2::data::XLabeledDataSequence >
+ static rtl::Reference< LabeledDataSequence >
createLabeledDataSequence(
const css::uno::Reference< css::chart2::data::XDataSequence >& xValues );
- static css::uno::Reference< css::chart2::data::XLabeledDataSequence >
+ static rtl::Reference< LabeledDataSequence >
createLabeledDataSequence();
static css::uno::Sequence< css::beans::PropertyValue >
diff --git a/chart2/source/inc/DiagramHelper.hxx b/chart2/source/inc/DiagramHelper.hxx
index 5783ff7f10b2..3a83644696e4 100644
--- a/chart2/source/inc/DiagramHelper.hxx
+++ b/chart2/source/inc/DiagramHelper.hxx
@@ -48,6 +48,7 @@ class ChartTypeManager;
class ChartTypeTemplate;
class DataSeries;
class Diagram;
+class LabeledDataSequence;
enum DiagramPositioningMode
{
@@ -191,8 +192,13 @@ public:
const rtl::Reference< ::chart::Diagram >& xDiagram,
bool bSetAxisType = false, // when this flag is true ...
bool bCategoryAxis = true);// set the AxisType to CATEGORY or back to REALNUMBER
+ static void setCategoriesToDiagram(
+ const rtl::Reference< LabeledDataSequence >& xCategories,
+ const rtl::Reference< ::chart::Diagram >& xDiagram,
+ bool bSetAxisType = false, // when this flag is true ...
+ bool bCategoryAxis = true);// set the AxisType to CATEGORY or back to REALNUMBER
- static css::uno::Reference< css::chart2::data::XLabeledDataSequence >
+ static rtl::Reference< LabeledDataSequence >
getCategoriesFromDiagram(
const rtl::Reference< ::chart::Diagram > & xDiagram );
diff --git a/chart2/source/inc/LabeledDataSequence.hxx b/chart2/source/inc/LabeledDataSequence.hxx
index 811eb1997e49..48a06dd7d0d2 100644
--- a/chart2/source/inc/LabeledDataSequence.hxx
+++ b/chart2/source/inc/LabeledDataSequence.hxx
@@ -24,6 +24,7 @@
#include <com/sun/star/chart2/data/XLabeledDataSequence2.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include "ModifyListenerHelper.hxx"
+#include "charttoolsdllapi.hxx"
namespace com::sun::star::chart2::data { class XDataSequence; }
namespace com::sun::star::util { class XCloneable; }
@@ -40,7 +41,7 @@ typedef cppu::WeakImplHelper<
LabeledDataSequence_Base;
}
-class LabeledDataSequence final :
+class OOO_DLLPUBLIC_CHARTTOOLS LabeledDataSequence final :
public cppu::BaseMutex,
public impl::LabeledDataSequence_Base
{
@@ -59,7 +60,6 @@ public:
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
-protected:
// ____ XLabeledDataSequence ____
virtual css::uno::Reference< css::chart2::data::XDataSequence > SAL_CALL getValues() override;
virtual void SAL_CALL setValues(
diff --git a/chart2/source/model/template/BubbleDataInterpreter.cxx b/chart2/source/model/template/BubbleDataInterpreter.cxx
index cac3ea68d343..8868fbb6ca89 100644
--- a/chart2/source/model/template/BubbleDataInterpreter.cxx
+++ b/chart2/source/model/template/BubbleDataInterpreter.cxx
@@ -21,6 +21,7 @@
#include <DataSeries.hxx>
#include <DataSeriesHelper.hxx>
#include <CommonConverters.hxx>
+#include <LabeledDataSequence.hxx>
#include <com/sun/star/chart2/data/XDataSink.hpp>
#include <com/sun/star/util/XCloneable.hpp>
#include <tools/diagnose_ex.h>
@@ -52,17 +53,17 @@ InterpretedData BubbleDataInterpreter::interpretDataSource(
if( ! xSource.is())
return InterpretedData();
- Sequence< Reference< data::XLabeledDataSequence > > aData( xSource->getDataSequences() );
+ std::vector< rtl::Reference< LabeledDataSequence > > aData = DataInterpreter::getDataSequences(xSource);
Reference< data::XLabeledDataSequence > xValuesX;
vector< Reference< data::XLabeledDataSequence > > aYValuesVector;
vector< Reference< data::XLabeledDataSequence > > aSizeValuesVector;
- Reference< data::XLabeledDataSequence > xCategories;
+ rtl::Reference< LabeledDataSequence > xCategories;
bool bHasCategories = HasCategories( aArguments, aData );
bool bUseCategoriesAsX = UseCategoriesAsX( aArguments );
- sal_Int32 nDataSeqCount = aData.getLength();
+ sal_Int32 nDataSeqCount = aData.size();
bool bSetXValues = bHasCategories ? ( (nDataSeqCount-1) > 2 && (nDataSeqCount-1) % 2 != 0 )
:( nDataSeqCount > 2 && nDataSeqCount % 2 != 0 );
@@ -75,7 +76,7 @@ InterpretedData BubbleDataInterpreter::interpretDataSource(
{
if( bHasCategories && !bCategoriesUsed )
{
- xCategories.set( aData[nDataIdx] );
+ xCategories = aData[nDataIdx];
if( xCategories.is())
{
SetRole( xCategories->getValues(), "categories");
diff --git a/chart2/source/model/template/ChartTypeTemplate.cxx b/chart2/source/model/template/ChartTypeTemplate.cxx
index 8c7ab1e7389a..0183907419ad 100644
--- a/chart2/source/model/template/ChartTypeTemplate.cxx
+++ b/chart2/source/model/template/ChartTypeTemplate.cxx
@@ -30,6 +30,7 @@
#include <AxisIndexDefines.hxx>
#include <BaseCoordinateSystem.hxx>
#include <unonames.hxx>
+#include <LabeledDataSequence.hxx>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/chart2/AxisType.hpp>
@@ -716,7 +717,7 @@ sal_Int32 ChartTypeTemplate::getAxisCountByDimension( sal_Int32 nDimension )
void ChartTypeTemplate::FillDiagram(
const rtl::Reference< ::chart::Diagram >& xDiagram,
const Sequence< Sequence< Reference< XDataSeries > > >& aSeriesSeq,
- const Reference< data::XLabeledDataSequence >& xCategories,
+ const rtl::Reference< LabeledDataSequence >& xCategories,
const std::vector< rtl::Reference< ChartType > >& aOldChartTypesSeq )
{
adaptDiagram( xDiagram );
diff --git a/chart2/source/model/template/ColumnLineDataInterpreter.cxx b/chart2/source/model/template/ColumnLineDataInterpreter.cxx
index c548b8c8eacb..c75c7818fd0b 100644
--- a/chart2/source/model/template/ColumnLineDataInterpreter.cxx
+++ b/chart2/source/model/template/ColumnLineDataInterpreter.cxx
@@ -18,6 +18,7 @@
*/
#include "ColumnLineDataInterpreter.hxx"
+#include <LabeledDataSequence.hxx>
#include <osl/diagnose.h>
#include <algorithm>
diff --git a/chart2/source/model/template/DataInterpreter.cxx b/chart2/source/model/template/DataInterpreter.cxx
index 3a619e3ec253..9461008c87ad 100644
--- a/chart2/source/model/template/DataInterpreter.cxx
+++ b/chart2/source/model/template/DataInterpreter.cxx
@@ -22,6 +22,7 @@
#include <DataSourceHelper.hxx>
#include <DataSeriesHelper.hxx>
#include <CommonConverters.hxx>
+#include <LabeledDataSequence.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/chart2/data/XDataSink.hpp>
#include <cppuhelper/supportsservice.hxx>
@@ -66,9 +67,9 @@ InterpretedData DataInterpreter::interpretDataSource(
lcl_ShowDataSource( xSource );
#endif
- const Sequence< Reference< data::XLabeledDataSequence > > aData( xSource->getDataSequences() );
+ std::vector< rtl::Reference< LabeledDataSequence > > aData = getDataSequences(xSource);
- Reference< data::XLabeledDataSequence > xCategories;
+ rtl::Reference< LabeledDataSequence > xCategories;
vector< Reference< data::XLabeledDataSequence > > aSequencesVec;
// check if we should use categories
@@ -77,13 +78,13 @@ InterpretedData DataInterpreter::interpretDataSource(
// parse data
bool bCategoriesUsed = false;
- for( Reference< data::XLabeledDataSequence > const & labeledData : aData )
+ for( rtl::Reference< LabeledDataSequence > const & labeledData : aData )
{
try
{
if( bHasCategories && ! bCategoriesUsed )
{
- xCategories.set( labeledData );
+ xCategories = labeledData;
if( xCategories.is())
SetRole( xCategories->getValues(), "categories");
bCategoriesUsed = true;
@@ -138,9 +139,9 @@ InterpretedData DataInterpreter::interpretDataSource(
lcl_ShowDataSource( xSource );
#endif
- const Sequence< Reference< data::XLabeledDataSequence > > aData( xSource->getDataSequences() );
+ std::vector< rtl::Reference< LabeledDataSequence > > aData = getDataSequences(xSource);
- Reference< data::XLabeledDataSequence > xCategories;
+ rtl::Reference< LabeledDataSequence > xCategories;
vector< Reference< data::XLabeledDataSequence > > aSequencesVec;
// check if we should use categories
@@ -149,13 +150,13 @@ InterpretedData DataInterpreter::interpretDataSource(
// parse data
bool bCategoriesUsed = false;
- for( Reference< data::XLabeledDataSequence > const & labeledData : aData )
+ for( rtl::Reference< LabeledDataSequence > const & labeledData : aData )
{
try
{
if( bHasCategories && ! bCategoriesUsed )
{
- xCategories.set( labeledData );
+ xCategories = labeledData;
if( xCategories.is())
SetRole( xCategories->getValues(), "categories");
bCategoriesUsed = true;
@@ -433,6 +434,21 @@ bool DataInterpreter::HasCategories(
return bHasCategories;
}
+bool DataInterpreter::HasCategories(
+ const Sequence< beans::PropertyValue > & rArguments,
+ const std::vector< rtl::Reference< LabeledDataSequence > > & rData )
+{
+ bool bHasCategories = false;
+
+ if( rArguments.hasElements() )
+ GetProperty( rArguments, u"HasCategories" ) >>= bHasCategories;
+
+ for( sal_Int32 nLSeqIdx=0; ! bHasCategories && nLSeqIdx<static_cast<sal_Int32>(rData.size()); ++nLSeqIdx )
+ bHasCategories = ( rData[nLSeqIdx].is() && GetRole( rData[nLSeqIdx]->getValues() ) == "categories");
+
+ return bHasCategories;
+}
+
bool DataInterpreter::UseCategoriesAsX( const Sequence< beans::PropertyValue > & rArguments )
{
bool bUseCategoriesAsX = true;
@@ -456,6 +472,19 @@ css::uno::Sequence< OUString > SAL_CALL DataInterpreter::getSupportedServiceName
return { "com.sun.star.chart2.DataInterpreter" };
}
+std::vector< rtl::Reference< LabeledDataSequence > > DataInterpreter::getDataSequences(
+ const css::uno::Reference< css::chart2::data::XDataSource >& xSource)
+{
+ std::vector< rtl::Reference< LabeledDataSequence > > aData;
+ for (const Reference< data::XLabeledDataSequence > & rLDS : xSource->getDataSequences() )
+ {
+ auto pLDS = dynamic_cast<LabeledDataSequence*>(rLDS.get());
+ assert(pLDS);
+ aData.push_back(pLDS);
+ }
+ return aData;
+}
+
} // namespace chart
#ifdef DEBUG_CHART2_TEMPLATE
diff --git a/chart2/source/model/template/StockDataInterpreter.cxx b/chart2/source/model/template/StockDataInterpreter.cxx
index 3b9315ee7a30..addf3f71e3f8 100644
--- a/chart2/source/model/template/StockDataInterpreter.cxx
+++ b/chart2/source/model/template/StockDataInterpreter.cxx
@@ -20,6 +20,7 @@
#include "StockDataInterpreter.hxx"
#include "StockChartTypeTemplate.hxx"
#include <DataSeries.hxx>
+#include <LabeledDataSequence.hxx>
#include <com/sun/star/chart2/data/XDataSink.hpp>
#include <tools/diagnose_ex.h>
@@ -51,9 +52,9 @@ InterpretedData StockDataInterpreter::interpretDataSource(
if( ! xSource.is())
return InterpretedData();
- Reference< data::XLabeledDataSequence > xCategories;
- Sequence< Reference< data::XLabeledDataSequence > > aData( xSource->getDataSequences() );
- const sal_Int32 nDataCount( aData.getLength());
+ rtl::Reference< LabeledDataSequence > xCategories;
+ std::vector< rtl::Reference< LabeledDataSequence > > aData = DataInterpreter::getDataSequences(xSource);
+ const sal_Int32 nDataCount( aData.size());
// sub-type properties
const StockChartTypeTemplate::StockVariant eVar( GetStockVariant());
@@ -114,7 +115,7 @@ InterpretedData StockDataInterpreter::interpretDataSource(
// 1. categories
if( bHasCategories )
{
- xCategories.set( aData[nSourceIndex] );
+ xCategories = aData[nSourceIndex];
++nSourceIndex;
}
diff --git a/chart2/source/model/template/XYDataInterpreter.cxx b/chart2/source/model/template/XYDataInterpreter.cxx
index c61088a268f0..090e77b609d5 100644
--- a/chart2/source/model/template/XYDataInterpreter.cxx
+++ b/chart2/source/model/template/XYDataInterpreter.cxx
@@ -21,6 +21,7 @@
#include <DataSeries.hxx>
#include <DataSeriesHelper.hxx>
#include <CommonConverters.hxx>
+#include <LabeledDataSequence.hxx>
#include <com/sun/star/chart2/data/XDataSink.hpp>
#include <com/sun/star/util/XCloneable.hpp>
#include <tools/diagnose_ex.h>
@@ -53,25 +54,25 @@ InterpretedData XYDataInterpreter::interpretDataSource(
if( ! xSource.is())
return InterpretedData();
- const Sequence< Reference< data::XLabeledDataSequence > > aData( xSource->getDataSequences() );
+ std::vector< rtl::Reference< LabeledDataSequence > > aData = DataInterpreter::getDataSequences(xSource);
Reference< data::XLabeledDataSequence > xValuesX;
vector< Reference< data::XLabeledDataSequence > > aSequencesVec;
- Reference< data::XLabeledDataSequence > xCategories;
+ rtl::Reference< LabeledDataSequence > xCategories;
bool bHasCategories = HasCategories( aArguments, aData );
bool bUseCategoriesAsX = UseCategoriesAsX( aArguments );
// parse data
bool bCategoriesUsed = false;
- bool bSetXValues = aData.getLength()>1;
- for( Reference< data::XLabeledDataSequence > const & labelData : aData )
+ bool bSetXValues = aData.size()>1;
+ for( rtl::Reference< LabeledDataSequence > const & labelData : aData )
{
try
{
if( bHasCategories && ! bCategoriesUsed )
{
- xCategories.set( labelData );
+ xCategories = labelData;
if( xCategories.is())
{
SetRole( xCategories->getValues(), "categories");
diff --git a/chart2/source/tools/AxisHelper.cxx b/chart2/source/tools/AxisHelper.cxx
index 76204c7e3a5a..c15b6f18a5f8 100644
--- a/chart2/source/tools/AxisHelper.cxx
+++ b/chart2/source/tools/AxisHelper.cxx
@@ -23,6 +23,7 @@
#include <ChartTypeHelper.hxx>
#include <ChartType.hxx>
#include <AxisIndexDefines.hxx>
+#include <LabeledDataSequence.hxx>
#include <LinePropertiesHelper.hxx>
#include <servicenames_coosystems.hxx>
#include <DataSeries.hxx>
@@ -197,7 +198,7 @@ sal_Int32 AxisHelper::getExplicitNumberFormatKeyForAxis(
DataSeriesHelper::getAllDataSequencesByRole( xSource->getDataSequences(), "values-x" ) );
if( aXValues.empty() )
{
- Reference< data::XLabeledDataSequence > xCategories( DiagramHelper::getCategoriesFromDiagram( xDiagram ) );
+ rtl::Reference< LabeledDataSequence > xCategories( DiagramHelper::getCategoriesFromDiagram( xDiagram ) );
if( xCategories.is() )
{
Reference< data::XDataSequence > xSeq( xCategories->getValues());
diff --git a/chart2/source/tools/DataSourceHelper.cxx b/chart2/source/tools/DataSourceHelper.cxx
index cb71316c87cd..33d613e6f25b 100644
--- a/chart2/source/tools/DataSourceHelper.cxx
+++ b/chart2/source/tools/DataSourceHelper.cxx
@@ -134,20 +134,20 @@ Reference< chart2::data::XDataSequence > DataSourceHelper::createCachedDataSeque
return new ::chart::CachedDataSequence( rSingleText );
}
-Reference< chart2::data::XLabeledDataSequence > DataSourceHelper::createLabeledDataSequence(
+rtl::Reference< LabeledDataSequence > DataSourceHelper::createLabeledDataSequence(
const Reference< chart2::data::XDataSequence >& xValues ,
const Reference< chart2::data::XDataSequence >& xLabels )
{
return new ::chart::LabeledDataSequence( xValues, xLabels );
}
-Reference< chart2::data::XLabeledDataSequence > DataSourceHelper::createLabeledDataSequence(
+rtl::Reference< LabeledDataSequence > DataSourceHelper::createLabeledDataSequence(
const Reference< chart2::data::XDataSequence >& xValues )
{
return new ::chart::LabeledDataSequence( xValues );
}
-Reference< chart2::data::XLabeledDataSequence > DataSourceHelper::createLabeledDataSequence()
+rtl::Reference< LabeledDataSequence > DataSourceHelper::createLabeledDataSequence()
{
return new ::chart::LabeledDataSequence;
}
diff --git a/chart2/source/tools/DiagramHelper.cxx b/chart2/source/tools/DiagramHelper.cxx
index 15075593360c..a20c8bbd7510 100644
--- a/chart2/source/tools/DiagramHelper.cxx
+++ b/chart2/source/tools/DiagramHelper.cxx
@@ -29,6 +29,7 @@
#include <ChartModel.hxx>
#include <ChartModelHelper.hxx>
#include <ExplicitCategoriesProvider.hxx>
+#include <LabeledDataSequence.hxx>
#include <servicenames_charttypes.hxx>
#include <RelativePositionHelper.hxx>
#include <ControllerLockGuard.hxx>
@@ -492,7 +493,7 @@ void DiagramHelper::replaceCoordinateSystem(
try
{
- Reference< chart2::data::XLabeledDataSequence > xCategories = DiagramHelper::getCategoriesFromDiagram( xDiagram );
+ rtl::Reference< LabeledDataSequence > xCategories = DiagramHelper::getCategoriesFromDiagram( xDiagram );
// move chart types of xCooSysToReplace to xReplacement
xReplacement->setChartTypes( xCooSysToReplace->getChartTypes());
@@ -784,11 +785,38 @@ void DiagramHelper::setCategoriesToDiagram(
}
}
-Reference< data::XLabeledDataSequence >
+void DiagramHelper::setCategoriesToDiagram(
+ const rtl::Reference< LabeledDataSequence >& xCategories,
+ const rtl::Reference< Diagram >& xDiagram,
+ bool bSetAxisType /* = false */,
+ bool bCategoryAxis /* = true */ )
+{
+ std::vector< Reference< chart2::XAxis > > aCatAxes(
+ lcl_getAxisHoldingCategoriesFromDiagram( xDiagram ));
+
+ for (const Reference< chart2::XAxis >& xCatAxis : aCatAxes)
+ {
+ if( xCatAxis.is())
+ {
+ ScaleData aScaleData( xCatAxis->getScaleData());
+ aScaleData.Categories = xCategories;
+ if( bSetAxisType )
+ {
+ if( bCategoryAxis )
+ aScaleData.AxisType = AxisType::CATEGORY;
+ else if( aScaleData.AxisType == AxisType::CATEGORY || aScaleData.AxisType == AxisType::DATE )
+ aScaleData.AxisType = AxisType::REALNUMBER;
+ }
+ xCatAxis->setScaleData( aScaleData );
+ }
+ }
+}
+
+rtl::Reference< LabeledDataSequence >
DiagramHelper::getCategoriesFromDiagram(
const rtl::Reference< Diagram > & xDiagram )
{
- Reference< data::XLabeledDataSequence > xResult;
+ rtl::Reference< LabeledDataSequence > xResult;
try
{
@@ -803,8 +831,9 @@ Reference< data::XLabeledDataSequence >
ScaleData aScaleData( xCatAxis->getScaleData());
if( aScaleData.Categories.is() )
{
- xResult.set( aScaleData.Categories );
- uno::Reference<beans::XPropertySet> xProp(aScaleData.Categories->getValues(), uno::UNO_QUERY );
+ xResult = dynamic_cast<LabeledDataSequence*>(aScaleData.Categories.get());
+ assert(!aScaleData.Categories || xResult);
+ uno::Reference<beans::XPropertySet> xProp(xResult->getValues(), uno::UNO_QUERY );
if( xProp.is() )
{
try
diff --git a/chart2/source/tools/InternalDataProvider.cxx b/chart2/source/tools/InternalDataProvider.cxx
index a93003c6d7af..13f9bca3786c 100644
--- a/chart2/source/tools/InternalDataProvider.cxx
+++ b/chart2/source/tools/InternalDataProvider.cxx
@@ -377,8 +377,10 @@ InternalDataProvider::InternalDataProvider(
else
m_aInternalData.setComplexColumnLabels( std::move(aNewCategories) );
if( bConnectToModel )
- DiagramHelper::setCategoriesToDiagram( new LabeledDataSequence(
- createDataSequenceByRangeRepresentation( lcl_aCategoriesRangeName )), xDiagram );
+ DiagramHelper::setCategoriesToDiagram(
+ rtl::Reference< LabeledDataSequence >(new LabeledDataSequence(
+ createDataSequenceByRangeRepresentation( lcl_aCategoriesRangeName ))),
+ xDiagram );
}
// data series