diff options
author | Balazs Varga <balazs.varga991@gmail.com> | 2018-12-05 16:00:09 +0100 |
---|---|---|
committer | Bartosz Kosiorek <gang65@poczta.onet.pl> | 2018-12-07 13:39:22 +0100 |
commit | 40144617ce05d7eff86eeb8a412c6991fe0b819e (patch) | |
tree | 4baebc95d1c2aa050eae8e6b62876f9071110f74 | |
parent | a01ac385ed16fbe4239938c9d31462691707e87b (diff) |
tdf#114163 Chart: fix order of legend names
Respecting the axis direction in case of
normal/stacked/percent stacked Bar chart and
the legend names will be in the right order.
Change-Id: If782393a33e48dae32f919d137e1d1148a85b0b0
Reviewed-on: https://gerrit.libreoffice.org/64632
Tested-by: Jenkins
Reviewed-by: Bartosz Kosiorek <gang65@poczta.onet.pl>
-rw-r--r-- | chart2/source/view/charttypes/VSeriesPlotter.cxx | 21 | ||||
-rw-r--r-- | chart2/source/view/inc/LegendEntryProvider.hxx | 4 | ||||
-rw-r--r-- | chart2/source/view/inc/VSeriesPlotter.hxx | 4 | ||||
-rw-r--r-- | chart2/source/view/main/VLegend.cxx | 2 | ||||
-rwxr-xr-x | sw/qa/extras/layout/data/tdf114163.odt | bin | 0 -> 17376 bytes | |||
-rw-r--r-- | sw/qa/extras/layout/layout.cxx | 20 |
6 files changed, 47 insertions, 4 deletions
diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx index ee76f7351d93..a79fadcc974b 100644 --- a/chart2/source/view/charttypes/VSeriesPlotter.cxx +++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx @@ -40,6 +40,7 @@ #include <DateHelper.hxx> #include <DiagramHelper.hxx> #include <defines.hxx> +#include <ChartModel.hxx> //only for creation: @todo remove if all plotter are uno components and instantiated via servicefactory #include "BarChart.hxx" @@ -66,6 +67,7 @@ #include <basegfx/vector/b2dvector.hxx> #include <com/sun/star/drawing/LineStyle.hpp> #include <com/sun/star/util/XCloneable.hpp> +#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> #include <com/sun/star/style/ParagraphAdjust.hpp> #include <com/sun/star/drawing/XShapes.hpp> @@ -2188,12 +2190,26 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntries( , const Reference< drawing::XShapes >& xTarget , const Reference< lang::XMultiServiceFactory >& xShapeFactory , const Reference< uno::XComponentContext >& xContext + , ChartModel& rModel ) { std::vector< ViewLegendEntry > aResult; if( xTarget.is() ) { + uno::Reference< XCoordinateSystemContainer > xCooSysCnt( rModel.getFirstDiagram(), uno::UNO_QUERY ); + Reference< chart2::XCoordinateSystem > xCooSys(xCooSysCnt->getCoordinateSystems()[0]); + Reference< beans::XPropertySet > xProp( xCooSys, uno::UNO_QUERY ); + bool bSwapXAndY = false; + + if( xProp.is()) try + { + xProp->getPropertyValue( "SwapXAndYAxis" ) >>= bSwapXAndY; + } + catch( const uno::Exception& ) + { + } + //iterate through all series bool bBreak = false; bool bFirstSeries = true; @@ -2234,7 +2250,10 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntries( StackingDirection eStackingDirection( pSeries->getStackingDirection() ); bReverse = ( eStackingDirection == StackingDirection_Y_STACKING ); - //todo: respect direction of axis in future + if( bSwapXAndY ) + { + bReverse = !bReverse; + } } if (bReverse) diff --git a/chart2/source/view/inc/LegendEntryProvider.hxx b/chart2/source/view/inc/LegendEntryProvider.hxx index 3ad8a94b8832..aff7a5d84116 100644 --- a/chart2/source/view/inc/LegendEntryProvider.hxx +++ b/chart2/source/view/inc/LegendEntryProvider.hxx @@ -25,6 +25,7 @@ #include <com/sun/star/uno/Sequence.h> #include <vector> +namespace chart { class ChartModel; } namespace com { namespace sun { namespace star { namespace beans { class XPropertySet; } } } } namespace com { namespace sun { namespace star { namespace chart2 { class XFormattedString2; } } } } namespace com { namespace sun { namespace star { namespace drawing { class XShape; } } } } @@ -75,7 +76,8 @@ public: const css::uno::Reference< css::beans::XPropertySet >& xTextProperties, const css::uno::Reference< css::drawing::XShapes >& xTarget, const css::uno::Reference< css::lang::XMultiServiceFactory >& xShapeFactory, - const css::uno::Reference< css::uno::XComponentContext >& xContext + const css::uno::Reference< css::uno::XComponentContext >& xContext, + ChartModel& rModel ) = 0; protected: diff --git a/chart2/source/view/inc/VSeriesPlotter.hxx b/chart2/source/view/inc/VSeriesPlotter.hxx index e181c7590a71..445411523359 100644 --- a/chart2/source/view/inc/VSeriesPlotter.hxx +++ b/chart2/source/view/inc/VSeriesPlotter.hxx @@ -33,6 +33,7 @@ namespace com { namespace sun { namespace star { namespace chart2 { class XChart namespace chart { class ExplicitCategoriesProvider; } namespace chart { struct ExplicitScaleData; } +namespace chart { class ChartModel; } namespace com { namespace sun { namespace star { namespace util { @@ -197,7 +198,8 @@ public: const css::uno::Reference< css::beans::XPropertySet >& xTextProperties, const css::uno::Reference< css::drawing::XShapes >& xTarget, const css::uno::Reference< css::lang::XMultiServiceFactory >& xShapeFactory, - const css::uno::Reference< css::uno::XComponentContext >& xContext + const css::uno::Reference< css::uno::XComponentContext >& xContext, + ChartModel& rModel ) override; virtual LegendSymbolStyle getLegendSymbolStyle(); diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx index 52a4f78fd8c9..d201a2c72756 100644 --- a/chart2/source/view/main/VLegend.cxx +++ b/chart2/source/view/main/VLegend.cxx @@ -949,7 +949,7 @@ void VLegend::createShapes( { std::vector<ViewLegendEntry> aNewEntries = pLegendEntryProvider->createLegendEntries( aMaxSymbolExtent, eExpansion, xLegendProp, - xLegendContainer, m_xShapeFactory, m_xContext); + xLegendContainer, m_xShapeFactory, m_xContext, mrModel); aViewEntries.insert( aViewEntries.end(), aNewEntries.begin(), aNewEntries.end() ); } } diff --git a/sw/qa/extras/layout/data/tdf114163.odt b/sw/qa/extras/layout/data/tdf114163.odt Binary files differnew file mode 100755 index 000000000000..cf22e1160b2c --- /dev/null +++ b/sw/qa/extras/layout/data/tdf114163.odt diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index 304f14b40398..4ac2f6ce555e 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -40,6 +40,7 @@ public: void testRedlineTables(); void testRedlineCharAttributes(); void testTdf116830(); + void testTdf114163(); void testTdf116925(); void testTdf117028(); void testTdf106390(); @@ -73,6 +74,7 @@ public: CPPUNIT_TEST(testRedlineTables); CPPUNIT_TEST(testRedlineCharAttributes); CPPUNIT_TEST(testTdf116830); + CPPUNIT_TEST(testTdf114163); CPPUNIT_TEST(testTdf116925); CPPUNIT_TEST(testTdf117028); CPPUNIT_TEST(testTdf106390); @@ -2299,6 +2301,24 @@ void SwLayoutWriter::testTdf116830() assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/rect", 1); } +void SwLayoutWriter::testTdf114163() +{ + SwDoc* pDoc = createDoc("tdf114163.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocPtr pXmlDoc = dumper.dumpAndParse(*xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[12]/text", + "Data3"); + // This failed, if the legend first label is not "Data3". +} + void SwLayoutWriter::testTdf116925() { SwDoc* pDoc = createDoc("tdf116925.docx"); |