[Libreoffice-commits] core.git: Branch 'libreoffice-4-3' - chart2/inc chart2/Library_chartcontroller.mk chart2/source

Kohei Yoshida kohei.yoshida at collabora.com
Wed Jul 30 14:46:43 PDT 2014


 chart2/Library_chartcontroller.mk                                  |    1 
 chart2/inc/unonames.hxx                                            |    8 
 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                   |   65 -
 chart2/source/model/main/DataPointProperties.hxx                   |   14 
 chart2/source/view/inc/PropertyMapper.hxx                          |    1 
 chart2/source/view/main/PropertyMapper.cxx                         |   21 
 11 files changed, 832 insertions(+), 18 deletions(-)

New commits:
commit 8e0c92c2ee46e90bdcceb641be267a9468968b0c
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
    Reviewed-on: https://gerrit.libreoffice.org/10561
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/chart2/Library_chartcontroller.mk b/chart2/Library_chartcontroller.mk
index b7e86bf..f77ef70 100644
--- a/chart2/Library_chartcontroller.mk
+++ b/chart2/Library_chartcontroller.mk
@@ -154,6 +154,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
index 2b5f601..04cfba2 100644
--- a/chart2/inc/unonames.hxx
+++ b/chart2/inc/unonames.hxx
@@ -19,6 +19,14 @@
 #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
 
diff --git a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
index b279f05..644e524 100644
--- a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
+++ b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
@@ -473,6 +473,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 dd2e0fa3..b7a3f23 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"
@@ -172,8 +173,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;
@@ -191,7 +219,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 e145d42..9d7523e 100644
--- a/chart2/source/model/main/DataPointProperties.cxx
+++ b/chart2/source/model/main/DataPointProperties.cxx
@@ -347,6 +347,46 @@ void DataPointProperties::AddPropertiesToVector(
                   cppu::UnoType<sal_Int16>::get(),
                   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(
@@ -400,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(
@@ -410,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 05e874b..1cff389 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>
@@ -334,6 +335,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
@@ -425,12 +439,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