[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-4.2' - 3 commits - chart2/inc chart2/Library_chartcontroller.mk chart2/source include/oox include/xmloff oox/source xmloff/source
Kohei Yoshida
kohei.yoshida at collabora.com
Sat Jul 26 15:35:22 PDT 2014
chart2/Library_chartcontroller.mk | 1
chart2/inc/unonames.hxx | 33
chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx | 37
chart2/source/controller/dialogs/dlg_ObjectProperties.cxx | 1
chart2/source/controller/inc/TextLabelItemConverter.hxx | 74 +
chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx | 16
chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx | 617 ++++++++++
chart2/source/controller/main/ChartController_Properties.cxx | 32
chart2/source/model/main/DataPointProperties.cxx | 66 -
chart2/source/model/main/DataPointProperties.hxx | 14
chart2/source/view/inc/PropertyMapper.hxx | 1
chart2/source/view/main/PropertyMapper.cxx | 21
include/oox/export/chartexport.hxx | 4
include/oox/export/utils.hxx | 1
include/xmloff/xmltoken.hxx | 4
oox/source/drawingml/chart/seriesconverter.cxx | 31
oox/source/export/chartexport.cxx | 198 +--
oox/source/token/properties.txt | 3
xmloff/source/chart/PropertyMap.hxx | 8
xmloff/source/chart/PropertyMaps.cxx | 21
xmloff/source/core/xmltoken.cxx | 4
21 files changed, 1051 insertions(+), 136 deletions(-)
New commits:
commit aaa18a45c6f5e4f2b5fb1ee2deee510ea3353053
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Sat Jul 26 14:44:38 2014 -0400
bnc#885825: Handle ODF import and export of data label border properties.
(cherry picked from commit 6c2c974dd3f0b21a23bc3bc5560487d28bbe0fad)
Conflicts:
include/xmloff/xmltoken.hxx
xmloff/source/chart/PropertyMap.hxx
xmloff/source/core/xmltoken.cxx
Change-Id: Ic8c7bc873768008537cd52a3fd4b11031b403139
diff --git a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
index 7bad448..5aec6bf 100644
--- a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
@@ -80,7 +80,11 @@ enum
PROP_SERIES_DATAPOINT_LABEL_PLACEMENT,
//other series properties
PROP_SERIES_ATTACHED_AXIS,
- PROP_SERIES_DATAPOINT_TEXT_ROTATION
+ PROP_SERIES_DATAPOINT_TEXT_ROTATION,
+ PROP_SERIES_DATAPOINT_LABEL_BORDER_STYLE,
+ PROP_SERIES_DATAPOINT_LABEL_BORDER_WIDTH,
+ PROP_SERIES_DATAPOINT_LABEL_BORDER_COLOR,
+ PROP_SERIES_DATAPOINT_LABEL_BORDER_TRANS
};
void lcl_AddPropertiesToVector_PointProperties(
@@ -142,6 +146,35 @@ void lcl_AddPropertiesToVector_PointProperties(
::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
beans::PropertyAttribute::BOUND
| beans::PropertyAttribute::MAYBEDEFAULT ));
+
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_STYLE,
+ PROP_SERIES_DATAPOINT_LABEL_BORDER_STYLE,
+ cppu::UnoType<drawing::LineStyle>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEDEFAULT ));
+
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_WIDTH,
+ PROP_SERIES_DATAPOINT_LABEL_BORDER_WIDTH,
+ cppu::UnoType<sal_Int32>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEDEFAULT ));
+
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_COLOR,
+ PROP_SERIES_DATAPOINT_LABEL_BORDER_COLOR,
+ cppu::UnoType<sal_Int32>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEVOID // "maybe auto"
+ | beans::PropertyAttribute::MAYBEDEFAULT ));
+
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_TRANS,
+ PROP_SERIES_DATAPOINT_LABEL_BORDER_TRANS,
+ cppu::UnoType<sal_Int16>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEDEFAULT ));
}
void lcl_AddPropertiesToVector_SeriesOnly(
diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx
index 09bc908..6dd7d1c 100644
--- a/include/xmloff/xmltoken.hxx
+++ b/include/xmloff/xmltoken.hxx
@@ -1063,6 +1063,10 @@ namespace xmloff { namespace token {
XML_LABEL_CELL_RANGE_ADDRESS,
XML_LABEL_RANGE,
XML_LABEL_RANGES,
+ XML_LABEL_STROKE,
+ XML_LABEL_STROKE_COLOR,
+ XML_LABEL_STROKE_OPACITY,
+ XML_LABEL_STROKE_WIDTH,
XML_LAMBDA,
XML_LANDSCAPE,
XML_LANGUAGE,
diff --git a/xmloff/source/chart/PropertyMap.hxx b/xmloff/source/chart/PropertyMap.hxx
index 9f5d509..f4e5a9f 100644
--- a/xmloff/source/chart/PropertyMap.hxx
+++ b/xmloff/source/chart/PropertyMap.hxx
@@ -53,6 +53,8 @@
#define XML_SCH_TYPE_AXIS_POSITION_VALUE ( XML_SCH_TYPES_START + 14 )
#define XML_SCH_TYPE_AXIS_LABEL_POSITION ( XML_SCH_TYPES_START + 15 )
#define XML_SCH_TYPE_TICK_MARK_POSITION ( XML_SCH_TYPES_START + 16 )
+#define XML_SCH_TYPE_LABEL_BORDER_STYLE ( XML_SCH_TYPES_START + 17 )
+#define XML_SCH_TYPE_LABEL_BORDER_OPACITY ( XML_SCH_TYPES_START + 18 )
// context ids
#define XML_SCH_CONTEXT_USER_SYMBOL ( XML_SCH_CTF_START + 0 )
@@ -134,6 +136,12 @@ const XMLPropertyMapEntry aXMLChartPropMap[] =
MAP_ENTRY_ODF12( "AutomaticSize", CHART, XML_AUTOMATIC_SIZE, XML_TYPE_BOOL ),
MAP_ENTRY_ODF12( "StartingAngle", CHART, XML_ANGLE_OFFSET, XML_TYPE_NUMBER ),
MAP_ENTRY_ODF12( "MissingValueTreatment", CHART, XML_TREAT_EMPTY_CELLS, XML_SCH_TYPE_MISSING_VALUE_TREATMENT ),
+
+ MAP_ENTRY_ODF_EXT( "LabelBorderColor", LO_EXT, XML_LABEL_STROKE_COLOR, XML_TYPE_COLOR ),
+ MAP_ENTRY_ODF_EXT( "LabelBorderStyle", LO_EXT, XML_LABEL_STROKE, XML_SCH_TYPE_LABEL_BORDER_STYLE ),
+ MAP_ENTRY_ODF_EXT( "LabelBorderTransparency", LO_EXT, XML_LABEL_STROKE_OPACITY, XML_SCH_TYPE_LABEL_BORDER_OPACITY ),
+ MAP_ENTRY_ODF_EXT( "LabelBorderWidth", LO_EXT, XML_LABEL_STROKE_WIDTH, XML_TYPE_MEASURE ),
+
MAP_ENTRY( "ScaleText", CHART, XML_SCALE_TEXT, XML_TYPE_BOOL ),
// spline settings
diff --git a/xmloff/source/chart/PropertyMaps.cxx b/xmloff/source/chart/PropertyMaps.cxx
index f92bbbc..b7113d2 100644
--- a/xmloff/source/chart/PropertyMaps.cxx
+++ b/xmloff/source/chart/PropertyMaps.cxx
@@ -34,6 +34,7 @@
#include "XMLTextOrientationHdl.hxx"
#include "XMLSymbolTypePropertyHdl.hxx"
#include "XMLAxisPositionPropertyHdl.hxx"
+#include "../draw/propimp0.hxx"
#include <xmloff/EnumPropertyHdl.hxx>
#include <xmloff/XMLConstantsPropertyHandler.hxx>
@@ -67,6 +68,18 @@
using namespace com::sun::star;
using namespace ::xmloff::token;
+namespace {
+
+SvXMLEnumMapEntry const aLineStyleMap[] =
+{
+ { XML_NONE, drawing::LineStyle_NONE },
+ { XML_SOLID, drawing::LineStyle_SOLID },
+ { XML_DASH, drawing::LineStyle_DASH },
+ { XML_TOKEN_INVALID, 0 }
+};
+
+}
+
// the following class implementations are in this file:
//
// * XMLChartPropHdlFactory
@@ -155,6 +168,14 @@ const XMLPropertyHandler* XMLChartPropHdlFactory::GetPropertyHandler( sal_Int32
pHdl = new XMLEnumPropertyHdl( aXMLChartMissingValueTreatmentEnumMap,
::getCppuType((const sal_Int32*)0) );
break;
+ case XML_SCH_TYPE_LABEL_BORDER_STYLE:
+ pHdl = new XMLEnumPropertyHdl(aLineStyleMap, cppu::UnoType<drawing::LineStyle>::get());
+ break;
+ case XML_SCH_TYPE_LABEL_BORDER_OPACITY:
+ pHdl = new XMLOpacityPropertyHdl(NULL);
+ break;
+ default:
+ ;
}
if( pHdl )
PutHdlCache( nType, pHdl );
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index d9d646e..555f24b 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -1068,6 +1068,10 @@ namespace xmloff { namespace token {
TOKEN( "label-cell-range-address", XML_LABEL_CELL_RANGE_ADDRESS ),
TOKEN( "label-range", XML_LABEL_RANGE ),
TOKEN( "label-ranges", XML_LABEL_RANGES ),
+ TOKEN( "label-stroke", XML_LABEL_STROKE ),
+ TOKEN( "label-stroke-color", XML_LABEL_STROKE_COLOR ),
+ TOKEN( "label-stroke-opacity", XML_LABEL_STROKE_OPACITY ),
+ TOKEN( "label-stroke-width", XML_LABEL_STROKE_WIDTH ),
TOKEN( "lambda", XML_LAMBDA ),
TOKEN( "landscape", XML_LANDSCAPE ),
TOKEN( "language", XML_LANGUAGE ),
commit 2d5f5b00dc0a7777fab2be89a4b2b12fed95efde
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Jul 23 15:49:11 2014 -0400
bnc#885825: OOXML import and export of data label borders.
(cherry picked from commit 48f31a924280a418046f0c816f8a7d20b672dac6)
Conflicts:
include/oox/export/chartexport.hxx
oox/source/drawingml/chart/seriesconverter.cxx
oox/source/export/chartexport.cxx
Change-Id: I0fd808145aaeb0aa36d3ec30d7b977890642dcff
diff --git a/include/oox/export/chartexport.hxx b/include/oox/export/chartexport.hxx
index 237b410..524c61d 100644
--- a/include/oox/export/chartexport.hxx
+++ b/include/oox/export/chartexport.hxx
@@ -147,9 +147,7 @@ private:
void exportDataPoints(
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xSeriesProperties,
sal_Int32 nSeriesLength );
- void exportDataLabels(
- const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xSeriesProperties,
- sal_Int32 nSeriesLength );
+ void exportDataLabels( const css::uno::Reference<css::chart2::XDataSeries>& xSeries, sal_Int32 nSeriesLength );
void exportGrouping( sal_Bool isBar = sal_False );
void exportTrendlines( ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDataSeries > xSeries );
void exportMarker();
diff --git a/include/oox/export/utils.hxx b/include/oox/export/utils.hxx
index 657ee4d..f189daf 100644
--- a/include/oox/export/utils.hxx
+++ b/include/oox/export/utils.hxx
@@ -23,6 +23,7 @@
#define I32S(x) OString::number( (sal_Int32) x ).getStr()
#define I64S(x) OString::number( (sal_Int64) x ).getStr()
#define IS(x) OString::number( x ).getStr()
+#define BS(x) (x ? "1":"0")
#define USS(x) OUStringToOString( x, RTL_TEXTENCODING_UTF8 ).getStr()
#ifndef DBG
diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx
index dbd3201..910a800 100644
--- a/oox/source/drawingml/chart/seriesconverter.cxx
+++ b/oox/source/drawingml/chart/seriesconverter.cxx
@@ -27,6 +27,7 @@
#include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
#include <com/sun/star/chart2/data/XDataSink.hpp>
#include <com/sun/star/chart2/data/LabeledDataSequence.hpp>
+#include <com/sun/star/drawing/LineStyle.hpp>
#include <basegfx/numeric/ftools.hxx>
#include "oox/drawingml/chart/datasourceconverter.hxx"
#include "oox/drawingml/chart/seriesmodel.hxx"
@@ -34,13 +35,13 @@
#include "oox/drawingml/chart/typegroupconverter.hxx"
#include "oox/drawingml/chart/typegroupmodel.hxx"
#include "oox/helper/containerhelper.hxx"
+#include <oox/drawingml/lineproperties.hxx>
namespace oox {
namespace drawingml {
namespace chart {
-// ============================================================================
-
+using namespace com::sun::star;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::chart2;
using namespace ::com::sun::star::chart2::data;
@@ -166,6 +167,20 @@ void lclConvertLabelFormatting( PropertySet& rPropSet, ObjectFormatter& rFormatt
}
}
+void importBorderProperties( PropertySet& rPropSet, Shape& rShape, const GraphicHelper& rGraphicHelper )
+{
+ LineProperties& rLP = rShape.getLineProperties();
+ if (rLP.moLineWidth.has())
+ {
+ sal_Int32 nWidth = convertEmuToHmm(rLP.moLineWidth.get());
+ rPropSet.setProperty(PROP_LabelBorderWidth, uno::makeAny(nWidth));
+ rPropSet.setProperty(PROP_LabelBorderStyle, uno::makeAny(drawing::LineStyle_SOLID));
+ }
+ const Color& aColor = rLP.maLineFill.maFillColor;
+ sal_Int32 nColor = aColor.getColor(rGraphicHelper);
+ rPropSet.setProperty(PROP_LabelBorderColor, uno::makeAny(nColor));
+}
+
} // namespace
// ============================================================================
@@ -181,7 +196,10 @@ DataLabelConverter::~DataLabelConverter()
void DataLabelConverter::convertFromModel( const Reference< XDataSeries >& rxDataSeries, const TypeGroupConverter& rTypeGroup )
{
- if( rxDataSeries.is() ) try
+ if (!rxDataSeries.is())
+ return;
+
+ try
{
PropertySet aPropSet( rxDataSeries->getDataPointByIndex( mrModel.mnIndex ) );
lclConvertLabelFormatting( aPropSet, getFormatter(), mrModel, rTypeGroup, false );
@@ -206,6 +224,9 @@ void DataLabelConverter::convertFromModel( const Reference< XDataSeries >& rxDat
aPropSet.setProperty( PROP_LabelPlacement,
aPositionsLookupTable[ simplifiedX+1 + 3*(simplifiedY+1) ] );
}
+
+ if (mrModel.mxShapeProp)
+ importBorderProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper());
}
catch( Exception& )
{
@@ -229,6 +250,10 @@ void DataLabelsConverter::convertFromModel( const Reference< XDataSeries >& rxDa
{
PropertySet aPropSet( rxDataSeries );
lclConvertLabelFormatting( aPropSet, getFormatter(), mrModel, rTypeGroup, true );
+
+ if (mrModel.mxShapeProp)
+ // Import baseline border properties for these data labels.
+ importBorderProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper());
}
// data point label settings
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index b13867e..6be487f 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -1540,8 +1540,8 @@ void ChartExport::exportSeries( Reference< chart2::XChartType > xChartType, sal_
// export data labels
// Excel does not like our current data label export
// for scatter charts
- if( eChartType != chart::TYPEID_SCATTER && eChartType != chart::TYPEID_BAR )
- exportDataLabels( uno::Reference< beans::XPropertySet >( aSeriesSeq[nSeriesIdx], uno::UNO_QUERY ), nSeriesLength );
+ if( eChartType != chart::TYPEID_SCATTER )
+ exportDataLabels(aSeriesSeq[nSeriesIdx], nSeriesLength);
exportTrendlines( aSeriesSeq[nSeriesIdx] );
@@ -2264,127 +2264,103 @@ void ChartExport::_exportAxis(
pFS->endElement( FSNS( XML_c, nAxisType ) );
}
-void ChartExport::exportDataLabels(
- const uno::Reference< beans::XPropertySet > & xSeriesProperties,
- sal_Int32 nSeriesLength )
+namespace {
+
+const char* toOOXMLPlacement( sal_Int32 nPlacement )
{
- // TODO: export field separators, missing flag vs. showing series name or not
- uno::Reference< chart2::XDataSeries > xSeries( xSeriesProperties, uno::UNO_QUERY );
+ switch (nPlacement)
+ {
+ case css::chart::DataLabelPlacement::OUTSIDE: return "outEnd";
+ case css::chart::DataLabelPlacement::INSIDE: return "inEnd";
+ case css::chart::DataLabelPlacement::CENTER: return "ctr";
+ case css::chart::DataLabelPlacement::NEAR_ORIGIN: return "inBase";
+ case css::chart::DataLabelPlacement::TOP: return "t";
+ case css::chart::DataLabelPlacement::BOTTOM: return "b";
+ case css::chart::DataLabelPlacement::LEFT: return "l";
+ case css::chart::DataLabelPlacement::RIGHT: return "r";
+ case css::chart::DataLabelPlacement::AVOID_OVERLAP: return "bestFit";
+ default:
+ ;
+ }
- if( xSeriesProperties.is())
+ return "outEnd";
+}
+
+void writeLabelProperties( FSHelperPtr pFS, const uno::Reference<beans::XPropertySet>& xPropSet )
+{
+ if (!xPropSet.is())
+ return;
+
+ chart2::DataPointLabel aLabel;
+ sal_Int32 nLabelPlacement = css::chart::DataLabelPlacement::OUTSIDE;
+ sal_Int32 nLabelBorderWidth = 0;
+ sal_Int32 nLabelBorderColor = 0x00FFFFFF;
+
+ xPropSet->getPropertyValue("Label") >>= aLabel;
+ xPropSet->getPropertyValue("LabelPlacement") >>= nLabelPlacement;
+ xPropSet->getPropertyValue("LabelBorderWidth") >>= nLabelBorderWidth;
+ xPropSet->getPropertyValue("LabelBorderColor") >>= nLabelBorderColor;
+
+ if (nLabelBorderWidth > 0)
{
- FSHelperPtr pFS = GetFS();
- pFS->startElement( FSNS( XML_c, XML_dLbls ),
- FSEND );
+ pFS->startElement(FSNS(XML_c, XML_spPr), FSEND);
+ pFS->startElement(FSNS(XML_a, XML_ln), XML_w, IS(convertHmmToEmu(nLabelBorderWidth)), FSEND);
+ pFS->startElement(FSNS(XML_a, XML_solidFill), FSEND);
- bool showLegendSymbol = false;
- bool showNumber = false;
- bool showCategoryName = false;
- bool showNumberInPercent = false;
+ OString aStr = OString::number(nLabelBorderColor, 16).toAsciiUpperCase();
+ pFS->singleElement(FSNS(XML_a, XML_srgbClr), XML_val, aStr.getStr(), FSEND);
- sal_Int32 nElem;
- for( nElem = 0; nElem < nSeriesLength; ++nElem)
- {
- uno::Reference< beans::XPropertySet > xPropSet;
+ pFS->endElement(FSNS(XML_a, XML_solidFill));
+ pFS->endElement(FSNS(XML_a, XML_ln));
+ pFS->endElement(FSNS(XML_c, XML_spPr));
+ }
- try
- {
- xPropSet = SchXMLSeriesHelper::createOldAPIDataPointPropertySet(
- xSeries, nElem, getModel() );
- }
- catch( const uno::Exception & rEx )
- {
- SAL_WARN("oox", "Exception caught during Export of data label: " << rEx.Message );
- }
+ pFS->singleElement(FSNS(XML_c, XML_dLblPos), XML_val, toOOXMLPlacement(nLabelPlacement), FSEND);
+ pFS->singleElement(FSNS(XML_c, XML_showLegendKey), XML_val, BS(aLabel.ShowLegendSymbol), FSEND);
+ pFS->singleElement(FSNS(XML_c, XML_showVal), XML_val, BS(aLabel.ShowNumber), FSEND);
+ pFS->singleElement(FSNS(XML_c, XML_showCatName), XML_val, BS(aLabel.ShowCategoryName), FSEND);
+ pFS->singleElement(FSNS(XML_c, XML_showSerName), XML_val, BS(false), FSEND);
+ pFS->singleElement(FSNS(XML_c, XML_showPercent), XML_val, BS(aLabel.ShowNumberInPercent), FSEND);
+}
- if( xPropSet.is() )
- {
- namespace cssc2 = ::com::sun::star::chart2;
- cssc2::DataPointLabel aLabel;
- if (GetProperty( xPropSet, "Label"))
- {
- mAny >>= aLabel;
-
- namespace csscd = ::com::sun::star::chart::DataLabelPlacement;
- sal_Int32 nPlacement(csscd::AVOID_OVERLAP);
- const char *aPlacement = NULL;
- OUString aSep;
-
- if (GetProperty( xPropSet, "LabelPlacement"))
- mAny >>= nPlacement;
-
- switch( nPlacement )
- {
- case csscd::OUTSIDE: aPlacement = "outEnd"; break;
- case csscd::INSIDE: aPlacement = "inEnd"; break;
- case csscd::CENTER: aPlacement = "ctr"; break;
- case csscd::NEAR_ORIGIN: aPlacement = "inBase"; break;
- case csscd::TOP: aPlacement = "t"; break;
- case csscd::BOTTOM: aPlacement = "b"; break;
- case csscd::LEFT: aPlacement = "l"; break;
- case csscd::RIGHT: aPlacement = "r"; break;
- case csscd::AVOID_OVERLAP: aPlacement = "bestFit"; break;
- }
-
- if(aLabel.ShowLegendSymbol || aLabel.ShowNumber || aLabel.ShowCategoryName || aLabel.ShowNumberInPercent)
- {
- pFS->startElement( FSNS( XML_c, XML_dLbl ), FSEND);
- pFS->singleElement( FSNS( XML_c, XML_idx), XML_val, I32S(nElem), FSEND);
- pFS->singleElement( FSNS( XML_c, XML_dLblPos), XML_val, aPlacement, FSEND);
-
- pFS->singleElement( FSNS( XML_c, XML_showLegendKey), XML_val, aLabel.ShowLegendSymbol ? "1": "0", FSEND);
- if (aLabel.ShowLegendSymbol)
- {
- showLegendSymbol = true;
- }
-
- pFS->singleElement( FSNS( XML_c, XML_showVal), XML_val,aLabel.ShowNumber ? "1": "0", FSEND);
- if(aLabel.ShowNumber)
- {
- showNumber = true;
- }
-
- pFS->singleElement( FSNS( XML_c, XML_showCatName), XML_val, aLabel.ShowCategoryName ? "1": "0", FSEND);
- if(aLabel.ShowCategoryName)
- {
- showCategoryName = true;
- }
-
- // MSO somehow assumes series name to be on (=displayed) by default.
- // Let's put false here and switch it off then, since we have no UI means
- // in LibO to toggle it on anyway
- pFS->singleElement( FSNS( XML_c, XML_showSerName), XML_val, "0", FSEND);
-
- pFS->singleElement( FSNS( XML_c, XML_showPercent), XML_val,aLabel.ShowNumberInPercent ? "1": "0", FSEND);
- if(aLabel.ShowNumberInPercent)
- {
- showNumberInPercent = true;
- }
-
- if (GetProperty( xPropSet, "LabelSeparator"))
- {
- mAny >>= aSep;
- pFS->startElement( FSNS( XML_c, XML_separator), FSEND);
- pFS->writeEscaped(aSep);
- pFS->endElement( FSNS( XML_c, XML_separator) );
- }
- pFS->endElement( FSNS( XML_c, XML_dLbl ));
- }
-
- }
- }
- }
+}
+
+void ChartExport::exportDataLabels( const uno::Reference<chart2::XDataSeries> & xSeries,
+ sal_Int32 nSeriesLength )
+{
+ if (!xSeries.is() || nSeriesLength <= 0)
+ return;
+
+ uno::Reference<beans::XPropertySet> xPropSet(xSeries, uno::UNO_QUERY);
+ if (!xPropSet.is())
+ return;
- pFS->singleElement( FSNS( XML_c, XML_showLegendKey), XML_val, showLegendSymbol ? "1": "0", FSEND);
- pFS->singleElement( FSNS( XML_c, XML_showVal), XML_val, showNumber ? "1": "0", FSEND);
- pFS->singleElement( FSNS( XML_c, XML_showCatName), XML_val, showCategoryName ? "1": "0", FSEND);
+ FSHelperPtr pFS = GetFS();
+ pFS->startElement(FSNS(XML_c, XML_dLbls), FSEND);
- pFS->singleElement( FSNS( XML_c, XML_showSerName), XML_val, "0", FSEND);
+ uno::Sequence<sal_Int32> aAttrLabelIndices;
+ xPropSet->getPropertyValue("AttributedDataPoints") >>= aAttrLabelIndices;
- pFS->singleElement( FSNS( XML_c, XML_showPercent), XML_val, showNumberInPercent ? "1": "0", FSEND);
+ const sal_Int32* p = aAttrLabelIndices.getConstArray();
+ const sal_Int32* pEnd = p + aAttrLabelIndices.getLength();
+ for (; p != pEnd; ++p)
+ {
+ sal_Int32 nIdx = *p;
+ uno::Reference<beans::XPropertySet> xLabelPropSet = xSeries->getDataPointByIndex(nIdx);
+ if (!xLabelPropSet.is())
+ continue;
- pFS->endElement( FSNS( XML_c, XML_dLbls ) );
+ // Individual label property thhat overwrites the baseline.
+ pFS->startElement(FSNS(XML_c, XML_dLbl), FSEND);
+ pFS->singleElement(FSNS(XML_c, XML_idx), XML_val, I32S(nIdx), FSEND);
+ writeLabelProperties(pFS, xLabelPropSet);
+ pFS->endElement(FSNS(XML_c, XML_dLbl));
}
+
+ // Baseline label properties for all labels.
+ writeLabelProperties(pFS, xPropSet);
+
+ pFS->endElement(FSNS(XML_c, XML_dLbls));
}
void ChartExport::exportDataPoints(
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index 6d384b8..50571cb 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -266,6 +266,9 @@ IterationCount
IterationEpsilon
Japanese
Label
+LabelBorderColor
+LabelBorderStyle
+LabelBorderWidth
LabelPlacement
LabelPosition
LabelSeparator
commit 4df875f9a68b699e3714f83915574af22b4ccd0e
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Jul 23 15:49:11 2014 -0400
bnc#885825: Support borders around data labels.
(cherry picked from commit f1531cdaaebe706d909dc6ddde439ccb5f4ad36d)
Conflicts:
chart2/inc/unonames.hxx
chart2/source/model/main/DataPointProperties.cxx
Change-Id: Ib141413e523cbf73746876f727e9f80dda9f5f7c
diff --git a/chart2/Library_chartcontroller.mk b/chart2/Library_chartcontroller.mk
index a4e6067..d386077 100644
--- a/chart2/Library_chartcontroller.mk
+++ b/chart2/Library_chartcontroller.mk
@@ -155,6 +155,7 @@ $(eval $(call gb_Library_add_exception_objects,chartcontroller,\
chart2/source/controller/itemsetwrapper/RegressionEquationItemConverter \
chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter \
chart2/source/controller/itemsetwrapper/StatisticsItemConverter \
+ chart2/source/controller/itemsetwrapper/TextLabelItemConverter \
chart2/source/controller/itemsetwrapper/TitleItemConverter \
chart2/source/controller/main/ChartController \
chart2/source/controller/main/ChartController_EditData \
diff --git a/chart2/inc/unonames.hxx b/chart2/inc/unonames.hxx
new file mode 100644
index 0000000..04cfba2
--- /dev/null
+++ b/chart2/inc/unonames.hxx
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_CHART2_INC_UNONAMES_HXX
+#define INCLUDED_CHART2_INC_UNONAMES_HXX
+
+#define CHART_UNONAME_SORT_BY_XVALUES "SortByXValues"
+#define CHART_UNONAME_ROUNDED_EDGE "RoundedEdge"
+#define CHART_UNONAME_SPLINE_TYPE "SplineType"
+#define CHART_UNONAME_SPLINE_ORDER "SplineOrder"
+#define CHART_UNONAME_SPLINE_RESOLUTION "SplineResolution"
+#define CHART_UNONAME_CURVE_STYLE "CurveStyle"
+#define CHART_UNONAME_CURVE_RESOLUTION "CurveResolution"
+#define CHART_UNONAME_NUMFMT "NumberFormat"
+#define CHART_UNONAME_LINK_TO_SRC_NUMFMT "LinkNumberFormatToSource"
+#define CHART_UNONAME_LABEL "Label"
+#define CHART_UNONAME_LABEL_SEP "LabelSeparator"
+#define CHART_UNONAME_LABEL_BORDER_STYLE "LabelBorderStyle"
+#define CHART_UNONAME_LABEL_BORDER_WIDTH "LabelBorderWidth"
+#define CHART_UNONAME_LABEL_BORDER_COLOR "LabelBorderColor"
+#define CHART_UNONAME_LABEL_BORDER_DASH "LabelBorderDash"
+#define CHART_UNONAME_LABEL_BORDER_DASHNAME "LabelBorderDashName"
+#define CHART_UNONAME_LABEL_BORDER_TRANS "LabelBorderTransparency"
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
index a507782..7bad448 100644
--- a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
@@ -39,6 +39,8 @@
#include "WrappedScaleTextProperties.hxx"
#include "WrappedNumberFormatProperty.hxx"
#include "WrappedTextRotationProperty.hxx"
+#include <unonames.hxx>
+
#include <rtl/ustrbuf.hxx>
#include <rtl/math.hxx>
diff --git a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
index 6e1974b..897e618 100644
--- a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
+++ b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
@@ -403,6 +403,7 @@ SchAttribTabDlg::SchAttribTabDlg(Window* pParent,
case OBJECTTYPE_DATA_LABEL:
case OBJECTTYPE_DATA_LABELS:
+ AddTabPage(RID_SVXPAGE_LINE, SCH_RESSTR(STR_PAGE_BORDER));
AddTabPage(TP_DATA_DESCR, SCH_RESSTR(STR_OBJECT_DATALABELS), DataLabelsTabPage::Create, NULL);
AddTabPage(RID_SVXPAGE_CHAR_NAME, SCH_RESSTR(STR_PAGE_FONT));
AddTabPage(RID_SVXPAGE_CHAR_EFFECTS, SCH_RESSTR(STR_PAGE_FONT_EFFECTS));
diff --git a/chart2/source/controller/inc/TextLabelItemConverter.hxx b/chart2/source/controller/inc/TextLabelItemConverter.hxx
new file mode 100644
index 0000000..405d459
--- /dev/null
+++ b/chart2/source/controller/inc/TextLabelItemConverter.hxx
@@ -0,0 +1,74 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_CHART2_SOURCE_CONTROLLER_INC_TEXTLABELITEMCONVERTER_HXX
+#define INCLUDED_CHART2_SOURCE_CONTROLLER_INC_TEXTLABELITEMCONVERTER_HXX
+
+#include <ItemConverter.hxx>
+
+#include <com/sun/star/chart2/XDataSeries.hpp>
+#include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+
+#include <vector>
+#include <memory>
+
+namespace chart { namespace wrapper {
+
+class TextLabelItemConverter : public ::comphelper::ItemConverter
+{
+public:
+ TextLabelItemConverter(
+ const css::uno::Reference<css::frame::XModel>& xChartModel,
+ const css::uno::Reference<css::beans::XPropertySet>& rPropertySet,
+ const css::uno::Reference<css::chart2::XDataSeries>& xSeries,
+ SfxItemPool& rItemPool,
+ std::auto_ptr<css::awt::Size> pRefSize,
+ bool bDataSeries = false,
+ sal_Int32 nNumberFormat = 0,
+ sal_Int32 nPercentNumberFormat = 0 );
+
+ virtual ~TextLabelItemConverter();
+
+ virtual void FillItemSet( SfxItemSet & rOutItemSet ) const SAL_OVERRIDE;
+ virtual bool ApplyItemSet( const SfxItemSet & rItemSet ) SAL_OVERRIDE;
+
+protected:
+ virtual const sal_uInt16* GetWhichPairs() const SAL_OVERRIDE;
+ virtual bool GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const SAL_OVERRIDE;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const
+ throw (css::uno::Exception) SAL_OVERRIDE;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet )
+ throw (css::uno::Exception) SAL_OVERRIDE;
+
+private:
+ std::vector<ItemConverter*> maConverters;
+ sal_Int32 mnNumberFormat;
+ sal_Int32 mnPercentNumberFormat;
+ css::uno::Sequence<sal_Int32> maAvailableLabelPlacements;
+
+ bool mbDataSeries:1;
+ bool mbForbidPercentValue:1;
+};
+
+}}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx b/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx
index 891fd75..2fdc76e 100644
--- a/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx
+++ b/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx
@@ -109,6 +109,22 @@ const sal_uInt16 nDataPointWhichPairs[] =
0
};
+const sal_uInt16 nTextLabelWhichPairs[] =
+{
+ XATTR_LINESTYLE, XATTR_LINECOLOR,
+ XATTR_LINETRANSPARENCE, XATTR_LINETRANSPARENCE,
+ EE_ITEMS_START, EE_ITEMS_END,
+ SID_CHAR_DLG_PREVIEW_STRING, SID_CHAR_DLG_PREVIEW_STRING,
+ SCHATTR_DATADESCR_START, SCHATTR_DATADESCR_END,
+ SID_ATTR_NUMBERFORMAT_VALUE, SID_ATTR_NUMBERFORMAT_INFO,
+ SID_ATTR_NUMBERFORMAT_SOURCE, SID_ATTR_NUMBERFORMAT_SOURCE,
+ SCHATTR_TEXT_DEGREES, SCHATTR_TEXT_DEGREES,
+ SCHATTR_STYLE_SYMBOL, SCHATTR_STYLE_SYMBOL,
+ SCHATTR_SYMBOL_BRUSH, SCHATTR_SYMBOL_BRUSH,
+ SCHATTR_SYMBOL_SIZE, SCHATTR_SYMBOL_SIZE,
+ 0
+};
+
#define CHART_SERIES_OPTIONS_WHICHPAIRS \
SCHATTR_AXIS,SCHATTR_AXIS, /* 69 sch/schattr.hxx*/ \
SCHATTR_BAR_OVERLAP,SCHATTR_BAR_CONNECT, /* 98 - 100 (incl. SCHATTR_GAPWIDTH) */ \
diff --git a/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx b/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx
new file mode 100644
index 0000000..ea63873
--- /dev/null
+++ b/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx
@@ -0,0 +1,617 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <TextLabelItemConverter.hxx>
+#include <CharacterPropertyItemConverter.hxx>
+#include <ChartModelHelper.hxx>
+#include <ChartTypeHelper.hxx>
+#include <DataSeriesHelper.hxx>
+#include <DiagramHelper.hxx>
+#include <ItemPropertyMap.hxx>
+#include <SchWhichPairs.hxx>
+#include <macros.hxx>
+#include <unonames.hxx>
+
+#include <editeng/brushitem.hxx>
+#include <editeng/sizeitem.hxx>
+#include <svl/ilstitem.hxx>
+#include <svl/intitem.hxx>
+#include <svl/stritem.hxx>
+#include <svx/tabline.hxx>
+
+#include <com/sun/star/chart2/DataPointLabel.hpp>
+#include <com/sun/star/chart2/Symbol.hpp>
+
+using namespace com::sun::star;
+using namespace com::sun::star::chart2;
+using com::sun::star::uno::Reference;
+
+namespace chart { namespace wrapper {
+
+namespace {
+
+const ::comphelper::ItemPropertyMapType& getTextLabelPropertyMap()
+{
+ static ::comphelper::ItemPropertyMapType aMap(
+ ::comphelper::MakeItemPropertyMap
+ IPM_MAP_ENTRY(XATTR_LINESTYLE, CHART_UNONAME_LABEL_BORDER_STYLE, 0)
+ IPM_MAP_ENTRY(XATTR_LINEWIDTH, CHART_UNONAME_LABEL_BORDER_WIDTH, 0)
+ IPM_MAP_ENTRY(XATTR_LINEDASH, CHART_UNONAME_LABEL_BORDER_DASH, 0)
+ IPM_MAP_ENTRY(XATTR_LINECOLOR, CHART_UNONAME_LABEL_BORDER_COLOR, 0)
+ IPM_MAP_ENTRY(XATTR_LINETRANSPARENCE, CHART_UNONAME_LABEL_BORDER_TRANS, 0)
+ );
+
+ return aMap;
+};
+
+sal_Int32 getSymbolStyleForSymbol( const chart2::Symbol& rSymbol )
+{
+ sal_Int32 nStyle = SVX_SYMBOLTYPE_UNKNOWN;
+ switch (rSymbol.Style)
+ {
+ case chart2::SymbolStyle_NONE:
+ nStyle = SVX_SYMBOLTYPE_NONE;
+ break;
+ case chart2::SymbolStyle_AUTO:
+ nStyle = SVX_SYMBOLTYPE_AUTO;
+ break;
+ case chart2::SymbolStyle_GRAPHIC:
+ nStyle = SVX_SYMBOLTYPE_BRUSHITEM;
+ break;
+ case chart2::SymbolStyle_STANDARD:
+ nStyle = rSymbol.StandardSymbol;
+ break;
+ case chart2::SymbolStyle_POLYGON:
+ default:
+ ;
+ }
+ return nStyle;
+}
+
+bool numberFormatFromItemToPropertySet(
+ sal_uInt16 nWhichId, const SfxItemSet& rItemSet, const uno::Reference<beans::XPropertySet>& xPropertySet,
+ bool bOverwriteDataPoints )
+{
+ bool bChanged = false;
+ if (!xPropertySet.is())
+ return bChanged;
+
+ OUString aPropertyName = (SID_ATTR_NUMBERFORMAT_VALUE == nWhichId) ? OUString(CHART_UNONAME_NUMFMT) : OUString("PercentageNumberFormat");
+ sal_uInt16 nSourceWhich = (SID_ATTR_NUMBERFORMAT_VALUE == nWhichId) ? SID_ATTR_NUMBERFORMAT_SOURCE : SCHATTR_PERCENT_NUMBERFORMAT_SOURCE;
+
+ if (SFX_ITEM_SET != rItemSet.GetItemState(nSourceWhich))
+ return bChanged;
+
+ uno::Any aValue;
+ bool bUseSourceFormat = (static_cast<const SfxBoolItem&>(rItemSet.Get(nSourceWhich)).GetValue());
+ if (!bUseSourceFormat)
+ {
+ SfxItemState aState = rItemSet.GetItemState(nWhichId);
+ if (aState == SFX_ITEM_SET)
+ {
+ sal_Int32 nFmt = static_cast<sal_Int32>(
+ static_cast<const SfxUInt32Item&>(
+ rItemSet.Get(nWhichId)).GetValue());
+ aValue = uno::makeAny(nFmt);
+ }
+ else
+ return bChanged;
+ }
+
+ uno::Any aOldValue = xPropertySet->getPropertyValue(aPropertyName);
+ if (bOverwriteDataPoints)
+ {
+ Reference<chart2::XDataSeries> xSeries(xPropertySet, uno::UNO_QUERY);
+ if (aValue != aOldValue ||
+ ::chart::DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, aPropertyName, aOldValue))
+ {
+ ::chart::DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints(xSeries, aPropertyName, aValue);
+ bChanged = true;
+ }
+ }
+ else if (aOldValue != aValue)
+ {
+ xPropertySet->setPropertyValue(aPropertyName, aValue);
+ bChanged = true;
+ }
+ return bChanged;
+}
+
+bool useSourceFormatFromItemToPropertySet(
+ sal_uInt16 nWhichId, const SfxItemSet& rItemSet, const uno::Reference<beans::XPropertySet>& xPropertySet,
+ bool bOverwriteDataPoints )
+{
+ bool bChanged = false;
+ if (!xPropertySet.is())
+ return bChanged;
+ OUString aPropertyName = (SID_ATTR_NUMBERFORMAT_SOURCE == nWhichId) ? OUString(CHART_UNONAME_NUMFMT) : OUString("PercentageNumberFormat");
+ sal_uInt16 nFormatWhich = (SID_ATTR_NUMBERFORMAT_SOURCE == nWhichId) ? SID_ATTR_NUMBERFORMAT_VALUE : SCHATTR_PERCENT_NUMBERFORMAT_VALUE;
+
+ if (SFX_ITEM_SET != rItemSet.GetItemState(nWhichId))
+ return bChanged;
+
+ uno::Any aNewValue;
+ bool bUseSourceFormat = (static_cast<const SfxBoolItem&>(
+ rItemSet.Get(nWhichId)).GetValue());
+ if (!bUseSourceFormat)
+ {
+ SfxItemState aState = rItemSet.GetItemState(nFormatWhich);
+ if (aState == SFX_ITEM_SET)
+ {
+ sal_Int32 nFormatKey = static_cast<sal_Int32>(
+ static_cast<const SfxUInt32Item&>(
+ rItemSet.Get(nFormatWhich)).GetValue());
+ aNewValue <<= nFormatKey;
+ }
+ else
+ return bChanged;
+ }
+
+ uno::Any aOldValue(xPropertySet->getPropertyValue(aPropertyName));
+ if (bOverwriteDataPoints)
+ {
+ Reference<chart2::XDataSeries> xSeries(xPropertySet, uno::UNO_QUERY);
+ if (aNewValue != aOldValue ||
+ ::chart::DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, aPropertyName, aOldValue))
+ {
+ ::chart::DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints(xSeries, aPropertyName, aNewValue);
+ bChanged = true;
+ }
+ }
+ else if (aOldValue != aNewValue)
+ {
+ xPropertySet->setPropertyValue(aPropertyName, aNewValue);
+ bChanged = true;
+ }
+
+ return bChanged;
+}
+
+} // anonymous namespace
+
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
+TextLabelItemConverter::TextLabelItemConverter(
+ const uno::Reference<frame::XModel>& xChartModel,
+ const uno::Reference<beans::XPropertySet>& rPropertySet,
+ const uno::Reference<XDataSeries>& xSeries,
+ SfxItemPool& rItemPool, std::auto_ptr<awt::Size> pRefSize,
+ bool bDataSeries, sal_Int32 nNumberFormat, sal_Int32 nPercentNumberFormat ) :
+ ::comphelper::ItemConverter(rPropertySet, rItemPool),
+ mnNumberFormat(nNumberFormat),
+ mnPercentNumberFormat(nPercentNumberFormat),
+ mbDataSeries(bDataSeries),
+ mbForbidPercentValue(true)
+{
+ maConverters.push_back(new CharacterPropertyItemConverter(rPropertySet, rItemPool, pRefSize, "ReferencePageSize"));
+
+ uno::Reference<XDiagram> xDiagram(ChartModelHelper::findDiagram(xChartModel));
+ uno::Reference<XChartType> xChartType(DiagramHelper::getChartTypeOfSeries(xDiagram, xSeries));
+ bool bFound = false;
+ bool bAmbiguous = false;
+ bool bSwapXAndY = DiagramHelper::getVertical(xDiagram, bFound, bAmbiguous);
+ maAvailableLabelPlacements = ChartTypeHelper::getSupportedLabelPlacements(xChartType, DiagramHelper::getDimension(xDiagram), bSwapXAndY, xSeries);
+
+ mbForbidPercentValue = AxisType::CATEGORY != ChartTypeHelper::getAxisType(xChartType, 0);
+}
+SAL_WNODEPRECATED_DECLARATIONS_POP
+
+TextLabelItemConverter::~TextLabelItemConverter()
+{
+ std::for_each(maConverters.begin(), maConverters.end(), boost::checked_deleter<ItemConverter>());
+}
+
+void TextLabelItemConverter::FillItemSet( SfxItemSet& rOutItemSet ) const
+{
+ std::for_each(maConverters.begin(), maConverters.end(),
+ ::comphelper::FillItemSetFunc(rOutItemSet));
+
+ // own items
+ ItemConverter::FillItemSet(rOutItemSet);
+}
+
+bool TextLabelItemConverter::ApplyItemSet( const SfxItemSet& rItemSet )
+{
+ bool bResult = false;
+
+ std::for_each(maConverters.begin(), maConverters.end(),
+ ::comphelper::ApplyItemSetFunc(rItemSet, bResult));
+
+ // own items
+ return ItemConverter::ApplyItemSet(rItemSet) || bResult;
+}
+
+const sal_uInt16* TextLabelItemConverter::GetWhichPairs() const
+{
+ // must span all used items!
+ return nTextLabelWhichPairs;
+}
+
+bool TextLabelItemConverter::GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId& rOutProperty ) const
+{
+ const ::comphelper::ItemPropertyMapType& rMap = getTextLabelPropertyMap();
+ ::comphelper::ItemPropertyMapType::const_iterator it = rMap.find(nWhichId);
+
+ if (it == rMap.end())
+ return false;
+
+ rOutProperty = it->second;
+ return true;
+}
+
+bool TextLabelItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet& rItemSet )
+ throw (uno::Exception)
+{
+ bool bChanged = false;
+
+ switch (nWhichId)
+ {
+ case SCHATTR_DATADESCR_SHOW_NUMBER:
+ case SCHATTR_DATADESCR_SHOW_PERCENTAGE:
+ case SCHATTR_DATADESCR_SHOW_CATEGORY:
+ case SCHATTR_DATADESCR_SHOW_SYMBOL:
+ {
+ const SfxBoolItem& rItem = static_cast<const SfxBoolItem&>(rItemSet.Get(nWhichId));
+
+ uno::Any aOldValue = GetPropertySet()->getPropertyValue(CHART_UNONAME_LABEL);
+ chart2::DataPointLabel aLabel;
+ if (aOldValue >>= aLabel)
+ {
+ sal_Bool& rValue = (SCHATTR_DATADESCR_SHOW_NUMBER == nWhichId) ? aLabel.ShowNumber : (
+ (SCHATTR_DATADESCR_SHOW_PERCENTAGE == nWhichId) ? aLabel.ShowNumberInPercent : (
+ (SCHATTR_DATADESCR_SHOW_CATEGORY == nWhichId) ? aLabel.ShowCategoryName : aLabel.ShowLegendSymbol));
+ bool bOldValue = rValue;
+ rValue = rItem.GetValue();
+ if (mbDataSeries)
+ {
+ Reference<chart2::XDataSeries> xSeries(GetPropertySet(), uno::UNO_QUERY);
+ if ((bOldValue ? 1 : 0) != rValue ||
+ DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, CHART_UNONAME_LABEL, aOldValue))
+ {
+ DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints(xSeries, CHART_UNONAME_LABEL, uno::makeAny(aLabel));
+ bChanged = true;
+ }
+ }
+ else if ((bOldValue ? 1 : 0) != rValue)
+ {
+ GetPropertySet()->setPropertyValue(CHART_UNONAME_LABEL, uno::makeAny(aLabel));
+ bChanged = true;
+ }
+ }
+ }
+ break;
+ case SID_ATTR_NUMBERFORMAT_VALUE:
+ case SCHATTR_PERCENT_NUMBERFORMAT_VALUE: //fall through intended
+ {
+ bChanged = numberFormatFromItemToPropertySet(nWhichId, rItemSet, GetPropertySet(), mbDataSeries);
+ }
+ break;
+ case SID_ATTR_NUMBERFORMAT_SOURCE:
+ case SCHATTR_PERCENT_NUMBERFORMAT_SOURCE: //fall through intended
+ {
+ bChanged = useSourceFormatFromItemToPropertySet(nWhichId, rItemSet, GetPropertySet(), mbDataSeries);
+ }
+ break;
+ case SCHATTR_DATADESCR_SEPARATOR:
+ {
+ OUString aNewValue = static_cast<const SfxStringItem&>(rItemSet.Get(nWhichId)).GetValue();
+ OUString aOldValue;
+ try
+ {
+ GetPropertySet()->getPropertyValue("LabelSeparator") >>= aOldValue;
+ if (mbDataSeries)
+ {
+ Reference<chart2::XDataSeries> xSeries(GetPropertySet(), uno::UNO_QUERY);
+ if (!aOldValue.equals(aNewValue) ||
+ DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, "LabelSeparator", uno::makeAny(aOldValue)))
+ {
+ DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints(xSeries, "LabelSeparator", uno::makeAny(aNewValue));
+ bChanged = true;
+ }
+ }
+ else if (!aOldValue.equals(aNewValue))
+ {
+ GetPropertySet()->setPropertyValue("LabelSeparator", uno::makeAny(aNewValue));
+ bChanged = true;
+ }
+ }
+ catch (const uno::Exception& e)
+ {
+ ASSERT_EXCEPTION(e);
+ }
+ }
+ break;
+ case SCHATTR_DATADESCR_PLACEMENT:
+ {
+ try
+ {
+ sal_Int32 nNew = static_cast<const SfxInt32Item&>(rItemSet.Get(nWhichId)).GetValue();
+ sal_Int32 nOld = 0;
+ if (!(GetPropertySet()->getPropertyValue("LabelPlacement") >>= nOld))
+ {
+ if (maAvailableLabelPlacements.getLength())
+ nOld = maAvailableLabelPlacements[0];
+ }
+ if (mbDataSeries)
+ {
+ Reference<chart2::XDataSeries> xSeries(GetPropertySet(), uno::UNO_QUERY);
+ if (nOld != nNew ||
+ DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, "LabelPlacement", uno::makeAny(nOld)))
+ {
+ DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints(xSeries, "LabelPlacement", uno::makeAny(nNew));
+ bChanged = true;
+ }
+ }
+ else if (nOld != nNew)
+ {
+ GetPropertySet()->setPropertyValue("LabelPlacement", uno::makeAny(nNew));
+ bChanged = true;
+ }
+ }
+ catch (const uno::Exception& e)
+ {
+ ASSERT_EXCEPTION(e);
+ }
+ }
+ break;
+ case SCHATTR_STYLE_SYMBOL:
+ {
+ sal_Int32 nStyle =
+ static_cast<const SfxInt32Item&>(
+ rItemSet.Get(nWhichId)).GetValue();
+ chart2::Symbol aSymbol;
+
+ GetPropertySet()->getPropertyValue("Symbol") >>= aSymbol;
+ sal_Int32 nOldStyle = getSymbolStyleForSymbol(aSymbol);
+
+ if (nStyle != nOldStyle)
+ {
+ bool bDeleteSymbol = false;
+ switch (nStyle)
+ {
+ case SVX_SYMBOLTYPE_NONE:
+ aSymbol.Style = chart2::SymbolStyle_NONE;
+ break;
+ case SVX_SYMBOLTYPE_AUTO:
+ aSymbol.Style = chart2::SymbolStyle_AUTO;
+ break;
+ case SVX_SYMBOLTYPE_BRUSHITEM:
+ aSymbol.Style = chart2::SymbolStyle_GRAPHIC;
+ break;
+ case SVX_SYMBOLTYPE_UNKNOWN:
+ bDeleteSymbol = true;
+ break;
+
+ default:
+ aSymbol.Style = chart2::SymbolStyle_STANDARD;
+ aSymbol.StandardSymbol = nStyle;
+ }
+
+ if (bDeleteSymbol)
+ GetPropertySet()->setPropertyValue("Symbol", uno::Any());
+ else
+ GetPropertySet()->setPropertyValue("Symbol", uno::makeAny(aSymbol));
+ bChanged = true;
+ }
+ }
+ break;
+ case SCHATTR_SYMBOL_SIZE:
+ {
+ Size aSize = static_cast<const SvxSizeItem&>(
+ rItemSet.Get(nWhichId)).GetSize();
+ chart2::Symbol aSymbol;
+
+ GetPropertySet()->getPropertyValue("Symbol") >>= aSymbol;
+ if (aSize.getWidth() != aSymbol.Size.Width ||
+ aSize.getHeight() != aSymbol.Size.Height)
+ {
+ aSymbol.Size.Width = aSize.getWidth();
+ aSymbol.Size.Height = aSize.getHeight();
+
+ GetPropertySet()->setPropertyValue("Symbol", uno::makeAny(aSymbol));
+ bChanged = true;
+ }
+ }
+ break;
+ case SCHATTR_SYMBOL_BRUSH:
+ {
+ const SvxBrushItem& rBrshItem(static_cast<const SvxBrushItem&>(
+ rItemSet.Get(nWhichId)));
+ uno::Any aXGraphicAny;
+ const Graphic* pGraphic(rBrshItem.GetGraphic());
+ if (pGraphic)
+ {
+ uno::Reference<graphic::XGraphic> xGraphic(pGraphic->GetXGraphic());
+ if (xGraphic.is())
+ {
+ aXGraphicAny <<= xGraphic;
+ chart2::Symbol aSymbol;
+ GetPropertySet()->getPropertyValue("Symbol") >>= aSymbol;
+ if (aSymbol.Graphic != xGraphic)
+ {
+ aSymbol.Graphic = xGraphic;
+ GetPropertySet()->setPropertyValue("Symbol", uno::makeAny(aSymbol));
+ bChanged = true;
+ }
+ }
+ }
+ }
+ break;
+ case SCHATTR_TEXT_DEGREES:
+ {
+ double fValue = static_cast<double>(
+ static_cast<const SfxInt32Item&>(
+ rItemSet.Get(nWhichId)).GetValue()) / 100.0;
+ double fOldValue = 0.0;
+ bool bPropExisted =
+ (GetPropertySet()->getPropertyValue("TextRotation") >>= fOldValue);
+
+ if (!bPropExisted ||
+ (bPropExisted && fOldValue != fValue))
+ {
+ GetPropertySet()->setPropertyValue("TextRotation", uno::makeAny(fValue));
+ bChanged = true;
+ }
+ }
+ break;
+ }
+
+ return bChanged;
+}
+
+void TextLabelItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet& rOutItemSet ) const
+ throw (uno::Exception)
+{
+ switch (nWhichId)
+ {
+ case SCHATTR_DATADESCR_SHOW_NUMBER:
+ case SCHATTR_DATADESCR_SHOW_PERCENTAGE:
+ case SCHATTR_DATADESCR_SHOW_CATEGORY:
+ case SCHATTR_DATADESCR_SHOW_SYMBOL:
+ {
+ chart2::DataPointLabel aLabel;
+ if (GetPropertySet()->getPropertyValue(CHART_UNONAME_LABEL) >>= aLabel)
+ {
+ bool bValue = (SCHATTR_DATADESCR_SHOW_NUMBER == nWhichId) ? aLabel.ShowNumber : (
+ (SCHATTR_DATADESCR_SHOW_PERCENTAGE == nWhichId) ? aLabel.ShowNumberInPercent : (
+ (SCHATTR_DATADESCR_SHOW_CATEGORY == nWhichId) ? aLabel.ShowCategoryName : aLabel.ShowLegendSymbol));
+
+ rOutItemSet.Put(SfxBoolItem(nWhichId, bValue));
+
+ if (mbDataSeries)
+ {
+ if (DataSeriesHelper::hasAttributedDataPointDifferentValue(
+ Reference<chart2::XDataSeries>(GetPropertySet(), uno::UNO_QUERY), CHART_UNONAME_LABEL, uno::makeAny(aLabel)))
+ {
+ rOutItemSet.InvalidateItem(nWhichId);
+ }
+ }
+ }
+ }
+ break;
+ case SID_ATTR_NUMBERFORMAT_VALUE:
+ {
+ sal_Int32 nKey = 0;
+ if (!(GetPropertySet()->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nKey))
+ nKey = mnNumberFormat;
+ rOutItemSet.Put(SfxUInt32Item(nWhichId, nKey));
+ }
+ break;
+ case SCHATTR_PERCENT_NUMBERFORMAT_VALUE:
+ {
+ sal_Int32 nKey = 0;
+ if (!(GetPropertySet()->getPropertyValue("PercentageNumberFormat") >>= nKey))
+ nKey = mnPercentNumberFormat;
+ rOutItemSet.Put(SfxUInt32Item(nWhichId, nKey));
+ }
+ break;
+ case SID_ATTR_NUMBERFORMAT_SOURCE:
+ {
+ bool bNumberFormatIsSet = GetPropertySet()->getPropertyValue(CHART_UNONAME_NUMFMT).hasValue();
+ rOutItemSet.Put(SfxBoolItem(nWhichId, !bNumberFormatIsSet));
+ }
+ break;
+ case SCHATTR_PERCENT_NUMBERFORMAT_SOURCE:
+ {
+ bool bNumberFormatIsSet = (GetPropertySet()->getPropertyValue("PercentageNumberFormat").hasValue());
+ rOutItemSet.Put(SfxBoolItem(nWhichId, !bNumberFormatIsSet));
+ }
+ break;
+ case SCHATTR_DATADESCR_SEPARATOR:
+ {
+ OUString aValue;
+ try
+ {
+ GetPropertySet()->getPropertyValue("LabelSeparator") >>= aValue;
+ rOutItemSet.Put(SfxStringItem(nWhichId, aValue));
+ }
+ catch (const uno::Exception& e)
+ {
+ ASSERT_EXCEPTION(e);
+ }
+ }
+ break;
+ case SCHATTR_DATADESCR_PLACEMENT:
+ {
+ try
+ {
+ sal_Int32 nPlacement = 0;
+ if (GetPropertySet()->getPropertyValue("LabelPlacement") >>= nPlacement)
+ rOutItemSet.Put(SfxInt32Item(nWhichId, nPlacement));
+ else if (maAvailableLabelPlacements.getLength())
+ rOutItemSet.Put(SfxInt32Item(nWhichId, maAvailableLabelPlacements[0]));
+ }
+ catch (const uno::Exception& e)
+ {
+ ASSERT_EXCEPTION(e);
+ }
+ }
+ break;
+ case SCHATTR_DATADESCR_AVAILABLE_PLACEMENTS:
+ {
+ rOutItemSet.Put(SfxIntegerListItem(nWhichId, maAvailableLabelPlacements));
+ }
+ break;
+ case SCHATTR_DATADESCR_NO_PERCENTVALUE:
+ {
+ rOutItemSet.Put(SfxBoolItem(nWhichId, mbForbidPercentValue));
+ }
+ break;
+ case SCHATTR_STYLE_SYMBOL:
+ {
+ chart2::Symbol aSymbol;
+ if (GetPropertySet()->getPropertyValue("Symbol") >>= aSymbol)
+ rOutItemSet.Put(SfxInt32Item(nWhichId, getSymbolStyleForSymbol(aSymbol)));
+ }
+ break;
+ case SCHATTR_SYMBOL_SIZE:
+ {
+ chart2::Symbol aSymbol;
+ if (GetPropertySet()->getPropertyValue("Symbol") >>= aSymbol)
+ rOutItemSet.Put(
+ SvxSizeItem(nWhichId, Size(aSymbol.Size.Width, aSymbol.Size.Height)));
+ }
+ break;
+ case SCHATTR_SYMBOL_BRUSH:
+ {
+ chart2::Symbol aSymbol;
+ if ((GetPropertySet()->getPropertyValue("Symbol") >>= aSymbol)
+ && aSymbol.Graphic.is())
+ {
+ rOutItemSet.Put(
+ SvxBrushItem(Graphic(aSymbol.Graphic), GPOS_MM, SCHATTR_SYMBOL_BRUSH));
+ }
+ }
+ break;
+ case SCHATTR_TEXT_DEGREES:
+ {
+ double fValue = 0;
+
+ if (GetPropertySet()->getPropertyValue("TextRotation") >>= fValue)
+ {
+ rOutItemSet.Put(
+ SfxInt32Item(nWhichId, static_cast<sal_Int32>(rtl::math::round(fValue * 100.0))));
+ }
+ }
+ break;
+ }
+}
+
+}}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/main/ChartController_Properties.cxx b/chart2/source/controller/main/ChartController_Properties.cxx
index 5c05794..74f671c 100644
--- a/chart2/source/controller/main/ChartController_Properties.cxx
+++ b/chart2/source/controller/main/ChartController_Properties.cxx
@@ -28,6 +28,7 @@
#include "dlg_InsertErrorBars.hxx"
#include "ViewElementListProvider.hxx"
#include "DataPointItemConverter.hxx"
+#include "TextLabelItemConverter.hxx"
#include "AxisItemConverter.hxx"
#include "MultipleChartConverters.hxx"
#include "TitleItemConverter.hxx"
@@ -175,8 +176,35 @@ SAL_WNODEPRECATED_DECLARATIONS_PUSH
case OBJECTTYPE_AXIS_UNITLABEL:
break;
case OBJECTTYPE_DATA_LABELS:
- case OBJECTTYPE_DATA_SERIES:
case OBJECTTYPE_DATA_LABEL:
+ {
+ ::std::auto_ptr< awt::Size > pRefSize;
+ if( pRefSizeProvider.get() )
+ pRefSize.reset( new awt::Size( pRefSizeProvider->getPageSize()));
+
+ uno::Reference<XDataSeries> xSeries = ObjectIdentifier::getDataSeriesForCID(aObjectCID, xChartModel);
+ uno::Reference<XChartType> xChartType = ChartModelHelper::getChartTypeOfSeries(xChartModel, xSeries);
+
+ uno::Reference<XDiagram> xDiagram = ChartModelHelper::findDiagram(xChartModel);
+
+ bool bDataSeries = eObjectType == OBJECTTYPE_DATA_LABELS;
+
+ sal_Int32 nPointIndex = -1; /*-1 for whole series*/
+ if (!bDataSeries)
+ nPointIndex = aParticleID.toInt32();
+
+ sal_Int32 nNumberFormat = ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel(
+ xObjectProperties, xSeries, nPointIndex, xDiagram);
+ sal_Int32 nPercentNumberFormat = ExplicitValueProvider::getExplicitPercentageNumberFormatKeyForDataLabel(
+ xObjectProperties,uno::Reference<util::XNumberFormatsSupplier>(xChartModel, uno::UNO_QUERY));
+
+ pItemConverter = new wrapper::TextLabelItemConverter(
+ xChartModel, xObjectProperties, xSeries,
+ rDrawModel.GetItemPool(), pRefSize, bDataSeries,
+ nNumberFormat, nPercentNumberFormat);
+ }
+ break;
+ case OBJECTTYPE_DATA_SERIES:
case OBJECTTYPE_DATA_POINT:
{
::std::auto_ptr< awt::Size > pRefSize;
@@ -194,7 +222,7 @@ SAL_WNODEPRECATED_DECLARATIONS_PUSH
if( !ChartTypeHelper::isSupportingAreaProperties( xChartType, nDimensionCount ) )
eMapTo = wrapper::GraphicPropertyItemConverter::LINE_DATA_POINT;
- bool bDataSeries = ( eObjectType == OBJECTTYPE_DATA_SERIES || eObjectType == OBJECTTYPE_DATA_LABELS );
+ bool bDataSeries = eObjectType == OBJECTTYPE_DATA_SERIES;
//special color for pie chart:
bool bUseSpecialFillColor = false;
diff --git a/chart2/source/model/main/DataPointProperties.cxx b/chart2/source/model/main/DataPointProperties.cxx
index 2aa4ca9..d0ac155 100644
--- a/chart2/source/model/main/DataPointProperties.cxx
+++ b/chart2/source/model/main/DataPointProperties.cxx
@@ -21,6 +21,7 @@
#include "macros.hxx"
#include "LinePropertiesHelper.hxx"
#include "FillProperties.hxx"
+#include <unonames.hxx>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
@@ -346,6 +347,46 @@ void DataPointProperties::AddPropertiesToVector(
::getCppuType( reinterpret_cast< const sal_Int16 * >(0)),
beans::PropertyAttribute::BOUND
| beans::PropertyAttribute::MAYBEVOID ));
+
+ // Properties specific to data label.
+
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_STYLE,
+ PROP_DATAPOINT_LABEL_BORDER_STYLE,
+ cppu::UnoType<drawing::LineStyle>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEDEFAULT ));
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_COLOR,
+ PROP_DATAPOINT_LABEL_BORDER_COLOR,
+ cppu::UnoType<sal_Int32>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEVOID // "maybe auto"
+ | beans::PropertyAttribute::MAYBEDEFAULT ));
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_WIDTH,
+ PROP_DATAPOINT_LABEL_BORDER_WIDTH,
+ cppu::UnoType<sal_Int32>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEDEFAULT ));
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_DASH,
+ PROP_DATAPOINT_LABEL_BORDER_DASH,
+ cppu::UnoType<drawing::LineDash>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEVOID ));
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_DASHNAME,
+ PROP_DATAPOINT_LABEL_BORDER_DASH_NAME,
+ cppu::UnoType<OUString>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEVOID ));
+ rOutProperties.push_back(
+ Property( CHART_UNONAME_LABEL_BORDER_TRANS,
+ PROP_DATAPOINT_LABEL_BORDER_TRANS,
+ cppu::UnoType<sal_Int16>::get(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEDEFAULT ));
}
void DataPointProperties::AddDefaultsToMap(
@@ -399,6 +440,16 @@ void DataPointProperties::AddDefaultsToMap(
PropertyHelper::setPropertyValueDefault< double >( rOutMap, PROP_DATAPOINT_OFFSET, 0.0 );
PropertyHelper::setPropertyValueDefault( rOutMap, PROP_DATAPOINT_GEOMETRY3D, chart2::DataPointGeometry3D::CUBOID );
+ //@todo maybe choose a different one here -> should be dynamically that of the attached axis
+ PropertyHelper::setPropertyValueDefault( rOutMap, PROP_DATAPOINT_ERROR_BAR_X, uno::Reference< beans::XPropertySet >());
+ PropertyHelper::setPropertyValueDefault( rOutMap, PROP_DATAPOINT_ERROR_BAR_Y, uno::Reference< beans::XPropertySet >());
+ PropertyHelper::setPropertyValueDefault< sal_Int16 >( rOutMap, PROP_DATAPOINT_PERCENT_DIAGONAL, 0 );
+
+ PropertyHelper::setPropertyValueDefault< double >( rOutMap, PROP_DATAPOINT_TEXT_ROTATION, 0.0 );
+
+ PropertyHelper::setPropertyValueDefault(rOutMap, PROP_DATAPOINT_LINK_NUMBERFORMAT_TO_SOURCE, true);
+
+ // data label
PropertyHelper::setPropertyValueDefault(
rOutMap, PROP_DATAPOINT_LABEL,
chart2::DataPointLabel(
@@ -409,15 +460,12 @@ void DataPointProperties::AddDefaultsToMap(
));
PropertyHelper::setPropertyValueDefault< OUString >( rOutMap, PROP_DATAPOINT_LABEL_SEPARATOR, " " );
-
- //@todo maybe choose a different one here -> should be dynamically that of the attached axis
- PropertyHelper::setPropertyValueDefault( rOutMap, PROP_DATAPOINT_ERROR_BAR_X, uno::Reference< beans::XPropertySet >());
- PropertyHelper::setPropertyValueDefault( rOutMap, PROP_DATAPOINT_ERROR_BAR_Y, uno::Reference< beans::XPropertySet >());
- PropertyHelper::setPropertyValueDefault< sal_Int16 >( rOutMap, PROP_DATAPOINT_PERCENT_DIAGONAL, 0 );
-
- PropertyHelper::setPropertyValueDefault< double >( rOutMap, PROP_DATAPOINT_TEXT_ROTATION, 0.0 );
-
- PropertyHelper::setPropertyValueDefault(rOutMap, PROP_DATAPOINT_LINK_NUMBERFORMAT_TO_SOURCE, true);
+ PropertyHelper::setPropertyValueDefault<sal_Int32>(rOutMap, PROP_DATAPOINT_LABEL_BORDER_STYLE, drawing::LineStyle_NONE);
+ PropertyHelper::setEmptyPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_BORDER_COLOR);
+ PropertyHelper::setPropertyValueDefault<sal_Int32>(rOutMap, PROP_DATAPOINT_LABEL_BORDER_WIDTH, 0);
+ PropertyHelper::setPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_BORDER_DASH, drawing::LineDash());
+ PropertyHelper::setEmptyPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_BORDER_DASH_NAME);
+ PropertyHelper::setPropertyValueDefault<sal_Int16>(rOutMap, PROP_DATAPOINT_LABEL_BORDER_TRANS, 0);
}
} // namespace chart
diff --git a/chart2/source/model/main/DataPointProperties.hxx b/chart2/source/model/main/DataPointProperties.hxx
index 2d7258a..721e02b 100644
--- a/chart2/source/model/main/DataPointProperties.hxx
+++ b/chart2/source/model/main/DataPointProperties.hxx
@@ -59,8 +59,6 @@ public:
PROP_DATAPOINT_SYMBOL_PROP,
PROP_DATAPOINT_OFFSET,
PROP_DATAPOINT_GEOMETRY3D,
- PROP_DATAPOINT_LABEL,
- PROP_DATAPOINT_LABEL_SEPARATOR,
PROP_DATAPOINT_NUMBER_FORMAT,
PROP_DATAPOINT_LINK_NUMBERFORMAT_TO_SOURCE,
PROP_DATAPOINT_PERCENTAGE_NUMBER_FORMAT,
@@ -72,7 +70,17 @@ public:
PROP_DATAPOINT_ERROR_BAR_X,
PROP_DATAPOINT_ERROR_BAR_Y,
PROP_DATAPOINT_SHOW_ERROR_BOX,
- PROP_DATAPOINT_PERCENT_DIAGONAL
+ PROP_DATAPOINT_PERCENT_DIAGONAL,
+
+ // label
+ PROP_DATAPOINT_LABEL,
+ PROP_DATAPOINT_LABEL_SEPARATOR,
+ PROP_DATAPOINT_LABEL_BORDER_STYLE,
+ PROP_DATAPOINT_LABEL_BORDER_COLOR,
+ PROP_DATAPOINT_LABEL_BORDER_WIDTH,
+ PROP_DATAPOINT_LABEL_BORDER_DASH,
+ PROP_DATAPOINT_LABEL_BORDER_DASH_NAME,
+ PROP_DATAPOINT_LABEL_BORDER_TRANS
// additionally some properites from ::chart::LineProperties
};
diff --git a/chart2/source/view/inc/PropertyMapper.hxx b/chart2/source/view/inc/PropertyMapper.hxx
index 289b97ab..b52f576 100644
--- a/chart2/source/view/inc/PropertyMapper.hxx
+++ b/chart2/source/view/inc/PropertyMapper.hxx
@@ -99,6 +99,7 @@ public:
static const tMakePropertyNameMap& getPropertyNameMapForFilledSeriesProperties();
static const tMakePropertyNameMap& getPropertyNameMapForLineSeriesProperties();
+ static const tMakePropertyNameMap& getPropertyNameMapForTextLabelProperties();
static void getTextLabelMultiPropertyLists(
const ::com::sun::star::uno::Reference<
diff --git a/chart2/source/view/main/PropertyMapper.cxx b/chart2/source/view/main/PropertyMapper.cxx
index b4c276c..66cdd1f 100644
--- a/chart2/source/view/main/PropertyMapper.cxx
+++ b/chart2/source/view/main/PropertyMapper.cxx
@@ -20,6 +20,7 @@
#include "PropertyMapper.hxx"
#include "ContainerHelper.hxx"
#include "macros.hxx"
+#include <unonames.hxx>
#include <com/sun/star/beans/XMultiPropertySet.hpp>
#include <com/sun/star/drawing/LineStyle.hpp>
@@ -312,6 +313,19 @@ const tMakePropertyNameMap& PropertyMapper::getPropertyNameMapForLineSeriesPrope
return m_aShapePropertyMapForLineSeriesProperties;
}
+const tMakePropertyNameMap& PropertyMapper::getPropertyNameMapForTextLabelProperties()
+{
+ // taget name (drawing layer) : source name (chart model)
+ static tMakePropertyNameMap aMap = tMakePropertyNameMap
+ ( getPropertyNameMapForCharacterProperties() )
+ ( "LineStyle", CHART_UNONAME_LABEL_BORDER_STYLE )
+ ( "LineWidth", CHART_UNONAME_LABEL_BORDER_WIDTH )
+ ( "LineColor", CHART_UNONAME_LABEL_BORDER_COLOR )
+ ( "LineTransparence", CHART_UNONAME_LABEL_BORDER_TRANS ) // fix the spelling!
+ ;
+ return aMap;
+}
+
const tMakePropertyNameMap& PropertyMapper::getPropertyNameMapForFilledSeriesProperties()
{
//shape property -- chart model object property
@@ -403,12 +417,11 @@ void PropertyMapper::getTextLabelMultiPropertyLists(
{
//fill character properties into the ValueMap
tPropertyNameValueMap aValueMap;
- PropertyMapper::getValueMap( aValueMap
- , PropertyMapper::getPropertyNameMapForCharacterProperties()
- , xSourceProp );
+ tMakePropertyNameMap aNameMap = PropertyMapper::getPropertyNameMapForTextLabelProperties();
+
+ PropertyMapper::getValueMap(aValueMap, aNameMap, xSourceProp);
//some more shape properties apart from character properties, position-matrix and label string
- aValueMap.insert( tPropertyNameValueMap::value_type( "LineStyle", uno::makeAny(drawing::LineStyle_NONE) ) ); // drawing::LineStyle
aValueMap.insert( tPropertyNameValueMap::value_type( "TextHorizontalAdjust", uno::makeAny(drawing::TextHorizontalAdjust_CENTER) ) ); // drawing::TextHorizontalAdjust - needs to be overwritten
aValueMap.insert( tPropertyNameValueMap::value_type( "TextVerticalAdjust", uno::makeAny(drawing::TextVerticalAdjust_CENTER) ) ); //drawing::TextVerticalAdjust - needs to be overwritten
aValueMap.insert( tPropertyNameValueMap::value_type( "TextAutoGrowHeight", uno::makeAny(sal_True) ) ); // sal_Bool
More information about the Libreoffice-commits
mailing list