1*63bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*63bba73cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*63bba73cSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*63bba73cSAndrew Rist * distributed with this work for additional information
6*63bba73cSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*63bba73cSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*63bba73cSAndrew Rist * "License"); you may not use this file except in compliance
9*63bba73cSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*63bba73cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*63bba73cSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*63bba73cSAndrew Rist * software distributed under the License is distributed on an
15*63bba73cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*63bba73cSAndrew Rist * KIND, either express or implied. See the License for the
17*63bba73cSAndrew Rist * specific language governing permissions and limitations
18*63bba73cSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*63bba73cSAndrew Rist *************************************************************/
21*63bba73cSAndrew Rist
22*63bba73cSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "SchXMLAxisContext.hxx"
28cdf0e10cSrcweir #include "SchXMLChartContext.hxx"
29cdf0e10cSrcweir #include "SchXMLTools.hxx"
30cdf0e10cSrcweir #include <xmloff/xmlnmspe.hxx>
31cdf0e10cSrcweir #include <xmloff/xmlement.hxx>
32cdf0e10cSrcweir #include <xmloff/xmlstyle.hxx>
33cdf0e10cSrcweir #include <xmloff/prstylei.hxx>
34cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
35cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
36cdf0e10cSrcweir
37cdf0e10cSrcweir #include <tools/debug.hxx>
38cdf0e10cSrcweir
39cdf0e10cSrcweir #include <com/sun/star/chart/ChartAxisLabelPosition.hpp>
40cdf0e10cSrcweir #include <com/sun/star/chart/ChartAxisMarkPosition.hpp>
41cdf0e10cSrcweir #include <com/sun/star/chart/ChartAxisPosition.hpp>
42cdf0e10cSrcweir #include <com/sun/star/chart/ChartAxisType.hpp>
43cdf0e10cSrcweir #include <com/sun/star/chart/TimeIncrement.hpp>
44cdf0e10cSrcweir #include <com/sun/star/chart/TimeInterval.hpp>
45cdf0e10cSrcweir #include <com/sun/star/chart/TimeUnit.hpp>
46cdf0e10cSrcweir #include <com/sun/star/chart/XAxis.hpp>
47cdf0e10cSrcweir #include <com/sun/star/chart/XAxisSupplier.hpp>
48cdf0e10cSrcweir #include <com/sun/star/chart2/AxisType.hpp>
49cdf0e10cSrcweir #include <com/sun/star/chart2/XChartDocument.hpp>
50cdf0e10cSrcweir #include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
51cdf0e10cSrcweir
52cdf0e10cSrcweir #include <com/sun/star/drawing/LineStyle.hpp>
53cdf0e10cSrcweir
54cdf0e10cSrcweir using namespace ::xmloff::token;
55cdf0e10cSrcweir using namespace com::sun::star;
56cdf0e10cSrcweir
57cdf0e10cSrcweir using rtl::OUString;
58cdf0e10cSrcweir using com::sun::star::uno::Reference;
59cdf0e10cSrcweir
60cdf0e10cSrcweir //----------------------------------------
61cdf0e10cSrcweir //----------------------------------------
62cdf0e10cSrcweir
63cdf0e10cSrcweir static SvXMLEnumMapEntry aXMLAxisDimensionMap[] =
64cdf0e10cSrcweir {
65cdf0e10cSrcweir { XML_X, SCH_XML_AXIS_X },
66cdf0e10cSrcweir { XML_Y, SCH_XML_AXIS_Y },
67cdf0e10cSrcweir { XML_Z, SCH_XML_AXIS_Z },
68cdf0e10cSrcweir { XML_TOKEN_INVALID, 0 }
69cdf0e10cSrcweir };
70cdf0e10cSrcweir
71cdf0e10cSrcweir static SvXMLEnumMapEntry aXMLAxisTypeMap[] =
72cdf0e10cSrcweir {
73cdf0e10cSrcweir { XML_AUTO, ::com::sun::star::chart::ChartAxisType::AUTOMATIC },
74cdf0e10cSrcweir { XML_TEXT, ::com::sun::star::chart::ChartAxisType::CATEGORY },
75cdf0e10cSrcweir { XML_DATE, ::com::sun::star::chart::ChartAxisType::DATE },
76cdf0e10cSrcweir { XML_TOKEN_INVALID, 0 }
77cdf0e10cSrcweir };
78cdf0e10cSrcweir
79cdf0e10cSrcweir //----------------------------------------
80cdf0e10cSrcweir //----------------------------------------
81cdf0e10cSrcweir
82cdf0e10cSrcweir class SchXMLCategoriesContext : public SvXMLImportContext
83cdf0e10cSrcweir {
84cdf0e10cSrcweir private:
85cdf0e10cSrcweir SchXMLImportHelper& m_rImportHelper;
86cdf0e10cSrcweir OUString& mrAddress;
87cdf0e10cSrcweir
88cdf0e10cSrcweir public:
89cdf0e10cSrcweir SchXMLCategoriesContext( SchXMLImportHelper& rImpHelper,
90cdf0e10cSrcweir SvXMLImport& rImport,
91cdf0e10cSrcweir sal_uInt16 nPrefix,
92cdf0e10cSrcweir const OUString& rLocalName,
93cdf0e10cSrcweir OUString& rAddress );
94cdf0e10cSrcweir virtual ~SchXMLCategoriesContext();
95cdf0e10cSrcweir virtual void StartElement( const Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
96cdf0e10cSrcweir };
97cdf0e10cSrcweir
98cdf0e10cSrcweir //----------------------------------------
99cdf0e10cSrcweir //----------------------------------------
100cdf0e10cSrcweir
101cdf0e10cSrcweir
102cdf0e10cSrcweir class DateScaleContext : public SvXMLImportContext
103cdf0e10cSrcweir {
104cdf0e10cSrcweir public:
105cdf0e10cSrcweir DateScaleContext( SchXMLImportHelper& rImpHelper, SvXMLImport& rImport,
106cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName,
107cdf0e10cSrcweir const Reference< beans::XPropertySet > xAxisProps );
108cdf0e10cSrcweir
109cdf0e10cSrcweir virtual ~DateScaleContext();
110cdf0e10cSrcweir virtual void StartElement( const Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
111cdf0e10cSrcweir
112cdf0e10cSrcweir private:
113cdf0e10cSrcweir SchXMLImportHelper& m_rImportHelper;
114cdf0e10cSrcweir Reference< beans::XPropertySet > m_xAxisProps;
115cdf0e10cSrcweir };
116cdf0e10cSrcweir
117cdf0e10cSrcweir
118cdf0e10cSrcweir //----------------------------------------
119cdf0e10cSrcweir //----------------------------------------
120cdf0e10cSrcweir
SchXMLAxisContext(SchXMLImportHelper & rImpHelper,SvXMLImport & rImport,const OUString & rLocalName,Reference<chart::XDiagram> xDiagram,std::vector<SchXMLAxis> & rAxes,OUString & rCategoriesAddress,bool bAddMissingXAxisForNetCharts,bool bAdaptWrongPercentScaleValues,bool bAdaptXAxisOrientationForOld2DBarCharts,bool & rbAxisPositionAttributeImported)121cdf0e10cSrcweir SchXMLAxisContext::SchXMLAxisContext( SchXMLImportHelper& rImpHelper,
122cdf0e10cSrcweir SvXMLImport& rImport, const OUString& rLocalName,
123cdf0e10cSrcweir Reference< chart::XDiagram > xDiagram,
124cdf0e10cSrcweir std::vector< SchXMLAxis >& rAxes,
125cdf0e10cSrcweir OUString & rCategoriesAddress,
126cdf0e10cSrcweir bool bAddMissingXAxisForNetCharts,
127cdf0e10cSrcweir bool bAdaptWrongPercentScaleValues,
128cdf0e10cSrcweir bool bAdaptXAxisOrientationForOld2DBarCharts,
129cdf0e10cSrcweir bool& rbAxisPositionAttributeImported ) :
130cdf0e10cSrcweir SvXMLImportContext( rImport, XML_NAMESPACE_CHART, rLocalName ),
131cdf0e10cSrcweir m_rImportHelper( rImpHelper ),
132cdf0e10cSrcweir m_xDiagram( xDiagram ),
133cdf0e10cSrcweir m_rAxes( rAxes ),
134cdf0e10cSrcweir m_rCategoriesAddress( rCategoriesAddress ),
135cdf0e10cSrcweir m_nAxisType(chart::ChartAxisType::AUTOMATIC),
136cdf0e10cSrcweir m_bAxisTypeImported(false),
137cdf0e10cSrcweir m_bDateScaleImported(false),
138cdf0e10cSrcweir m_bAddMissingXAxisForNetCharts( bAddMissingXAxisForNetCharts ),
139cdf0e10cSrcweir m_bAdaptWrongPercentScaleValues( bAdaptWrongPercentScaleValues ),
140cdf0e10cSrcweir m_bAdaptXAxisOrientationForOld2DBarCharts( bAdaptXAxisOrientationForOld2DBarCharts ),
141cdf0e10cSrcweir m_rbAxisPositionAttributeImported( rbAxisPositionAttributeImported )
142cdf0e10cSrcweir {
143cdf0e10cSrcweir }
144cdf0e10cSrcweir
~SchXMLAxisContext()145cdf0e10cSrcweir SchXMLAxisContext::~SchXMLAxisContext()
146cdf0e10cSrcweir {}
147cdf0e10cSrcweir
lcl_getChartAxis(SchXMLAxis aCurrentAxis,const Reference<chart::XDiagram> xDiagram)148cdf0e10cSrcweir Reference< chart::XAxis > lcl_getChartAxis( SchXMLAxis aCurrentAxis, const Reference< chart::XDiagram > xDiagram )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir Reference< chart::XAxis > xAxis;
151cdf0e10cSrcweir Reference< chart::XAxisSupplier > xAxisSuppl( xDiagram, uno::UNO_QUERY );
152cdf0e10cSrcweir if( !xAxisSuppl.is() )
153cdf0e10cSrcweir return xAxis;
154cdf0e10cSrcweir if( aCurrentAxis.nAxisIndex == 0 )
155cdf0e10cSrcweir xAxis = xAxisSuppl->getAxis(aCurrentAxis.eDimension);
156cdf0e10cSrcweir else
157cdf0e10cSrcweir xAxis = xAxisSuppl->getSecondaryAxis(aCurrentAxis.eDimension);
158cdf0e10cSrcweir return xAxis;
159cdf0e10cSrcweir }
160cdf0e10cSrcweir
161cdf0e10cSrcweir /* returns a shape for the current axis's title. The property
162cdf0e10cSrcweir "Has...AxisTitle" is set to "True" to get the shape
163cdf0e10cSrcweir */
getTitleShape()164cdf0e10cSrcweir Reference< drawing::XShape > SchXMLAxisContext::getTitleShape()
165cdf0e10cSrcweir {
166cdf0e10cSrcweir Reference< drawing::XShape > xResult;
167cdf0e10cSrcweir Reference< beans::XPropertySet > xDiaProp( m_rImportHelper.GetChartDocument()->getDiagram(), uno::UNO_QUERY );
168cdf0e10cSrcweir Reference< chart::XAxis > xAxis( lcl_getChartAxis( m_aCurrentAxis, m_xDiagram ) );
169cdf0e10cSrcweir if( !xDiaProp.is() || !xAxis.is() )
170cdf0e10cSrcweir return xResult;
171cdf0e10cSrcweir
172cdf0e10cSrcweir rtl::OUString aPropName;
173cdf0e10cSrcweir switch( m_aCurrentAxis.eDimension )
174cdf0e10cSrcweir {
175cdf0e10cSrcweir case SCH_XML_AXIS_X:
176cdf0e10cSrcweir if( m_aCurrentAxis.nAxisIndex == 0 )
177cdf0e10cSrcweir aPropName = OUString::createFromAscii( "HasXAxisTitle" );
178cdf0e10cSrcweir else
179cdf0e10cSrcweir aPropName = OUString::createFromAscii( "HasSecondaryXAxisTitle" );
180cdf0e10cSrcweir break;
181cdf0e10cSrcweir case SCH_XML_AXIS_Y:
182cdf0e10cSrcweir if( m_aCurrentAxis.nAxisIndex == 0 )
183cdf0e10cSrcweir aPropName = OUString::createFromAscii( "HasYAxisTitle" );
184cdf0e10cSrcweir else
185cdf0e10cSrcweir aPropName = OUString::createFromAscii( "HasSecondaryYAxisTitle" );
186cdf0e10cSrcweir break;
187cdf0e10cSrcweir case SCH_XML_AXIS_Z:
188cdf0e10cSrcweir aPropName = OUString::createFromAscii( "HasZAxisTitle" );
189cdf0e10cSrcweir break;
190cdf0e10cSrcweir case SCH_XML_AXIS_UNDEF:
191cdf0e10cSrcweir DBG_ERROR( "Invalid axis" );
192cdf0e10cSrcweir break;
193cdf0e10cSrcweir }
194cdf0e10cSrcweir xDiaProp->setPropertyValue( aPropName, uno::makeAny(sal_True) );
195cdf0e10cSrcweir xResult = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY );
196cdf0e10cSrcweir return xResult;
197cdf0e10cSrcweir }
198cdf0e10cSrcweir
CreateGrid(OUString sAutoStyleName,bool bIsMajor)199cdf0e10cSrcweir void SchXMLAxisContext::CreateGrid( OUString sAutoStyleName, bool bIsMajor )
200cdf0e10cSrcweir {
201cdf0e10cSrcweir Reference< beans::XPropertySet > xDiaProp( m_rImportHelper.GetChartDocument()->getDiagram(), uno::UNO_QUERY );
202cdf0e10cSrcweir Reference< chart::XAxis > xAxis( lcl_getChartAxis( m_aCurrentAxis, m_xDiagram ) );
203cdf0e10cSrcweir if( !xDiaProp.is() || !xAxis.is() )
204cdf0e10cSrcweir return;
205cdf0e10cSrcweir
206cdf0e10cSrcweir rtl::OUString aPropName;
207cdf0e10cSrcweir switch( m_aCurrentAxis.eDimension )
208cdf0e10cSrcweir {
209cdf0e10cSrcweir case SCH_XML_AXIS_X:
210cdf0e10cSrcweir if( bIsMajor )
211cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasXAxisGrid");
212cdf0e10cSrcweir else
213cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasXAxisHelpGrid");
214cdf0e10cSrcweir break;
215cdf0e10cSrcweir case SCH_XML_AXIS_Y:
216cdf0e10cSrcweir if( bIsMajor )
217cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasYAxisGrid");
218cdf0e10cSrcweir else
219cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasYAxisHelpGrid");
220cdf0e10cSrcweir break;
221cdf0e10cSrcweir case SCH_XML_AXIS_Z:
222cdf0e10cSrcweir if( bIsMajor )
223cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasZAxisGrid");
224cdf0e10cSrcweir else
225cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasZAxisHelpGrid");
226cdf0e10cSrcweir break;
227cdf0e10cSrcweir case SCH_XML_AXIS_UNDEF:
228cdf0e10cSrcweir DBG_ERROR( "Invalid axis" );
229cdf0e10cSrcweir break;
230cdf0e10cSrcweir }
231cdf0e10cSrcweir xDiaProp->setPropertyValue( aPropName, uno::makeAny(sal_True) );
232cdf0e10cSrcweir
233cdf0e10cSrcweir Reference< beans::XPropertySet > xGridProp;
234cdf0e10cSrcweir if( bIsMajor )
235cdf0e10cSrcweir xGridProp = xAxis->getMajorGrid();
236cdf0e10cSrcweir else
237cdf0e10cSrcweir xGridProp = xAxis->getMinorGrid();
238cdf0e10cSrcweir
239cdf0e10cSrcweir // set properties
240cdf0e10cSrcweir if( xGridProp.is())
241cdf0e10cSrcweir {
242cdf0e10cSrcweir // the line color is black as default, in the model it is a light gray
243cdf0e10cSrcweir xGridProp->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "LineColor" )),
244cdf0e10cSrcweir uno::makeAny( COL_BLACK ));
245cdf0e10cSrcweir if( sAutoStyleName.getLength())
246cdf0e10cSrcweir {
247cdf0e10cSrcweir const SvXMLStylesContext* pStylesCtxt = m_rImportHelper.GetAutoStylesContext();
248cdf0e10cSrcweir if( pStylesCtxt )
249cdf0e10cSrcweir {
250cdf0e10cSrcweir const SvXMLStyleContext* pStyle = pStylesCtxt->FindStyleChildContext(
251cdf0e10cSrcweir m_rImportHelper.GetChartFamilyID(), sAutoStyleName );
252cdf0e10cSrcweir
253cdf0e10cSrcweir if( pStyle && pStyle->ISA( XMLPropStyleContext ))
254cdf0e10cSrcweir (( XMLPropStyleContext* )pStyle )->FillPropertySet( xGridProp );
255cdf0e10cSrcweir }
256cdf0e10cSrcweir }
257cdf0e10cSrcweir }
258cdf0e10cSrcweir }
259cdf0e10cSrcweir
260cdf0e10cSrcweir namespace
261cdf0e10cSrcweir {
262cdf0e10cSrcweir enum AxisAttributeTokens
263cdf0e10cSrcweir {
264cdf0e10cSrcweir XML_TOK_AXIS_DIMENSION,
265cdf0e10cSrcweir XML_TOK_AXIS_NAME,
266cdf0e10cSrcweir XML_TOK_AXIS_STYLE_NAME,
267cdf0e10cSrcweir XML_TOK_AXIS_TYPE,
268cdf0e10cSrcweir XML_TOK_AXIS_TYPE_EXT
269cdf0e10cSrcweir };
270cdf0e10cSrcweir
271cdf0e10cSrcweir SvXMLTokenMapEntry aAxisAttributeTokenMap[] =
272cdf0e10cSrcweir {
273cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_DIMENSION, XML_TOK_AXIS_DIMENSION },
274cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_NAME, XML_TOK_AXIS_NAME },
275cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_STYLE_NAME, XML_TOK_AXIS_STYLE_NAME },
276cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_AXIS_TYPE, XML_TOK_AXIS_TYPE },
277cdf0e10cSrcweir { XML_NAMESPACE_CHART_EXT, XML_AXIS_TYPE, XML_TOK_AXIS_TYPE_EXT },
278cdf0e10cSrcweir XML_TOKEN_MAP_END
279cdf0e10cSrcweir };
280cdf0e10cSrcweir
281cdf0e10cSrcweir class AxisAttributeTokenMap : public SvXMLTokenMap
282cdf0e10cSrcweir {
283cdf0e10cSrcweir public:
AxisAttributeTokenMap()284cdf0e10cSrcweir AxisAttributeTokenMap(): SvXMLTokenMap( aAxisAttributeTokenMap ) {}
~AxisAttributeTokenMap()285cdf0e10cSrcweir virtual ~AxisAttributeTokenMap() {}
286cdf0e10cSrcweir };
287cdf0e10cSrcweir
288cdf0e10cSrcweir //a AxisAttributeTokenMap Singleton
289cdf0e10cSrcweir struct theAxisAttributeTokenMap : public rtl::Static< AxisAttributeTokenMap, theAxisAttributeTokenMap > {};
290cdf0e10cSrcweir }
291cdf0e10cSrcweir
StartElement(const Reference<xml::sax::XAttributeList> & xAttrList)292cdf0e10cSrcweir void SchXMLAxisContext::StartElement( const Reference< xml::sax::XAttributeList >& xAttrList )
293cdf0e10cSrcweir {
294cdf0e10cSrcweir // parse attributes
295cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0;
296cdf0e10cSrcweir SchXMLImport& rImport = ( SchXMLImport& )GetImport();
297cdf0e10cSrcweir const SvXMLTokenMap& rAttrTokenMap = theAxisAttributeTokenMap::get();
298cdf0e10cSrcweir
299cdf0e10cSrcweir for( sal_Int16 i = 0; i < nAttrCount; i++ )
300cdf0e10cSrcweir {
301cdf0e10cSrcweir OUString sAttrName = xAttrList->getNameByIndex( i );
302cdf0e10cSrcweir OUString aLocalName;
303cdf0e10cSrcweir OUString aValue = xAttrList->getValueByIndex( i );
304cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
305cdf0e10cSrcweir
306cdf0e10cSrcweir switch( rAttrTokenMap.Get( nPrefix, aLocalName ))
307cdf0e10cSrcweir {
308cdf0e10cSrcweir case XML_TOK_AXIS_DIMENSION:
309cdf0e10cSrcweir {
310cdf0e10cSrcweir sal_uInt16 nEnumVal;
311cdf0e10cSrcweir if( rImport.GetMM100UnitConverter().convertEnum( nEnumVal, aValue, aXMLAxisDimensionMap ))
312cdf0e10cSrcweir m_aCurrentAxis.eDimension = ( SchXMLAxisDimension )nEnumVal;
313cdf0e10cSrcweir }
314cdf0e10cSrcweir break;
315cdf0e10cSrcweir case XML_TOK_AXIS_NAME:
316cdf0e10cSrcweir m_aCurrentAxis.aName = aValue;
317cdf0e10cSrcweir break;
318cdf0e10cSrcweir case XML_TOK_AXIS_TYPE:
319cdf0e10cSrcweir case XML_TOK_AXIS_TYPE_EXT:
320cdf0e10cSrcweir sal_uInt16 nEnumVal;
321cdf0e10cSrcweir if( rImport.GetMM100UnitConverter().convertEnum( nEnumVal, aValue, aXMLAxisTypeMap ))
322cdf0e10cSrcweir {
323cdf0e10cSrcweir m_nAxisType = nEnumVal;
324cdf0e10cSrcweir m_bAxisTypeImported = true;
325cdf0e10cSrcweir }
326cdf0e10cSrcweir break;
327cdf0e10cSrcweir case XML_TOK_AXIS_STYLE_NAME:
328cdf0e10cSrcweir m_aAutoStyleName = aValue;
329cdf0e10cSrcweir break;
330cdf0e10cSrcweir }
331cdf0e10cSrcweir }
332cdf0e10cSrcweir
333cdf0e10cSrcweir // check for number of axes with same dimension
334cdf0e10cSrcweir m_aCurrentAxis.nAxisIndex = 0;
335cdf0e10cSrcweir sal_Int32 nNumOfAxes = m_rAxes.size();
336cdf0e10cSrcweir for( sal_Int32 nCurrent = 0; nCurrent < nNumOfAxes; nCurrent++ )
337cdf0e10cSrcweir {
338cdf0e10cSrcweir if( m_rAxes[ nCurrent ].eDimension == m_aCurrentAxis.eDimension )
339cdf0e10cSrcweir m_aCurrentAxis.nAxisIndex++;
340cdf0e10cSrcweir }
341cdf0e10cSrcweir CreateAxis();
342cdf0e10cSrcweir }
343cdf0e10cSrcweir namespace
344cdf0e10cSrcweir {
345cdf0e10cSrcweir
lcl_getAxis(const Reference<frame::XModel> & xChartModel,sal_Int32 nDimensionIndex,sal_Int32 nAxisIndex)346cdf0e10cSrcweir Reference< chart2::XAxis > lcl_getAxis( const Reference< frame::XModel >& xChartModel,
347cdf0e10cSrcweir sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex )
348cdf0e10cSrcweir {
349cdf0e10cSrcweir Reference< chart2::XAxis > xAxis;
350cdf0e10cSrcweir
351cdf0e10cSrcweir try
352cdf0e10cSrcweir {
353cdf0e10cSrcweir Reference< chart2::XChartDocument > xChart2Document( xChartModel, uno::UNO_QUERY );
354cdf0e10cSrcweir if( xChart2Document.is() )
355cdf0e10cSrcweir {
356cdf0e10cSrcweir Reference< chart2::XDiagram > xDiagram( xChart2Document->getFirstDiagram());
357cdf0e10cSrcweir Reference< chart2::XCoordinateSystemContainer > xCooSysCnt( xDiagram, uno::UNO_QUERY_THROW );
358cdf0e10cSrcweir uno::Sequence< Reference< chart2::XCoordinateSystem > >
359cdf0e10cSrcweir aCooSysSeq( xCooSysCnt->getCoordinateSystems());
360cdf0e10cSrcweir sal_Int32 nCooSysIndex = 0;
361cdf0e10cSrcweir if( nCooSysIndex < aCooSysSeq.getLength() )
362cdf0e10cSrcweir {
363cdf0e10cSrcweir Reference< chart2::XCoordinateSystem > xCooSys( aCooSysSeq[nCooSysIndex] );
364cdf0e10cSrcweir if( xCooSys.is() && nDimensionIndex < xCooSys->getDimension() )
365cdf0e10cSrcweir {
366cdf0e10cSrcweir const sal_Int32 nMaxAxisIndex = xCooSys->getMaximumAxisIndexByDimension(nDimensionIndex);
367cdf0e10cSrcweir if( nAxisIndex <= nMaxAxisIndex )
368cdf0e10cSrcweir xAxis = xCooSys->getAxisByDimension( nDimensionIndex, nAxisIndex );
369cdf0e10cSrcweir }
370cdf0e10cSrcweir }
371cdf0e10cSrcweir }
372cdf0e10cSrcweir }
373cdf0e10cSrcweir catch( uno::Exception & )
374cdf0e10cSrcweir {
375cdf0e10cSrcweir DBG_ERROR( "Couldn't get axis" );
376cdf0e10cSrcweir }
377cdf0e10cSrcweir
378cdf0e10cSrcweir return xAxis;
379cdf0e10cSrcweir }
380cdf0e10cSrcweir
lcl_divideBy100(uno::Any & rDoubleAny)381cdf0e10cSrcweir bool lcl_divideBy100( uno::Any& rDoubleAny )
382cdf0e10cSrcweir {
383cdf0e10cSrcweir bool bChanged = false;
384cdf0e10cSrcweir double fValue=0.0;
385cdf0e10cSrcweir if( (rDoubleAny>>=fValue) && (fValue!=0.0) )
386cdf0e10cSrcweir {
387cdf0e10cSrcweir fValue/=100.0;
388cdf0e10cSrcweir rDoubleAny = uno::makeAny(fValue);
389cdf0e10cSrcweir bChanged = true;
390cdf0e10cSrcweir }
391cdf0e10cSrcweir return bChanged;
392cdf0e10cSrcweir }
393cdf0e10cSrcweir
lcl_AdaptWrongPercentScaleValues(chart2::ScaleData & rScaleData)394cdf0e10cSrcweir bool lcl_AdaptWrongPercentScaleValues(chart2::ScaleData& rScaleData)
395cdf0e10cSrcweir {
396cdf0e10cSrcweir bool bChanged = lcl_divideBy100( rScaleData.Minimum );
397cdf0e10cSrcweir bChanged = lcl_divideBy100( rScaleData.Maximum ) || bChanged;
398cdf0e10cSrcweir bChanged = lcl_divideBy100( rScaleData.Origin ) || bChanged;
399cdf0e10cSrcweir bChanged = lcl_divideBy100( rScaleData.IncrementData.Distance ) || bChanged;
400cdf0e10cSrcweir return bChanged;
401cdf0e10cSrcweir }
402cdf0e10cSrcweir
403cdf0e10cSrcweir }//end anonymous namespace
404cdf0e10cSrcweir
CreateAxis()405cdf0e10cSrcweir void SchXMLAxisContext::CreateAxis()
406cdf0e10cSrcweir {
407cdf0e10cSrcweir m_rAxes.push_back( m_aCurrentAxis );
408cdf0e10cSrcweir
409cdf0e10cSrcweir Reference< beans::XPropertySet > xDiaProp( m_rImportHelper.GetChartDocument()->getDiagram(), uno::UNO_QUERY );
410cdf0e10cSrcweir if( !xDiaProp.is() )
411cdf0e10cSrcweir return;
412cdf0e10cSrcweir rtl::OUString aPropName;
413cdf0e10cSrcweir switch( m_aCurrentAxis.eDimension )
414cdf0e10cSrcweir {
415cdf0e10cSrcweir case SCH_XML_AXIS_X:
416cdf0e10cSrcweir if( m_aCurrentAxis.nAxisIndex == 0 )
417cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasXAxis");
418cdf0e10cSrcweir else
419cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasSecondaryXAxis");
420cdf0e10cSrcweir break;
421cdf0e10cSrcweir case SCH_XML_AXIS_Y:
422cdf0e10cSrcweir if( m_aCurrentAxis.nAxisIndex == 0 )
423cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasYAxis");
424cdf0e10cSrcweir else
425cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasSecondaryYAxis");
426cdf0e10cSrcweir break;
427cdf0e10cSrcweir case SCH_XML_AXIS_Z:
428cdf0e10cSrcweir if( m_aCurrentAxis.nAxisIndex == 0 )
429cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasXAxis");
430cdf0e10cSrcweir else
431cdf0e10cSrcweir aPropName = OUString::createFromAscii("HasSecondaryXAxis");
432cdf0e10cSrcweir break;
433cdf0e10cSrcweir case SCH_XML_AXIS_UNDEF:
434cdf0e10cSrcweir DBG_ERROR( "Invalid axis" );
435cdf0e10cSrcweir break;
436cdf0e10cSrcweir }
437cdf0e10cSrcweir try
438cdf0e10cSrcweir {
439cdf0e10cSrcweir xDiaProp->setPropertyValue( aPropName, uno::makeAny(sal_True) );
440cdf0e10cSrcweir }
441cdf0e10cSrcweir catch( beans::UnknownPropertyException & )
442cdf0e10cSrcweir {
443cdf0e10cSrcweir DBG_ERROR( "Couldn't turn on axis" );
444cdf0e10cSrcweir }
445cdf0e10cSrcweir if( m_aCurrentAxis.eDimension==SCH_XML_AXIS_Z )
446cdf0e10cSrcweir {
447cdf0e10cSrcweir bool bSettingZAxisSuccedded = false;
448cdf0e10cSrcweir try
449cdf0e10cSrcweir {
450cdf0e10cSrcweir xDiaProp->getPropertyValue( aPropName ) >>= bSettingZAxisSuccedded;
451cdf0e10cSrcweir }
452cdf0e10cSrcweir catch( beans::UnknownPropertyException & )
453cdf0e10cSrcweir {
454cdf0e10cSrcweir DBG_ERROR( "Couldn't turn on z axis" );
455cdf0e10cSrcweir }
456cdf0e10cSrcweir if( !bSettingZAxisSuccedded )
457cdf0e10cSrcweir return;
458cdf0e10cSrcweir }
459cdf0e10cSrcweir
460cdf0e10cSrcweir
461cdf0e10cSrcweir m_xAxisProps = Reference<beans::XPropertySet>( lcl_getChartAxis( m_aCurrentAxis, m_xDiagram ), uno::UNO_QUERY );
462cdf0e10cSrcweir
463cdf0e10cSrcweir if( m_bAddMissingXAxisForNetCharts && m_aCurrentAxis.eDimension==SCH_XML_AXIS_Y && m_aCurrentAxis.nAxisIndex==0 )
464cdf0e10cSrcweir {
465cdf0e10cSrcweir try
466cdf0e10cSrcweir {
467cdf0e10cSrcweir xDiaProp->setPropertyValue( OUString::createFromAscii( "HasXAxis" ), uno::makeAny(sal_True) );
468cdf0e10cSrcweir }
469cdf0e10cSrcweir catch( beans::UnknownPropertyException & )
470cdf0e10cSrcweir {
471cdf0e10cSrcweir DBG_ERROR( "Couldn't turn on x axis" );
472cdf0e10cSrcweir }
473cdf0e10cSrcweir }
474cdf0e10cSrcweir
475cdf0e10cSrcweir // set properties
476cdf0e10cSrcweir if( m_xAxisProps.is())
477cdf0e10cSrcweir {
478cdf0e10cSrcweir uno::Any aTrueBool( uno::makeAny( sal_True ));
479cdf0e10cSrcweir uno::Any aFalseBool( uno::makeAny( sal_False ));
480cdf0e10cSrcweir
481cdf0e10cSrcweir // #i109879# the line color is black as default, in the model it is a light gray
482cdf0e10cSrcweir m_xAxisProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "LineColor" )),
483cdf0e10cSrcweir uno::makeAny( COL_BLACK ));
484cdf0e10cSrcweir
485cdf0e10cSrcweir m_xAxisProps->setPropertyValue( OUString::createFromAscii( "DisplayLabels" ), aFalseBool );
486cdf0e10cSrcweir
487cdf0e10cSrcweir // #88077# AutoOrigin 'on' is default
488cdf0e10cSrcweir m_xAxisProps->setPropertyValue( OUString::createFromAscii( "AutoOrigin" ), aTrueBool );
489cdf0e10cSrcweir
490cdf0e10cSrcweir if( m_bAxisTypeImported )
491cdf0e10cSrcweir m_xAxisProps->setPropertyValue( OUString::createFromAscii( "AxisType" ), uno::makeAny(m_nAxisType) );
492cdf0e10cSrcweir
493cdf0e10cSrcweir if( m_aAutoStyleName.getLength())
494cdf0e10cSrcweir {
495cdf0e10cSrcweir const SvXMLStylesContext* pStylesCtxt = m_rImportHelper.GetAutoStylesContext();
496cdf0e10cSrcweir if( pStylesCtxt )
497cdf0e10cSrcweir {
498cdf0e10cSrcweir const SvXMLStyleContext* pStyle = pStylesCtxt->FindStyleChildContext(
499cdf0e10cSrcweir m_rImportHelper.GetChartFamilyID(), m_aAutoStyleName );
500cdf0e10cSrcweir
501cdf0e10cSrcweir if( pStyle && pStyle->ISA( XMLPropStyleContext ))
502cdf0e10cSrcweir {
503cdf0e10cSrcweir // note: SvXMLStyleContext::FillPropertySet is not const
504cdf0e10cSrcweir XMLPropStyleContext * pPropStyleContext = const_cast< XMLPropStyleContext * >( dynamic_cast< const XMLPropStyleContext * >( pStyle ));
505cdf0e10cSrcweir if( pPropStyleContext )
506cdf0e10cSrcweir pPropStyleContext->FillPropertySet( m_xAxisProps );
507cdf0e10cSrcweir
508cdf0e10cSrcweir if( m_bAdaptWrongPercentScaleValues && m_aCurrentAxis.eDimension==SCH_XML_AXIS_Y )
509cdf0e10cSrcweir {
510cdf0e10cSrcweir //set scale data of added x axis back to default
511cdf0e10cSrcweir Reference< chart2::XAxis > xAxis( lcl_getAxis( GetImport().GetModel(),
512cdf0e10cSrcweir m_aCurrentAxis.eDimension, m_aCurrentAxis.nAxisIndex ) );
513cdf0e10cSrcweir if( xAxis.is() )
514cdf0e10cSrcweir {
515cdf0e10cSrcweir chart2::ScaleData aScaleData( xAxis->getScaleData());
516cdf0e10cSrcweir if( lcl_AdaptWrongPercentScaleValues(aScaleData) )
517cdf0e10cSrcweir xAxis->setScaleData( aScaleData );
518cdf0e10cSrcweir }
519cdf0e10cSrcweir }
520cdf0e10cSrcweir
521cdf0e10cSrcweir if( m_bAddMissingXAxisForNetCharts )
522cdf0e10cSrcweir {
523cdf0e10cSrcweir //copy style from y axis to added x axis:
524cdf0e10cSrcweir
525cdf0e10cSrcweir Reference< chart::XAxisSupplier > xAxisSuppl( xDiaProp, uno::UNO_QUERY );
526cdf0e10cSrcweir if( xAxisSuppl.is() )
527cdf0e10cSrcweir {
528cdf0e10cSrcweir Reference< beans::XPropertySet > xXAxisProp( xAxisSuppl->getAxis(0), uno::UNO_QUERY );
529cdf0e10cSrcweir (( XMLPropStyleContext* )pStyle )->FillPropertySet( xXAxisProp );
530cdf0e10cSrcweir }
531cdf0e10cSrcweir
532cdf0e10cSrcweir //set scale data of added x axis back to default
533cdf0e10cSrcweir Reference< chart2::XAxis > xAxis( lcl_getAxis( GetImport().GetModel(),
534cdf0e10cSrcweir 0 /*nDimensionIndex*/, 0 /*nAxisIndex*/ ) );
535cdf0e10cSrcweir if( xAxis.is() )
536cdf0e10cSrcweir {
537cdf0e10cSrcweir chart2::ScaleData aScaleData;
538cdf0e10cSrcweir aScaleData.AxisType = chart2::AxisType::CATEGORY;
539cdf0e10cSrcweir aScaleData.Orientation = chart2::AxisOrientation_MATHEMATICAL;
540cdf0e10cSrcweir xAxis->setScaleData( aScaleData );
541cdf0e10cSrcweir }
542cdf0e10cSrcweir
543cdf0e10cSrcweir //set line style of added x axis to invisible
544cdf0e10cSrcweir Reference< beans::XPropertySet > xNewAxisProp( xAxis, uno::UNO_QUERY );
545cdf0e10cSrcweir if( xNewAxisProp.is() )
546cdf0e10cSrcweir {
547cdf0e10cSrcweir xNewAxisProp->setPropertyValue( OUString::createFromAscii("LineStyle")
548cdf0e10cSrcweir , uno::makeAny(drawing::LineStyle_NONE));
549cdf0e10cSrcweir }
550cdf0e10cSrcweir }
551cdf0e10cSrcweir
552cdf0e10cSrcweir if( m_bAdaptXAxisOrientationForOld2DBarCharts && m_aCurrentAxis.eDimension == SCH_XML_AXIS_X )
553cdf0e10cSrcweir {
554cdf0e10cSrcweir bool bIs3DChart = false;
555cdf0e10cSrcweir if( xDiaProp.is() && ( xDiaProp->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Dim3D"))) >>= bIs3DChart )
556cdf0e10cSrcweir && !bIs3DChart )
557cdf0e10cSrcweir {
558cdf0e10cSrcweir Reference< chart2::XChartDocument > xChart2Document( GetImport().GetModel(), uno::UNO_QUERY );
559cdf0e10cSrcweir if( xChart2Document.is() )
560cdf0e10cSrcweir {
561cdf0e10cSrcweir Reference< chart2::XCoordinateSystemContainer > xCooSysCnt( xChart2Document->getFirstDiagram(), uno::UNO_QUERY );
562cdf0e10cSrcweir if( xCooSysCnt.is() )
563cdf0e10cSrcweir {
564cdf0e10cSrcweir uno::Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq( xCooSysCnt->getCoordinateSystems() );
565cdf0e10cSrcweir if( aCooSysSeq.getLength() )
566cdf0e10cSrcweir {
567cdf0e10cSrcweir bool bSwapXandYAxis = false;
568cdf0e10cSrcweir Reference< chart2::XCoordinateSystem > xCooSys( aCooSysSeq[0] );
569cdf0e10cSrcweir Reference< beans::XPropertySet > xCooSysProp( xCooSys, uno::UNO_QUERY );
570cdf0e10cSrcweir if( xCooSysProp.is() && ( xCooSysProp->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("SwapXAndYAxis"))) >>= bSwapXandYAxis )
571cdf0e10cSrcweir && bSwapXandYAxis )
572cdf0e10cSrcweir {
573cdf0e10cSrcweir Reference< chart2::XAxis > xAxis = xCooSys->getAxisByDimension( 0, m_aCurrentAxis.nAxisIndex );
574cdf0e10cSrcweir if( xAxis.is() )
575cdf0e10cSrcweir {
576cdf0e10cSrcweir chart2::ScaleData aScaleData = xAxis->getScaleData();
577cdf0e10cSrcweir aScaleData.Orientation = chart2::AxisOrientation_REVERSE;
578cdf0e10cSrcweir xAxis->setScaleData( aScaleData );
579cdf0e10cSrcweir }
580cdf0e10cSrcweir }
581cdf0e10cSrcweir }
582cdf0e10cSrcweir }
583cdf0e10cSrcweir }
584cdf0e10cSrcweir }
585cdf0e10cSrcweir }
586cdf0e10cSrcweir
587cdf0e10cSrcweir m_rbAxisPositionAttributeImported = m_rbAxisPositionAttributeImported || SchXMLTools::getPropertyFromContext(
588cdf0e10cSrcweir OUString(RTL_CONSTASCII_USTRINGPARAM("CrossoverPosition")), pPropStyleContext, pStylesCtxt ).hasValue();
589cdf0e10cSrcweir }
590cdf0e10cSrcweir }
591cdf0e10cSrcweir }
592cdf0e10cSrcweir }
593cdf0e10cSrcweir }
594cdf0e10cSrcweir
SetAxisTitle()595cdf0e10cSrcweir void SchXMLAxisContext::SetAxisTitle()
596cdf0e10cSrcweir {
597cdf0e10cSrcweir if( !m_aCurrentAxis.aTitle.getLength() )
598cdf0e10cSrcweir return;
599cdf0e10cSrcweir
600cdf0e10cSrcweir Reference< chart::XAxis > xAxis( lcl_getChartAxis( m_aCurrentAxis, m_xDiagram ) );
601cdf0e10cSrcweir if( !xAxis.is() )
602cdf0e10cSrcweir return;
603cdf0e10cSrcweir
604cdf0e10cSrcweir Reference< beans::XPropertySet > xTitleProp( xAxis->getAxisTitle() );
605cdf0e10cSrcweir if( xTitleProp.is() )
606cdf0e10cSrcweir {
607cdf0e10cSrcweir try
608cdf0e10cSrcweir {
609cdf0e10cSrcweir xTitleProp->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "String" )), uno::makeAny(m_aCurrentAxis.aTitle) );
610cdf0e10cSrcweir }
611cdf0e10cSrcweir catch( beans::UnknownPropertyException & )
612cdf0e10cSrcweir {
613cdf0e10cSrcweir DBG_ERROR( "Property String for Title not available" );
614cdf0e10cSrcweir }
615cdf0e10cSrcweir }
616cdf0e10cSrcweir }
617cdf0e10cSrcweir
618cdf0e10cSrcweir //-----------------------------------------------------------------------
619cdf0e10cSrcweir namespace
620cdf0e10cSrcweir {
621cdf0e10cSrcweir enum AxisChildTokens
622cdf0e10cSrcweir {
623cdf0e10cSrcweir XML_TOK_AXIS_TITLE,
624cdf0e10cSrcweir XML_TOK_AXIS_CATEGORIES,
625cdf0e10cSrcweir XML_TOK_AXIS_GRID,
626cdf0e10cSrcweir XML_TOK_AXIS_DATE_SCALE,
627cdf0e10cSrcweir XML_TOK_AXIS_DATE_SCALE_EXT
628cdf0e10cSrcweir };
629cdf0e10cSrcweir
630cdf0e10cSrcweir SvXMLTokenMapEntry aAxisChildTokenMap[] =
631cdf0e10cSrcweir {
632cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_TITLE, XML_TOK_AXIS_TITLE },
633cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_CATEGORIES, XML_TOK_AXIS_CATEGORIES },
634cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_GRID, XML_TOK_AXIS_GRID },
635cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_DATE_SCALE, XML_TOK_AXIS_DATE_SCALE },
636cdf0e10cSrcweir { XML_NAMESPACE_CHART_EXT, XML_DATE_SCALE, XML_TOK_AXIS_DATE_SCALE_EXT },
637cdf0e10cSrcweir XML_TOKEN_MAP_END
638cdf0e10cSrcweir };
639cdf0e10cSrcweir
640cdf0e10cSrcweir class AxisChildTokenMap : public SvXMLTokenMap
641cdf0e10cSrcweir {
642cdf0e10cSrcweir public:
AxisChildTokenMap()643cdf0e10cSrcweir AxisChildTokenMap(): SvXMLTokenMap( aAxisChildTokenMap ) {}
~AxisChildTokenMap()644cdf0e10cSrcweir virtual ~AxisChildTokenMap() {}
645cdf0e10cSrcweir };
646cdf0e10cSrcweir
647cdf0e10cSrcweir //a AxisChildTokenMap Singleton
648cdf0e10cSrcweir struct theAxisChildTokenMap : public rtl::Static< AxisChildTokenMap, theAxisChildTokenMap > {};
649cdf0e10cSrcweir }
650cdf0e10cSrcweir
CreateChildContext(sal_uInt16 p_nPrefix,const OUString & rLocalName,const Reference<xml::sax::XAttributeList> & xAttrList)651cdf0e10cSrcweir SvXMLImportContext* SchXMLAxisContext::CreateChildContext(
652cdf0e10cSrcweir sal_uInt16 p_nPrefix,
653cdf0e10cSrcweir const OUString& rLocalName,
654cdf0e10cSrcweir const Reference< xml::sax::XAttributeList >& xAttrList )
655cdf0e10cSrcweir {
656cdf0e10cSrcweir SvXMLImportContext* pContext = 0;
657cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap = theAxisChildTokenMap::get();
658cdf0e10cSrcweir
659cdf0e10cSrcweir switch( rTokenMap.Get( p_nPrefix, rLocalName ))
660cdf0e10cSrcweir {
661cdf0e10cSrcweir case XML_TOK_AXIS_TITLE:
662cdf0e10cSrcweir {
663cdf0e10cSrcweir Reference< drawing::XShape > xTitleShape = getTitleShape();
664cdf0e10cSrcweir pContext = new SchXMLTitleContext( m_rImportHelper, GetImport(), rLocalName,
665cdf0e10cSrcweir m_aCurrentAxis.aTitle,
666cdf0e10cSrcweir xTitleShape );
667cdf0e10cSrcweir }
668cdf0e10cSrcweir break;
669cdf0e10cSrcweir
670cdf0e10cSrcweir case XML_TOK_AXIS_CATEGORIES:
671cdf0e10cSrcweir pContext = new SchXMLCategoriesContext( m_rImportHelper, GetImport(),
672cdf0e10cSrcweir p_nPrefix, rLocalName,
673cdf0e10cSrcweir m_rCategoriesAddress );
674cdf0e10cSrcweir m_aCurrentAxis.bHasCategories = true;
675cdf0e10cSrcweir break;
676cdf0e10cSrcweir
677cdf0e10cSrcweir case XML_TOK_AXIS_DATE_SCALE:
678cdf0e10cSrcweir case XML_TOK_AXIS_DATE_SCALE_EXT:
679cdf0e10cSrcweir pContext = new DateScaleContext( m_rImportHelper, GetImport(),
680cdf0e10cSrcweir p_nPrefix, rLocalName, m_xAxisProps );
681cdf0e10cSrcweir m_bDateScaleImported = true;
682cdf0e10cSrcweir break;
683cdf0e10cSrcweir
684cdf0e10cSrcweir case XML_TOK_AXIS_GRID:
685cdf0e10cSrcweir {
686cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0;
687cdf0e10cSrcweir bool bIsMajor = true; // default value for class is "major"
688cdf0e10cSrcweir OUString sAutoStyleName;
689cdf0e10cSrcweir
690cdf0e10cSrcweir for( sal_Int16 i = 0; i < nAttrCount; i++ )
691cdf0e10cSrcweir {
692cdf0e10cSrcweir OUString sAttrName = xAttrList->getNameByIndex( i );
693cdf0e10cSrcweir OUString aLocalName;
694cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
695cdf0e10cSrcweir
696cdf0e10cSrcweir if( nPrefix == XML_NAMESPACE_CHART )
697cdf0e10cSrcweir {
698cdf0e10cSrcweir if( IsXMLToken( aLocalName, XML_CLASS ) )
699cdf0e10cSrcweir {
700cdf0e10cSrcweir if( IsXMLToken( xAttrList->getValueByIndex( i ), XML_MINOR ) )
701cdf0e10cSrcweir bIsMajor = false;
702cdf0e10cSrcweir }
703cdf0e10cSrcweir else if( IsXMLToken( aLocalName, XML_STYLE_NAME ) )
704cdf0e10cSrcweir sAutoStyleName = xAttrList->getValueByIndex( i );
705cdf0e10cSrcweir }
706cdf0e10cSrcweir }
707cdf0e10cSrcweir
708cdf0e10cSrcweir CreateGrid( sAutoStyleName, bIsMajor );
709cdf0e10cSrcweir
710cdf0e10cSrcweir // don't create a context => use default context. grid elements are empty
711cdf0e10cSrcweir pContext = new SvXMLImportContext( GetImport(), p_nPrefix, rLocalName );
712cdf0e10cSrcweir }
713cdf0e10cSrcweir break;
714cdf0e10cSrcweir
715cdf0e10cSrcweir default:
716cdf0e10cSrcweir pContext = new SvXMLImportContext( GetImport(), p_nPrefix, rLocalName );
717cdf0e10cSrcweir break;
718cdf0e10cSrcweir }
719cdf0e10cSrcweir
720cdf0e10cSrcweir return pContext;
721cdf0e10cSrcweir }
722cdf0e10cSrcweir
EndElement()723cdf0e10cSrcweir void SchXMLAxisContext::EndElement()
724cdf0e10cSrcweir {
725cdf0e10cSrcweir if( !m_bDateScaleImported && m_nAxisType==chart::ChartAxisType::AUTOMATIC )
726cdf0e10cSrcweir {
727cdf0e10cSrcweir Reference< chart2::XAxis > xAxis( lcl_getAxis( GetImport().GetModel(), m_aCurrentAxis.eDimension, m_aCurrentAxis.nAxisIndex ) );
728cdf0e10cSrcweir if( xAxis.is() )
729cdf0e10cSrcweir {
730cdf0e10cSrcweir chart2::ScaleData aScaleData( xAxis->getScaleData());
731cdf0e10cSrcweir aScaleData.AutoDateAxis = false;//different default for older documents
732cdf0e10cSrcweir xAxis->setScaleData( aScaleData );
733cdf0e10cSrcweir }
734cdf0e10cSrcweir }
735cdf0e10cSrcweir
736cdf0e10cSrcweir SetAxisTitle();
737cdf0e10cSrcweir }
738cdf0e10cSrcweir
739cdf0e10cSrcweir // ========================================
740cdf0e10cSrcweir
741cdf0e10cSrcweir namespace
742cdf0e10cSrcweir {
743cdf0e10cSrcweir
lcl_getAxis(const Reference<chart2::XCoordinateSystem> xCooSys,sal_Int32 nDimensionIndex,sal_Int32 nAxisIndex)744cdf0e10cSrcweir Reference< chart2::XAxis > lcl_getAxis( const Reference< chart2::XCoordinateSystem > xCooSys, sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex )
745cdf0e10cSrcweir {
746cdf0e10cSrcweir Reference< chart2::XAxis > xAxis;
747cdf0e10cSrcweir try
748cdf0e10cSrcweir {
749cdf0e10cSrcweir xAxis = xCooSys->getAxisByDimension( nDimensionIndex, nAxisIndex );
750cdf0e10cSrcweir }
751cdf0e10cSrcweir catch( uno::Exception & )
752cdf0e10cSrcweir {
753cdf0e10cSrcweir }
754cdf0e10cSrcweir return xAxis;
755cdf0e10cSrcweir }
756cdf0e10cSrcweir
757cdf0e10cSrcweir } // anonymous namespace
758cdf0e10cSrcweir
CorrectAxisPositions(const Reference<chart2::XChartDocument> & xNewDoc,const OUString & rChartTypeServiceName,const OUString & rODFVersionOfFile,bool bAxisPositionAttributeImported)759cdf0e10cSrcweir void SchXMLAxisContext::CorrectAxisPositions( const Reference< chart2::XChartDocument >& xNewDoc,
760cdf0e10cSrcweir const OUString& rChartTypeServiceName,
761cdf0e10cSrcweir const OUString& rODFVersionOfFile,
762cdf0e10cSrcweir bool bAxisPositionAttributeImported )
763cdf0e10cSrcweir {
764cdf0e10cSrcweir if( ( !rODFVersionOfFile.getLength() || rODFVersionOfFile.equalsAscii("1.0")
765cdf0e10cSrcweir || rODFVersionOfFile.equalsAscii("1.1")
766cdf0e10cSrcweir || ( rODFVersionOfFile.equalsAscii("1.2") && !bAxisPositionAttributeImported ) ) )
767cdf0e10cSrcweir {
768cdf0e10cSrcweir try
769cdf0e10cSrcweir {
770cdf0e10cSrcweir Reference< chart2::XCoordinateSystemContainer > xCooSysCnt( xNewDoc->getFirstDiagram(), uno::UNO_QUERY_THROW );
771cdf0e10cSrcweir uno::Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq( xCooSysCnt->getCoordinateSystems());
772cdf0e10cSrcweir if( aCooSysSeq.getLength() )
773cdf0e10cSrcweir {
774cdf0e10cSrcweir Reference< chart2::XCoordinateSystem > xCooSys( aCooSysSeq[0] );
775cdf0e10cSrcweir if( xCooSys.is() )
776cdf0e10cSrcweir {
777cdf0e10cSrcweir Reference< chart2::XAxis > xMainXAxis = lcl_getAxis( xCooSys, 0, 0 );
778cdf0e10cSrcweir Reference< chart2::XAxis > xMainYAxis = lcl_getAxis( xCooSys, 1, 0 );
779cdf0e10cSrcweir //Reference< chart2::XAxis > xMajorZAxis = lcl_getAxis( xCooSys, 2, 0 );
780cdf0e10cSrcweir Reference< chart2::XAxis > xSecondaryXAxis = lcl_getAxis( xCooSys, 0, 1 );
781cdf0e10cSrcweir Reference< chart2::XAxis > xSecondaryYAxis = lcl_getAxis( xCooSys, 1, 1 );
782cdf0e10cSrcweir
783cdf0e10cSrcweir Reference< beans::XPropertySet > xMainXAxisProp( xMainXAxis, uno::UNO_QUERY );
784cdf0e10cSrcweir Reference< beans::XPropertySet > xMainYAxisProp( xMainYAxis, uno::UNO_QUERY );
785cdf0e10cSrcweir Reference< beans::XPropertySet > xSecondaryXAxisProp( xSecondaryXAxis, uno::UNO_QUERY );
786cdf0e10cSrcweir Reference< beans::XPropertySet > xSecondaryYAxisProp( xSecondaryYAxis, uno::UNO_QUERY );
787cdf0e10cSrcweir
788cdf0e10cSrcweir if( xMainXAxisProp.is() && xMainYAxisProp.is() )
789cdf0e10cSrcweir {
790cdf0e10cSrcweir chart2::ScaleData aMainXScale = xMainXAxis->getScaleData();
791cdf0e10cSrcweir if( 0 == rChartTypeServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.ScatterChartType" ) ) )
792cdf0e10cSrcweir {
793cdf0e10cSrcweir xMainYAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
794cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_VALUE) );
795cdf0e10cSrcweir double fCrossoverValue = 0.0;
796cdf0e10cSrcweir aMainXScale.Origin >>= fCrossoverValue;
797cdf0e10cSrcweir xMainYAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverValue")
798cdf0e10cSrcweir , uno::makeAny( fCrossoverValue ) );
799cdf0e10cSrcweir
800cdf0e10cSrcweir if( aMainXScale.Orientation == chart2::AxisOrientation_REVERSE )
801cdf0e10cSrcweir {
802cdf0e10cSrcweir xMainYAxisProp->setPropertyValue( OUString::createFromAscii("LabelPosition")
803cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisLabelPosition_OUTSIDE_END) );
804cdf0e10cSrcweir xMainYAxisProp->setPropertyValue( OUString::createFromAscii("MarkPosition")
805cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisMarkPosition_AT_LABELS) );
806cdf0e10cSrcweir if( xSecondaryYAxisProp.is() )
807cdf0e10cSrcweir xSecondaryYAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
808cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_START) );
809cdf0e10cSrcweir }
810cdf0e10cSrcweir else
811cdf0e10cSrcweir {
812cdf0e10cSrcweir xMainYAxisProp->setPropertyValue( OUString::createFromAscii("LabelPosition")
813cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisLabelPosition_OUTSIDE_START) );
814cdf0e10cSrcweir xMainYAxisProp->setPropertyValue( OUString::createFromAscii("MarkPosition")
815cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisMarkPosition_AT_LABELS) );
816cdf0e10cSrcweir if( xSecondaryYAxisProp.is() )
817cdf0e10cSrcweir xSecondaryYAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
818cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_END) );
819cdf0e10cSrcweir }
820cdf0e10cSrcweir }
821cdf0e10cSrcweir else
822cdf0e10cSrcweir {
823cdf0e10cSrcweir if( aMainXScale.Orientation == chart2::AxisOrientation_REVERSE )
824cdf0e10cSrcweir {
825cdf0e10cSrcweir xMainYAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
826cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_END) );
827cdf0e10cSrcweir if( xSecondaryYAxisProp.is() )
828cdf0e10cSrcweir xSecondaryYAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
829cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_START) );
830cdf0e10cSrcweir }
831cdf0e10cSrcweir else
832cdf0e10cSrcweir {
833cdf0e10cSrcweir xMainYAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
834cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_START) );
835cdf0e10cSrcweir if( xSecondaryYAxisProp.is() )
836cdf0e10cSrcweir xSecondaryYAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
837cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_END) );
838cdf0e10cSrcweir }
839cdf0e10cSrcweir }
840cdf0e10cSrcweir
841cdf0e10cSrcweir chart2::ScaleData aMainYScale = xMainYAxis->getScaleData();
842cdf0e10cSrcweir xMainXAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
843cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_VALUE) );
844cdf0e10cSrcweir double fCrossoverValue = 0.0;
845cdf0e10cSrcweir aMainYScale.Origin >>= fCrossoverValue;
846cdf0e10cSrcweir xMainXAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverValue")
847cdf0e10cSrcweir , uno::makeAny( fCrossoverValue ) );
848cdf0e10cSrcweir
849cdf0e10cSrcweir if( aMainYScale.Orientation == chart2::AxisOrientation_REVERSE )
850cdf0e10cSrcweir {
851cdf0e10cSrcweir xMainXAxisProp->setPropertyValue( OUString::createFromAscii("LabelPosition")
852cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisLabelPosition_OUTSIDE_END) );
853cdf0e10cSrcweir xMainXAxisProp->setPropertyValue( OUString::createFromAscii("MarkPosition")
854cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisMarkPosition_AT_LABELS) );
855cdf0e10cSrcweir if( xSecondaryXAxisProp.is() )
856cdf0e10cSrcweir xSecondaryXAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
857cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_START) );
858cdf0e10cSrcweir }
859cdf0e10cSrcweir else
860cdf0e10cSrcweir {
861cdf0e10cSrcweir xMainXAxisProp->setPropertyValue( OUString::createFromAscii("LabelPosition")
862cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisLabelPosition_OUTSIDE_START) );
863cdf0e10cSrcweir xMainXAxisProp->setPropertyValue( OUString::createFromAscii("MarkPosition")
864cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisMarkPosition_AT_LABELS) );
865cdf0e10cSrcweir if( xSecondaryXAxisProp.is() )
866cdf0e10cSrcweir xSecondaryXAxisProp->setPropertyValue( OUString::createFromAscii("CrossoverPosition")
867cdf0e10cSrcweir , uno::makeAny( ::com::sun::star::chart::ChartAxisPosition_END) );
868cdf0e10cSrcweir }
869cdf0e10cSrcweir }
870cdf0e10cSrcweir }
871cdf0e10cSrcweir }
872cdf0e10cSrcweir }
873cdf0e10cSrcweir catch( uno::Exception & )
874cdf0e10cSrcweir {
875cdf0e10cSrcweir }
876cdf0e10cSrcweir }
877cdf0e10cSrcweir }
878cdf0e10cSrcweir
879cdf0e10cSrcweir // ========================================
880cdf0e10cSrcweir
SchXMLCategoriesContext(SchXMLImportHelper & rImpHelper,SvXMLImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,OUString & rAddress)881cdf0e10cSrcweir SchXMLCategoriesContext::SchXMLCategoriesContext(
882cdf0e10cSrcweir SchXMLImportHelper& rImpHelper,
883cdf0e10cSrcweir SvXMLImport& rImport,
884cdf0e10cSrcweir sal_uInt16 nPrefix,
885cdf0e10cSrcweir const OUString& rLocalName,
886cdf0e10cSrcweir OUString& rAddress ) :
887cdf0e10cSrcweir SvXMLImportContext( rImport, nPrefix, rLocalName ),
888cdf0e10cSrcweir m_rImportHelper( rImpHelper ),
889cdf0e10cSrcweir mrAddress( rAddress )
890cdf0e10cSrcweir {
891cdf0e10cSrcweir }
892cdf0e10cSrcweir
~SchXMLCategoriesContext()893cdf0e10cSrcweir SchXMLCategoriesContext::~SchXMLCategoriesContext()
894cdf0e10cSrcweir {
895cdf0e10cSrcweir }
896cdf0e10cSrcweir
StartElement(const Reference<xml::sax::XAttributeList> & xAttrList)897cdf0e10cSrcweir void SchXMLCategoriesContext::StartElement( const Reference< xml::sax::XAttributeList >& xAttrList )
898cdf0e10cSrcweir {
899cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0;
900cdf0e10cSrcweir
901cdf0e10cSrcweir for( sal_Int16 i = 0; i < nAttrCount; i++ )
902cdf0e10cSrcweir {
903cdf0e10cSrcweir OUString sAttrName = xAttrList->getNameByIndex( i );
904cdf0e10cSrcweir OUString aLocalName;
905cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
906cdf0e10cSrcweir
907cdf0e10cSrcweir if( nPrefix == XML_NAMESPACE_TABLE &&
908cdf0e10cSrcweir IsXMLToken( aLocalName, XML_CELL_RANGE_ADDRESS ) )
909cdf0e10cSrcweir {
910cdf0e10cSrcweir Reference< chart2::XChartDocument > xNewDoc( GetImport().GetModel(), uno::UNO_QUERY );
911cdf0e10cSrcweir mrAddress = xAttrList->getValueByIndex( i );
912cdf0e10cSrcweir }
913cdf0e10cSrcweir }
914cdf0e10cSrcweir }
915cdf0e10cSrcweir
916cdf0e10cSrcweir // ========================================
917cdf0e10cSrcweir
DateScaleContext(SchXMLImportHelper & rImpHelper,SvXMLImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<beans::XPropertySet> xAxisProps)918cdf0e10cSrcweir DateScaleContext::DateScaleContext(
919cdf0e10cSrcweir SchXMLImportHelper& rImpHelper,
920cdf0e10cSrcweir SvXMLImport& rImport,
921cdf0e10cSrcweir sal_uInt16 nPrefix,
922cdf0e10cSrcweir const OUString& rLocalName,
923cdf0e10cSrcweir const Reference< beans::XPropertySet > xAxisProps ) :
924cdf0e10cSrcweir SvXMLImportContext( rImport, nPrefix, rLocalName ),
925cdf0e10cSrcweir m_rImportHelper( rImpHelper ),
926cdf0e10cSrcweir m_xAxisProps( xAxisProps )
927cdf0e10cSrcweir {
928cdf0e10cSrcweir }
929cdf0e10cSrcweir
~DateScaleContext()930cdf0e10cSrcweir DateScaleContext::~DateScaleContext()
931cdf0e10cSrcweir {
932cdf0e10cSrcweir }
933cdf0e10cSrcweir
934cdf0e10cSrcweir namespace
935cdf0e10cSrcweir {
936cdf0e10cSrcweir enum DateScaleAttributeTokens
937cdf0e10cSrcweir {
938cdf0e10cSrcweir XML_TOK_DATESCALE_BASE_TIME_UNIT,
939cdf0e10cSrcweir XML_TOK_DATESCALE_MAJOR_INTERVAL_VALUE,
940cdf0e10cSrcweir XML_TOK_DATESCALE_MAJOR_INTERVAL_UNIT,
941cdf0e10cSrcweir XML_TOK_DATESCALE_MINOR_INTERVAL_VALUE,
942cdf0e10cSrcweir XML_TOK_DATESCALE_MINOR_INTERVAL_UNIT
943cdf0e10cSrcweir };
944cdf0e10cSrcweir
945cdf0e10cSrcweir SvXMLTokenMapEntry aDateScaleAttributeTokenMap[] =
946cdf0e10cSrcweir {
947cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_BASE_TIME_UNIT, XML_TOK_DATESCALE_BASE_TIME_UNIT },
948cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_MAJOR_INTERVAL_VALUE, XML_TOK_DATESCALE_MAJOR_INTERVAL_VALUE },
949cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_MAJOR_INTERVAL_UNIT, XML_TOK_DATESCALE_MAJOR_INTERVAL_UNIT },
950cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_MINOR_INTERVAL_VALUE, XML_TOK_DATESCALE_MINOR_INTERVAL_VALUE },
951cdf0e10cSrcweir { XML_NAMESPACE_CHART, XML_MINOR_INTERVAL_UNIT, XML_TOK_DATESCALE_MINOR_INTERVAL_UNIT },
952cdf0e10cSrcweir XML_TOKEN_MAP_END
953cdf0e10cSrcweir };
954cdf0e10cSrcweir
955cdf0e10cSrcweir class DateScaleAttributeTokenMap : public SvXMLTokenMap
956cdf0e10cSrcweir {
957cdf0e10cSrcweir public:
DateScaleAttributeTokenMap()958cdf0e10cSrcweir DateScaleAttributeTokenMap(): SvXMLTokenMap( aDateScaleAttributeTokenMap ) {}
~DateScaleAttributeTokenMap()959cdf0e10cSrcweir virtual ~DateScaleAttributeTokenMap() {}
960cdf0e10cSrcweir };
961cdf0e10cSrcweir
962cdf0e10cSrcweir struct theDateScaleAttributeTokenMap : public rtl::Static< DateScaleAttributeTokenMap, theDateScaleAttributeTokenMap > {};
963cdf0e10cSrcweir
lcl_getTimeUnit(const OUString & rValue)964cdf0e10cSrcweir sal_Int32 lcl_getTimeUnit( const OUString& rValue )
965cdf0e10cSrcweir {
966cdf0e10cSrcweir sal_Int32 nTimeUnit = ::com::sun::star::chart::TimeUnit::DAY;
967cdf0e10cSrcweir if( IsXMLToken( rValue, XML_DAYS ) )
968cdf0e10cSrcweir nTimeUnit = ::com::sun::star::chart::TimeUnit::DAY;
969cdf0e10cSrcweir else if( IsXMLToken( rValue, XML_MONTHS ) )
970cdf0e10cSrcweir nTimeUnit = ::com::sun::star::chart::TimeUnit::MONTH;
971cdf0e10cSrcweir else if( IsXMLToken( rValue, XML_YEARS ) )
972cdf0e10cSrcweir nTimeUnit = ::com::sun::star::chart::TimeUnit::YEAR;
973cdf0e10cSrcweir return nTimeUnit;
974cdf0e10cSrcweir }
975cdf0e10cSrcweir
976cdf0e10cSrcweir }
977cdf0e10cSrcweir
StartElement(const Reference<xml::sax::XAttributeList> & xAttrList)978cdf0e10cSrcweir void DateScaleContext::StartElement( const Reference< xml::sax::XAttributeList >& xAttrList )
979cdf0e10cSrcweir {
980cdf0e10cSrcweir if( !m_xAxisProps.is() )
981cdf0e10cSrcweir return;
982cdf0e10cSrcweir
983cdf0e10cSrcweir // parse attributes
984cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0;
985cdf0e10cSrcweir const SvXMLTokenMap& rAttrTokenMap = theDateScaleAttributeTokenMap::get();
986cdf0e10cSrcweir
987cdf0e10cSrcweir bool bSetNewIncrement=false;
988cdf0e10cSrcweir chart::TimeIncrement aIncrement;
989cdf0e10cSrcweir m_xAxisProps->getPropertyValue( OUString::createFromAscii( "TimeIncrement" )) >>= aIncrement;
990cdf0e10cSrcweir
991cdf0e10cSrcweir for( sal_Int16 i = 0; i < nAttrCount; i++ )
992cdf0e10cSrcweir {
993cdf0e10cSrcweir OUString sAttrName = xAttrList->getNameByIndex( i );
994cdf0e10cSrcweir OUString aLocalName;
995cdf0e10cSrcweir OUString aValue = xAttrList->getValueByIndex( i );
996cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
997cdf0e10cSrcweir
998cdf0e10cSrcweir switch( rAttrTokenMap.Get( nPrefix, aLocalName ))
999cdf0e10cSrcweir {
1000cdf0e10cSrcweir case XML_TOK_DATESCALE_BASE_TIME_UNIT:
1001cdf0e10cSrcweir {
1002cdf0e10cSrcweir aIncrement.TimeResolution = uno::makeAny( lcl_getTimeUnit(aValue) );
1003cdf0e10cSrcweir bSetNewIncrement = true;
1004cdf0e10cSrcweir }
1005cdf0e10cSrcweir break;
1006cdf0e10cSrcweir case XML_TOK_DATESCALE_MAJOR_INTERVAL_VALUE:
1007cdf0e10cSrcweir {
1008cdf0e10cSrcweir chart::TimeInterval aInterval(1,0);
1009cdf0e10cSrcweir aIncrement.MajorTimeInterval >>= aInterval;
1010cdf0e10cSrcweir SvXMLUnitConverter::convertNumber( aInterval.Number, aValue );
1011cdf0e10cSrcweir aIncrement.MajorTimeInterval = uno::makeAny(aInterval);
1012cdf0e10cSrcweir bSetNewIncrement = true;
1013cdf0e10cSrcweir }
1014cdf0e10cSrcweir break;
1015cdf0e10cSrcweir case XML_TOK_DATESCALE_MAJOR_INTERVAL_UNIT:
1016cdf0e10cSrcweir {
1017cdf0e10cSrcweir chart::TimeInterval aInterval(1,0);
1018cdf0e10cSrcweir aIncrement.MajorTimeInterval >>= aInterval;
1019cdf0e10cSrcweir aInterval.TimeUnit = lcl_getTimeUnit(aValue);
1020cdf0e10cSrcweir aIncrement.MajorTimeInterval = uno::makeAny(aInterval);
1021cdf0e10cSrcweir bSetNewIncrement = true;
1022cdf0e10cSrcweir }
1023cdf0e10cSrcweir break;
1024cdf0e10cSrcweir case XML_TOK_DATESCALE_MINOR_INTERVAL_VALUE:
1025cdf0e10cSrcweir {
1026cdf0e10cSrcweir chart::TimeInterval aInterval(1,0);
1027cdf0e10cSrcweir aIncrement.MinorTimeInterval >>= aInterval;
1028cdf0e10cSrcweir SvXMLUnitConverter::convertNumber( aInterval.Number, aValue );
1029cdf0e10cSrcweir aIncrement.MinorTimeInterval = uno::makeAny(aInterval);
1030cdf0e10cSrcweir bSetNewIncrement = true;
1031cdf0e10cSrcweir }
1032cdf0e10cSrcweir break;
1033cdf0e10cSrcweir case XML_TOK_DATESCALE_MINOR_INTERVAL_UNIT:
1034cdf0e10cSrcweir {
1035cdf0e10cSrcweir chart::TimeInterval aInterval(1,0);
1036cdf0e10cSrcweir aIncrement.MinorTimeInterval >>= aInterval;
1037cdf0e10cSrcweir aInterval.TimeUnit = lcl_getTimeUnit(aValue);
1038cdf0e10cSrcweir aIncrement.MinorTimeInterval = uno::makeAny(aInterval);
1039cdf0e10cSrcweir bSetNewIncrement = true;
1040cdf0e10cSrcweir }
1041cdf0e10cSrcweir break;
1042cdf0e10cSrcweir }
1043cdf0e10cSrcweir }
1044cdf0e10cSrcweir
1045cdf0e10cSrcweir if( bSetNewIncrement )
1046cdf0e10cSrcweir m_xAxisProps->setPropertyValue( OUString::createFromAscii( "TimeIncrement" ), uno::makeAny( aIncrement ) );
1047cdf0e10cSrcweir }
1048cdf0e10cSrcweir
1049cdf0e10cSrcweir // ========================================
1050