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>
(cherry picked from commit 40144617ce05d7eff86eeb8a412c6991fe0b819e)
Reviewed-on: https://gerrit.libreoffice.org/64835
Reviewed-by: Balazs Varga <balazs.varga991@gmail.com>
diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx
index 27f5798..7a45aa8 100644
--- a/chart2/source/view/charttypes/VSeriesPlotter.cxx
+++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx
@@ -43,6 +43,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"
@@ -69,6 +70,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/container/XEnumerationAccess.hpp>
#include <com/sun/star/container/XEnumeration.hpp>
@@ -2200,12 +2202,26 @@
, 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;
@@ -2241,7 +2257,10 @@
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 3ad8a94..aff7a5d 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 @@
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 e181c75..4454115 100644
--- a/chart2/source/view/inc/VSeriesPlotter.hxx
+++ b/chart2/source/view/inc/VSeriesPlotter.hxx
@@ -33,6 +33,7 @@
namespace chart { class ExplicitCategoriesProvider; }
namespace chart { struct ExplicitScaleData; }
namespace chart { class ChartModel; }
namespace com { namespace sun { namespace star {
namespace util {
@@ -197,7 +198,8 @@
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 0e6e32b..22c32d5 100644
--- a/chart2/source/view/main/VLegend.cxx
+++ b/chart2/source/view/main/VLegend.cxx
@@ -953,7 +953,7 @@
{
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
new file mode 100755
index 0000000..cf22e11
--- /dev/null
+++ b/sw/qa/extras/layout/data/tdf114163.odt
Binary files differ
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index 996423e..4d65fc1 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -40,6 +40,7 @@
void testRedlineTables();
void testRedlineCharAttributes();
void testTdf116830();
void testTdf114163();
void testTdf116925();
void testTdf117028();
void testTdf106390();
@@ -74,6 +75,7 @@
CPPUNIT_TEST(testRedlineTables);
CPPUNIT_TEST(testRedlineCharAttributes);
CPPUNIT_TEST(testTdf116830);
CPPUNIT_TEST(testTdf114163);
CPPUNIT_TEST(testTdf116925);
CPPUNIT_TEST(testTdf117028);
CPPUNIT_TEST(testTdf106390);
@@ -2301,6 +2303,24 @@
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");