diff options
Diffstat (limited to 'sc/source/filter/xml/xmlexprt.hxx')
-rw-r--r-- | sc/source/filter/xml/xmlexprt.hxx | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/sc/source/filter/xml/xmlexprt.hxx b/sc/source/filter/xml/xmlexprt.hxx new file mode 100644 index 000000000000..e024fc6a0de0 --- /dev/null +++ b/sc/source/filter/xml/xmlexprt.hxx @@ -0,0 +1,293 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * 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 SC_XMLEXPRT_HXX +#define SC_XMLEXPRT_HXX + +#include <xmloff/xmlexp.hxx> +#include <com/sun/star/sheet/XSpreadsheet.hpp> +#include <com/sun/star/sheet/XSpreadsheetDocument.hpp> +#include <com/sun/star/table/CellRangeAddress.hpp> +#include <com/sun/star/table/CellAddress.hpp> +#include <com/sun/star/drawing/XShapes.hpp> +#include <com/sun/star/table/XCellRange.hpp> + +namespace com { namespace sun { namespace star { + namespace beans { class XPropertySet; } +} } } + +#include <hash_map> + +class ScOutlineArray; +class SvXMLExportPropertyMapper; +class ScMyShapesContainer; +class ScMyMergedRangesContainer; +class ScMyValidationsContainer; +class ScMyNotEmptyCellsIterator; +class ScChangeTrackingExportHelper; +class ScColumnStyles; +class ScRowStyles; +class ScFormatRangeStyles; +class ScRowFormatRanges; +class ScMyOpenCloseColumnRowGroup; +class ScMyAreaLinksContainer; +class ScMyDetectiveOpContainer; +struct ScMyCell; +class ScDocument; +class ScMySharedData; +class ScMyDefaultStyles; +class XMLNumberFormatAttributesExportHelper; +class ScChartListener; +class SfxItemPool; +class ScAddress; +class ScBaseCell; + +typedef std::vector< com::sun::star::uno::Reference < com::sun::star::drawing::XShapes > > ScMyXShapesVec; + +class ScXMLExport : public SvXMLExport +{ + ScDocument* pDoc; + com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet> xCurrentTable; + com::sun::star::uno::Reference <com::sun::star::table::XCellRange> xCurrentTableCellRange; + + com::sun::star::uno::Reference<com::sun::star::io::XInputStream> xSourceStream; + sal_Int32 nSourceStreamPos; + + UniReference < XMLPropertyHandlerFactory > xScPropHdlFactory; + UniReference < XMLPropertySetMapper > xCellStylesPropertySetMapper; + UniReference < XMLPropertySetMapper > xColumnStylesPropertySetMapper; + UniReference < XMLPropertySetMapper > xRowStylesPropertySetMapper; + UniReference < XMLPropertySetMapper > xTableStylesPropertySetMapper; + UniReference < SvXMLExportPropertyMapper > xCellStylesExportPropertySetMapper; + UniReference < SvXMLExportPropertyMapper > xColumnStylesExportPropertySetMapper; + UniReference < SvXMLExportPropertyMapper > xRowStylesExportPropertySetMapper; + UniReference < SvXMLExportPropertyMapper > xTableStylesExportPropertySetMapper; + XMLNumberFormatAttributesExportHelper* pNumberFormatAttributesExportHelper; + typedef ::std::hash_map<sal_Int32, sal_Int32> NumberFormatIndexMap; + NumberFormatIndexMap aNumFmtIndexMap; + ScMySharedData* pSharedData; + ScColumnStyles* pColumnStyles; + ScRowStyles* pRowStyles; + ScFormatRangeStyles* pCellStyles; + ScRowFormatRanges* pRowFormatRanges; + std::vector<rtl::OUString> aTableStyles; + com::sun::star::table::CellRangeAddress aRowHeaderRange; + ScMyOpenCloseColumnRowGroup* pGroupColumns; + ScMyOpenCloseColumnRowGroup* pGroupRows; + ScMyDefaultStyles* pDefaults; + ScChartListener* pChartListener; + const ScMyCell* pCurrentCell; + + ScMyMergedRangesContainer* pMergedRangesContainer; + ScMyValidationsContainer* pValidationsContainer; + ScMyNotEmptyCellsIterator* pCellsItr; + ScChangeTrackingExportHelper* pChangeTrackingExportHelper; + const rtl::OUString sLayerID; + const rtl::OUString sCaptionShape; + rtl::OUString sExternalRefTabStyleName; + rtl::OUString sAttrName; + rtl::OUString sAttrStyleName; + rtl::OUString sAttrColumnsRepeated; + rtl::OUString sAttrFormula; + rtl::OUString sAttrValueType; + rtl::OUString sAttrStringValue; + rtl::OUString sElemCell; + rtl::OUString sElemCoveredCell; + rtl::OUString sElemCol; + rtl::OUString sElemRow; + rtl::OUString sElemTab; + rtl::OUString sElemP; + sal_Int32 nOpenRow; + sal_Int32 nProgressCount; + sal_uInt16 nCurrentTable; + sal_Bool bHasRowHeader; + sal_Bool bRowHeaderOpen; + sal_Bool mbShowProgress; + + sal_Int32 GetNumberFormatStyleIndex(sal_Int32 nNumFmt) const; + sal_Bool HasDrawPages(com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheetDocument>& xDoc); + void CollectSharedData(sal_Int32& nTableCount, sal_Int32& nShapesCount, const sal_Int32 nCellCount); + void CollectShapesAutoStyles(const sal_Int32 nTableCount); + void WriteTablesView(const com::sun::star::uno::Any& aTableView); + void WriteView(const com::sun::star::uno::Any& aView); + virtual void _ExportFontDecls(); + virtual void _ExportStyles( sal_Bool bUsed ); + virtual void _ExportAutoStyles(); + virtual void _ExportMasterStyles(); + virtual void SetBodyAttributes(); + virtual void _ExportContent(); + virtual void _ExportMeta(); + + void CollectInternalShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape ); + + com::sun::star::table::CellRangeAddress GetEndAddress(const com::sun::star::uno::Reference<com::sun::star::sheet::XSpreadsheet>& xTable, + const sal_Int32 nTable); +// ScMyEmptyDatabaseRangesContainer GetEmptyDatabaseRanges(); + void GetAreaLinks( com::sun::star::uno::Reference< com::sun::star::sheet::XSpreadsheetDocument>& xSpreadDoc, ScMyAreaLinksContainer& rAreaLinks ); + void GetDetectiveOpList( ScMyDetectiveOpContainer& rDetOp ); + void WriteSingleColumn(const sal_Int32 nRepeatColumns, const sal_Int32 nStyleIndex, + const sal_Int32 nIndex, const sal_Bool bIsAutoStyle, const sal_Bool bIsVisible); + void WriteColumn(const sal_Int32 nColumn, const sal_Int32 nRepeatColumns, + const sal_Int32 nStyleIndex, const sal_Bool bIsVisible); + void OpenHeaderColumn(); + void CloseHeaderColumn(); + void ExportColumns(const sal_Int32 nTable, const com::sun::star::table::CellRangeAddress& aColumnHeaderRange, const sal_Bool bHasColumnHeader); + void ExportExternalRefCacheStyles(); + void ExportFormatRanges(const sal_Int32 nStartCol, const sal_Int32 nStartRow, + const sal_Int32 nEndCol, const sal_Int32 nEndRow, const sal_Int32 nSheet); + void WriteRowContent(); + void WriteRowStartTag(sal_Int32 nRow, const sal_Int32 nIndex, const sal_Int8 nFlag, const sal_Int32 nEmptyRows); + void OpenHeaderRows(); + void CloseHeaderRows(); + void OpenNewRow(const sal_Int32 nIndex, const sal_Int8 nFlag, const sal_Int32 nStartRow, const sal_Int32 nEmptyRows); + void OpenAndCloseRow(const sal_Int32 nIndex, const sal_Int8 nFlag, + const sal_Int32 nStartRow, const sal_Int32 nEmptyRows); + void OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, const sal_Int32 nRepeatRow); + void CloseRow(const sal_Int32 nRow); + void GetColumnRowHeader(sal_Bool& bHasColumnHeader, com::sun::star::table::CellRangeAddress& aColumnHeaderRange, + sal_Bool& bHasRowHeader, com::sun::star::table::CellRangeAddress& aRowHeaderRange, + rtl::OUString& rPrintRanges) const; + void FillFieldGroup(ScOutlineArray* pFields, ScMyOpenCloseColumnRowGroup* pGroups); + void FillColumnRowGroups(); + +//UNUSED2008-05 sal_Bool GetMerge (const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet>& xTable, +//UNUSED2008-05 sal_Int32 nCol, sal_Int32 nRow, +//UNUSED2008-05 com::sun::star::table::CellRangeAddress& aCellAddress); + + sal_Bool GetMerged (const com::sun::star::table::CellRangeAddress* pCellRange, + const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet>& xTable); + + sal_Bool GetCellText (ScMyCell& rMyCell, const ScAddress& aPos) const; + + void WriteCell (ScMyCell& aCell); + void WriteAreaLink(const ScMyCell& rMyCell); + void WriteAnnotation(ScMyCell& rMyCell); + void WriteDetective(const ScMyCell& rMyCell); + void ExportShape(const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape, com::sun::star::awt::Point* pPoint); + void WriteShapes(const ScMyCell& rMyCell); + void WriteTableShapes(); + void SetRepeatAttribute (const sal_Int32 nEqualCellCount); + + sal_Bool IsCellTypeEqual (const ScMyCell& aCell1, const ScMyCell& aCell2) const; + sal_Bool IsEditCell(const com::sun::star::table::CellAddress& aAddress, ScMyCell* pMyCell = NULL) const; +//UNUSED2008-05 sal_Bool IsEditCell(const com::sun::star::uno::Reference <com::sun::star::table::XCell>& xCell) const; + sal_Bool IsEditCell(ScMyCell& rCell) const; + sal_Bool IsMultiLineFormulaCell(ScMyCell& rCell) const; +//UNUSED2008-05 sal_Bool IsAnnotationEqual(const com::sun::star::uno::Reference<com::sun::star::table::XCell>& xCell1, +//UNUSED2008-05 const com::sun::star::uno::Reference<com::sun::star::table::XCell>& xCell2); + sal_Bool IsCellEqual (ScMyCell& aCell1, ScMyCell& aCell2); + + void WriteCalculationSettings(const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheetDocument>& xSpreadDoc); + void WriteTableSource(); + void WriteScenario(); // core implementation + void WriteTheLabelRanges(const com::sun::star::uno::Reference< com::sun::star::sheet::XSpreadsheetDocument >& xSpreadDoc); + void WriteLabelRanges( const com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess >& xRangesIAccess, sal_Bool bColumn ); + void WriteNamedExpressions(const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheetDocument>& xSpreadDoc); + void WriteExternalRefCaches(); + void WriteConsolidation(); // core implementation + + void CollectUserDefinedNamespaces(const SfxItemPool* pPool, sal_uInt16 nAttrib); + + void AddStyleFromCells( + const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xProperties, + const com::sun::star::uno::Reference< com::sun::star::sheet::XSpreadsheet >& xTable, + sal_Int32 nTable, const rtl::OUString* pOldName ); + void AddStyleFromColumn( + const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xColumnProperties, + const rtl::OUString* pOldName, sal_Int32& rIndex, sal_Bool& rIsVisible ); + void AddStyleFromRow( + const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xRowProperties, + const rtl::OUString* pOldName, sal_Int32& rIndex ); + + void IncrementProgressBar(sal_Bool bEditCell, sal_Int32 nInc = 1); + + void CopySourceStream( sal_Int32 nStartOffset, sal_Int32 nEndOffset, sal_Int32& rNewStart, sal_Int32& rNewEnd ); + +protected: + virtual SvXMLAutoStylePoolP* CreateAutoStylePool(); + virtual XMLPageExport* CreatePageExport(); + virtual XMLShapeExport* CreateShapeExport(); + virtual XMLFontAutoStylePool* CreateFontAutoStylePool(); +public: + // #110680# + ScXMLExport( + const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceFactory, + const sal_uInt16 nExportFlag); + + virtual ~ScXMLExport(); + + static sal_Int16 GetFieldUnit(); + inline ScDocument* GetDocument() { return pDoc; } + inline const ScDocument* GetDocument() const { return pDoc; } +//UNUSED2008-05 sal_Bool IsMatrix (const com::sun::star::uno::Reference <com::sun::star::table::XCellRange>& xCellRange, +//UNUSED2008-05 const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet>& xTable, +//UNUSED2008-05 const sal_Int32 nCol, const sal_Int32 nRow, +//UNUSED2008-05 com::sun::star::table::CellRangeAddress& aCellAddress, sal_Bool& bIsFirst) const; + sal_Bool IsMatrix (const ScAddress& aCell, + com::sun::star::table::CellRangeAddress& aCellAddress, sal_Bool& bIsFirst) const; + + UniReference < XMLPropertySetMapper > GetCellStylesPropertySetMapper() { return xCellStylesPropertySetMapper; } + UniReference < XMLPropertySetMapper > GetTableStylesPropertySetMapper() { return xTableStylesPropertySetMapper; } + + void SetSourceStream( const com::sun::star::uno::Reference<com::sun::star::io::XInputStream>& xNewStream ); + + void GetChangeTrackViewSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps); + virtual void GetViewSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps); + virtual void GetConfigurationSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps); + + virtual void exportAnnotationMeta( const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape); + + void CreateSharedData(const sal_Int32 nTableCount); + void SetSharedData(ScMySharedData* pTemp) { pSharedData = pTemp; } + ScMySharedData* GetSharedData() { return pSharedData; } + XMLNumberFormatAttributesExportHelper* GetNumberFormatAttributesExportHelper(); + + // Export the document. + virtual sal_uInt32 exportDoc( enum ::xmloff::token::XMLTokenEnum eClass = ::xmloff::token::XML_TOKEN_INVALID ); + + // XExporter + virtual void SAL_CALL setSourceDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + + // XFilter + virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL cancel() throw(::com::sun::star::uno::RuntimeException); + + // XInitialization + virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); + + // XUnoTunnel + virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException); + + virtual void DisposingModel(); +}; + +#endif + |