diff options
Diffstat (limited to 'chart2')
-rw-r--r-- | chart2/qa/extras/data/ods/tdf153706_XY_scatter_chart.ods | bin | 0 -> 16152 bytes | |||
-rw-r--r-- | chart2/qa/extras/uichart.cxx | 54 | ||||
-rw-r--r-- | chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx | 10 | ||||
-rw-r--r-- | chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx | 11 | ||||
-rw-r--r-- | chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx | 2 |
5 files changed, 76 insertions, 1 deletions
diff --git a/chart2/qa/extras/data/ods/tdf153706_XY_scatter_chart.ods b/chart2/qa/extras/data/ods/tdf153706_XY_scatter_chart.ods Binary files differnew file mode 100644 index 0000000000..2c6153ed6a --- /dev/null +++ b/chart2/qa/extras/data/ods/tdf153706_XY_scatter_chart.ods diff --git a/chart2/qa/extras/uichart.cxx b/chart2/qa/extras/uichart.cxx index 84b8658d29..2638367c85 100644 --- a/chart2/qa/extras/uichart.cxx +++ b/chart2/qa/extras/uichart.cxx @@ -436,6 +436,60 @@ CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf158223) } } +CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf153706) +{ + // Load a spreadsheet with a to-page XY scatter chart with the sheet as data source + loadFromFile(u"ods/tdf153706_XY_scatter_chart.ods"); + + // Select the cell range around the chart, and copy the range to clipboard, including the chart + dispatchCommand(mxComponent, u".uno:GoToCell"_ustr, + { comphelper::makePropertyValue(u"ToPoint"_ustr, u"D1:K23"_ustr) }); + dispatchCommand(mxComponent, u".uno:Copy"_ustr, {}); + + // create a new document + load(u"private:factory/scalc"_ustr); + + // Paste; this must create a chart with own data source having a proper copy of the data + dispatchCommand(mxComponent, u".uno:Paste"_ustr, {}); + + css::uno::Reference xChartDoc(getChartDocFromSheet(0, mxComponent), css::uno::UNO_SET_THROW); + auto xDataArray(xChartDoc->getDataProvider().queryThrow<chart::XChartDataArray>()); + + css::uno::Sequence<Sequence<double>> aData = xDataArray->getData(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), aData.getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[0].getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[1].getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[2].getLength()); + CPPUNIT_ASSERT_EQUAL(2.0, aData[0][0]); + CPPUNIT_ASSERT_EQUAL(3.0, aData[0][1]); + CPPUNIT_ASSERT_EQUAL(3.0, aData[1][0]); + CPPUNIT_ASSERT_EQUAL(2.0, aData[1][1]); + CPPUNIT_ASSERT_EQUAL(4.0, aData[2][0]); + CPPUNIT_ASSERT_EQUAL(1.0, aData[2][1]); + + // Without the fix, this would fail with + // - Expected: 1 + // - Actual : 2 + // i.e., the X values were treated as another Y series + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getNumberOfDataSeries(xChartDoc)); + + auto xSeries(getDataSeriesFromDoc(xChartDoc, 0).queryThrow<chart2::data::XDataSource>()); + auto sequences = xSeries->getDataSequences(); + // Without the fix, this would fail with + // - Expected: 2 + // - Actual : 1 + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), sequences.getLength()); + + auto propX(sequences[0]->getValues().queryThrow<beans::XPropertySet>()); + // Without the fix, this would fail with + // - Expected: values-x + // - Actual : values-y + CPPUNIT_ASSERT_EQUAL(u"values-x"_ustr, propX->getPropertyValue("Role").get<OUString>()); + + auto propY(sequences[1]->getValues().queryThrow<beans::XPropertySet>()); + CPPUNIT_ASSERT_EQUAL(u"values-y"_ustr, propY->getPropertyValue("Role").get<OUString>()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx index 84b98f0d80..7988ef90df 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx @@ -121,6 +121,11 @@ struct lcl_AllOperator : public lcl_Operator virtual bool setsCategories( bool /*bDataInColumns*/ ) override { + // Do not force creation of categories, when original has no categories + if (auto pDataWrapper = dynamic_cast<const ChartDataWrapper*>(m_xDataToApply.get())) + if (auto xChartModel = pDataWrapper->getChartModel()) + if (auto xDiagram = xChartModel->getFirstChartDiagram()) + return xDiagram->getCategories().is(); return true; } @@ -698,6 +703,11 @@ css::uno::Sequence< OUString > SAL_CALL ChartDataWrapper::getSupportedServiceNam }; } +rtl::Reference<ChartModel> ChartDataWrapper::getChartModel() const +{ + return m_spChart2ModelContact->getDocumentModel(); +} + } // namespace chart /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx index 3c6602d4e0..9a44e53b8b 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx @@ -20,6 +20,8 @@ #include <cppuhelper/implbase.hxx> #include <comphelper/interfacecontainer4.hxx> +#include <rtl/ref.hxx> + #include <com/sun/star/chart2/XAnyDescriptionAccess.hpp> #include <com/sun/star/chart/XDateCategories.hpp> #include <com/sun/star/lang/XComponent.hpp> @@ -28,7 +30,11 @@ #include <memory> -namespace chart::wrapper +namespace chart +{ +class ChartModel; + +namespace wrapper { class Chart2ModelContact; @@ -53,6 +59,8 @@ public: virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + rtl::Reference<ChartModel> getChartModel() const; + private: // ____ XDateCategories ____ virtual css::uno::Sequence< double > SAL_CALL getDateCategories() override; @@ -113,5 +121,6 @@ private: }; } // namespace chart::wrapper +} // namespace chart /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx index 2020365fd1..3d7d2f327d 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx @@ -251,6 +251,8 @@ ThreeD_SceneIllumination_TabPage::ThreeD_SceneIllumination_TabPage(weld::Contain ThreeD_SceneIllumination_TabPage::~ThreeD_SceneIllumination_TabPage() { + // drop page view before the widget it paints to is destroyed + m_xPreview->ClearPageView(); } IMPL_LINK_NOARG(ThreeD_SceneIllumination_TabPage, fillControlsFromModel, void*, void) |