Kaydet (Commit) f1531cda authored tarafından Kohei Yoshida's avatar Kohei Yoshida

bnc#885825: Support borders around data labels.

Change-Id: Ib141413e523cbf73746876f727e9f80dda9f5f7c
üst 84aa4d1f
......@@ -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 \
......
......@@ -22,6 +22,13 @@
#define CHART_UNONAME_ERRORBAR_X "ErrorBarX"
#define CHART_UNONAME_ERRORBAR_Y "ErrorBarY"
#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
......
......@@ -388,6 +388,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));
......
/* -*- 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>
namespace chart { namespace wrapper {
class TextLabelItemConverter : public 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,
const css::awt::Size* pRefSize = NULL,
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: */
......@@ -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) */ \
......
......@@ -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"
......@@ -167,8 +168,35 @@ wrapper::ItemConverter* createItemConverter(
case OBJECTTYPE_AXIS_UNITLABEL:
break;
case OBJECTTYPE_DATA_LABELS:
case OBJECTTYPE_DATA_SERIES:
case OBJECTTYPE_DATA_LABEL:
{
boost::scoped_ptr<awt::Size> pRefSize;
if (pRefSizeProvider)
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.get(), bDataSeries,
nNumberFormat, nPercentNumberFormat);
}
break;
case OBJECTTYPE_DATA_SERIES:
case OBJECTTYPE_DATA_POINT:
{
boost::scoped_ptr<awt::Size> pRefSize;
......@@ -186,7 +214,7 @@ wrapper::ItemConverter* createItemConverter(
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;
......
......@@ -263,20 +263,6 @@ void DataPointProperties::AddPropertiesToVector(
beans::PropertyAttribute::BOUND
| beans::PropertyAttribute::MAYBEDEFAULT ));
rOutProperties.push_back(
Property( CHART_UNONAME_LABEL,
PROP_DATAPOINT_LABEL,
cppu::UnoType<chart2::DataPointLabel>::get(),
beans::PropertyAttribute::BOUND
| beans::PropertyAttribute::MAYBEDEFAULT ));
rOutProperties.push_back(
Property( "LabelSeparator",
PROP_DATAPOINT_LABEL_SEPARATOR,
cppu::UnoType<OUString>::get(),
beans::PropertyAttribute::BOUND
| beans::PropertyAttribute::MAYBEDEFAULT ));
rOutProperties.push_back(
Property( CHART_UNONAME_NUMFMT,
PROP_DATAPOINT_NUMBER_FORMAT,
......@@ -347,6 +333,60 @@ 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,
PROP_DATAPOINT_LABEL,
cppu::UnoType<chart2::DataPointLabel>::get(),
beans::PropertyAttribute::BOUND
| beans::PropertyAttribute::MAYBEDEFAULT ));
rOutProperties.push_back(
Property( CHART_UNONAME_LABEL_SEP,
PROP_DATAPOINT_LABEL_SEPARATOR,
cppu::UnoType<OUString>::get(),
beans::PropertyAttribute::BOUND
| beans::PropertyAttribute::MAYBEDEFAULT ));
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
......
......@@ -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
};
......
......@@ -115,6 +115,7 @@ public:
static const tMakePropertyNameMap& getPropertyNameMapForFilledSeriesProperties();
static const tMakePropertyNameMap& getPropertyNameMapForLineSeriesProperties();
static const tMakePropertyNameMap& getPropertyNameMapForTextLabelProperties();
static void getTextLabelMultiPropertyLists(
const ::com::sun::star::uno::Reference<
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment