[Libreoffice-commits] .: patches/dev300

Katarina Machalkova bubli at kemper.freedesktop.org
Wed Oct 27 06:49:37 PDT 2010


 patches/dev300/apply                                             |    6 
 patches/dev300/xlsx-shared-oox-chart-export-part1-pptx-part.diff |   14 
 patches/dev300/xlsx-shared-oox-chart-export-part1.diff           | 4732 ----------
 3 files changed, 19 insertions(+), 4733 deletions(-)

New commits:
commit b26eef0f837a2736029b27ce0b3d54b41a223b65
Author: Katarina Machalkova <kmachalkova at suse.cz>
Date:   Wed Oct 27 15:47:11 2010 +0200

    Removed chart export patch from 'apply'
    
    putting the part patching pptx export related hunks into separate
    patch, as those are not merged yet

diff --git a/patches/dev300/apply b/patches/dev300/apply
index 9a126fe..b38bc23 100755
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -2157,7 +2157,11 @@ iso-ooxml-sw.diff, cbosdo
 # this s shared binary/ooxml filter
 # mostly merged into git by now, except for
 # xlsx-export-row-limit-fix.diff, n#504623, kohei
-xlsx-shared-oox-chart-export-part1.diff, Fong
+
+# this used to be xlsx-shared-oox-chart-export-part1.diff, Fong
+# it is now merged into git, except for the hunk patching pptx
+# which follows:
+xlsx-shared-oox-chart-export-part1-pptx-part.diff
 
 [ UnstableLibwpd ]
 config_office-testing.diff
diff --git a/patches/dev300/xlsx-shared-oox-chart-export-part1-pptx-part.diff b/patches/dev300/xlsx-shared-oox-chart-export-part1-pptx-part.diff
new file mode 100644
index 0000000..bded31c
--- /dev/null
+++ b/patches/dev300/xlsx-shared-oox-chart-export-part1-pptx-part.diff
@@ -0,0 +1,14 @@
+diff --git sd/source/filter/pptx/pptx-epptooxml.cxx sd/source/filter/pptx/pptx-epptooxml.cxx
+index 0b64cca..0e348c5 100644
+--- sd/source/filter/pptx/pptx-epptooxml.cxx
++++ sd/source/filter/pptx/pptx-epptooxml.cxx
+@@ -1588,7 +1588,7 @@ ShapeExport& PowerPointShapeExport::WritePlaceholderShape( Reference< XShape > x
+ 
+     // visual shape properties
+     mpFS->startElementNS( XML_p, XML_spPr, FSEND );
+-    WriteShapeTransformation( xShape );
++    WriteShapeTransformation( xShape, XML_a );
+     WritePresetShape( "rect" );
+     Reference< XPropertySet > xProps( xShape, UNO_QUERY );
+     if( xProps.is() )
+
diff --git a/patches/dev300/xlsx-shared-oox-chart-export-part1.diff b/patches/dev300/xlsx-shared-oox-chart-export-part1.diff
deleted file mode 100644
index 1276cb4..0000000
--- a/patches/dev300/xlsx-shared-oox-chart-export-part1.diff
+++ /dev/null
@@ -1,4732 +0,0 @@
-diff --git oox/inc/oox/export/chartexport.hxx oox/inc/oox/export/chartexport.hxx
-new file mode 100644
-index 0000000..ddf738f
---- /dev/null
-+++ oox/inc/oox/export/chartexport.hxx
-@@ -0,0 +1,216 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ * $Revision$
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef _OOX_EXPORT_CHART_HXX_
-+#define _OOX_EXPORT_CHART_HXX_
-+
-+#include <oox/dllapi.h>
-+#include <com/sun/star/uno/XReference.hpp>
-+#include <oox/export/drawingml.hxx>
-+#include <sax/fshelper.hxx>
-+#include <vcl/mapmod.hxx>
-+#include <hash_map>
-+#include <map>
-+
-+namespace com { namespace sun { namespace star {
-+    namespace chart {
-+        class XDiagram;
-+        class XChartDocument;
-+        class XChartDataArray;
-+        struct ChartSeriesAddress;
-+    }
-+    namespace chart2 {
-+        class XDiagram;
-+        class XChartDocument;
-+        class XDataSeries;
-+        class XChartType;
-+        namespace data
-+        {
-+            class XDataProvider;
-+            class XDataSequence;
-+        }
-+    }
-+    namespace drawing {
-+        class XShape;
-+        class XShapes;
-+    }
-+    namespace task {
-+        class XStatusIndicator;
-+    }
-+    namespace frame {
-+        class XModel;
-+    }
-+}}}
-+
-+namespace oox { namespace drawingml {
-+
-+const sal_Int32  AXIS_PRIMARY_X = 1;
-+const sal_Int32  AXIS_PRIMARY_Y = 2;
-+const sal_Int32  AXIS_PRIMARY_Z = 3;
-+const sal_Int32  AXIS_SECONDARY_X = 4;
-+const sal_Int32  AXIS_SECONDARY_Y = 5;
-+
-+struct AxisIdPair{
-+    sal_Int32 nAxisType;
-+    sal_Int32 nAxisId;
-+    sal_Int32 nCrossAx;
-+
-+    AxisIdPair( sal_Int32 nType, sal_Int32 nId, sal_Int32 nAx ): nAxisType( nType ),nAxisId( nId ),nCrossAx( nAx ) {}
-+};
-+
-+class OOX_DLLPUBLIC ChartExport : public DrawingML {
-+
-+public:
-+    // first: data sequence for label, second: data sequence for values.
-+    typedef ::std::vector< AxisIdPair > AxisVector;
-+
-+private:
-+    sal_Int32           mnXmlNamespace;
-+    Fraction            maFraction;
-+    ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mxChartModel;
-+    com::sun::star::uno::Reference< com::sun::star::chart::XDiagram > mxDiagram;
-+    com::sun::star::uno::Reference< com::sun::star::chart2::XDiagram > mxNewDiagram;
-+
-+    rtl::OUString msTableName;
-+    rtl::OUStringBuffer msStringBuffer;
-+    rtl::OUString msString;
-+
-+    // members filled by InitRangeSegmentationProperties (retrieved from DataProvider)
-+    sal_Bool mbHasSeriesLabels;
-+    sal_Bool mbHasCategoryLabels; //if the categories are only automatically generated this will be false
-+    sal_Bool mbRowSourceColumns;
-+    rtl::OUString msChartAddress;
-+    rtl::OUString msTableNumberList;
-+    ::com::sun::star::uno::Sequence< sal_Int32 > maSequenceMapping;
-+
-+    //::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > mxAdditionalShapes;
-+    ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > mxCategoriesValues;
-+
-+    AxisVector          maAxes;
-+    sal_Bool            mbHasXAxis;
-+    sal_Bool            mbHasYAxis;
-+    sal_Bool            mbHasZAxis;
-+    sal_Bool            mbHasSecondaryXAxis;
-+    sal_Bool            mbHasSecondaryYAxis;
-+    sal_Bool            mbIs3DChart;
-+
-+
-+private:
-+    sal_Int32 getChartType(
-+         );
-+    
-+    rtl::OUString parseFormula( const rtl::OUString& rRange );
-+    void InitPlotArea();
-+
-+    void _ExportContent();
-+    void exportChartSpace( com::sun::star::uno::Reference<
-+                          com::sun::star::chart::XChartDocument > rChartDoc,
-+                      sal_Bool bIncludeTable );
-+    void exportChart( com::sun::star::uno::Reference<
-+                          com::sun::star::chart::XChartDocument > rChartDoc );
-+    void exportLegend( com::sun::star::uno::Reference<
-+                          com::sun::star::chart::XChartDocument > rChartDoc );
-+    void exportTitle( com::sun::star::uno::Reference<
-+                          ::com::sun::star::drawing::XShape > xShape );
-+    void exportPlotArea( );
-+
-+    void exportAreaChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportBarChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportBubbleChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportDoughnutChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportLineChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportOfPieChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportPieChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportRadarChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportScatterChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportStockChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+    void exportSuffaceChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
-+
-+    void exportSeries( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType, sal_Int32& nAttachedAxis );
-+    void exportCandleStickSeries(
-+        const ::com::sun::star::uno::Sequence<
-+            ::com::sun::star::uno::Reference<
-+                ::com::sun::star::chart2::XDataSeries > > & aSeriesSeq,
-+        sal_Bool bJapaneseCandleSticks, sal_Int32& nAttachedAxis );
-+    void exportDataSeq(
-+        const com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence >& xValueSeq,
-+        sal_Int32 elementTokenId );
-+    void exportSeriesText(
-+        const com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence >& xValueSeq );
-+    void exportSeriesCategory(
-+        const com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence >& xValueSeq );
-+    void exportSeriesValues(
-+        const com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence >& xValueSeq, sal_Int32 nValueType = XML_val );
-+    void exportShapeProps( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropSet );
-+    void exportDataPoints( 
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xSeriesProperties,
-+        sal_Int32 nSeriesLength );
-+    void exportGrouping( sal_Bool isBar = sal_False );
-+    void exportMarker();
-+    void exportSmooth();
-+    void exportFirstSliceAng();
-+
-+    void exportAxes( );
-+    void exportXAxis( AxisIdPair aAxisIdPair );
-+    void exportYAxis( AxisIdPair aAxisIdPair );
-+    void exportAxis( AxisIdPair aAxisIdPair );
-+    void _exportAxis(
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xAxisProp,
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xAxisTitle,
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xMajorGrid,
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xMinorGrid,
-+        sal_Int32 nAxisType,
-+        const char* sAxisPos,
-+        AxisIdPair aAxisIdPair );
-+    void exportAxesId( sal_Int32 nAttachedAxis );
-+    void exportView3D();
-+    sal_Bool isDeep3dChart();
-+
-+public:
-+
-+    ChartExport( sal_Int32 nXmlNamespace, ::sax_fastparser::FSHelperPtr pFS, ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& xModel, ::oox::core::XmlFilterBase* pFB = NULL, DocumentType eDocumentType = DOCUMENT_PPTX );
-+    virtual ~ChartExport() {}
-+
-+    sal_Int32           GetXmlNamespace() const;
-+    ChartExport&        SetXmlNamespace( sal_Int32 nXmlNamespace );
-+    sal_Int32           GetChartID( );
-+    ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > getModel(){ return mxChartModel; }
-+
-+    virtual ChartExport& WriteChartObj( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape, sal_Int32 nChartCount );
-+
-+    void ExportContent();
-+    void InitRangeSegmentationProperties(
-+        const ::com::sun::star::uno::Reference<
-+            ::com::sun::star::chart2::XChartDocument > & xChartDoc );
-+};
-+
-+}}
-+
-+#endif /* ndef _OOX_EXPORT_CHART_HXX_ */
-diff --git oox/inc/oox/export/drawingml.hxx oox/inc/oox/export/drawingml.hxx
-index 10397a5..fc70427 100644
---- oox/inc/oox/export/drawingml.hxx
-+++ oox/inc/oox/export/drawingml.hxx
-@@ -27,6 +27,9 @@ namespace text {
-     class XTextContent;
-     class XTextRange;
- }
-+namespace io {
-+    struct XOutputStream;
-+}
- }}}
- 
- namespace oox {
-@@ -64,6 +67,7 @@ public:
-     void SetFS( ::sax_fastparser::FSHelperPtr pFS ) { mpFS = pFS; }
-     ::sax_fastparser::FSHelperPtr GetFS() { return mpFS; }
-     ::oox::core::XmlFilterBase* GetFB() { return mpFB; }
-+    DocumentType GetDocumentType() { return meDocumentType; }
- 
-     rtl::OUString WriteImage( const Graphic &rGraphic );
- 
-@@ -85,9 +89,9 @@ public:
-     void WriteBlipMode( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
- 
-     void WriteShapeTransformation( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rXShape,
--                   sal_Bool bFlipH = false, sal_Bool bFlipV = false, sal_Int32 nRotation = 0 );
-+                  sal_Int32 nXmlNamespace, sal_Bool bFlipH = false, sal_Bool bFlipV = false, sal_Int32 nRotation = 0 );
-     void WriteTransformation( const Rectangle& rRectangle,
--                  sal_Bool bFlipH = false, sal_Bool bFlipV = false, sal_Int32 nRotation = 0 );
-+                  sal_Int32 nXmlNamespace, sal_Bool bFlipH = false, sal_Bool bFlipV = false, sal_Int32 nRotation = 0 );
- 
-     void WriteText( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rXShape );
-     void WriteParagraph( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > rParagraph );
-@@ -95,11 +99,12 @@ public:
-     void WriteParagraphNumbering( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet,
-                                   sal_Int16 nLevel );
-     void WriteRun( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > rRun );
--    void WriteRunProperties( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > rRun, sal_Bool bIsField );
-+    void WriteRunProperties( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rRun, sal_Bool bIsField );
- 
-     void WritePresetShape( const char* pShape );
-     void WritePresetShape( const char* pShape, MSO_SPT eShapeType, sal_Bool bPredefinedHandlesUsed, sal_Int32 nAdjustmentsWhichNeedsToBeConverted, const ::com::sun::star::beans::PropertyValue& rProp );
-     void WritePolyPolygon( const PolyPolygon& rPolyPolygon );
-+    void WriteFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropSet );
- 
-     static void ResetCounters();
- 
-@@ -110,6 +115,15 @@ public:
-     sal_uInt32 ColorWithIntensity( sal_uInt32 nColor, sal_uInt32 nIntensity );
- 
-     static const char* GetAlignment( sal_Int32 nAlignment );
-+
-+    sax_fastparser::FSHelperPtr     CreateOutputStream (
-+                                        const ::rtl::OUString& sFullStream,
-+                                        const ::rtl::OUString& sRelativeStream,
-+                                        const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xParentRelation,
-+                                        const char* sContentType,
-+                                        const char* sRelationshipType,
-+                                        ::rtl::OUString* pRelationshipId = NULL );
-+
- };
- 
- }
-diff --git oox/inc/oox/export/shapes.hxx oox/inc/oox/export/shapes.hxx
-index 74d9a54..5d51e62 100644
---- oox/inc/oox/export/shapes.hxx
-+++ oox/inc/oox/export/shapes.hxx
-@@ -102,8 +102,6 @@ public:
-     virtual ShapeExport&
-                         WriteEllipseShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
-     virtual ShapeExport&
--                        WriteFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropSet );
--    virtual ShapeExport&
-                         WriteGraphicObjectShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
-     virtual ShapeExport&
-                         WriteLineShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
-@@ -159,6 +157,8 @@ public:
-     virtual ShapeExport&
-                         WriteTextShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
-     virtual ShapeExport&
-+                        WriteOLE2Shape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
-+    virtual ShapeExport&
-                         WriteUnknownShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
- 
-     sal_Int32 GetNewShapeID( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rShape );
-diff --git oox/source/export/ColorPropertySet.cxx oox/source/export/ColorPropertySet.cxx
-new file mode 100644
-index 0000000..91b1527
---- /dev/null
-+++ oox/source/export/ColorPropertySet.cxx
-@@ -0,0 +1,233 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: ColorPropertySet.cxx,v $
-+ * $Revision: 1.3 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "ColorPropertySet.hxx"
-+
-+#include <cppuhelper/implbase1.hxx>
-+#include <com/sun/star/drawing/FillStyle.hpp>
-+
-+using namespace ::com::sun::star;
-+using namespace ::com::sun::star::beans;
-+
-+using ::com::sun::star::uno::Reference;
-+using ::com::sun::star::uno::Sequence;
-+using ::rtl::OUString;
-+using ::com::sun::star::uno::RuntimeException;
-+
-+// ================================================================================
-+
-+namespace
-+{
-+class lcl_ColorPropertySetInfo : public ::cppu::WeakImplHelper1<
-+        XPropertySetInfo  >
-+{
-+public:
-+    lcl_ColorPropertySetInfo( bool bFillColor );
-+
-+protected:
-+    // ____ XPropertySetInfo ____
-+    virtual Sequence< Property > SAL_CALL getProperties()                throw (RuntimeException);
-+    virtual Property SAL_CALL getPropertyByName( const OUString& aName ) throw (UnknownPropertyException, RuntimeException);
-+    virtual sal_Bool SAL_CALL hasPropertyByName( const OUString& Name )  throw (RuntimeException);
-+
-+private:
-+    bool m_bIsFillColor;
-+    OUString m_aColorPropName;
-+    Property m_aColorProp;
-+};
-+
-+lcl_ColorPropertySetInfo::lcl_ColorPropertySetInfo( bool bFillColor ) :
-+        m_bIsFillColor( bFillColor ),
-+        // note: length of FillColor and LineColor is 9
-+        m_aColorPropName( (bFillColor ? "FillColor" : "LineColor"), 9, RTL_TEXTENCODING_ASCII_US ),
-+        m_aColorProp( m_aColorPropName, -1,
-+                      ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), 0)
-+{}
-+
-+Sequence< Property > SAL_CALL lcl_ColorPropertySetInfo::getProperties()
-+    throw (RuntimeException)
-+{
-+
-+    return Sequence< Property >( & m_aColorProp, 1 );
-+}
-+
-+Property SAL_CALL lcl_ColorPropertySetInfo::getPropertyByName( const OUString& aName )
-+    throw (UnknownPropertyException, RuntimeException)
-+{
-+    if( aName.equals( m_aColorPropName ))
-+        return m_aColorProp;
-+    throw UnknownPropertyException( m_aColorPropName, static_cast< uno::XWeak * >( this ));
-+}
-+
-+sal_Bool SAL_CALL lcl_ColorPropertySetInfo::hasPropertyByName( const OUString& Name )
-+    throw (RuntimeException)
-+{
-+    return Name.equals( m_aColorPropName );
-+}
-+
-+} // anonymous namespace
-+
-+// ================================================================================
-+
-+namespace oox
-+{
-+namespace drawingml
-+{
-+
-+ColorPropertySet::ColorPropertySet( sal_Int32 nColor, bool bFillColor /* = true */ ) :
-+        // note: length of FillColor and LineColor is 9
-+        m_aColorPropName( (bFillColor ? "FillColor" : "LineColor"), 9, RTL_TEXTENCODING_ASCII_US ),
-+        m_nColor( nColor ),
-+        m_bIsFillColor( bFillColor ),
-+        m_nDefaultColor( 0x0099ccff )  // blue 8
-+{}
-+
-+ColorPropertySet::~ColorPropertySet()
-+{}
-+
-+void ColorPropertySet::setColor( sal_Int32 nColor )
-+{
-+    m_nColor = nColor;
-+}
-+
-+sal_Int32 ColorPropertySet::getColor()
-+{
-+    return m_nColor;
-+}
-+
-+// ____ XPropertySet ____
-+
-+Reference< XPropertySetInfo > SAL_CALL ColorPropertySet::getPropertySetInfo()
-+    throw (uno::RuntimeException)
-+{
-+    if( ! m_xInfo.is())
-+        m_xInfo.set( new lcl_ColorPropertySetInfo( m_bIsFillColor ));
-+
-+    return m_xInfo;
-+}
-+
-+void SAL_CALL ColorPropertySet::setPropertyValue( const OUString& /* aPropertyName */, const uno::Any& aValue )
-+    throw (UnknownPropertyException,
-+           PropertyVetoException,
-+           lang::IllegalArgumentException,
-+           lang::WrappedTargetException,
-+           uno::RuntimeException)
-+{
-+    aValue >>= m_nColor;
-+}
-+
-+uno::Any SAL_CALL ColorPropertySet::getPropertyValue( const OUString& aPropertyName )
-+    throw (UnknownPropertyException,
-+           lang::WrappedTargetException,
-+           uno::RuntimeException)
-+{
-+    if( aPropertyName.equalsAscii("FillStyle") && m_bIsFillColor )
-+    {
-+        ::com::sun::star::drawing::FillStyle aFillStyle = ::com::sun::star::drawing::FillStyle_SOLID;
-+        return uno::makeAny(aFillStyle);
-+    }
-+    return uno::makeAny( m_nColor );
-+}
-+
-+void SAL_CALL ColorPropertySet::addPropertyChangeListener( const OUString& /* aPropertyName */, const Reference< XPropertyChangeListener >& /* xListener */ )
-+    throw (UnknownPropertyException,
-+           lang::WrappedTargetException,
-+           uno::RuntimeException)
-+{
-+    OSL_ENSURE( false, "Not Implemented" );
-+    return;
-+}
-+
-+void SAL_CALL ColorPropertySet::removePropertyChangeListener( const OUString& /* aPropertyName */, const Reference< XPropertyChangeListener >& /* aListener */ )
-+    throw (UnknownPropertyException,
-+           lang::WrappedTargetException,
-+           uno::RuntimeException)
-+{
-+    OSL_ENSURE( false, "Not Implemented" );
-+    return;
-+}
-+
-+void SAL_CALL ColorPropertySet::addVetoableChangeListener( const OUString& /* PropertyName */, const Reference< XVetoableChangeListener >& /* aListener */ )
-+    throw (UnknownPropertyException,
-+           lang::WrappedTargetException,
-+           uno::RuntimeException)
-+{
-+    OSL_ENSURE( false, "Not Implemented" );
-+    return;
-+}
-+
-+void SAL_CALL ColorPropertySet::removeVetoableChangeListener( const OUString& /* PropertyName */, const Reference< XVetoableChangeListener >& /* aListener */ )
-+    throw (UnknownPropertyException,
-+           lang::WrappedTargetException,
-+           uno::RuntimeException)
-+{
-+    OSL_ENSURE( false, "Not Implemented" );
-+    return;
-+}
-+
-+// ____ XPropertyState ____
-+
-+PropertyState SAL_CALL ColorPropertySet::getPropertyState( const OUString& /* PropertyName */ )
-+    throw (UnknownPropertyException,
-+           uno::RuntimeException)
-+{
-+    return PropertyState_DIRECT_VALUE;
-+}
-+
-+Sequence< PropertyState > SAL_CALL ColorPropertySet::getPropertyStates( const Sequence< OUString >& /* aPropertyName */ )
-+    throw (UnknownPropertyException,
-+           uno::RuntimeException)
-+{
-+    PropertyState aState = PropertyState_DIRECT_VALUE;
-+    return Sequence< PropertyState >( & aState, 1 );
-+}
-+
-+void SAL_CALL ColorPropertySet::setPropertyToDefault( const OUString& PropertyName )
-+    throw (UnknownPropertyException,
-+           uno::RuntimeException)
-+{
-+    if( PropertyName.equals( m_aColorPropName ))
-+        m_nColor = m_nDefaultColor;
-+}
-+
-+uno::Any SAL_CALL ColorPropertySet::getPropertyDefault( const OUString& aPropertyName )
-+    throw (UnknownPropertyException,
-+           lang::WrappedTargetException,
-+           uno::RuntimeException)
-+{
-+    if( aPropertyName.equals( m_aColorPropName ))
-+        return uno::makeAny( m_nDefaultColor );
-+    return uno::Any();
-+}
-+
-+} //  namespace chart
-+} //  namespace xmloff
-diff --git oox/source/export/ColorPropertySet.hxx oox/source/export/ColorPropertySet.hxx
-new file mode 100644
-index 0000000..7ca7ef0
---- /dev/null
-+++ oox/source/export/ColorPropertySet.hxx
-@@ -0,0 +1,129 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: ColorPropertySet.hxx,v $
-+ * $Revision: 1.3 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+#ifndef XMLOFF_COLORPROPERTYSET_HXX
-+#define XMLOFF_COLORPROPERTYSET_HXX
-+
-+#include <cppuhelper/implbase2.hxx>
-+
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/beans/XPropertyState.hpp>
-+
-+namespace oox
-+{
-+namespace drawingml
-+{
-+
-+class ColorPropertySet : public ::cppu::WeakImplHelper2<
-+        ::com::sun::star::beans::XPropertySet,
-+        ::com::sun::star::beans::XPropertyState >
-+{
-+public:
-+    // if bFillColor == false, the color is a LineColor
-+    explicit ColorPropertySet( sal_Int32 nColor, bool bFillColor = true );
-+    virtual ~ColorPropertySet();
-+
-+    void setColor( sal_Int32 nColor );
-+    sal_Int32 getColor();
-+
-+protected:
-+    // ____ XPropertySet ____
-+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo()
-+        throw (::com::sun::star::uno::RuntimeException);
-+    virtual void SAL_CALL setPropertyValue(
-+        const ::rtl::OUString& aPropertyName,
-+        const ::com::sun::star::uno::Any& aValue )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::beans::PropertyVetoException,
-+               ::com::sun::star::lang::IllegalArgumentException,
-+               ::com::sun::star::lang::WrappedTargetException,
-+               ::com::sun::star::uno::RuntimeException);
-+    virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
-+        const ::rtl::OUString& PropertyName )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::lang::WrappedTargetException,
-+               ::com::sun::star::uno::RuntimeException);
-+    virtual void SAL_CALL addPropertyChangeListener(
-+        const ::rtl::OUString& aPropertyName,
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::lang::WrappedTargetException,
-+               ::com::sun::star::uno::RuntimeException);
-+    virtual void SAL_CALL removePropertyChangeListener(
-+        const ::rtl::OUString& aPropertyName,
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::lang::WrappedTargetException,
-+               ::com::sun::star::uno::RuntimeException);
-+    virtual void SAL_CALL addVetoableChangeListener(
-+        const ::rtl::OUString& PropertyName,
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::lang::WrappedTargetException,
-+               ::com::sun::star::uno::RuntimeException);
-+    virtual void SAL_CALL removeVetoableChangeListener(
-+        const ::rtl::OUString& PropertyName,
-+        const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::lang::WrappedTargetException,
-+               ::com::sun::star::uno::RuntimeException);
-+
-+    // ____ XPropertyState ____
-+    virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState(
-+        const ::rtl::OUString& PropertyName )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::uno::RuntimeException);
-+    virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > SAL_CALL getPropertyStates(
-+        const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyName )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::uno::RuntimeException);
-+    virtual void SAL_CALL setPropertyToDefault(
-+        const ::rtl::OUString& PropertyName )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::uno::RuntimeException);
-+    virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault(
-+        const ::rtl::OUString& aPropertyName )
-+        throw (::com::sun::star::beans::UnknownPropertyException,
-+               ::com::sun::star::lang::WrappedTargetException,
-+               ::com::sun::star::uno::RuntimeException);
-+
-+private:
-+    ::com::sun::star::uno::Reference<
-+            ::com::sun::star::beans::XPropertySetInfo > m_xInfo;
-+    ::rtl::OUString  m_aColorPropName;
-+    sal_Int32        m_nColor;
-+    bool             m_bIsFillColor;
-+    sal_Int32        m_nDefaultColor;
-+};
-+
-+} //  namespace chart
-+} //  namespace xmloff
-+
-+// XMLOFF_COLORPROPERTYSET_HXX
-+#endif
-diff --git oox/source/export/SchXMLSeriesHelper.cxx oox/source/export/SchXMLSeriesHelper.cxx
-new file mode 100644
-index 0000000..ede0a9c
---- /dev/null
-+++ oox/source/export/SchXMLSeriesHelper.cxx
-@@ -0,0 +1,302 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: SchXMLSeriesHelper.cxx,v $
-+ * $Revision: 1.5 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "SchXMLSeriesHelper.hxx"
-+#include <com/sun/star/chart2/XChartDocument.hpp>
-+#include <com/sun/star/chart2/XChartTypeContainer.hpp>
-+#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
-+#include <com/sun/star/chart2/XDataSeriesContainer.hpp>
-+#include <com/sun/star/lang/XInitialization.hpp>
-+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-+
-+// header for define RTL_CONSTASCII_USTRINGPARAM
-+#include <rtl/ustring.h>
-+// header for define DBG_ERROR1
-+#include <tools/debug.hxx>
-+
-+#include <typeinfo>
-+
-+using namespace ::com::sun::star;
-+using ::rtl::OUString;
-+using ::rtl::OUStringToOString;
-+
-+using ::com::sun::star::uno::Reference;
-+using ::com::sun::star::uno::Sequence;
-+using ::rtl::OUString;
-+
-+// ----------------------------------------
-+
-+::std::vector< Reference< chart2::XDataSeries > >
-+    SchXMLSeriesHelper::getDataSeriesFromDiagram(
-+        const Reference< chart2::XDiagram > & xDiagram )
-+{
-+    ::std::vector< Reference< chart2::XDataSeries > > aResult;
-+
-+    try
-+    {
-+        Reference< chart2::XCoordinateSystemContainer > xCooSysCnt(
-+            xDiagram, uno::UNO_QUERY_THROW );
-+        Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq(
-+            xCooSysCnt->getCoordinateSystems());
-+        for( sal_Int32 i=0; i<aCooSysSeq.getLength(); ++i )
-+        {
-+            Reference< chart2::XChartTypeContainer > xCTCnt( aCooSysSeq[i], uno::UNO_QUERY_THROW );
-+            Sequence< Reference< chart2::XChartType > > aChartTypeSeq( xCTCnt->getChartTypes());
-+            for( sal_Int32 j=0; j<aChartTypeSeq.getLength(); ++j )
-+            {
-+                Reference< chart2::XDataSeriesContainer > xDSCnt( aChartTypeSeq[j], uno::UNO_QUERY_THROW );
-+                Sequence< Reference< chart2::XDataSeries > > aSeriesSeq( xDSCnt->getDataSeries() );
-+                ::std::copy( aSeriesSeq.getConstArray(), aSeriesSeq.getConstArray() + aSeriesSeq.getLength(),
-+                             ::std::back_inserter( aResult ));
-+            }
-+        }
-+    }
-+    catch( uno::Exception & ex )
-+    {
-+        (void)ex; // avoid warning for pro build
-+
-+        OSL_ENSURE( false, OUStringToOString( OUString(
-+                        OUString( RTL_CONSTASCII_USTRINGPARAM( "Exception caught. Type: " )) +
-+                        OUString::createFromAscii( typeid( ex ).name()) +
-+                        OUString( RTL_CONSTASCII_USTRINGPARAM( ", Message: " )) +
-+                        ex.Message), RTL_TEXTENCODING_ASCII_US ).getStr());
-+
-+    }
-+
-+    return aResult;
-+}
-+
-+::std::map< Reference< chart2::XDataSeries >, sal_Int32 > SchXMLSeriesHelper::getDataSeriesIndexMapFromDiagram(
-+        const Reference< chart2::XDiagram > & xDiagram )
-+{
-+    ::std::map< Reference< chart2::XDataSeries >, sal_Int32 > aRet;
-+
-+    sal_Int32 nIndex=0;
-+
-+    ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector( SchXMLSeriesHelper::getDataSeriesFromDiagram( xDiagram ));
-+    for( ::std::vector< Reference< chart2::XDataSeries > >::const_iterator aSeriesIt( aSeriesVector.begin() )
-+        ; aSeriesIt != aSeriesVector.end()
-+        ; aSeriesIt++, nIndex++ )
-+    {
-+        Reference< chart2::XDataSeries > xSeries( *aSeriesIt );
-+        if( xSeries.is() )
-+        {
-+            if( aRet.end() == aRet.find(xSeries) )
-+                aRet[xSeries]=nIndex;
-+        }
-+    }
-+    return aRet;
-+}
-+
-+uno::Reference< chart2::XChartType > lcl_getChartTypeOfSeries(
-+                                const uno::Reference< chart2::XDiagram >&   xDiagram
-+                              , const Reference< chart2::XDataSeries >& xSeries )
-+{
-+    if(!xDiagram.is())
-+        return 0;
-+
-+    //iterate through the model to find the given xSeries
-+    //the found parent indicates the charttype
-+
-+    //iterate through all coordinate systems
-+    uno::Reference< chart2::XCoordinateSystemContainer > xCooSysContainer( xDiagram, uno::UNO_QUERY );
-+    if( !xCooSysContainer.is())
-+        return 0;
-+
-+    uno::Sequence< uno::Reference< chart2::XCoordinateSystem > > aCooSysList( xCooSysContainer->getCoordinateSystems() );
-+    for( sal_Int32 nCS = 0; nCS < aCooSysList.getLength(); ++nCS )
-+    {
-+        uno::Reference< chart2::XCoordinateSystem > xCooSys( aCooSysList[nCS] );
-+
-+        //iterate through all chart types in the current coordinate system
-+        uno::Reference< chart2::XChartTypeContainer > xChartTypeContainer( xCooSys, uno::UNO_QUERY );
-+        OSL_ASSERT( xChartTypeContainer.is());
-+        if( !xChartTypeContainer.is() )
-+            continue;
-+        uno::Sequence< uno::Reference< chart2::XChartType > > aChartTypeList( xChartTypeContainer->getChartTypes() );
-+        for( sal_Int32 nT = 0; nT < aChartTypeList.getLength(); ++nT )
-+        {
-+            uno::Reference< chart2::XChartType > xChartType( aChartTypeList[nT] );
-+
-+            //iterate through all series in this chart type
-+            uno::Reference< chart2::XDataSeriesContainer > xDataSeriesContainer( xChartType, uno::UNO_QUERY );
-+            OSL_ASSERT( xDataSeriesContainer.is());
-+            if( !xDataSeriesContainer.is() )
-+                continue;
-+
-+            uno::Sequence< uno::Reference< chart2::XDataSeries > > aSeriesList( xDataSeriesContainer->getDataSeries() );
-+            for( sal_Int32 nS = 0; nS < aSeriesList.getLength(); ++nS )
-+            {
-+                Reference< chart2::XDataSeries > xCurrentSeries( aSeriesList[nS] );
-+
-+                if( xSeries == xCurrentSeries )
-+                    return xChartType;
-+            }
-+        }
-+    }
-+    return 0;
-+}
-+
-+bool SchXMLSeriesHelper::isCandleStickSeries(
-+                  const Reference< chart2::XDataSeries >& xSeries
-+                , const Reference< frame::XModel >& xChartModel )
-+{
-+    bool bRet = false;
-+
-+    uno::Reference< chart2::XChartDocument > xNewDoc( xChartModel, uno::UNO_QUERY );
-+    if( xNewDoc.is() )
-+    {
-+        uno::Reference< chart2::XDiagram > xNewDiagram( xNewDoc->getFirstDiagram() );
-+        if( xNewDiagram.is() )
-+        {
-+            uno::Reference< chart2::XChartType > xChartType( lcl_getChartTypeOfSeries(
-+                                        xNewDiagram, xSeries ) );
-+            if( xChartType.is() )
-+            {
-+                rtl::OUString aServiceName( xChartType->getChartType() );
-+                if( aServiceName.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart2.CandleStickChartType" ) ) ) )
-+                    bRet = true;
-+            }
-+        }
-+    }
-+    return bRet;
-+}
-+
-+// static
-+Reference< chart2::XDataSeries > SchXMLSeriesHelper::getFirstCandleStickSeries(
-+    const Reference< chart2::XDiagram > & xDiagram  )
-+{
-+    Reference< chart2::XDataSeries > xResult;
-+
-+    try
-+    {
-+        Reference< chart2::XCoordinateSystemContainer > xCooSysCnt( xDiagram, uno::UNO_QUERY_THROW );
-+        Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq( xCooSysCnt->getCoordinateSystems());
-+        for( sal_Int32 nCooSysIdx=0; !xResult.is() && nCooSysIdx<aCooSysSeq.getLength(); ++nCooSysIdx )
-+        {
-+            Reference< chart2::XChartTypeContainer > xCTCnt( aCooSysSeq[nCooSysIdx], uno::UNO_QUERY_THROW );
-+            Sequence< Reference< chart2::XChartType > > aCTSeq( xCTCnt->getChartTypes());
-+            for( sal_Int32 nCTIdx=0; !xResult.is() && nCTIdx<aCTSeq.getLength(); ++nCTIdx )
-+            {
-+                if( aCTSeq[nCTIdx]->getChartType().equals(
-+                        ::rtl::OUString::createFromAscii("com.sun.star.chart2.CandleStickChartType")))
-+                {
-+                    Reference< chart2::XDataSeriesContainer > xSeriesCnt( aCTSeq[nCTIdx], uno::UNO_QUERY_THROW );
-+                    Sequence< Reference< chart2::XDataSeries > > aSeriesSeq( xSeriesCnt->getDataSeries() );
-+                    if( aSeriesSeq.getLength())
-+                        xResult.set( aSeriesSeq[0] );
-+                    break;
-+                }
-+            }
-+        }
-+    }
-+    catch( const uno::Exception & )
-+    {
-+        OSL_ENSURE( false, "Exception caught" );
-+    }
-+    return xResult;
-+}
-+
-+//static
-+uno::Reference< beans::XPropertySet > SchXMLSeriesHelper::createOldAPISeriesPropertySet(
-+            const uno::Reference< chart2::XDataSeries >& xSeries
-+            , const uno::Reference< frame::XModel >& xChartModel )
-+{
-+    uno::Reference< beans::XPropertySet > xRet;
-+
-+    if( xSeries.is() )
-+    {
-+        try
-+        {
-+            uno::Reference< lang::XMultiServiceFactory > xFactory( xChartModel, uno::UNO_QUERY );
-+            if( xFactory.is() )
-+            {
-+                xRet = uno::Reference< beans::XPropertySet >( xFactory->createInstance(
-+                    OUString::createFromAscii( "com.sun.star.comp.chart2.DataSeriesWrapper" ) ), uno::UNO_QUERY );
-+                Reference< lang::XInitialization > xInit( xRet, uno::UNO_QUERY );
-+                if(xInit.is())
-+                {
-+                    Sequence< uno::Any > aArguments(1);
-+                    aArguments[0]=uno::makeAny(xSeries);
-+                    xInit->initialize(aArguments);
-+                }
-+            }
-+        }
-+        catch( uno::Exception & rEx )
-+        {
-+            (void)rEx; // avoid warning for pro build
-+            DBG_ERROR1( "Exception caught SchXMLSeriesHelper::createOldAPISeriesPropertySet: %s",
-+                        OUStringToOString( rEx.Message, RTL_TEXTENCODING_ASCII_US ).getStr() );
-+        }
-+    }
-+
-+    return xRet;
-+}
-+
-+//static
-+uno::Reference< beans::XPropertySet > SchXMLSeriesHelper::createOldAPIDataPointPropertySet(
-+            const uno::Reference< chart2::XDataSeries >& xSeries
-+            , sal_Int32 nPointIndex
-+            , const uno::Reference< frame::XModel >& xChartModel )
-+{
-+    uno::Reference< beans::XPropertySet > xRet;
-+
-+    if( xSeries.is() )
-+    {
-+        try
-+        {
-+            uno::Reference< lang::XMultiServiceFactory > xFactory( xChartModel, uno::UNO_QUERY );
-+            if( xFactory.is() )
-+            {
-+                xRet = uno::Reference< beans::XPropertySet >( xFactory->createInstance(
-+                    OUString::createFromAscii( "com.sun.star.comp.chart2.DataSeriesWrapper" ) ), uno::UNO_QUERY );
-+                Reference< lang::XInitialization > xInit( xRet, uno::UNO_QUERY );
-+                if(xInit.is())
-+                {
-+                    Sequence< uno::Any > aArguments(2);
-+                    aArguments[0]=uno::makeAny(xSeries);
-+                    aArguments[1]=uno::makeAny(nPointIndex);
-+                    xInit->initialize(aArguments);
-+                }
-+            }
-+        }
-+        catch( uno::Exception & rEx )
-+        {
-+            (void)rEx; // avoid warning for pro build
-+
-+            DBG_ERROR1( "Exception caught SchXMLSeriesHelper::createOldAPIDataPointPropertySet: %s",
-+                        OUStringToOString( rEx.Message, RTL_TEXTENCODING_ASCII_US ).getStr() );
-+        }
-+    }
-+
-+    return xRet;
-+}
-+
-diff --git oox/source/export/SchXMLSeriesHelper.hxx oox/source/export/SchXMLSeriesHelper.hxx
-new file mode 100644
-index 0000000..6c8a458
---- /dev/null
-+++ oox/source/export/SchXMLSeriesHelper.hxx
-@@ -0,0 +1,83 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: SchXMLSeriesHelper.hxx,v $
-+ * $Revision: 1.3 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+#ifndef _XMLOFF_SCH_XML_SERIESHELPER_HXX
-+#define _XMLOFF_SCH_XML_SERIESHELPER_HXX
-+
-+#include <com/sun/star/chart2/data/XDataSequence.hpp>
-+#include <com/sun/star/chart2/data/XDataSource.hpp>
-+#include <com/sun/star/chart2/XDataSeries.hpp>
-+#include <com/sun/star/chart2/XDiagram.hpp>
-+#include <com/sun/star/frame/XModel.hpp>
-+
-+#include <vector>
-+#include <map>
-+
-+class SchXMLSeriesHelper
-+{
-+public:
-+    static ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDataSeries > >
-+            getDataSeriesFromDiagram(
-+                const ::com::sun::star::uno::Reference<
-+                    ::com::sun::star::chart2::XDiagram > & xDiagram );
-+    static ::std::map< ::com::sun::star::uno::Reference<
-+                ::com::sun::star::chart2::XDataSeries >, sal_Int32 > 
-+            getDataSeriesIndexMapFromDiagram(
-+                const ::com::sun::star::uno::Reference<
-+                    ::com::sun::star::chart2::XDiagram > & xDiagram );
-+
-+    static bool isCandleStickSeries(
-+                  const ::com::sun::star::uno::Reference<
-+                    ::com::sun::star::chart2::XDataSeries >& xSeries
-+                , const ::com::sun::star::uno::Reference<
-+                    ::com::sun::star::frame::XModel >& xChartModel  );
-+
-+    static ::com::sun::star::uno::Reference<
-+                ::com::sun::star::chart2::XDataSeries > getFirstCandleStickSeries(
-+                    const ::com::sun::star::uno::Reference<
-+                        ::com::sun::star::chart2::XDiagram > & xDiagram  );
-+
-+    static ::com::sun::star::uno::Reference<
-+                ::com::sun::star::beans::XPropertySet > createOldAPISeriesPropertySet(
-+                    const ::com::sun::star::uno::Reference<
-+                        ::com::sun::star::chart2::XDataSeries >& xSeries
-+                    , const ::com::sun::star::uno::Reference<
-+                        ::com::sun::star::frame::XModel >& xChartModel );
-+
-+    static ::com::sun::star::uno::Reference<
-+                ::com::sun::star::beans::XPropertySet > createOldAPIDataPointPropertySet(
-+                    const ::com::sun::star::uno::Reference<
-+                        ::com::sun::star::chart2::XDataSeries >& xSeries
-+                    , sal_Int32 nPointIndex
-+                    , const ::com::sun::star::uno::Reference<
-+                        ::com::sun::star::frame::XModel >& xChartModel );
-+};
-+
-+// _XMLOFF_SCH_XML_SERIESHELPER_HXX
-+#endif
-diff --git oox/source/export/chartexport.cxx oox/source/export/chartexport.cxx
-new file mode 100644
-index 0000000..dc82c0b
---- /dev/null
-+++ oox/source/export/chartexport.cxx
-@@ -0,0 +1,2849 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ * $Revision$
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#include "tokens.hxx"
-+#include "oox/core/xmlfilterbase.hxx"
-+#include "oox/export/chartexport.hxx"
-+#include "oox/export/utils.hxx"
-+#include "oox/drawingml/chart/typegroupconverter.hxx"
-+
-+#include <cstdio>
-+
-+#include <com/sun/star/chart/XChartDocument.hpp>
-+#include <com/sun/star/chart/ChartLegendPosition.hpp>
-+#include <com/sun/star/chart/XTwoAxisXSupplier.hpp>
-+#include <com/sun/star/chart/XTwoAxisYSupplier.hpp>
-+#include <com/sun/star/chart/XAxisZSupplier.hpp>
-+#include <com/sun/star/chart/XChartDataArray.hpp>
-+#include <com/sun/star/chart/ChartDataRowSource.hpp>
-+#include <com/sun/star/chart/ChartAxisAssign.hpp>
-+#include <com/sun/star/chart/ChartSeriesAddress.hpp>
-+#include <com/sun/star/chart/X3DDisplay.hpp>
-+#include <com/sun/star/chart/XStatisticDisplay.hpp>
-+#include <com/sun/star/chart/XSecondAxisTitleSupplier.hpp>
-+#include <com/sun/star/chart/ChartSymbolType.hpp>
-+#include <com/sun/star/chart/ChartAxisMarks.hpp>
-+#include <com/sun/star/chart/ChartAxisLabelPosition.hpp>
-+#include <com/sun/star/chart/ChartAxisPosition.hpp>
-+#include <com/sun/star/chart/ChartSolidType.hpp>
-+
-+#include <com/sun/star/chart2/XChartDocument.hpp>
-+#include <com/sun/star/chart2/XDiagram.hpp>
-+#include <com/sun/star/chart2/RelativePosition.hpp>
-+#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
-+#include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
-+#include <com/sun/star/chart2/XChartTypeContainer.hpp>
-+#include <com/sun/star/chart2/XDataSeriesContainer.hpp>
-+#include <com/sun/star/chart2/DataPointGeometry3D.hpp>
-+#include <com/sun/star/chart2/data/XDataSource.hpp>
-+#include <com/sun/star/chart2/data/XDataSink.hpp>
-+#include <com/sun/star/chart2/data/XDataReceiver.hpp>
-+#include <com/sun/star/chart2/data/XDataProvider.hpp>
-+#include <com/sun/star/chart2/data/XDatabaseDataProvider.hpp>
-+#include <com/sun/star/chart2/data/XRangeXMLConversion.hpp>
-+#include <com/sun/star/chart2/data/XTextualDataSequence.hpp>
-+#include <com/sun/star/chart2/data/XNumericalDataSequence.hpp>
-+
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/beans/XPropertyState.hpp>
-+#include <com/sun/star/container/XEnumerationAccess.hpp>
-+#include <com/sun/star/drawing/XShape.hpp>
-+#include <com/sun/star/drawing/FillStyle.hpp>
-+#include <com/sun/star/drawing/BitmapMode.hpp>
-+
-+#include <com/sun/star/table/CellAddress.hpp>
-+#include <com/sun/star/sheet/XFormulaParser.hpp>
-+#include <com/sun/star/sheet/XFormulaTokens.hpp>
-+#include <com/sun/star/sheet/FormulaToken.hpp>
-+#include <com/sun/star/sheet/AddressConvention.hpp>
-+
-+#include <com/sun/star/text/WritingMode.hpp>
-+#include <com/sun/star/container/XNamed.hpp>
-+
-+#include <comphelper/processfactory.hxx>
-+#include "SchXMLSeriesHelper.hxx"
-+#include "ColorPropertySet.hxx"
-+#include "oox/xls/formulaparser.hxx"
-+#include "oox/xls/workbookhelper.hxx"
-+#include "oox/xls/addressconverter.hxx"
-+#include <set>
-+#include <time.h>
-+
-+using namespace ::com::sun::star;
-+using namespace ::com::sun::star::uno;
-+using namespace ::com::sun::star::drawing;
-+using namespace ::oox::core;
-+using ::com::sun::star::beans::PropertyState;
-+using ::com::sun::star::beans::PropertyValue;
-+using ::com::sun::star::beans::XPropertySet;
-+using ::com::sun::star::beans::XPropertyState;
-+using ::com::sun::star::container::XEnumeration;
-+using ::com::sun::star::container::XEnumerationAccess;
-+using ::com::sun::star::container::XIndexAccess;
-+using ::com::sun::star::container::XNamed;
-+using ::com::sun::star::io::XOutputStream;
-+using ::com::sun::star::table::CellAddress;
-+using ::com::sun::star::sheet::XFormulaParser;
-+using ::com::sun::star::sheet::XFormulaTokens;
-+using ::oox::core::XmlFilterBase;
-+using ::rtl::OString;
-+using ::rtl::OStringBuffer;
-+using ::rtl::OUString;
-+using ::rtl::OUStringBuffer;
-+using ::sax_fastparser::FSHelperPtr;
-+
-+DBG(extern void dump_pset(Reference< XPropertySet > rXPropSet));
-+
-+#define IDS(x) (OString(#x " ") + OString::valueOf( mnShapeIdMax++ )).getStr()
-+
-+namespace oox { namespace drawingml {
-+
-+#define GETA(propName) \
-+    GetProperty( rXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( #propName ) ) )
-+
-+#define GETAD(propName) \
-+    ( GetPropertyAndState( rXPropSet, rXPropState, String( RTL_CONSTASCII_USTRINGPARAM( #propName ) ), eState ) && eState == beans::PropertyState_DIRECT_VALUE )
-+
-+#define GET(variable, propName) \
-+    if ( GETA(propName) ) \
-+        mAny >>= variable;
-+
-+Reference< uno::XComponentContext > lcl_getComponentContext()
-+{
-+    Reference< uno::XComponentContext > xContext;
-+    try
-+    {
-+        Reference< beans::XPropertySet > xFactProp( comphelper::getProcessServiceFactory(), uno::UNO_QUERY );
-+        if( xFactProp.is())
-+            xFactProp->getPropertyValue(OUString::createFromAscii("DefaultContext")) >>= xContext;
-+    }
-+    catch( uno::Exception& )
-+    {}
-+
-+    return xContext;
-+}
-+
-+class lcl_MatchesRole : public ::std::unary_function< Reference< chart2::data::XLabeledDataSequence >, bool >
-+{
-+public:
-+    explicit lcl_MatchesRole( const OUString & aRole ) :
-+            m_aRole( aRole )
-+    {}
-+
-+    bool operator () ( const Reference< chart2::data::XLabeledDataSequence > & xSeq ) const
-+    {
-+        if( !xSeq.is() )
-+            return  false;
-+        Reference< beans::XPropertySet > xProp( xSeq->getValues(), uno::UNO_QUERY );
-+        OUString aRole;
-+
-+        return ( xProp.is() &&
-+                 (xProp->getPropertyValue(
-+                     OUString( RTL_CONSTASCII_USTRINGPARAM( "Role" )) ) >>= aRole ) &&
-+                 m_aRole.equals( aRole ));
-+    }
-+
-+private:
-+    OUString m_aRole;
-+};
-+
-+template< typename T >
-+    void lcl_SequenceToVectorAppend( const Sequence< T > & rSource, ::std::vector< T > & rDestination )
-+{
-+    rDestination.reserve( rDestination.size() + rSource.getLength());
-+    ::std::copy( rSource.getConstArray(), rSource.getConstArray() + rSource.getLength(),
-+                 ::std::back_inserter( rDestination ));
-+}
-+
-+Reference< chart2::data::XLabeledDataSequence > lcl_getCategories( const Reference< chart2::XDiagram > & xDiagram )
-+{
-+    Reference< chart2::data::XLabeledDataSequence >  xResult;
-+    try
-+    {
-+        Reference< chart2::XCoordinateSystemContainer > xCooSysCnt(
-+            xDiagram, uno::UNO_QUERY_THROW );
-+        Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq(
-+            xCooSysCnt->getCoordinateSystems());
-+        for( sal_Int32 i=0; i<aCooSysSeq.getLength(); ++i )
-+        {
-+            Reference< chart2::XCoordinateSystem > xCooSys( aCooSysSeq[i] );
-+            OSL_ASSERT( xCooSys.is());
-+            for( sal_Int32 nN = xCooSys->getDimension(); nN--; )
-+            {
-+                const sal_Int32 nMaxAxisIndex = xCooSys->getMaximumAxisIndexByDimension(nN);
-+                for(sal_Int32 nI=0; nI<=nMaxAxisIndex; ++nI)
-+                {
-+                    Reference< chart2::XAxis > xAxis = xCooSys->getAxisByDimension( nN, nI );
-+                    OSL_ASSERT( xAxis.is());
-+                    if( xAxis.is())
-+                    {
-+                        chart2::ScaleData aScaleData = xAxis->getScaleData();
-+                        if( aScaleData.Categories.is())
-+                        {
-+                            xResult.set( aScaleData.Categories );
-+                            break;
-+                        }
-+                    }
-+                }
-+            }
-+        }
-+    }
-+    catch( uno::Exception & ex )
-+    {
-+        (void)ex; // avoid warning for pro build
-+        OSL_ENSURE( false, OUStringToOString(
-+                        OUString( RTL_CONSTASCII_USTRINGPARAM( "Exception caught. Type: " )) +
-+                        OUString::createFromAscii( typeid( ex ).name()) +
-+                        OUString( RTL_CONSTASCII_USTRINGPARAM( ", Message: " )) +
-+                        ex.Message, RTL_TEXTENCODING_ASCII_US ).getStr());
-+    }
-+
-+    /*
-+    //unused ranges are very problematic as they bear the risk to damage the rectangular structure completly
-+    if(!xResult.is())
-+    {
-+        Sequence< Reference< chart2::data::XLabeledDataSequence > > aUnusedSequences( xDiagram->getUnusedData() );
-+
-+        lcl_MatchesRole aHasCategories( OUString::createFromAscii("categories" ) );
-+        for( sal_Int32 nN=0; nN<aUnusedSequences.getLength(); nN++ )
-+        {
-+            if( aHasCategories( aUnusedSequences[nN] ) )
-+            {
-+                xResult.set( aUnusedSequences[nN] );
-+                break;
-+            }
-+        }
-+    }
-+    */
-+
-+    return xResult;
-+}
-+
-+Reference< chart2::data::XDataSource > lcl_createDataSource(
-+    const Sequence< Reference< chart2::data::XLabeledDataSequence > > & aData )
-+{
-+    Reference< chart2::data::XDataSink > xSink;
-+    Reference< uno::XComponentContext > xContext( lcl_getComponentContext());
-+    if( xContext.is() )
-+        xSink.set(
-+            xContext->getServiceManager()->createInstanceWithContext(
-+                OUString::createFromAscii("com.sun.star.chart2.data.DataSource"),
-+                xContext ), uno::UNO_QUERY_THROW );
-+    if( xSink.is())
-+        xSink->setData( aData );
-+
-+    return Reference< chart2::data::XDataSource >( xSink, uno::UNO_QUERY );
-+}
-+
-+Sequence< Reference< chart2::data::XLabeledDataSequence > > lcl_getAllSeriesSequences( const Reference< chart2::XChartDocument >& xChartDoc )
-+{
-+    ::std::vector< Reference< chart2::data::XLabeledDataSequence > > aContainer;
-+    if( xChartDoc.is() )
-+    {
-+        Reference< chart2::XDiagram > xDiagram( xChartDoc->getFirstDiagram());
-+        ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector( SchXMLSeriesHelper::getDataSeriesFromDiagram( xDiagram ));
-+        for( ::std::vector< Reference< chart2::XDataSeries > >::const_iterator aSeriesIt( aSeriesVector.begin() )
-+            ; aSeriesIt != aSeriesVector.end(); ++aSeriesIt )
-+        {
-+            Reference< chart2::data::XDataSource > xDataSource( *aSeriesIt, uno::UNO_QUERY );
-+            if( !xDataSource.is() )
-+                continue;
-+            uno::Sequence< Reference< chart2::data::XLabeledDataSequence > > aDataSequences( xDataSource->getDataSequences() );
-+            lcl_SequenceToVectorAppend( aDataSequences, aContainer );
-+        }
-+    }
-+
-+    Sequence< Reference< chart2::data::XLabeledDataSequence > > aRet( aContainer.size());
-+    ::std::copy( aContainer.begin(), aContainer.end(), aRet.getArray());
-+
-+    return aRet;
-+}
-+
-+Reference< chart2::data::XLabeledDataSequence >
-+    lcl_getDataSequenceByRole(
-+        const Sequence< Reference< chart2::data::XLabeledDataSequence > > & aLabeledSeq,
-+        const OUString & rRole )
-+{
-+    Reference< chart2::data::XLabeledDataSequence > aNoResult;
-+
-+    const Reference< chart2::data::XLabeledDataSequence > * pBegin = aLabeledSeq.getConstArray();
-+    const Reference< chart2::data::XLabeledDataSequence > * pEnd = pBegin + aLabeledSeq.getLength();
-+    const Reference< chart2::data::XLabeledDataSequence > * pMatch =
-+        ::std::find_if( pBegin, pEnd, lcl_MatchesRole( rRole ));
-+
-+    if( pMatch != pEnd )
-+        return *pMatch;
-+
-+    return aNoResult;
-+}
-+
-+Reference< chart2::data::XDataSource > lcl_pressUsedDataIntoRectangularFormat( const Reference< chart2::XChartDocument >& xChartDoc, sal_Bool& rOutSourceHasCategoryLabels )
-+{
-+    ::std::vector< Reference< chart2::data::XLabeledDataSequence > > aLabeledSeqVector;
-+
-+    //categories are always the first sequence
-+    Reference< chart2::XDiagram > xDiagram( xChartDoc->getFirstDiagram());
-+    Reference< chart2::data::XLabeledDataSequence > xCategories( lcl_getCategories( xDiagram ) );
-+    if( xCategories.is() )
-+        aLabeledSeqVector.push_back( xCategories );
-+    rOutSourceHasCategoryLabels = sal_Bool(xCategories.is());
-+
-+    Sequence< Reference< chart2::data::XLabeledDataSequence > > aSeriesSeqVector(
-+            lcl_getAllSeriesSequences( xChartDoc ) );
-+
-+    //the first x-values is always the next sequence //todo ... other x-values get lost for old format
-+    Reference< chart2::data::XLabeledDataSequence > xXValues(
-+        lcl_getDataSequenceByRole( aSeriesSeqVector, OUString::createFromAscii("values-x" ) ) );
-+    if( xXValues.is() )
-+        aLabeledSeqVector.push_back( xXValues );
-+    
-+    //add all other sequences now without x-values
-+    lcl_MatchesRole aHasXValues( OUString::createFromAscii("values-x" ) );
-+    for( sal_Int32 nN=0; nN<aSeriesSeqVector.getLength(); nN++ )
-+    {
-+        if( !aHasXValues( aSeriesSeqVector[nN] ) )
-+            aLabeledSeqVector.push_back( aSeriesSeqVector[nN] );
-+    }
-+
-+    Sequence< Reference< chart2::data::XLabeledDataSequence > > aSeq( aLabeledSeqVector.size() );
-+    ::std::copy( aLabeledSeqVector.begin(), aLabeledSeqVector.end(), aSeq.getArray() );
-+
-+    return lcl_createDataSource( aSeq );
-+}
-+
-+bool lcl_isSeriesAttachedToFirstAxis(
-+    const Reference< chart2::XDataSeries > & xDataSeries )
-+{
-+    bool bResult=true;
-+
-+    try
-+    {
-+        sal_Int32 nAxisIndex = 0;
-+        Reference< beans::XPropertySet > xProp( xDataSeries, uno::UNO_QUERY_THROW );
-+        if( xProp.is() )
-+            xProp->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("AttachedAxisIndex") ) ) >>= nAxisIndex;
-+        bResult = (0==nAxisIndex);
-+    }
-+    catch( uno::Exception & ex )
-+    {
-+        (void)ex; // avoid warning for pro build
-+        OSL_ENSURE( false, OUStringToOString(
-+                        OUString( RTL_CONSTASCII_USTRINGPARAM( "Exception caught. Type: " )) +
-+                        OUString::createFromAscii( typeid( ex ).name()) +
-+                        OUString( RTL_CONSTASCII_USTRINGPARAM( ", Message: " )) +
-+                        ex.Message, RTL_TEXTENCODING_ASCII_US ).getStr());
-+    }
-+
-+    return bResult;
-+}
-+
-+OUString lcl_ConvertRange( const ::rtl::OUString & rRange, const Reference< chart2::XChartDocument > & xDoc )
-+{
-+    OUString aResult = rRange;
-+
-+    if( !xDoc.is() )
-+        return aResult;
-+    Reference< chart2::data::XRangeXMLConversion > xConversion(
-+        xDoc->getDataProvider(), uno::UNO_QUERY );
-+    if( xConversion.is())
-+        aResult = xConversion->convertRangeToXML( rRange );
-+    OSL_TRACE("lcl_ConvertRange, the originla formula is %s, the new formula is %s ", OUStringToOString( rRange, RTL_TEXTENCODING_UTF8 ).getStr(), OUStringToOString( aResult, RTL_TEXTENCODING_UTF8 ).getStr());
-+    return aResult;
-+}
-+
-+typedef ::std::pair< OUString, OUString > tLabelAndValueRange;
-+
-+sal_Int32 lcl_getSequenceLengthByRole(
-+    const Sequence< Reference< chart2::data::XLabeledDataSequence > > & aSeqCnt,
-+    const OUString & rRole )
-+{
-+    Reference< chart2::data::XLabeledDataSequence > xLabeledSeq(
-+        lcl_getDataSequenceByRole( aSeqCnt, rRole ));
-+    if( xLabeledSeq.is())
-+    {
-+        Reference< chart2::data::XDataSequence > xSeq( xLabeledSeq->getValues());
-+        return xSeq->getData().getLength();
-+    }
-+    return 0;
-+}
-+
-+bool lcl_hasChartType( const Reference< chart2::XDiagram > & xDiagram, const OUString & rChartType )
-+{
-+    try
-+    {
-+        Reference< chart2::XCoordinateSystemContainer > xCooSysCnt( xDiagram, uno::UNO_QUERY_THROW );
-+        Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq( xCooSysCnt->getCoordinateSystems());
-+        for( sal_Int32 nCooSysIdx=0; nCooSysIdx<aCooSysSeq.getLength(); ++nCooSysIdx )
-+        {
-+            Reference< chart2::XChartTypeContainer > xCTCnt( aCooSysSeq[nCooSysIdx], uno::UNO_QUERY_THROW );
-+            Sequence< Reference< chart2::XChartType > > aChartTypes( xCTCnt->getChartTypes());
-+            for( sal_Int32 nCTIdx=0; nCTIdx<aChartTypes.getLength(); ++nCTIdx )
-+            {
-+                if( aChartTypes[nCTIdx]->getChartType().equals( rChartType ))
-+                    return true;
-+            }
-+        }
-+    }
-+    catch( uno::Exception & )
-+    {
-+        DBG_ERROR( "Exception while searching for chart type in diagram" );
-+    }
-+    return false;
-+}
-+
-+OUString lcl_flattenStringSequence( const Sequence< OUString > & rSequence )
-+{
-+    OUStringBuffer aResult;
-+    bool bPrecedeWithSpace = false;
-+    for( sal_Int32 nIndex=0; nIndex<rSequence.getLength(); ++nIndex )
-+    {
-+        if( rSequence[nIndex].getLength())
-+        {
-+            if( bPrecedeWithSpace )
-+                aResult.append( static_cast< sal_Unicode >( ' ' ));
-+            aResult.append( rSequence[nIndex] );
-+            bPrecedeWithSpace = true;
-+        }
-+    }
-+    return aResult.makeStringAndClear();
-+}
-+
-+OUString lcl_getLabelString( const Reference< chart2::data::XDataSequence > & xLabelSeq )
-+{
-+    Sequence< OUString > aLabels;
-+
-+    uno::Reference< chart2::data::XTextualDataSequence > xTextualDataSequence( xLabelSeq, uno::UNO_QUERY );
-+    if( xTextualDataSequence.is())
-+    {
-+        aLabels = xTextualDataSequence->getTextualData();
-+    }
-+    else if( xLabelSeq.is())
-+    {
-+        Sequence< uno::Any > aAnies( xLabelSeq->getData());
-+        aLabels.realloc( aAnies.getLength());
-+        for( sal_Int32 i=0; i<aAnies.getLength(); ++i )
-+            aAnies[i] >>= aLabels[i];
-+    }
-+
-+    return lcl_flattenStringSequence( aLabels );
-+}
-+
-+void lcl_fillCategoriesIntoStringVector(
-+    const Reference< chart2::data::XDataSequence > & xCategories,
-+    ::std::vector< OUString > & rOutCategories )
-+{
-+    OSL_ASSERT( xCategories.is());
-+    if( !xCategories.is())
-+        return;
-+    Reference< chart2::data::XTextualDataSequence > xTextualDataSequence( xCategories, uno::UNO_QUERY );
-+    if( xTextualDataSequence.is())
-+    {
-+        rOutCategories.clear();
-+        Sequence< OUString > aTextData( xTextualDataSequence->getTextualData());
-+        ::std::copy( aTextData.getConstArray(), aTextData.getConstArray() + aTextData.getLength(),
-+                     ::std::back_inserter( rOutCategories ));
-+    }
-+    else
-+    {
-+        Sequence< uno::Any > aAnies( xCategories->getData());
-+        rOutCategories.resize( aAnies.getLength());
-+        for( sal_Int32 i=0; i<aAnies.getLength(); ++i )
-+            aAnies[i] >>= rOutCategories[i];
-+    }
-+}
-+
-+double lcl_getValueFromSequence( const Reference< chart2::data::XDataSequence > & xSeq, sal_Int32 nIndex )
-+{
-+    double fResult = 0.0;
-+    ::rtl::math::setNan( &fResult );
-+    Reference< chart2::data::XNumericalDataSequence > xNumSeq( xSeq, uno::UNO_QUERY );
-+    if( xNumSeq.is())
-+    {
-+        Sequence< double > aValues( xNumSeq->getNumericalData());
-+        if( nIndex < aValues.getLength() )
-+            fResult = aValues[nIndex];
-+    }
-+    else
-+    {
-+        Sequence< uno::Any > aAnies( xSeq->getData());
-+        if( nIndex < aAnies.getLength() )
-+            aAnies[nIndex] >>= fResult;
-+    }
-+    return fResult;
-+}
-+
-+::std::vector< double > lcl_getAllValuesFromSequence( const Reference< chart2::data::XDataSequence > & xSeq )
-+{
-+    double fNan = 0.0;
-+    ::rtl::math::setNan( &fNan );
-+    ::std::vector< double > aResult;
-+
-+    Reference< chart2::data::XNumericalDataSequence > xNumSeq( xSeq, uno::UNO_QUERY );
-+    if( xNumSeq.is())
-+    {
-+        Sequence< double > aValues( xNumSeq->getNumericalData());
-+        ::std::copy( aValues.getConstArray(), aValues.getConstArray() + aValues.getLength(),
-+                     ::std::back_inserter( aResult ));
-+    }
-+    else if( xSeq.is())
-+    {
-+        Sequence< uno::Any > aAnies( xSeq->getData());
-+        aResult.resize( aAnies.getLength(), fNan );
-+        for( sal_Int32 i=0; i<aAnies.getLength(); ++i )
-+            aAnies[i] >>= aResult[i];
-+    }
-+    return aResult;
-+}
-+
-+bool lcl_SequenceHasUnhiddenData( const uno::Reference< chart2::data::XDataSequence >& xDataSequence )
-+{
-+    if( !xDataSequence.is() )
-+        return false;
-+    uno::Reference< beans::XPropertySet > xProp( xDataSequence, uno::UNO_QUERY );
-+    if( xProp.is() )
-+    {
-+        uno::Sequence< sal_Int32 > aHiddenValues;
-+        try
-+        {
-+            xProp->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "HiddenValues" ) ) ) >>= aHiddenValues;
-+            if( !aHiddenValues.getLength() )
-+                return true;
-+        }
-+        catch( uno::Exception& e )
-+        {
-+            (void)e; // avoid warning
-+            return true;
-+        }
-+    }
-+    if( xDataSequence->getData().getLength() )
-+        return true;
-+    return false;
-+}
-+
-+
-+sal_Int32 lcl_getChartType( const OUString& sChartType )
-+{
-+    chart::TypeId eChartTypeId = chart::TYPEID_UNKNOWN;
-+    if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.BarDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.ColumnChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_BAR;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.AreaDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.AreaChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_AREA;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.LineDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.LineChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_LINE;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.PieDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.PieChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_PIE;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.DonutDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.DonutChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_DOUGHNUT;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.XYDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.ScatterChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_SCATTER;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.NetDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.NetChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_RADARLINE;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.FilledNetDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.FilledNetChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_RADARAREA;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.StockDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.CandleStickChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_STOCK;
-+    else if(( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart.BubbleDiagram" )))
-+        || ( 0 == sChartType.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.BubbleChartType") ) ) )
-+        eChartTypeId = chart::TYPEID_BUBBLE;
-+
-+    return eChartTypeId;
-+}
-+
-+sal_Int32 lcl_generateRandomValue()
-+{
-+    static sal_Int32 MAX_NUMBER = 100000000;
-+    //srand( unsigned( time( NULL ) ));
-+    return sal_Int32( rand() % MAX_NUMBER );
-+}
-+
-+ChartExport::ChartExport( sal_Int32 nXmlNamespace, FSHelperPtr pFS, Reference< frame::XModel >& xModel, XmlFilterBase* pFB, DocumentType eDocumentType )
-+    : DrawingML( pFS, pFB, eDocumentType )
-+    , mnXmlNamespace( nXmlNamespace )
-+    , maFraction( 1, 576 )
-+    , mxChartModel( xModel )
-+    , mbHasSeriesLabels( sal_False )
-+    , mbHasCategoryLabels( sal_False )
-+    , mbRowSourceColumns( sal_True )
-+    , mbHasXAxis( sal_False )
-+    , mbHasYAxis( sal_False )
-+    , mbHasZAxis( sal_False )
-+    , mbHasSecondaryXAxis( sal_False )
-+    , mbHasSecondaryYAxis( sal_False )
-+    , mbIs3DChart( sal_False )
-+{
-+}
-+
-+sal_Int32 ChartExport::GetXmlNamespace() const
-+{
-+    return mnXmlNamespace;
-+}
-+
-+ChartExport& ChartExport::SetXmlNamespace( sal_Int32 nXmlNamespace )
-+{
-+    mnXmlNamespace = nXmlNamespace;
-+    return *this;
-+}
-+
-+sal_Int32 ChartExport::GetChartID( )
-+{
-+    sal_Int32 nID = GetFB()->GetUniqueId();
-+    return nID;
-+}
-+
-+sal_Int32 ChartExport::getChartType( )
-+{
-+    OUString sChartType = mxDiagram->getDiagramType();
-+    return lcl_getChartType( sChartType );
-+}
-+
-+OUString ChartExport::parseFormula( const OUString& rRange )
-+{
-+    OUString aResult;
-+    Reference< XFormulaParser > xParser;
-+    uno::Reference< lang::XMultiServiceFactory > xSF( GetFB()->getModelFactory(), uno::UNO_QUERY );
-+    if( xSF.is() )
-+    {
-+        try
-+        {
-+            xParser.set( xSF->createInstance( OUString::createFromAscii( "com.sun.star.sheet.FormulaParser" ) ), UNO_QUERY );
-+        }     
-+        catch( Exception& )
-+        {
-+        }
-+    }    
-+    if( xParser.is() )
-+    {
-+        OSL_TRACE("ChartExport::parseFormula, parser is valid");
-+        Reference< XPropertySet > xParserProps( xParser, uno::UNO_QUERY );
-+        if( xParserProps.is() )
-+        {
-+            xParserProps->setPropertyValue( OUString::createFromAscii("FormulaConvention"), uno::makeAny(::com::sun::star::sheet::AddressConvention::OOO) );
-+        }
-+        uno::Sequence<sheet::FormulaToken> aTokens = xParser->parseFormula( rRange, CellAddress( 0, 0, 0 ) );
-+        if( xParserProps.is() )
-+        {
-+            xParserProps->setPropertyValue( OUString::createFromAscii("FormulaConvention"), uno::makeAny(::com::sun::star::sheet::AddressConvention::XL_OOX) );
-+        }
-+        aResult = xParser->printFormula( aTokens, CellAddress( 0, 0, 0 ) );
-+    }
-+    else
-+    {
-+        OSL_TRACE("ChartExport::parseFormula, parser is invalid");
-+        //FIXME: currently just using simple converter, e.g $Sheet1.$A$1:$C$1 -> Sheet1!$A$1:$C$1
-+        String aRange( rRange );
-+        if( aRange.SearchAscii("$") == 0 )
-+            aRange = aRange.Copy(1);
-+        aRange.SearchAndReplaceAllAscii(".$", String::CreateFromAscii("!$") );    
-+        aResult = aRange;
-+    }
-+
-+    OSL_TRACE("ChartExport::parseFormula, the originla formula is %s, the new formula is %s ", OUStringToOString( rRange, RTL_TEXTENCODING_UTF8 ).getStr(), OUStringToOString( aResult, RTL_TEXTENCODING_UTF8 ).getStr());
-+    return aResult;
-+}
-+
-+ChartExport& ChartExport::WriteChartObj( const Reference< XShape >& xShape, sal_Int32 nChartCount )
-+{
-+    OSL_TRACE("ChartExport::WriteChartObj -- writer chart object");
-+    FSHelperPtr pFS = GetFS();
-+
-+    pFS->startElementNS( mnXmlNamespace, XML_graphicFrame, FSEND );
-+               
-+    pFS->startElementNS( mnXmlNamespace, XML_nvGraphicFramePr, FSEND );
-+
-+    // TODO: get the correct chart name chart id
-+    OUString sName = S("Object 1");
-+    Reference< XNamed > xNamed( xShape, UNO_QUERY );
-+    if (xNamed.is())
-+        sName = xNamed->getName();
-+
-+    sal_Int32 nID = GetChartID();
-+
-+    pFS->singleElementNS( mnXmlNamespace, XML_cNvPr,
-+                          XML_id,     I32S( nID ),
-+                          XML_name,   USS( sName ),
-+                          FSEND );
-+
-+    pFS->singleElementNS( mnXmlNamespace, XML_cNvGraphicFramePr,
-+                          FSEND );
-+
-+    if( GetDocumentType() == DOCUMENT_PPTX )
-+        pFS->singleElementNS( mnXmlNamespace, XML_nvPr,
-+                          FSEND );
-+    pFS->endElementNS( mnXmlNamespace, XML_nvGraphicFramePr );
-+
-+    // visual chart properties
-+    WriteShapeTransformation( xShape, mnXmlNamespace );
-+
-+    // writer chart object
-+    pFS->startElement( FSNS( XML_a, XML_graphic ), FSEND );
-+    pFS->startElement( FSNS( XML_a, XML_graphicData ), 
-+                       XML_uri, "http://schemas.openxmlformats.org/drawingml/2006/chart",
-+                       FSEND );
-+    OUString sId;
-+    const char* sFullPath = NULL;
-+    const char* sRelativePath = NULL;
-+    switch( GetDocumentType() )
-+    {
-+        case DOCUMENT_DOCX:
-+        {
-+            sFullPath = "word/charts/chart";
-+            sRelativePath = "charts/chart";
-+            break;
-+        }
-+        case DOCUMENT_PPTX:
-+        {
-+            sFullPath = "ppt/charts/chart";
-+            sRelativePath = "../charts/chart";
-+            break;
-+        }
-+        case DOCUMENT_XLSX:
-+        {
-+            sFullPath = "xl/charts/chart";
-+            sRelativePath = "../charts/chart";
-+            break;
-+        }
-+        default:
-+        {
-+            sFullPath = "charts/chart";
-+            sRelativePath = "charts/chart";
-+            break;
-+        }
-+    }
-+    OUString sFullStream = OUStringBuffer()
-+                            .appendAscii(sFullPath)
-+                            .append(nChartCount)
-+                            .appendAscii( ".xml" )
-+                            .makeStringAndClear();
-+    OUString sRelativeStream = OUStringBuffer()
-+                            .appendAscii(sRelativePath)
-+                            .append(nChartCount)
-+                            .appendAscii( ".xml" )
-+                            .makeStringAndClear();
-+    FSHelperPtr pChart = CreateOutputStream(
-+            sFullStream,
-+            sRelativeStream,
-+            pFS->getOutputStream(),
-+            "application/vnd.openxmlformats-officedocument.drawingml.chart+xml",
-+            "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",
-+            &sId );
-+            
-+    pFS->singleElement(  FSNS( XML_c, XML_chart ),
-+            FSNS( XML_xmlns, XML_c ), "http://schemas.openxmlformats.org/drawingml/2006/chart",
-+            FSNS( XML_xmlns, XML_r ), "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
-+            FSNS( XML_r, XML_id ), USS( sId ),
-+            FSEND );
-+
-+    pFS->endElement( FSNS( XML_a, XML_graphicData ) ); 
-+    pFS->endElement( FSNS( XML_a, XML_graphic ) ); 
-+    pFS->endElementNS( mnXmlNamespace, XML_graphicFrame );
-+    
-+    SetFS( pChart );
-+    ExportContent();        
-+
-+    return *this;
-+}
-+
-+void ChartExport::InitRangeSegmentationProperties( const Reference< chart2::XChartDocument > & xChartDoc )
-+{
-+    if( xChartDoc.is())
-+        try
-+        {
-+            Reference< chart2::data::XDataProvider > xDataProvider( xChartDoc->getDataProvider() );
-+            OSL_ENSURE( xDataProvider.is(), "No DataProvider" );
-+            if( xDataProvider.is())
-+            {
-+                Reference< chart2::data::XDataSource > xDataSource( lcl_pressUsedDataIntoRectangularFormat( xChartDoc, mbHasCategoryLabels ));
-+                Sequence< beans::PropertyValue > aArgs( xDataProvider->detectArguments( xDataSource ));
-+                ::rtl::OUString sCellRange, sBrokenRange;
-+                bool bBrokenRangeAvailable = false;
-+                for( sal_Int32 i=0; i<aArgs.getLength(); ++i )
-+                {
-+                    if( aArgs[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("CellRangeRepresentation")))
-+                        aArgs[i].Value >>= sCellRange;
-+                    else if( aArgs[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("BrokenCellRangeForExport")))
-+                    {
-+                        if( aArgs[i].Value >>= sBrokenRange )
-+                            bBrokenRangeAvailable = true;
-+                    }
-+                    else if( aArgs[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DataRowSource")))
-+                    {
-+                        ::com::sun::star::chart::ChartDataRowSource eRowSource;
-+                        aArgs[i].Value >>= eRowSource;
-+                        mbRowSourceColumns = ( eRowSource == ::com::sun::star::chart::ChartDataRowSource_COLUMNS );
-+                    }
-+                    else if( aArgs[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("FirstCellAsLabel")))
-+                        aArgs[i].Value >>= mbHasSeriesLabels;
-+                    else if( aArgs[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("SequenceMapping")))
-+                        aArgs[i].Value >>= maSequenceMapping;
-+                    else if( aArgs[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("TableNumberList")))
-+                        aArgs[i].Value >>= msTableNumberList;
-+                }
-+
-+                // #i79009# For Writer we have to export a broken version of the
-+                // range, where every row number is noe too large, so that older
-+                // version can correctly read those files.
-+                msChartAddress = (bBrokenRangeAvailable ? sBrokenRange : sCellRange);
-+                if( msChartAddress.getLength() > 0 )
-+                {
-+                    // convert format to XML-conform one
-+                    Reference< chart2::data::XRangeXMLConversion > xConversion( xDataProvider, uno::UNO_QUERY );
-+                    if( xConversion.is())
-+                        msChartAddress = xConversion->convertRangeToXML( msChartAddress );
-+                }
-+            }
-+        }
-+        catch( uno::Exception & ex )
-+        {
-+            (void)ex; // avoid warning for pro build
-+            OSL_ENSURE( false, OUStringToOString(
-+                            OUString( RTL_CONSTASCII_USTRINGPARAM( "Exception caught. Type: " )) +
-+                            OUString::createFromAscii( typeid( ex ).name()) +
-+                            OUString( RTL_CONSTASCII_USTRINGPARAM( ", Message: " )) +
-+                            ex.Message, RTL_TEXTENCODING_ASCII_US ).getStr());
-+        }
-+}
-+
-+void ChartExport::ExportContent()
-+{
-+    Reference< chart2::XChartDocument > xChartDoc( getModel(), uno::UNO_QUERY );
-+    OSL_ASSERT( xChartDoc.is() );
-+    if( !xChartDoc.is() )
-+        return;
-+    InitRangeSegmentationProperties( xChartDoc );
-+    // TODO: export chart
-+    _ExportContent( );
-+}
-+
-+void ChartExport::_ExportContent()
-+{
-+    Reference< ::com::sun::star::chart::XChartDocument > xChartDoc( getModel(), uno::UNO_QUERY );
-+    if( xChartDoc.is())
-+    {
-+        // determine if data comes from the outside
-+        sal_Bool bIncludeTable = sal_True;
-+
-+        Reference< chart2::XChartDocument > xNewDoc( xChartDoc, uno::UNO_QUERY );
-+        if( xNewDoc.is())
-+        {
-+            // check if we have own data.  If so we must not export the complete
-+            // range string, as this is our only indicator for having own or
-+            // external data. @todo: fix this in the file format!
-+            Reference< lang::XServiceInfo > xDPServiceInfo( xNewDoc->getDataProvider(), uno::UNO_QUERY );
-+            if( ! (xDPServiceInfo.is() &&
-+                   xDPServiceInfo->getImplementationName().equalsAsciiL(
-+                       RTL_CONSTASCII_STRINGPARAM( "com.sun.star.comp.chart.InternalDataProvider" ))))
-+            {
-+                bIncludeTable = sal_False;
-+            }
-+        }
-+        else
-+        {
-+            Reference< lang::XServiceInfo > xServ( xChartDoc, uno::UNO_QUERY );
-+            if( xServ.is())
-+            {
-+                if( xServ->supportsService(
-+                        OUString::createFromAscii( "com.sun.star.chart.ChartTableAddressSupplier" )))
-+                {
-+                    Reference< beans::XPropertySet > xProp( xServ, uno::UNO_QUERY );
-+                    if( xProp.is())
-+                    {
-+                        Any aAny;
-+                        try
-+                        {
-+                            OUString sChartAddress;
-+                            aAny = xProp->getPropertyValue(
-+                                OUString::createFromAscii( "ChartRangeAddress" ));
-+                            aAny >>= msChartAddress;
-+                            //maExportHelper.SetChartRangeAddress( sChartAddress );
-+
-+                            OUString sTableNumberList;
-+                            aAny = xProp->getPropertyValue(
-+                                OUString::createFromAscii( "TableNumberList" ));
-+                            aAny >>= msTableNumberList;
-+                            //maExportHelper.SetTableNumberList( sTableNumberList );
-+
-+                            // do not include own table if there are external addresses
-+                            bIncludeTable = (sChartAddress.getLength() == 0);
-+                        }
-+                        catch( beans::UnknownPropertyException & )
-+                        {
-+                            DBG_ERROR( "Property ChartRangeAddress not supported by ChartDocument" );
-+                        }
-+                    }
-+                }
-+            }
-+        }
-+        exportChartSpace( xChartDoc, bIncludeTable );
-+    }
-+    else
-+    {
-+        DBG_ERROR( "Couldn't export chart due to wrong XModel" );
-+    }
-+}
-+
-+void ChartExport::exportChartSpace( Reference< ::com::sun::star::chart::XChartDocument > rChartDoc,
-+                                      sal_Bool bIncludeTable )
-+{
-+    FSHelperPtr pFS = GetFS();
-+    pFS->startElement( FSNS( XML_c, XML_chartSpace ),
-+            FSNS( XML_xmlns, XML_c ), "http://schemas.openxmlformats.org/drawingml/2006/chart",
-+            FSNS( XML_xmlns, XML_a ), "http://schemas.openxmlformats.org/drawingml/2006/main",
-+            FSNS( XML_xmlns, XML_r ), "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
-+            FSEND );
-+    // TODO: get the correct editing lanauge
-+    pFS->singleElement( FSNS( XML_c, XML_lang ),
-+            XML_val, "en-US",
-+            FSEND );
-+
-+    if( !bIncludeTable )
-+    {
-+        // TODO:external data
-+    }
-+    //XML_chart
-+    exportChart(rChartDoc);
-+
-+    // TODO: printSettings
-+    // TODO: style
-+    // TODO: text properties
-+    // TODO: shape properties
-+    Reference< XPropertySet > xPropSet( rChartDoc->getArea(), uno::UNO_QUERY );
-+    if( xPropSet.is() )
-+        exportShapeProps( xPropSet );
-+    pFS->endElement( FSNS( XML_c, XML_chartSpace ) );
-+}
-+
-+void ChartExport::exportChart( Reference< ::com::sun::star::chart::XChartDocument > rChartDoc )
-+{
-+    Reference< chart2::XChartDocument > xNewDoc( rChartDoc, uno::UNO_QUERY );
-+    mxDiagram.set( rChartDoc->getDiagram() );
-+    if( xNewDoc.is())
-+        mxNewDiagram.set( xNewDoc->getFirstDiagram());
-+
-+    // get Properties of ChartDocument
-+    sal_Bool bHasMainTitle = sal_False;
-+    sal_Bool bHasSubTitle = sal_False;
-+    sal_Bool bHasLegend = sal_False;
-+    Reference< beans::XPropertySet > xDocPropSet( rChartDoc, uno::UNO_QUERY );
-+    if( xDocPropSet.is())
-+    {
-+        try
-+        {
-+            Any aAny( xDocPropSet->getPropertyValue(
-+                OUString( RTL_CONSTASCII_USTRINGPARAM( "HasMainTitle" ))));
-+            aAny >>= bHasMainTitle;
-+            aAny = xDocPropSet->getPropertyValue(
-+                OUString( RTL_CONSTASCII_USTRINGPARAM( "HasSubTitle" )));
-+            aAny >>= bHasSubTitle;
-+            aAny = xDocPropSet->getPropertyValue(
-+                OUString( RTL_CONSTASCII_USTRINGPARAM( "HasLegend" )));
-+            aAny >>= bHasLegend;
-+        }    
-+        catch( beans::UnknownPropertyException & )
-+        {
-+            DBG_WARNING( "Required property not found in ChartDocument" );
-+        }
-+    } // if( xDocPropSet.is())
-+
-+    // chart element
-+    // -------------
-+    FSHelperPtr pFS = GetFS();
-+    pFS->startElement( FSNS( XML_c, XML_chart ),
-+            FSEND );
-+    
-+    // title
-+    if( bHasMainTitle )
-+    {
-+        Reference< drawing::XShape > xShape = rChartDoc->getTitle(); 
-+        if( xShape.is() )
-+            exportTitle( xShape );
-+    }
-+    InitPlotArea( );
-+    if( mbIs3DChart )
-+    {
-+        exportView3D();
-+        
-+        // sideWall
-+
-+        // backWall
-+        Reference< beans::XPropertySet > xBackWall( mxNewDiagram->getWall(), uno::UNO_QUERY );
-+        if( xBackWall.is() )
-+        {
-+            pFS->startElement( FSNS( XML_c, XML_backWall ),
-+                FSEND );
-+            exportShapeProps( xBackWall );
-+            pFS->endElement( FSNS( XML_c, XML_backWall ) );
-+        }    
-+
-+        // floor
-+        Reference< beans::XPropertySet > xFloor( mxNewDiagram->getFloor(), uno::UNO_QUERY );
-+        if( xFloor.is() )
-+        {
-+            pFS->startElement( FSNS( XML_c, XML_floor ),
-+                FSEND );
-+            exportShapeProps( xFloor );
-+            pFS->endElement( FSNS( XML_c, XML_floor ) );
-+        }    
-+
-+    }
-+    // plot area
-+    exportPlotArea( );
-+    // legend
-+    if( bHasLegend )
-+        exportLegend( rChartDoc );
-+    // only visible cells should be plotted on the chart
-+    pFS->singleElement( FSNS( XML_c, XML_plotVisOnly ),
-+            XML_val, "1",
-+            FSEND );
-+
-+    pFS->endElement( FSNS( XML_c, XML_chart ) );
-+}
-+
-+void ChartExport::exportLegend( Reference< ::com::sun::star::chart::XChartDocument > rChartDoc )
-+{
-+    FSHelperPtr pFS = GetFS();
-+    pFS->startElement( FSNS( XML_c, XML_legend ),
-+            FSEND );
-+
-+    Reference< beans::XPropertySet > xProp( rChartDoc->getLegend(), uno::UNO_QUERY );
-+    if( xProp.is() )
-+    {
-+        // position
-+        ::com::sun::star::chart::ChartLegendPosition aLegendPos = ::com::sun::star::chart::ChartLegendPosition_NONE;
-+        try
-+        {
-+            Any aAny( xProp->getPropertyValue(
-+                OUString( RTL_CONSTASCII_USTRINGPARAM( "Alignment" ))));
-+                aAny >>= aLegendPos;
-+        }
-+        catch( beans::UnknownPropertyException & )
-+        {
-+            DBG_WARNING( "Property Align not found in ChartLegend" );
-+        }
-+
-+        const char* strPos = NULL;
-+        switch( aLegendPos )
-+        {
-+            case ::com::sun::star::chart::ChartLegendPosition_LEFT:
-+                strPos = "l";
-+                break;
-+            case ::com::sun::star::chart::ChartLegendPosition_RIGHT:
-+                strPos = "r";
-+                break;
-+            case ::com::sun::star::chart::ChartLegendPosition_TOP:
-+                strPos = "t";
-+                break;
-+            case ::com::sun::star::chart::ChartLegendPosition_BOTTOM:
-+                strPos = "b";
-+                break;
-+            case ::com::sun::star::chart::ChartLegendPosition_NONE:
-+            case ::com::sun::star::chart::ChartLegendPosition_MAKE_FIXED_SIZE:
-+                // nothing
-+                break;
-+        }
-+
-+        if( strPos != NULL )
-+        {
-+            pFS->singleElement( FSNS( XML_c, XML_legendPos ),
-+                XML_val, strPos,
-+                FSEND );
-+        }
-+
-+        // shape properties
-+        exportShapeProps( xProp );
-+    }
-+
-+    // manula layout
-+
-+    // text properties
-+
-+    // legendEntry
-+
-+    pFS->endElement( FSNS( XML_c, XML_legend ) );
-+}
-+
-+void ChartExport::exportTitle( Reference< XShape > xShape )
-+{
-+    OUString sText;
-+    Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_QUERY );
-+    if( xPropSet.is())
-+    {
-+        xPropSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "String" ))) >>= sText;
-+    }
-+    if( sText.getLength() == 0 )
-+        return;
-+
-+    FSHelperPtr pFS = GetFS();
-+    pFS->startElement( FSNS( XML_c, XML_title ),
-+            FSEND );
-+    // TODO:customize layout
-+    pFS->singleElement( FSNS( XML_c, XML_layout ),
-+            FSEND );
-+            
-+    pFS->startElement( FSNS( XML_c, XML_tx ),
-+            FSEND );
-+    pFS->startElement( FSNS( XML_c, XML_rich ),
-+            FSEND );
-+
-+    // TODO: bodyPr
-+    const char* sWritingMode = NULL;
-+    sal_Bool bVertical = sal_False;
-+    xPropSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "StackedText" ))) >>= bVertical;
-+    if( bVertical )
-+        sWritingMode = "wordArtVert";
-+
-+    pFS->singleElement( FSNS( XML_a, XML_bodyPr ),
-+            XML_vert, sWritingMode,
-+            FSEND );
-+    // TODO: lstStyle
-+    pFS->singleElement( FSNS( XML_a, XML_lstStyle ),
-+            FSEND );
-+    // FIXME: handle multipul paragraphs to parse aText        
-+    pFS->startElement( FSNS( XML_a, XML_p ),
-+            FSEND );
-+
-+    pFS->startElement( FSNS( XML_a, XML_pPr ),
-+            FSEND );
-+    pFS->singleElement( FSNS( XML_a, XML_defRPr ),
-+            FSEND );
-+    pFS->endElement( FSNS( XML_a, XML_pPr ) );
-+
-+    pFS->startElement( FSNS( XML_a, XML_r ),
-+            FSEND );
-+    WriteRunProperties( xPropSet, sal_False );        
-+    pFS->startElement( FSNS( XML_a, XML_t ),
-+            FSEND );
-+    pFS->writeEscaped( sText );
-+    pFS->endElement( FSNS( XML_a, XML_t ) );
-+    pFS->endElement( FSNS( XML_a, XML_r ) );
-+
-+    pFS->endElement( FSNS( XML_a, XML_p ) );
-+
-+    pFS->endElement( FSNS( XML_c, XML_rich ) );
-+    pFS->endElement( FSNS( XML_c, XML_tx ) );
-+    pFS->endElement( FSNS( XML_c, XML_title ) );
-+}
-+
-+void ChartExport::exportPlotArea( )
-+{
-+    Reference< chart2::XCoordinateSystemContainer > xBCooSysCnt( mxNewDiagram, uno::UNO_QUERY );
-+    if( ! xBCooSysCnt.is())
-+        return;
-+
-+    // plot-area element
-+    // -----------------
-+    FSHelperPtr pFS = GetFS();
-+    pFS->startElement( FSNS( XML_c, XML_plotArea ),
-+            FSEND );
-+    // layout
-+    pFS->singleElement( FSNS( XML_c, XML_layout ),
-+            FSEND );
-+
-+    // chart type
-+    Sequence< Reference< chart2::XCoordinateSystem > >
-+        aCooSysSeq( xBCooSysCnt->getCoordinateSystems());
-+    for( sal_Int32 nCSIdx=0; nCSIdx<aCooSysSeq.getLength(); ++nCSIdx )
-+    {
-+        Reference< chart2::XChartTypeContainer > xCTCnt( aCooSysSeq[nCSIdx], uno::UNO_QUERY );
-+        if( ! xCTCnt.is())
-+            continue;
-+        Sequence< Reference< chart2::XChartType > > aCTSeq( xCTCnt->getChartTypes());
-+        for( sal_Int32 nCTIdx=0; nCTIdx<aCTSeq.getLength(); ++nCTIdx )
-+        {
-+            Reference< chart2::XDataSeriesContainer > xDSCnt( aCTSeq[nCTIdx], uno::UNO_QUERY );
-+            if( ! xDSCnt.is())
-+                return;
-+            Reference< chart2::XChartType > xChartType( aCTSeq[nCTIdx], uno::UNO_QUERY );
-+            if( ! xChartType.is())
-+                continue;
-+            // note: if xDSCnt.is() then also aCTSeq[nCTIdx]
-+            OUString aChartType( xChartType->getChartType());
-+            sal_Int32 eChartType = lcl_getChartType( aChartType );
-+    switch( eChartType )
-+    {
-+        case chart::TYPEID_BAR:
-+        {
-+            exportBarChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_AREA:
-+        {
-+            exportAreaChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_LINE:
-+        {
-+            exportLineChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_BUBBLE:
-+        {
-+            exportBubbleChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_DOUGHNUT:
-+        {
-+            exportDoughnutChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_OFPIE:
-+        {
-+            exportOfPieChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_PIE:
-+        {
-+            exportPieChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_RADARLINE:
-+        case chart::TYPEID_RADARAREA:
-+        {
-+            exportRadarChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_SCATTER:
-+        {
-+            exportScatterChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_STOCK:
-+        {
-+            exportStockChart( xChartType );
-+            break;
-+        }
-+        case chart::TYPEID_SURFACE:
-+        {
-+            exportSuffaceChart( xChartType );
-+            break;
-+        }
-+        default:
-+        {
-+            OSL_TRACE("ChartExport::exportPlotArea -- not support chart type");
-+            break;
-+        }
-+    }
-+
-+        }    
-+    }    
-+    //Axis Data
-+    exportAxes( );
-+
-+    // shape properties
-+    Reference< ::com::sun::star::chart::X3DDisplay > xWallFloorSupplier( mxDiagram, uno::UNO_QUERY );
-+    if( xWallFloorSupplier.is() )
-+    {
-+        Reference< beans::XPropertySet > xWallPropSet( xWallFloorSupplier->getWall(), uno::UNO_QUERY );
-+        if( xWallPropSet.is() )
-+        {
-+            exportShapeProps( xWallPropSet );
-+        }
-+    }
-+
-+    pFS->endElement( FSNS( XML_c, XML_plotArea ) );
-+
-+}
-+
-+void ChartExport::exportAreaChart( Reference< chart2::XChartType > xChartType )
-+{
-+    FSHelperPtr pFS = GetFS();
-+    sal_Int32 nTypeId = XML_areaChart;
-+    if( mbIs3DChart )
-+        nTypeId = XML_area3DChart;
-+    pFS->startElement( FSNS( XML_c, nTypeId ),
-+            FSEND );
-+
-+    exportGrouping( );
-+    sal_Int32 nAttachedAxis = AXIS_PRIMARY_Y;
-+    exportSeries( xChartType, nAttachedAxis );
-+    exportAxesId( nAttachedAxis );
-+
-+    pFS->endElement( FSNS( XML_c, nTypeId ) );
-+}
-+
-+void ChartExport::exportBarChart( Reference< chart2::XChartType > xChartType )
-+{

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list