summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2014-09-11 08:56:22 +0200
committerAndras Timar <andras.timar@collabora.com>2014-09-12 09:12:03 +0000
commitf408f7dd6d5221f3cc23e3ef4160e0ed72920fbe (patch)
treeeaee2de8a8092fce38aa644e6a434deae6b18219 /oox
parent9ccb70b397bbc90a39553cfd1ad1c897a01f101f (diff)
bnc#892610: OOXML import: Improve chart number formats.
If sourceLinked is used, do not set "PercentageNumberFormat" even if showPercent is true. The format string should be used for "NumberFormat". c8cc89ff802d86b1f3a69afe1b4835b7df7f70c7 unnecessarily disabled "LinkNumberFormatToSource". Use that for data labels but not for axis. Also, actually make attaching number format supplier work for Calc. Previously, non standard formats were added into wrong supplier, and they were thrown away later because it was attached too late. (See also ChartModel::attachNumberFormatsSupplier) (cherry picked from commit d22a4d945ccf1456fbdb2c39802d956afa583a2a) Conflicts: chart2/qa/extras/chart2import.cxx oox/source/drawingml/chart/chartconverter.cxx Change-Id: Iaf9945abc3d82d0ac63d9f36b8888eb49f39ab57 Reviewed-on: https://gerrit.libreoffice.org/11415 Reviewed-by: Andras Timar <andras.timar@collabora.com> Tested-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/drawingml/chart/axisconverter.cxx2
-rw-r--r--oox/source/drawingml/chart/chartconverter.cxx7
-rw-r--r--oox/source/drawingml/chart/chartspaceconverter.cxx14
-rw-r--r--oox/source/drawingml/chart/objectformatter.cxx24
-rw-r--r--oox/source/drawingml/chart/seriesconverter.cxx2
5 files changed, 23 insertions, 26 deletions
diff --git a/oox/source/drawingml/chart/axisconverter.cxx b/oox/source/drawingml/chart/axisconverter.cxx
index d30595d0f84c..1b86da9d86c9 100644
--- a/oox/source/drawingml/chart/axisconverter.cxx
+++ b/oox/source/drawingml/chart/axisconverter.cxx
@@ -331,7 +331,7 @@ void AxisConverter::convertFromModel(
// number format ------------------------------------------------------
if( (aScaleData.AxisType == cssc2::AxisType::REALNUMBER) || (aScaleData.AxisType == cssc2::AxisType::PERCENT) )
- getFormatter().convertNumberFormat(aAxisProp, mrModel.maNumberFormat, false);
+ getFormatter().convertNumberFormat(aAxisProp, mrModel.maNumberFormat, true);
// position of crossing axis ------------------------------------------
diff --git a/oox/source/drawingml/chart/chartconverter.cxx b/oox/source/drawingml/chart/chartconverter.cxx
index 234d063c310e..f03e7ebfd009 100644
--- a/oox/source/drawingml/chart/chartconverter.cxx
+++ b/oox/source/drawingml/chart/chartconverter.cxx
@@ -20,6 +20,8 @@
#include "oox/drawingml/chart/chartconverter.hxx"
#include <com/sun/star/chart2/XChartDocument.hpp>
+#include <com/sun/star/chart2/data/XDataReceiver.hpp>
+#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
#include "oox/drawingml/chart/chartspaceconverter.hxx"
#include "oox/drawingml/chart/chartspacemodel.hxx"
#include "oox/helper/containerhelper.hxx"
@@ -102,6 +104,11 @@ void ChartConverter::convertFromModel( XmlFilterBase& rFilter,
OSL_ENSURE( rxChartDoc.is(), "ChartConverter::convertFromModel - missing chart document" );
if( rxChartDoc.is() )
{
+ Reference< data::XDataReceiver > xDataReceiver( rxChartDoc, uno::UNO_QUERY_THROW );
+ Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( rFilter.getModel(), uno::UNO_QUERY );
+ if (xNumberFormatsSupplier.is())
+ xDataReceiver->attachNumberFormatsSupplier( xNumberFormatsSupplier );
+
ConverterRoot aConvBase( rFilter, *this, rChartModel, rxChartDoc, rChartSize );
ChartSpaceConverter aSpaceConv( aConvBase, rChartModel );
aSpaceConv.convertFromModel( rxExternalPage, rChartPos );
diff --git a/oox/source/drawingml/chart/chartspaceconverter.cxx b/oox/source/drawingml/chart/chartspaceconverter.cxx
index eeba446470cc..3b7961a46351 100644
--- a/oox/source/drawingml/chart/chartspaceconverter.cxx
+++ b/oox/source/drawingml/chart/chartspaceconverter.cxx
@@ -23,7 +23,6 @@
#include <com/sun/star/chart/XChartDocument.hpp>
#include <com/sun/star/chart2/XChartDocument.hpp>
#include <com/sun/star/chart2/XTitled.hpp>
-#include <com/sun/star/chart2/data/XDataReceiver.hpp>
#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include "oox/core/xmlfilterbase.hxx"
@@ -40,12 +39,10 @@ using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::UNO_QUERY;
using ::com::sun::star::uno::UNO_QUERY_THROW;
using ::com::sun::star::uno::makeAny;
-using ::com::sun::star::util::XNumberFormatsSupplier;
using ::com::sun::star::drawing::XDrawPageSupplier;
using ::com::sun::star::drawing::XShapes;
using ::com::sun::star::chart2::XDiagram;
using ::com::sun::star::chart2::XTitled;
-using ::com::sun::star::chart2::data::XDataReceiver;
using ::com::sun::star::beans::XPropertySet;
namespace oox {
@@ -81,17 +78,6 @@ void ChartSpaceConverter::convertFromModel( const Reference< XShapes >& rxExtern
derived converters may create an external data provider) */
getChartConverter()->createDataProvider( getChartDocument() );
- // attach number formatter of container document to data receiver
- try
- {
- Reference< XDataReceiver > xDataRec( getChartDocument(), UNO_QUERY_THROW );
- Reference< XNumberFormatsSupplier > xNumFmtSupp( getFilter().getModel(), UNO_QUERY_THROW );
- xDataRec->attachNumberFormatsSupplier( xNumFmtSupp );
- }
- catch( Exception& )
- {
- }
-
// formatting of the chart background. The default fill style varies with applications.
PropertySet aBackPropSet( getChartDocument()->getPageBackground() );
diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx
index a9911e752068..0e4b9149f92e 100644
--- a/oox/source/drawingml/chart/objectformatter.cxx
+++ b/oox/source/drawingml/chart/objectformatter.cxx
@@ -1106,19 +1106,21 @@ void ObjectFormatter::convertTextRotation( PropertySet& rPropSet, const ModelRef
}
}
-void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFormat& rNumberFormat, bool bPercentFormat )
+void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFormat& rNumberFormat, bool bAxis, bool bShowPercent )
{
if( mxData->mxNumFmts.is() )
{
- sal_Int32 nPropId = bPercentFormat ? PROP_PercentageNumberFormat : PROP_NumberFormat;
+ const bool bGeneral = rNumberFormat.maFormatCode.equalsIgnoreAsciiCase("general");
+ const bool bPercent = !bAxis && bShowPercent && !rNumberFormat.mbSourceLinked;
+ sal_Int32 nPropId = bPercent ? PROP_PercentageNumberFormat : PROP_NumberFormat;
+ OUString sFormatCode(rNumberFormat.maFormatCode);
+ if (bPercent && bGeneral)
+ sFormatCode = OUString("0%");
try
{
- bool bGeneral = rNumberFormat.maFormatCode.equalsIgnoreAsciiCase("general");
- sal_Int32 nIndex = bGeneral && !bPercentFormat ?
+ sal_Int32 nIndex = bGeneral && !bPercent ?
mxData->mxNumTypes->getStandardIndex( mxData->maFromLocale ) :
- mxData->mxNumFmts->addNewConverted(
- bGeneral ? OUString("0%") : rNumberFormat.maFormatCode,
- mxData->maEnUsLocale, mxData->maFromLocale );
+ mxData->mxNumFmts->addNewConverted( sFormatCode, mxData->maEnUsLocale, mxData->maFromLocale );
if( nIndex >= 0 )
rPropSet.setProperty( nPropId, nIndex );
}
@@ -1128,9 +1130,11 @@ void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFo
append( OUStringToOString( rNumberFormat.maFormatCode, osl_getThreadTextEncoding() ) ).append( '\'' ).getStr() );
}
- // Format code is ignored if "LinkNumberFormatToSource" is set to "true" :-/
- // See AxisHelper::getExplicitNumberFormatKeyForAxis()
- rPropSet.setProperty(PROP_LinkNumberFormatToSource, makeAny(rNumberFormat.maFormatCode.isEmpty()));
+ // Setting "LinkNumberFormatToSource" does not really work, at least not for axis :-/
+ if (!bAxis)
+ rPropSet.setProperty(PROP_LinkNumberFormatToSource, makeAny(rNumberFormat.mbSourceLinked));
+ else
+ rPropSet.setProperty(PROP_LinkNumberFormatToSource, makeAny(rNumberFormat.maFormatCode.isEmpty()));
}
}
diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx
index 2cccd3a0062b..7d19bbeafce9 100644
--- a/oox/source/drawingml/chart/seriesconverter.cxx
+++ b/oox/source/drawingml/chart/seriesconverter.cxx
@@ -134,7 +134,7 @@ void lclConvertLabelFormatting( PropertySet& rPropSet, ObjectFormatter& rFormatt
if( !rDataLabel.mbDeleted )
{
// data label number format (percentage format wins over value format)
- rFormatter.convertNumberFormat( rPropSet, rDataLabel.maNumberFormat, bShowPercent );
+ rFormatter.convertNumberFormat( rPropSet, rDataLabel.maNumberFormat, false, bShowPercent );
// data label text formatting (frame formatting not supported by Chart2)
rFormatter.convertTextFormatting( rPropSet, rDataLabel.mxTextProp, OBJECTTYPE_DATALABEL );