1cde9e8dcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3cde9e8dcSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4cde9e8dcSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5cde9e8dcSAndrew Rist  * distributed with this work for additional information
6cde9e8dcSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7cde9e8dcSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8cde9e8dcSAndrew Rist  * "License"); you may not use this file except in compliance
9cde9e8dcSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cde9e8dcSAndrew Rist  *
11cde9e8dcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cde9e8dcSAndrew Rist  *
13cde9e8dcSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14cde9e8dcSAndrew Rist  * software distributed under the License is distributed on an
15cde9e8dcSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16cde9e8dcSAndrew Rist  * KIND, either express or implied.  See the License for the
17cde9e8dcSAndrew Rist  * specific language governing permissions and limitations
18cde9e8dcSAndrew Rist  * under the License.
19cde9e8dcSAndrew Rist  *
20cde9e8dcSAndrew Rist  *************************************************************/
21cde9e8dcSAndrew Rist 
22cde9e8dcSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_chart2.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "ObjectNameProvider.hxx"
28cdf0e10cSrcweir #include "ResId.hxx"
29cdf0e10cSrcweir #include "Strings.hrc"
30cdf0e10cSrcweir #include "macros.hxx"
31cdf0e10cSrcweir #include "AxisHelper.hxx"
32cdf0e10cSrcweir #include "ChartModelHelper.hxx"
33cdf0e10cSrcweir #include "DiagramHelper.hxx"
34cdf0e10cSrcweir #include "DataSeriesHelper.hxx"
35cdf0e10cSrcweir #include "TitleHelper.hxx"
36cdf0e10cSrcweir #include "AxisIndexDefines.hxx"
37cdf0e10cSrcweir #include "ExplicitCategoriesProvider.hxx"
38cdf0e10cSrcweir #include "CommonConverters.hxx"
39cdf0e10cSrcweir #include "NumberFormatterWrapper.hxx"
40cdf0e10cSrcweir #include "RegressionCurveHelper.hxx"
41cdf0e10cSrcweir #include <rtl/math.hxx>
42cdf0e10cSrcweir #include <tools/debug.hxx>
43cdf0e10cSrcweir #include <tools/string.hxx>
44cdf0e10cSrcweir 
45cdf0e10cSrcweir #include <com/sun/star/chart2/XTitle.hpp>
46cdf0e10cSrcweir #include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
47cdf0e10cSrcweir 
48cdf0e10cSrcweir //.............................................................................
49cdf0e10cSrcweir namespace chart
50cdf0e10cSrcweir {
51cdf0e10cSrcweir //.............................................................................
52cdf0e10cSrcweir using namespace ::com::sun::star;
53cdf0e10cSrcweir using namespace ::com::sun::star::chart2;
54cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
55cdf0e10cSrcweir using ::com::sun::star::uno::Sequence;
56cdf0e10cSrcweir using ::com::sun::star::uno::Any;
57cdf0e10cSrcweir using rtl::OUString;
58cdf0e10cSrcweir 
59cdf0e10cSrcweir namespace
60cdf0e10cSrcweir {
61cdf0e10cSrcweir 
lcl_getDataSeriesName(const rtl::OUString & rObjectCID,const Reference<frame::XModel> & xChartModel)62cdf0e10cSrcweir OUString lcl_getDataSeriesName( const rtl::OUString& rObjectCID, const Reference< frame::XModel >& xChartModel )
63cdf0e10cSrcweir {
64cdf0e10cSrcweir     OUString aRet;
65cdf0e10cSrcweir 
66cdf0e10cSrcweir     Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
67cdf0e10cSrcweir     Reference< XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ), uno::UNO_QUERY );
68cdf0e10cSrcweir     if( xDiagram.is() && xSeries.is() )
69cdf0e10cSrcweir     {
70cdf0e10cSrcweir         Reference< XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram, xSeries ) );
71cdf0e10cSrcweir         if( xChartType.is() )
72cdf0e10cSrcweir         {
73cdf0e10cSrcweir             aRet = ::chart::DataSeriesHelper::getDataSeriesLabel(
74cdf0e10cSrcweir                     xSeries, xChartType->getRoleOfSequenceForSeriesLabel() ) ;
75cdf0e10cSrcweir         }
76cdf0e10cSrcweir     }
77cdf0e10cSrcweir 
78cdf0e10cSrcweir     return aRet;
79cdf0e10cSrcweir }
80cdf0e10cSrcweir 
lcl_getFullSeriesName(const rtl::OUString & rObjectCID,const Reference<frame::XModel> & xChartModel)81cdf0e10cSrcweir OUString lcl_getFullSeriesName( const rtl::OUString& rObjectCID, const Reference< frame::XModel >& xChartModel )
82cdf0e10cSrcweir {
83cdf0e10cSrcweir     OUString aRet = String(SchResId(STR_TIP_DATASERIES));
84cdf0e10cSrcweir     OUString aWildcard( C2U("%SERIESNAME") );
85cdf0e10cSrcweir     sal_Int32 nIndex = aRet.indexOf( aWildcard );
86cdf0e10cSrcweir     if( nIndex != -1 )
87cdf0e10cSrcweir         aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), lcl_getDataSeriesName( rObjectCID, xChartModel ) );
88cdf0e10cSrcweir     return aRet;
89cdf0e10cSrcweir }
90cdf0e10cSrcweir 
lcl_addText(OUString & rOut,const OUString & rSeparator,const OUString & rNext)91cdf0e10cSrcweir void lcl_addText( OUString& rOut, const OUString& rSeparator, const OUString& rNext )
92cdf0e10cSrcweir {
93*9ec58d04SHerbert Dürr     if( !rOut.isEmpty() && !rNext.isEmpty() )
94cdf0e10cSrcweir         rOut+=rSeparator;
95*9ec58d04SHerbert Dürr     if( !rNext.isEmpty() )
96cdf0e10cSrcweir         rOut+=rNext;
97cdf0e10cSrcweir }
98cdf0e10cSrcweir 
lcl_getDataPointValueText(const Reference<XDataSeries> & xSeries,sal_Int32 nPointIndex,const Reference<XCoordinateSystem> & xCooSys,const Reference<frame::XModel> & xChartModel)99cdf0e10cSrcweir OUString lcl_getDataPointValueText( const Reference< XDataSeries >& xSeries, sal_Int32 nPointIndex,
100cdf0e10cSrcweir                                     const Reference< XCoordinateSystem >& xCooSys,
101cdf0e10cSrcweir                                     const Reference< frame::XModel >& xChartModel )
102cdf0e10cSrcweir {
103cdf0e10cSrcweir 
104cdf0e10cSrcweir     OUString aRet;
105cdf0e10cSrcweir 
106cdf0e10cSrcweir     Reference<data::XDataSource> xDataSource(
107cdf0e10cSrcweir             uno::Reference<data::XDataSource>( xSeries, uno::UNO_QUERY ) );
108cdf0e10cSrcweir     if(!xDataSource.is())
109cdf0e10cSrcweir         return aRet;
110cdf0e10cSrcweir 
111cdf0e10cSrcweir     Sequence< Reference< data::XLabeledDataSequence > > aDataSequences( xDataSource->getDataSequences() );
112cdf0e10cSrcweir 
113cdf0e10cSrcweir     rtl::OUString aX, aY, aY_Min, aY_Max, aY_First, aY_Last, a_Size;
114cdf0e10cSrcweir     double fValue = 0;
115cdf0e10cSrcweir 
116cdf0e10cSrcweir     uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( xChartModel, uno::UNO_QUERY );
117cdf0e10cSrcweir     NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier );
118cdf0e10cSrcweir     sal_Int32 nLabelColor = 0;//dummy
119cdf0e10cSrcweir     bool bColorChanged;//dummy
120cdf0e10cSrcweir 
121cdf0e10cSrcweir     for(sal_Int32 nN = aDataSequences.getLength();nN--;)
122cdf0e10cSrcweir     {
123cdf0e10cSrcweir         uno::Reference<data::XDataSequence>  xDataSequence( aDataSequences[nN]->getValues());
124cdf0e10cSrcweir         if( !xDataSequence.is() )
125cdf0e10cSrcweir             continue;
126cdf0e10cSrcweir         Sequence< Any > aData( xDataSequence->getData() );
127cdf0e10cSrcweir         if( nPointIndex >= aData.getLength() )
128cdf0e10cSrcweir             continue;
129cdf0e10cSrcweir         uno::Reference<beans::XPropertySet> xProp(xDataSequence, uno::UNO_QUERY );
130cdf0e10cSrcweir 	    if( xProp.is())
131cdf0e10cSrcweir 	    {
132cdf0e10cSrcweir 		    try
133cdf0e10cSrcweir 		    {
134cdf0e10cSrcweir                 uno::Any aARole = xProp->getPropertyValue( C2U( "Role" ) );
135cdf0e10cSrcweir                 rtl::OUString aRole;
136cdf0e10cSrcweir                 aARole >>= aRole;
137cdf0e10cSrcweir 
138cdf0e10cSrcweir                 if( aRole.equals(C2U("values-x")) )
139cdf0e10cSrcweir                 {
140cdf0e10cSrcweir                     aData[nPointIndex]>>= fValue;
141cdf0e10cSrcweir                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
142cdf0e10cSrcweir                     aX = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
143cdf0e10cSrcweir                 }
144cdf0e10cSrcweir                 else if( aRole.equals(C2U("values-y")) )
145cdf0e10cSrcweir                 {
146cdf0e10cSrcweir                     aData[nPointIndex]>>= fValue;
147cdf0e10cSrcweir                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
148cdf0e10cSrcweir                     aY = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
149cdf0e10cSrcweir                 }
150cdf0e10cSrcweir                 else if( aRole.equals(C2U("values-first")) )
151cdf0e10cSrcweir                 {
152cdf0e10cSrcweir                     aData[nPointIndex]>>= fValue;
153cdf0e10cSrcweir                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
154cdf0e10cSrcweir                     aY_First = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
155cdf0e10cSrcweir                 }
156cdf0e10cSrcweir                 else if( aRole.equals(C2U("values-min")) )
157cdf0e10cSrcweir                 {
158cdf0e10cSrcweir                     aData[nPointIndex]>>= fValue;
159cdf0e10cSrcweir                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
160cdf0e10cSrcweir                     aY_Min = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
161cdf0e10cSrcweir                 }
162cdf0e10cSrcweir                 else if( aRole.equals(C2U("values-max")) )
163cdf0e10cSrcweir                 {
164cdf0e10cSrcweir                     aData[nPointIndex]>>= fValue;
165cdf0e10cSrcweir                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
166cdf0e10cSrcweir                     aY_Max = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
167cdf0e10cSrcweir                 }
168cdf0e10cSrcweir                 else if( aRole.equals(C2U("values-last")) )
169cdf0e10cSrcweir                 {
170cdf0e10cSrcweir                     aData[nPointIndex]>>= fValue;
171cdf0e10cSrcweir                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
172cdf0e10cSrcweir                     aY_Last = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
173cdf0e10cSrcweir                 }
174cdf0e10cSrcweir                 else if( aRole.equals(C2U("values-size")) )
175cdf0e10cSrcweir                 {
176cdf0e10cSrcweir                     aData[nPointIndex]>>= fValue;
177cdf0e10cSrcweir                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
178cdf0e10cSrcweir                     a_Size = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
179cdf0e10cSrcweir                 }
180cdf0e10cSrcweir             }
181cdf0e10cSrcweir             catch( uno::Exception& e )
182cdf0e10cSrcweir 		    {
183cdf0e10cSrcweir                 ASSERT_EXCEPTION( e );
184cdf0e10cSrcweir             }
185cdf0e10cSrcweir         }
186cdf0e10cSrcweir     }
187cdf0e10cSrcweir 
188*9ec58d04SHerbert Dürr     if( aX.isEmpty() )
189cdf0e10cSrcweir     {
190cdf0e10cSrcweir         aRet = ExplicitCategoriesProvider::getCategoryByIndex( xCooSys, xChartModel, nPointIndex );
191cdf0e10cSrcweir     }
192cdf0e10cSrcweir     else
193cdf0e10cSrcweir     {
194cdf0e10cSrcweir         aRet = aX;
195cdf0e10cSrcweir     }
196cdf0e10cSrcweir 
197cdf0e10cSrcweir     OUString aSeparator(C2U(" "));
198cdf0e10cSrcweir 
199cdf0e10cSrcweir     lcl_addText( aRet, aSeparator, aY );
200cdf0e10cSrcweir     lcl_addText( aRet, aSeparator, aY_First );
201cdf0e10cSrcweir     lcl_addText( aRet, aSeparator, aY_Min );
202cdf0e10cSrcweir     lcl_addText( aRet, aSeparator, aY_Max );
203cdf0e10cSrcweir     lcl_addText( aRet, aSeparator, aY_Last );
204cdf0e10cSrcweir     lcl_addText( aRet, aSeparator, a_Size );
205cdf0e10cSrcweir 
206cdf0e10cSrcweir     return aRet;
207cdf0e10cSrcweir }
208cdf0e10cSrcweir 
209cdf0e10cSrcweir } //end anonymous namespace
210cdf0e10cSrcweir 
getName(ObjectType eObjectType,bool bPlural)211cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getName( ObjectType eObjectType, bool bPlural )
212cdf0e10cSrcweir {
213cdf0e10cSrcweir     rtl::OUString aRet;
214cdf0e10cSrcweir     switch( eObjectType )
215cdf0e10cSrcweir     {
216cdf0e10cSrcweir         case OBJECTTYPE_PAGE:
217cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_PAGE));
218cdf0e10cSrcweir                 break;
219cdf0e10cSrcweir         case OBJECTTYPE_TITLE:
220cdf0e10cSrcweir             {
221cdf0e10cSrcweir                 if(bPlural)
222cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_TITLES));
223cdf0e10cSrcweir                 else
224cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_TITLE));
225cdf0e10cSrcweir             }
226cdf0e10cSrcweir                 break;
227cdf0e10cSrcweir         case OBJECTTYPE_LEGEND:
228cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_LEGEND));
229cdf0e10cSrcweir                 break;
230cdf0e10cSrcweir         case OBJECTTYPE_LEGEND_ENTRY:
231cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_LEGEND_SYMBOL));//@todo change string if we do differenciate symbol and legend entry in future
232cdf0e10cSrcweir                 break;
233cdf0e10cSrcweir         case OBJECTTYPE_DIAGRAM:
234cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_DIAGRAM));
235cdf0e10cSrcweir                 break;
236cdf0e10cSrcweir         case OBJECTTYPE_DIAGRAM_WALL:
237cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_DIAGRAM_WALL));
238cdf0e10cSrcweir                 break;
239cdf0e10cSrcweir         case OBJECTTYPE_DIAGRAM_FLOOR:
240cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_DIAGRAM_FLOOR));
241cdf0e10cSrcweir                 break;
242cdf0e10cSrcweir         case OBJECTTYPE_AXIS:
243cdf0e10cSrcweir             {
244cdf0e10cSrcweir                 if(bPlural)
245cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_AXES));
246cdf0e10cSrcweir                 else
247cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_AXIS));
248cdf0e10cSrcweir             }
249cdf0e10cSrcweir                 break;
250cdf0e10cSrcweir         case OBJECTTYPE_AXIS_UNITLABEL:
251cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_LABEL));//@todo maybe a more concrete name
252cdf0e10cSrcweir                 break;
253cdf0e10cSrcweir         case OBJECTTYPE_GRID:
254cdf0e10cSrcweir         case OBJECTTYPE_SUBGRID: //maybe todo: different names for subgrids
255cdf0e10cSrcweir             {
256cdf0e10cSrcweir                 if(bPlural)
257cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_GRIDS));
258cdf0e10cSrcweir                 else
259cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_GRID));
260cdf0e10cSrcweir             }
261cdf0e10cSrcweir                 break;
262cdf0e10cSrcweir         case OBJECTTYPE_DATA_SERIES:
263cdf0e10cSrcweir             {
264cdf0e10cSrcweir                 if(bPlural)
265cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_DATASERIES_PLURAL));
266cdf0e10cSrcweir                 else
267cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_DATASERIES));
268cdf0e10cSrcweir             }
269cdf0e10cSrcweir                 break;
270cdf0e10cSrcweir         case OBJECTTYPE_DATA_POINT:
271cdf0e10cSrcweir             {
272cdf0e10cSrcweir                 if(bPlural)
273cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_DATAPOINTS));
274cdf0e10cSrcweir                 else
275cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_DATAPOINT));
276cdf0e10cSrcweir             }
277cdf0e10cSrcweir                 break;
278cdf0e10cSrcweir         case OBJECTTYPE_DATA_LABELS:
279cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_DATALABELS));
280cdf0e10cSrcweir                 break;
281cdf0e10cSrcweir         case OBJECTTYPE_DATA_LABEL:
282cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_LABEL));
283cdf0e10cSrcweir                 break;
284cdf0e10cSrcweir         case OBJECTTYPE_DATA_ERRORS:
285cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_ERROR_BARS));//@todo? maybe distinguish plural singular
286cdf0e10cSrcweir                 break;
287cdf0e10cSrcweir         case OBJECTTYPE_DATA_ERRORS_X:
288cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_ERROR_BARS));//@todo? maybe specialize in future
289cdf0e10cSrcweir                 break;
290cdf0e10cSrcweir         case OBJECTTYPE_DATA_ERRORS_Y:
291cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_ERROR_BARS));//@todo? maybe specialize in future
292cdf0e10cSrcweir                 break;
293cdf0e10cSrcweir         case OBJECTTYPE_DATA_ERRORS_Z:
294cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_ERROR_BARS));//@todo? maybe specialize in future
295cdf0e10cSrcweir                 break;
296cdf0e10cSrcweir         case OBJECTTYPE_DATA_AVERAGE_LINE:
297cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_AVERAGE_LINE));
298cdf0e10cSrcweir                 break;
299cdf0e10cSrcweir         case OBJECTTYPE_DATA_CURVE:
300cdf0e10cSrcweir             {
301cdf0e10cSrcweir                 if(bPlural)
302cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_CURVES));
303cdf0e10cSrcweir                 else
304cdf0e10cSrcweir                     aRet=String(SchResId(STR_OBJECT_CURVE));
305cdf0e10cSrcweir             }
306cdf0e10cSrcweir                 break;
307cdf0e10cSrcweir         case OBJECTTYPE_DATA_STOCK_RANGE:
308cdf0e10cSrcweir                 //aRet=String(SchResId());
309cdf0e10cSrcweir                 break;
310cdf0e10cSrcweir         case OBJECTTYPE_DATA_STOCK_LOSS:
311cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_STOCK_LOSS));
312cdf0e10cSrcweir                 break;
313cdf0e10cSrcweir         case OBJECTTYPE_DATA_STOCK_GAIN:
314cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_STOCK_GAIN));
315cdf0e10cSrcweir                 break;
316cdf0e10cSrcweir         case OBJECTTYPE_DATA_CURVE_EQUATION:
317cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_CURVE_EQUATION));
318cdf0e10cSrcweir                 break;
319cdf0e10cSrcweir         default: //OBJECTTYPE_UNKNOWN
320cdf0e10cSrcweir             ;
321cdf0e10cSrcweir     }
322cdf0e10cSrcweir     return aRet;
323cdf0e10cSrcweir }
324cdf0e10cSrcweir 
getAxisName(const rtl::OUString & rObjectCID,const uno::Reference<frame::XModel> & xChartModel)325cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getAxisName( const rtl::OUString& rObjectCID
326cdf0e10cSrcweir                         , const uno::Reference< frame::XModel >& xChartModel  )
327cdf0e10cSrcweir {
328cdf0e10cSrcweir     rtl::OUString aRet;
329cdf0e10cSrcweir 
330cdf0e10cSrcweir 
331cdf0e10cSrcweir 
332cdf0e10cSrcweir     Reference< XAxis > xAxis(
333cdf0e10cSrcweir         ObjectIdentifier::getObjectPropertySet( rObjectCID , xChartModel ), uno::UNO_QUERY );
334cdf0e10cSrcweir 
335cdf0e10cSrcweir     sal_Int32 nCooSysIndex = 0;
336cdf0e10cSrcweir     sal_Int32 nDimensionIndex = 0;
337cdf0e10cSrcweir     sal_Int32 nAxisIndex = 0;
338cdf0e10cSrcweir     AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram( xChartModel ), nCooSysIndex, nDimensionIndex, nAxisIndex );
339cdf0e10cSrcweir 
340cdf0e10cSrcweir     switch(nDimensionIndex)
341cdf0e10cSrcweir     {
342cdf0e10cSrcweir         case 0://x-axis
343cdf0e10cSrcweir             if( nAxisIndex == 0 )
344cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_AXIS_X));
345cdf0e10cSrcweir             else
346cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_SECONDARY_X_AXIS));
347cdf0e10cSrcweir             break;
348cdf0e10cSrcweir         case 1://y-axis
349cdf0e10cSrcweir             if( nAxisIndex == 0 )
350cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_AXIS_Y));
351cdf0e10cSrcweir             else
352cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_SECONDARY_Y_AXIS));
353cdf0e10cSrcweir             break;
354cdf0e10cSrcweir         case 2://z-axis
355cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_AXIS_Z));
356cdf0e10cSrcweir             break;
357cdf0e10cSrcweir         default://axis
358cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_AXIS));
359cdf0e10cSrcweir             break;
360cdf0e10cSrcweir     }
361cdf0e10cSrcweir 
362cdf0e10cSrcweir     return aRet;
363cdf0e10cSrcweir }
364cdf0e10cSrcweir 
getTitleNameByType(TitleHelper::eTitleType eType)365cdf0e10cSrcweir OUString ObjectNameProvider::getTitleNameByType( TitleHelper::eTitleType eType )
366cdf0e10cSrcweir {
367cdf0e10cSrcweir     OUString aRet;
368cdf0e10cSrcweir 
369cdf0e10cSrcweir     switch(eType)
370cdf0e10cSrcweir     {
371cdf0e10cSrcweir         case TitleHelper::MAIN_TITLE:
372cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_TITLE_MAIN));
373cdf0e10cSrcweir             break;
374cdf0e10cSrcweir         case TitleHelper::SUB_TITLE:
375cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_TITLE_SUB));
376cdf0e10cSrcweir             break;
377cdf0e10cSrcweir         case TitleHelper::X_AXIS_TITLE:
378cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_TITLE_X_AXIS));
379cdf0e10cSrcweir             break;
380cdf0e10cSrcweir         case TitleHelper::Y_AXIS_TITLE:
381cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_TITLE_Y_AXIS));
382cdf0e10cSrcweir             break;
383cdf0e10cSrcweir         case TitleHelper::Z_AXIS_TITLE:
384cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_TITLE_Z_AXIS));
385cdf0e10cSrcweir             break;
386cdf0e10cSrcweir         case TitleHelper::SECONDARY_X_AXIS_TITLE:
387cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_TITLE_SECONDARY_X_AXIS));
388cdf0e10cSrcweir             break;
389cdf0e10cSrcweir         case TitleHelper::SECONDARY_Y_AXIS_TITLE:
390cdf0e10cSrcweir             aRet=String(SchResId(STR_OBJECT_TITLE_SECONDARY_Y_AXIS));
391cdf0e10cSrcweir             break;
392cdf0e10cSrcweir         default:
393cdf0e10cSrcweir             DBG_ERROR("unknown title type");
394cdf0e10cSrcweir             break;
395cdf0e10cSrcweir     }
396cdf0e10cSrcweir 
397*9ec58d04SHerbert Dürr     if( aRet.isEmpty() )
398cdf0e10cSrcweir         aRet=String(SchResId(STR_OBJECT_TITLE));
399cdf0e10cSrcweir 
400cdf0e10cSrcweir     return aRet;
401cdf0e10cSrcweir }
402cdf0e10cSrcweir 
getTitleName(const OUString & rObjectCID,const Reference<frame::XModel> & xChartModel)403cdf0e10cSrcweir OUString ObjectNameProvider::getTitleName( const OUString& rObjectCID
404cdf0e10cSrcweir                         , const Reference< frame::XModel >& xChartModel )
405cdf0e10cSrcweir {
406cdf0e10cSrcweir     OUString aRet;
407cdf0e10cSrcweir 
408cdf0e10cSrcweir     Reference< XTitle > xTitle(
409cdf0e10cSrcweir         ObjectIdentifier::getObjectPropertySet( rObjectCID , xChartModel ), uno::UNO_QUERY );
410cdf0e10cSrcweir     if( xTitle.is() )
411cdf0e10cSrcweir     {
412cdf0e10cSrcweir         TitleHelper::eTitleType eType;
413cdf0e10cSrcweir         if( TitleHelper::getTitleType( eType, xTitle, xChartModel ) )
414cdf0e10cSrcweir             aRet = ObjectNameProvider::getTitleNameByType( eType );
415cdf0e10cSrcweir     }
416*9ec58d04SHerbert Dürr     if( aRet.isEmpty() )
417cdf0e10cSrcweir         aRet=String(SchResId(STR_OBJECT_TITLE));
418cdf0e10cSrcweir 
419cdf0e10cSrcweir     return aRet;
420cdf0e10cSrcweir }
421cdf0e10cSrcweir 
getGridName(const rtl::OUString & rObjectCID,const uno::Reference<frame::XModel> & xChartModel)422cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getGridName( const rtl::OUString& rObjectCID
423cdf0e10cSrcweir                         , const uno::Reference< frame::XModel >& xChartModel )
424cdf0e10cSrcweir {
425cdf0e10cSrcweir     rtl::OUString aRet;
426cdf0e10cSrcweir 
427cdf0e10cSrcweir 
428cdf0e10cSrcweir     sal_Int32 nCooSysIndex = -1;
429cdf0e10cSrcweir     sal_Int32 nDimensionIndex = -1;
430cdf0e10cSrcweir     sal_Int32 nAxisIndex = -1;
431cdf0e10cSrcweir     Reference< XAxis > xAxis( ObjectIdentifier::getAxisForCID( rObjectCID , xChartModel ) );
432cdf0e10cSrcweir     AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram( xChartModel )
433cdf0e10cSrcweir               , nCooSysIndex , nDimensionIndex, nAxisIndex );
434cdf0e10cSrcweir 
435cdf0e10cSrcweir     bool bMainGrid = (ObjectIdentifier::getObjectType( rObjectCID ) == OBJECTTYPE_GRID);
436cdf0e10cSrcweir 
437cdf0e10cSrcweir     if( bMainGrid )
438cdf0e10cSrcweir     {
439cdf0e10cSrcweir         switch(nDimensionIndex)
440cdf0e10cSrcweir         {
441cdf0e10cSrcweir             case 0://x-axis
442cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_GRID_MAJOR_X));
443cdf0e10cSrcweir                 break;
444cdf0e10cSrcweir             case 1://y-axis
445cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_GRID_MAJOR_Y));
446cdf0e10cSrcweir                 break;
447cdf0e10cSrcweir             case 2://z-axis
448cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_GRID_MAJOR_Z));
449cdf0e10cSrcweir                 break;
450cdf0e10cSrcweir             default://axis
451cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_GRID));
452cdf0e10cSrcweir                 break;
453cdf0e10cSrcweir         }
454cdf0e10cSrcweir     }
455cdf0e10cSrcweir     else
456cdf0e10cSrcweir     {
457cdf0e10cSrcweir         switch(nDimensionIndex)
458cdf0e10cSrcweir         {
459cdf0e10cSrcweir             case 0://x-axis
460cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_GRID_MINOR_X));
461cdf0e10cSrcweir                 break;
462cdf0e10cSrcweir             case 1://y-axis
463cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_GRID_MINOR_Y));
464cdf0e10cSrcweir                 break;
465cdf0e10cSrcweir             case 2://z-axis
466cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_GRID_MINOR_Z));
467cdf0e10cSrcweir                 break;
468cdf0e10cSrcweir             default://axis
469cdf0e10cSrcweir                 aRet=String(SchResId(STR_OBJECT_GRID));
470cdf0e10cSrcweir                 break;
471cdf0e10cSrcweir         }
472cdf0e10cSrcweir     }
473cdf0e10cSrcweir     return aRet;
474cdf0e10cSrcweir }
475cdf0e10cSrcweir 
getHelpText(const rtl::OUString & rObjectCID,const Reference<chart2::XChartDocument> & xChartDocument,bool bVerbose)476cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getHelpText( const rtl::OUString& rObjectCID, const Reference< chart2::XChartDocument >& xChartDocument, bool bVerbose )
477cdf0e10cSrcweir {
478cdf0e10cSrcweir     return getHelpText( rObjectCID, Reference< frame::XModel >( xChartDocument, uno::UNO_QUERY ), bVerbose );
479cdf0e10cSrcweir }
480cdf0e10cSrcweir 
getHelpText(const rtl::OUString & rObjectCID,const Reference<frame::XModel> & xChartModel,bool bVerbose)481cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getHelpText( const rtl::OUString& rObjectCID, const Reference< frame::XModel >& xChartModel, bool bVerbose )
482cdf0e10cSrcweir {
483cdf0e10cSrcweir     rtl::OUString aRet;
484cdf0e10cSrcweir     ObjectType eObjectType( ObjectIdentifier::getObjectType(rObjectCID) );
485cdf0e10cSrcweir     if( OBJECTTYPE_AXIS == eObjectType )
486cdf0e10cSrcweir     {
487cdf0e10cSrcweir         aRet=ObjectNameProvider::getAxisName( rObjectCID, xChartModel );
488cdf0e10cSrcweir     }
489cdf0e10cSrcweir     else if( OBJECTTYPE_GRID == eObjectType
490cdf0e10cSrcweir         || OBJECTTYPE_SUBGRID == eObjectType )
491cdf0e10cSrcweir     {
492cdf0e10cSrcweir         aRet=ObjectNameProvider::getGridName( rObjectCID, xChartModel );
493cdf0e10cSrcweir     }
494cdf0e10cSrcweir     else if( OBJECTTYPE_TITLE == eObjectType )
495cdf0e10cSrcweir     {
496cdf0e10cSrcweir         aRet=ObjectNameProvider::getTitleName( rObjectCID, xChartModel );
497cdf0e10cSrcweir     }
498cdf0e10cSrcweir     else if( OBJECTTYPE_DATA_SERIES == eObjectType )
499cdf0e10cSrcweir     {
500cdf0e10cSrcweir         aRet = lcl_getFullSeriesName( rObjectCID, xChartModel );
501cdf0e10cSrcweir     }
502cdf0e10cSrcweir     else if( OBJECTTYPE_DATA_POINT == eObjectType )
503cdf0e10cSrcweir     {
504cdf0e10cSrcweir         if( bVerbose )
505cdf0e10cSrcweir         {
506cdf0e10cSrcweir             OUString aNewLine(C2U("\n"));
507cdf0e10cSrcweir 
508cdf0e10cSrcweir             aRet=String(SchResId(STR_TIP_DATAPOINT_INDEX));
509cdf0e10cSrcweir             aRet+=aNewLine;
510cdf0e10cSrcweir             aRet+=String(SchResId(STR_TIP_DATASERIES));
511cdf0e10cSrcweir             aRet+=aNewLine;
512cdf0e10cSrcweir             aRet+=String(SchResId(STR_TIP_DATAPOINT_VALUES));
513cdf0e10cSrcweir         }
514cdf0e10cSrcweir         else
515cdf0e10cSrcweir             aRet=String(SchResId(STR_TIP_DATAPOINT));
516cdf0e10cSrcweir 
517cdf0e10cSrcweir         Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
518cdf0e10cSrcweir         Reference< XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ), uno::UNO_QUERY );
519cdf0e10cSrcweir         if( xDiagram.is() && xSeries.is() )
520cdf0e10cSrcweir         {
521cdf0e10cSrcweir             sal_Int32 nPointIndex( ObjectIdentifier::getParticleID(rObjectCID).toInt32() );
522cdf0e10cSrcweir 
523cdf0e10cSrcweir             //replace data point index
524cdf0e10cSrcweir             sal_Int32 nIndex = -1;
525cdf0e10cSrcweir             OUString aWildcard( C2U("%POINTNUMBER") );
526cdf0e10cSrcweir             nIndex = aRet.indexOf( aWildcard );
527cdf0e10cSrcweir             if( nIndex != -1 )
528cdf0e10cSrcweir             {
529cdf0e10cSrcweir                 aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), OUString::valueOf(nPointIndex+1) );
530cdf0e10cSrcweir             }
531cdf0e10cSrcweir 
532cdf0e10cSrcweir             //replace data series index
533cdf0e10cSrcweir             aWildcard = C2U("%SERIESNUMBER");
534cdf0e10cSrcweir             nIndex = aRet.indexOf( aWildcard );
535cdf0e10cSrcweir             if( nIndex != -1 )
536cdf0e10cSrcweir             {
537cdf0e10cSrcweir                 ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector(
538cdf0e10cSrcweir                     DiagramHelper::getDataSeriesFromDiagram( xDiagram ) );
539cdf0e10cSrcweir                 sal_Int32 nSeriesIndex = -1;
540cdf0e10cSrcweir                 for( nSeriesIndex=aSeriesVector.size();nSeriesIndex--;)
541cdf0e10cSrcweir                 {
542cdf0e10cSrcweir                     if( aSeriesVector[nSeriesIndex] == xSeries )
543cdf0e10cSrcweir                     {
544cdf0e10cSrcweir                         break;
545cdf0e10cSrcweir                     }
546cdf0e10cSrcweir                 }
547cdf0e10cSrcweir 
548cdf0e10cSrcweir                 OUString aReplacement( OUString::valueOf(nSeriesIndex+1) );
549cdf0e10cSrcweir                 aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), aReplacement );
550cdf0e10cSrcweir             }
551cdf0e10cSrcweir 
552cdf0e10cSrcweir             //replace point values
553cdf0e10cSrcweir             aWildcard = C2U("%POINTVALUES");
554cdf0e10cSrcweir             nIndex = aRet.indexOf( aWildcard );
555cdf0e10cSrcweir             if( nIndex != -1 )
556cdf0e10cSrcweir                 aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), lcl_getDataPointValueText(
557cdf0e10cSrcweir                 xSeries,nPointIndex, DataSeriesHelper::getCoordinateSystemOfSeries(xSeries, xDiagram), xChartModel ) );
558cdf0e10cSrcweir 
559cdf0e10cSrcweir             //replace series name
560cdf0e10cSrcweir             aWildcard = C2U("%SERIESNAME");
561cdf0e10cSrcweir             nIndex = aRet.indexOf( aWildcard );
562cdf0e10cSrcweir             if( nIndex != -1 )
563cdf0e10cSrcweir                 aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), lcl_getDataSeriesName( rObjectCID, xChartModel ) );
564cdf0e10cSrcweir         }
565cdf0e10cSrcweir     }
566cdf0e10cSrcweir     /*
567cdf0e10cSrcweir     else if( OBJECTTYPE_DIAGRAM == eObjectType )
568cdf0e10cSrcweir     {
569cdf0e10cSrcweir         //todo different names for different diagram types ???
570cdf0e10cSrcweir         //or different names for series of diferent charttypes
571cdf0e10cSrcweir     }
572cdf0e10cSrcweir     */
573cdf0e10cSrcweir     else if( OBJECTTYPE_DATA_CURVE == eObjectType )
574cdf0e10cSrcweir     {
575cdf0e10cSrcweir         if( bVerbose )
576cdf0e10cSrcweir         {
577cdf0e10cSrcweir             aRet = String( SchResId( STR_OBJECT_CURVE_WITH_PARAMETERS ));
578cdf0e10cSrcweir             Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ));
579cdf0e10cSrcweir             Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY );
580cdf0e10cSrcweir             if( xCurveCnt.is())
581cdf0e10cSrcweir             {
582cdf0e10cSrcweir                 Reference< chart2::XRegressionCurve > xCurve( RegressionCurveHelper::getFirstCurveNotMeanValueLine( xCurveCnt ));
583cdf0e10cSrcweir                 if( xCurve.is())
584cdf0e10cSrcweir                 {
585cdf0e10cSrcweir                     try
586cdf0e10cSrcweir                     {
587cdf0e10cSrcweir                         Reference< chart2::XRegressionCurveCalculator > xCalculator( xCurve->getCalculator(), uno::UNO_QUERY_THROW );
588cdf0e10cSrcweir                         RegressionCurveHelper::initializeCurveCalculator( xCalculator, xSeries, xChartModel );
589cdf0e10cSrcweir 
590cdf0e10cSrcweir                         // replace formula
591cdf0e10cSrcweir                         sal_Int32 nIndex = -1;
592cdf0e10cSrcweir                         OUString aWildcard( C2U("%FORMULA") );
593cdf0e10cSrcweir                         nIndex = aRet.indexOf( aWildcard );
594cdf0e10cSrcweir                         if( nIndex != -1 )
595cdf0e10cSrcweir                             aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), xCalculator->getRepresentation());
596cdf0e10cSrcweir 
597cdf0e10cSrcweir                         // replace r^2
598cdf0e10cSrcweir                         aWildcard = C2U("%RSQUARED");
599cdf0e10cSrcweir                         nIndex = aRet.indexOf( aWildcard );
600cdf0e10cSrcweir                         if( nIndex != -1 )
601cdf0e10cSrcweir                         {
602cdf0e10cSrcweir                             sal_Unicode aDecimalSep( '.' );
603cdf0e10cSrcweir                             //@todo: enable this code when a localized decimal
604cdf0e10cSrcweir                             //separator is also available for the formula
605cdf0e10cSrcweir //                             SvtSysLocale aSysLocale;
606cdf0e10cSrcweir //                             OUString aSep( aSysLocale.GetLocaleData().getNumDecimalSep());
607cdf0e10cSrcweir //                             if( aSep.getLength() == 1 )
608cdf0e10cSrcweir //                                 aDecimalSep = aSep.toChar();
609cdf0e10cSrcweir                             double fR( xCalculator->getCorrelationCoefficient());
610cdf0e10cSrcweir                             aRet = aRet.replaceAt(
611cdf0e10cSrcweir                                 nIndex, aWildcard.getLength(),
612cdf0e10cSrcweir                                 ::rtl::math::doubleToUString(
613cdf0e10cSrcweir                                     fR*fR, rtl_math_StringFormat_G, 4, aDecimalSep, true ));
614cdf0e10cSrcweir                         }
615cdf0e10cSrcweir                     }
616cdf0e10cSrcweir                     catch( const uno::Exception & ex )
617cdf0e10cSrcweir                     {
618cdf0e10cSrcweir                         ASSERT_EXCEPTION( ex );
619cdf0e10cSrcweir                     }
620cdf0e10cSrcweir                 }
621cdf0e10cSrcweir             }
622cdf0e10cSrcweir         }
623cdf0e10cSrcweir         else
624cdf0e10cSrcweir         {
625cdf0e10cSrcweir             // non-verbose
626cdf0e10cSrcweir             aRet = ObjectNameProvider::getName( eObjectType, false );
627cdf0e10cSrcweir         }
628cdf0e10cSrcweir     }
629cdf0e10cSrcweir     else if( OBJECTTYPE_DATA_AVERAGE_LINE == eObjectType )
630cdf0e10cSrcweir     {
631cdf0e10cSrcweir         if( bVerbose )
632cdf0e10cSrcweir         {
633cdf0e10cSrcweir             aRet = String( SchResId( STR_OBJECT_AVERAGE_LINE_WITH_PARAMETERS ));
634cdf0e10cSrcweir             Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ));
635cdf0e10cSrcweir             Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY );
636cdf0e10cSrcweir             if( xCurveCnt.is())
637cdf0e10cSrcweir             {
638cdf0e10cSrcweir                 Reference< chart2::XRegressionCurve > xCurve( RegressionCurveHelper::getMeanValueLine( xCurveCnt ));
639cdf0e10cSrcweir                 if( xCurve.is())
640cdf0e10cSrcweir                 {
641cdf0e10cSrcweir                     try
642cdf0e10cSrcweir                     {
643cdf0e10cSrcweir                         Reference< chart2::XRegressionCurveCalculator > xCalculator( xCurve->getCalculator(), uno::UNO_QUERY_THROW );
644cdf0e10cSrcweir                         RegressionCurveHelper::initializeCurveCalculator( xCalculator, xSeries, xChartModel );
645cdf0e10cSrcweir 
646cdf0e10cSrcweir                         sal_Unicode aDecimalSep( '.' );
647cdf0e10cSrcweir                         // replace average value
648cdf0e10cSrcweir //                             SvtSysLocale aSysLocale;
649cdf0e10cSrcweir //                             OUString aSep( aSysLocale.GetLocaleData().getNumDecimalSep());
650cdf0e10cSrcweir //                             if( aSep.getLength() == 1 )
651cdf0e10cSrcweir //                                 aDecimalSep = aSep.toChar();
652cdf0e10cSrcweir 
653cdf0e10cSrcweir                         sal_Int32 nIndex = -1;
654cdf0e10cSrcweir                         OUString aWildcard( C2U("%AVERAGE_VALUE") );
655cdf0e10cSrcweir                         nIndex = aRet.indexOf( aWildcard );
656cdf0e10cSrcweir                         // as the curve is constant, the value at any x-value is ok
657cdf0e10cSrcweir                         if( nIndex != -1 )
658cdf0e10cSrcweir                         {
659cdf0e10cSrcweir                             const double fMeanValue( xCalculator->getCurveValue( 0.0 ));
660cdf0e10cSrcweir                             aRet = aRet.replaceAt(
661cdf0e10cSrcweir                                 nIndex, aWildcard.getLength(),
662cdf0e10cSrcweir                                 ::rtl::math::doubleToUString(
663cdf0e10cSrcweir                                     fMeanValue, rtl_math_StringFormat_G, 4, aDecimalSep, true ));
664cdf0e10cSrcweir                         }
665cdf0e10cSrcweir 
666cdf0e10cSrcweir                         // replace standard deviation
667cdf0e10cSrcweir                         aWildcard = C2U("%STD_DEVIATION");
668cdf0e10cSrcweir                         nIndex = aRet.indexOf( aWildcard );
669cdf0e10cSrcweir                         if( nIndex != -1 )
670cdf0e10cSrcweir                         {
671cdf0e10cSrcweir                             const double fStdDev( xCalculator->getCorrelationCoefficient());
672cdf0e10cSrcweir                             aRet = aRet.replaceAt(
673cdf0e10cSrcweir                                 nIndex, aWildcard.getLength(),
674cdf0e10cSrcweir                                 ::rtl::math::doubleToUString(
675cdf0e10cSrcweir                                     fStdDev, rtl_math_StringFormat_G, 4, aDecimalSep, true ));
676cdf0e10cSrcweir                         }
677cdf0e10cSrcweir                     }
678cdf0e10cSrcweir                     catch( const uno::Exception & ex )
679cdf0e10cSrcweir                     {
680cdf0e10cSrcweir                         ASSERT_EXCEPTION( ex );
681cdf0e10cSrcweir                     }
682cdf0e10cSrcweir                 }
683cdf0e10cSrcweir             }
684cdf0e10cSrcweir         }
685cdf0e10cSrcweir         else
686cdf0e10cSrcweir         {
687cdf0e10cSrcweir             // non-verbose
688cdf0e10cSrcweir             aRet = ObjectNameProvider::getName( eObjectType, false );
689cdf0e10cSrcweir         }
690cdf0e10cSrcweir     }
691cdf0e10cSrcweir     else
692cdf0e10cSrcweir     {
693cdf0e10cSrcweir         aRet = ObjectNameProvider::getName( eObjectType, false );
694cdf0e10cSrcweir     }
695cdf0e10cSrcweir     return aRet;
696cdf0e10cSrcweir }
697cdf0e10cSrcweir 
getSelectedObjectText(const rtl::OUString & rObjectCID,const::com::sun::star::uno::Reference<::com::sun::star::chart2::XChartDocument> & xChartDocument)698cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getSelectedObjectText( const rtl::OUString & rObjectCID, const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& xChartDocument )
699cdf0e10cSrcweir {
700cdf0e10cSrcweir     rtl::OUString aRet;
701cdf0e10cSrcweir     ObjectType eObjectType( ObjectIdentifier::getObjectType(rObjectCID) );
702cdf0e10cSrcweir     Reference< frame::XModel > xChartModel( xChartDocument, uno::UNO_QUERY );
703cdf0e10cSrcweir 
704cdf0e10cSrcweir     if( OBJECTTYPE_DATA_POINT == eObjectType )
705cdf0e10cSrcweir     {
706cdf0e10cSrcweir         aRet = String( SchResId( STR_STATUS_DATAPOINT_MARKED ));
707cdf0e10cSrcweir 
708cdf0e10cSrcweir         Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
709cdf0e10cSrcweir         Reference< XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ), uno::UNO_QUERY );
710cdf0e10cSrcweir         if( xDiagram.is() && xSeries.is() )
711cdf0e10cSrcweir         {
712cdf0e10cSrcweir             sal_Int32 nPointIndex( ObjectIdentifier::getParticleID(rObjectCID).toInt32() );
713cdf0e10cSrcweir 
714cdf0e10cSrcweir             // replace data point index
715cdf0e10cSrcweir             replaceParamterInString( aRet, C2U("%POINTNUMBER"), OUString::valueOf( nPointIndex + 1 ));
716cdf0e10cSrcweir 
717cdf0e10cSrcweir             // replace data series index
718cdf0e10cSrcweir             {
719cdf0e10cSrcweir                 ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector(
720cdf0e10cSrcweir                     DiagramHelper::getDataSeriesFromDiagram( xDiagram ) );
721cdf0e10cSrcweir                 sal_Int32 nSeriesIndex = -1;
722cdf0e10cSrcweir                 for( nSeriesIndex=aSeriesVector.size();nSeriesIndex--;)
723cdf0e10cSrcweir                 {
724cdf0e10cSrcweir                     if( aSeriesVector[nSeriesIndex] == xSeries )
725cdf0e10cSrcweir                         break;
726cdf0e10cSrcweir                 }
727cdf0e10cSrcweir                 replaceParamterInString( aRet, C2U("%SERIESNUMBER"), OUString::valueOf( nSeriesIndex + 1 ) );
728cdf0e10cSrcweir             }
729cdf0e10cSrcweir 
730cdf0e10cSrcweir             // replace point value
731cdf0e10cSrcweir             replaceParamterInString( aRet, C2U("%POINTVALUES"), lcl_getDataPointValueText(
732cdf0e10cSrcweir                 xSeries, nPointIndex, DataSeriesHelper::getCoordinateSystemOfSeries(xSeries, xDiagram), xChartModel ) );
733cdf0e10cSrcweir         }
734cdf0e10cSrcweir     }
735cdf0e10cSrcweir     else
736cdf0e10cSrcweir     {
737cdf0e10cSrcweir         // use the verbose text including the formula for trend lines
738cdf0e10cSrcweir         const bool bVerbose( OBJECTTYPE_DATA_CURVE == eObjectType || OBJECTTYPE_DATA_AVERAGE_LINE == eObjectType );
739cdf0e10cSrcweir         const OUString aHelpText( getHelpText( rObjectCID, xChartModel, bVerbose ));
740*9ec58d04SHerbert Dürr         if( !aHelpText.isEmpty() )
741cdf0e10cSrcweir         {
742cdf0e10cSrcweir             aRet = String( SchResId( STR_STATUS_OBJECT_MARKED ));
743cdf0e10cSrcweir             replaceParamterInString( aRet, C2U("%OBJECTNAME"), aHelpText );
744cdf0e10cSrcweir         }
745cdf0e10cSrcweir     }
746cdf0e10cSrcweir 
747cdf0e10cSrcweir     return aRet;
748cdf0e10cSrcweir }
749cdf0e10cSrcweir 
getNameForCID(const rtl::OUString & rObjectCID,const uno::Reference<chart2::XChartDocument> & xChartDocument)750cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getNameForCID(
751cdf0e10cSrcweir     const rtl::OUString& rObjectCID,
752cdf0e10cSrcweir     const uno::Reference< chart2::XChartDocument >& xChartDocument )
753cdf0e10cSrcweir {
754cdf0e10cSrcweir     ObjectType eType( ObjectIdentifier::getObjectType( rObjectCID ));
755cdf0e10cSrcweir     Reference< frame::XModel > xModel( xChartDocument, uno::UNO_QUERY );
756cdf0e10cSrcweir 
757cdf0e10cSrcweir     switch( eType )
758cdf0e10cSrcweir     {
759cdf0e10cSrcweir         case OBJECTTYPE_AXIS:
760cdf0e10cSrcweir             return getAxisName( rObjectCID, xModel );
761cdf0e10cSrcweir         case OBJECTTYPE_TITLE:
762cdf0e10cSrcweir             return getTitleName( rObjectCID, xModel );
763cdf0e10cSrcweir         case OBJECTTYPE_GRID:
764cdf0e10cSrcweir         case OBJECTTYPE_SUBGRID:
765cdf0e10cSrcweir             return getGridName( rObjectCID, xModel );
766cdf0e10cSrcweir         case OBJECTTYPE_DATA_SERIES:
767cdf0e10cSrcweir             return lcl_getFullSeriesName( rObjectCID, xModel );
768cdf0e10cSrcweir         //case OBJECTTYPE_LEGEND_ENTRY:
769cdf0e10cSrcweir         case OBJECTTYPE_DATA_POINT:
770cdf0e10cSrcweir         case OBJECTTYPE_DATA_LABELS:
771cdf0e10cSrcweir         case OBJECTTYPE_DATA_LABEL:
772cdf0e10cSrcweir         case OBJECTTYPE_DATA_ERRORS:
773cdf0e10cSrcweir         case OBJECTTYPE_DATA_ERRORS_X:
774cdf0e10cSrcweir         case OBJECTTYPE_DATA_ERRORS_Y:
775cdf0e10cSrcweir         case OBJECTTYPE_DATA_ERRORS_Z:
776cdf0e10cSrcweir         case OBJECTTYPE_DATA_CURVE:
777cdf0e10cSrcweir         case OBJECTTYPE_DATA_AVERAGE_LINE:
778cdf0e10cSrcweir         case OBJECTTYPE_DATA_CURVE_EQUATION:
779cdf0e10cSrcweir             {
780cdf0e10cSrcweir                 rtl::OUString aRet = lcl_getFullSeriesName( rObjectCID, xModel );
781cdf0e10cSrcweir                 aRet += C2U(" ");
782cdf0e10cSrcweir                 if( eType == OBJECTTYPE_DATA_POINT || eType == OBJECTTYPE_DATA_LABEL )
783cdf0e10cSrcweir                 {
784cdf0e10cSrcweir                     aRet += getName( OBJECTTYPE_DATA_POINT  );
785cdf0e10cSrcweir                     sal_Int32 nPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( rObjectCID );
786cdf0e10cSrcweir                     aRet += C2U(" ");
787cdf0e10cSrcweir                     aRet += OUString::valueOf(nPointIndex+1);
788cdf0e10cSrcweir 
789cdf0e10cSrcweir                     if( eType == OBJECTTYPE_DATA_LABEL )
790cdf0e10cSrcweir                     {
791cdf0e10cSrcweir                         aRet += C2U(" ");
792cdf0e10cSrcweir                         aRet += getName( OBJECTTYPE_DATA_LABEL  );
793cdf0e10cSrcweir                     }
794cdf0e10cSrcweir                 }
795cdf0e10cSrcweir                 else
796cdf0e10cSrcweir                     aRet += getName( eType );
797cdf0e10cSrcweir                 return aRet;
798cdf0e10cSrcweir             }
799cdf0e10cSrcweir         default:
800cdf0e10cSrcweir             break;
801cdf0e10cSrcweir     }
802cdf0e10cSrcweir 
803cdf0e10cSrcweir     return getName( eType );
804cdf0e10cSrcweir }
805cdf0e10cSrcweir 
getName_ObjectForSeries(ObjectType eObjectType,const rtl::OUString & rSeriesCID,const uno::Reference<chart2::XChartDocument> & xChartDocument)806cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getName_ObjectForSeries(
807cdf0e10cSrcweir         ObjectType eObjectType,
808cdf0e10cSrcweir         const rtl::OUString& rSeriesCID,
809cdf0e10cSrcweir         const uno::Reference< chart2::XChartDocument >& xChartDocument )
810cdf0e10cSrcweir {
811cdf0e10cSrcweir     uno::Reference< frame::XModel> xChartModel( xChartDocument, uno::UNO_QUERY );
812cdf0e10cSrcweir     Reference< XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rSeriesCID , xChartModel ), uno::UNO_QUERY );
813cdf0e10cSrcweir     if( xSeries.is() )
814cdf0e10cSrcweir     {
815cdf0e10cSrcweir         OUString aRet = String(SchResId(STR_OBJECT_FOR_SERIES));
816cdf0e10cSrcweir         replaceParamterInString( aRet, C2U("%OBJECTNAME"), getName( eObjectType, false /*bPlural*/ ) );
817cdf0e10cSrcweir         replaceParamterInString( aRet, C2U("%SERIESNAME"), lcl_getDataSeriesName( rSeriesCID, xChartModel ) );
818cdf0e10cSrcweir         return aRet;
819cdf0e10cSrcweir     }
820cdf0e10cSrcweir     else
821cdf0e10cSrcweir         return ObjectNameProvider::getName_ObjectForAllSeries( eObjectType );
822cdf0e10cSrcweir }
823cdf0e10cSrcweir 
getName_ObjectForAllSeries(ObjectType eObjectType)824cdf0e10cSrcweir rtl::OUString ObjectNameProvider::getName_ObjectForAllSeries( ObjectType eObjectType )
825cdf0e10cSrcweir {
826cdf0e10cSrcweir     OUString aRet = String(SchResId(STR_OBJECT_FOR_ALL_SERIES));
827cdf0e10cSrcweir     replaceParamterInString( aRet, C2U("%OBJECTNAME"), getName( eObjectType, true /*bPlural*/ ) );
828cdf0e10cSrcweir     return aRet;
829cdf0e10cSrcweir }
830cdf0e10cSrcweir 
831cdf0e10cSrcweir //.............................................................................
832cdf0e10cSrcweir } //namespace chart
833cdf0e10cSrcweir //.............................................................................
834