Kaydet (Commit) 40144617 authored tarafından Balazs Varga's avatar Balazs Varga Kaydeden (comit) Bartosz Kosiorek

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: 's avatarBartosz Kosiorek <gang65@poczta.onet.pl>
üst a01ac385
......@@ -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)
......
......@@ -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:
......
......@@ -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();
......
......@@ -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() );
}
}
......
......@@ -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");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment