Kaydet (Commit) 70944a84 authored tarafından Dennis Francis's avatar Dennis Francis

tdf#109858: Override default point label placement setting...

with series label placement setting if available while
importing xlsx chart.

Adds unit test in chart2import.cxx that asserts one of
the point label setting in the bugzilla xlsx document.

Change-Id: I8bc04fd569f94a19633666ffdc51b61ac719e8a9
Reviewed-on: https://gerrit.libreoffice.org/40860Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarDennis Francis <dennis.francis@collabora.co.uk>
üst a2091726
......@@ -94,6 +94,7 @@ public:
void testAxisTitleRotationXLSX();
void testTdf90510(); // Pie chart label placement settings(XLS)
void testTdf109858(); // Pie chart label placement settings(XLSX)
void testInternalDataProvider();
......@@ -150,6 +151,7 @@ public:
CPPUNIT_TEST(testSecondaryAxisTitleDefaultRotationXLSX);
CPPUNIT_TEST(testAxisTitleRotationXLSX);
CPPUNIT_TEST(testTdf90510);
CPPUNIT_TEST(testTdf109858);
CPPUNIT_TEST(testInternalDataProvider);
......@@ -1262,6 +1264,19 @@ void Chart2ImportTest::testTdf90510()
CPPUNIT_ASSERT_EQUAL_MESSAGE( "Data labels should be placed outside", chart::DataLabelPlacement::OUTSIDE, nLabelPlacement );
}
void Chart2ImportTest::testTdf109858()
{
load("/chart2/qa/extras/data/xlsx/", "piechart_outside.xlsx");
uno::Reference< chart::XChartDocument > xChart1Doc( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW );
CPPUNIT_ASSERT_MESSAGE( "failed to load chart", xChart1Doc.is() );
Reference<beans::XPropertySet> xPropSet( xChart1Doc->getDiagram()->getDataPointProperties( 0, 0 ), uno::UNO_QUERY_THROW );
uno::Any aAny = xPropSet->getPropertyValue( "LabelPlacement" );
CPPUNIT_ASSERT( aAny.hasValue() );
sal_Int32 nLabelPlacement = 0;
CPPUNIT_ASSERT( aAny >>= nLabelPlacement );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "Data labels should be placed outside", chart::DataLabelPlacement::OUTSIDE, nLabelPlacement );
}
CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ImportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -47,7 +47,7 @@ public:
/** Converts OOXML data label settings for the passed data point. */
void convertFromModel(
const css::uno::Reference< css::chart2::XDataSeries >& rxDataSeries,
const TypeGroupConverter& rTypeGroup );
const TypeGroupConverter& rTypeGroup, const PropertySet& rSeriesPropSet );
};
......
......@@ -99,7 +99,8 @@ Reference< XLabeledDataSequence > lclCreateLabeledDataSequence(
}
void lclConvertLabelFormatting( PropertySet& rPropSet, ObjectFormatter& rFormatter,
const DataLabelModelBase& rDataLabel, const TypeGroupConverter& rTypeGroup, bool bDataSeriesLabel, bool bMSO2007Doc )
const DataLabelModelBase& rDataLabel, const TypeGroupConverter& rTypeGroup,
bool bDataSeriesLabel, bool bMSO2007Doc, const PropertySet* pSeriesPropSet )
{
const TypeGroupInfo& rTypeInfo = rTypeGroup.getTypeInfo();
......@@ -170,6 +171,12 @@ void lclConvertLabelFormatting( PropertySet& rPropSet, ObjectFormatter& rFormatt
case XML_r: nPlacement = csscd::RIGHT; break;
case XML_bestFit: nPlacement = csscd::AVOID_OVERLAP; break;
}
sal_Int32 nGlobalPlacement = 0;
if ( !bDataSeriesLabel && nPlacement == rTypeInfo.mnDefLabelPos && pSeriesPropSet &&
pSeriesPropSet->getProperty( nGlobalPlacement, PROP_LabelPlacement ) )
nPlacement = nGlobalPlacement;
rPropSet.setProperty( PROP_LabelPlacement, nPlacement );
}
}
......@@ -204,7 +211,8 @@ DataLabelConverter::~DataLabelConverter()
{
}
void DataLabelConverter::convertFromModel( const Reference< XDataSeries >& rxDataSeries, const TypeGroupConverter& rTypeGroup )
void DataLabelConverter::convertFromModel( const Reference< XDataSeries >& rxDataSeries, const TypeGroupConverter& rTypeGroup,
const PropertySet& rSeriesPropSet )
{
if (!rxDataSeries.is())
return;
......@@ -213,7 +221,7 @@ void DataLabelConverter::convertFromModel( const Reference< XDataSeries >& rxDat
{
bool bMSO2007Doc = getFilter().isMSO2007Document();
PropertySet aPropSet( rxDataSeries->getDataPointByIndex( mrModel.mnIndex ) );
lclConvertLabelFormatting( aPropSet, getFormatter(), mrModel, rTypeGroup, false, bMSO2007Doc );
lclConvertLabelFormatting( aPropSet, getFormatter(), mrModel, rTypeGroup, false, bMSO2007Doc, &rSeriesPropSet );
const TypeGroupInfo& rTypeInfo = rTypeGroup.getTypeInfo();
bool bIsPie = rTypeInfo.meTypeCategory == TYPECATEGORY_PIE;
if( mrModel.mxLayout && !mrModel.mxLayout->mbAutoLayout && !bIsPie )
......@@ -256,11 +264,11 @@ DataLabelsConverter::~DataLabelsConverter()
void DataLabelsConverter::convertFromModel( const Reference< XDataSeries >& rxDataSeries, const TypeGroupConverter& rTypeGroup )
{
PropertySet aPropSet( rxDataSeries );
if( !mrModel.mbDeleted )
{
bool bMSO2007Doc = getFilter().isMSO2007Document();
PropertySet aPropSet( rxDataSeries );
lclConvertLabelFormatting( aPropSet, getFormatter(), mrModel, rTypeGroup, true, bMSO2007Doc );
lclConvertLabelFormatting( aPropSet, getFormatter(), mrModel, rTypeGroup, true, bMSO2007Doc, nullptr );
if (mrModel.mxShapeProp)
// Import baseline border properties for these data labels.
......@@ -274,7 +282,7 @@ void DataLabelsConverter::convertFromModel( const Reference< XDataSeries >& rxDa
(*aIt)->maNumberFormat = mrModel.maNumberFormat;
DataLabelConverter aLabelConv( *this, **aIt );
aLabelConv.convertFromModel( rxDataSeries, rTypeGroup );
aLabelConv.convertFromModel( rxDataSeries, rTypeGroup, aPropSet );
}
}
......
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