/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef SC_XMLEXPRT_HXX #define SC_XMLEXPRT_HXX #include #include #include #include #include #include #include namespace com { namespace sun { namespace star { namespace beans { class XPropertySet; } } } } #include 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 xCurrentTable; com::sun::star::uno::Reference xCurrentTableCellRange; com::sun::star::uno::Reference 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 NumberFormatIndexMap; NumberFormatIndexMap aNumFmtIndexMap; ScMySharedData* pSharedData; ScColumnStyles* pColumnStyles; ScRowStyles* pRowStyles; ScFormatRangeStyles* pCellStyles; ScRowFormatRanges* pRowFormatRanges; std::vector 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 & 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& 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 & 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 & xTable); sal_Bool GetCellText (ScMyCell& rMyCell, const ScAddress& aPos) const; void WriteCell(ScMyCell& aCell, sal_Int32 nEqualCellCount); 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(sal_Int32 nEqualCellCount, bool bIncProgress); 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 & 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& xCell1, //UNUSED2008-05 const com::sun::star::uno::Reference& xCell2); sal_Bool IsCellEqual (ScMyCell& aCell1, ScMyCell& aCell2); void WriteCalculationSettings(const com::sun::star::uno::Reference & 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 & xSpreadDoc, sal_Int16 nWhichTable); 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 & xCellRange, //UNUSED2008-05 const com::sun::star::uno::Reference & 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& xNewStream ); void GetChangeTrackViewSettings(com::sun::star::uno::Sequence& rProps); virtual void GetViewSettings(com::sun::star::uno::Sequence& rProps); virtual void GetConfigurationSettings(com::sun::star::uno::Sequence& 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