Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #ifndef INCLUDED_SC_SOURCE_FILTER_XML_XMLEXPRT_HXX
20 : #define INCLUDED_SC_SOURCE_FILTER_XML_XMLEXPRT_HXX
21 :
22 : #include <xmloff/xmlexp.hxx>
23 : #include <com/sun/star/sheet/XSpreadsheet.hpp>
24 : #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
25 : #include <com/sun/star/table/CellRangeAddress.hpp>
26 : #include <com/sun/star/table/CellAddress.hpp>
27 : #include <com/sun/star/drawing/XShapes.hpp>
28 : #include <com/sun/star/table/XCellRange.hpp>
29 :
30 : #include "address.hxx"
31 :
32 : namespace com { namespace sun { namespace star {
33 : namespace beans { class XPropertySet; }
34 : } } }
35 :
36 : #include <boost/scoped_ptr.hpp>
37 : #include <unordered_map>
38 :
39 : class ScOutlineArray;
40 : class SvXMLExportPropertyMapper;
41 : class ScMyMergedRangesContainer;
42 : class ScMyValidationsContainer;
43 : class ScMyNotEmptyCellsIterator;
44 : class ScChangeTrackingExportHelper;
45 : class ScColumnStyles;
46 : class ScRowStyles;
47 : class ScFormatRangeStyles;
48 : class ScRowFormatRanges;
49 : class ScMyOpenCloseColumnRowGroup;
50 : class ScMyAreaLinksContainer;
51 : class ScMyDetectiveOpContainer;
52 : struct ScMyCell;
53 : class ScDocument;
54 : class ScMySharedData;
55 : class ScMyDefaultStyles;
56 : class XMLNumberFormatAttributesExportHelper;
57 : class ScChartListener;
58 : class SfxItemPool;
59 : class ScAddress;
60 : class ScXMLCachedRowAttrAccess;
61 : class ScRangeName;
62 : class ScXMLEditAttributeMap;
63 : class EditTextObject;
64 : class ScFormulaCell;
65 :
66 : namespace sc {
67 :
68 : class CompileFormulaContext;
69 :
70 : }
71 :
72 :
73 : class ScXMLExport : public SvXMLExport
74 : {
75 : ScDocument* pDoc;
76 : com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet> xCurrentTable;
77 : com::sun::star::uno::Reference <com::sun::star::table::XCellRange> xCurrentTableCellRange;
78 :
79 : com::sun::star::uno::Reference<com::sun::star::io::XInputStream> xSourceStream;
80 : sal_Int32 nSourceStreamPos;
81 :
82 : mutable boost::scoped_ptr<ScXMLEditAttributeMap> mpEditAttrMap;
83 : boost::scoped_ptr<ScMyNotEmptyCellsIterator> mpCellsItr;
84 : boost::scoped_ptr<sc::CompileFormulaContext> mpCompileFormulaCxt;
85 : rtl::Reference < XMLPropertyHandlerFactory > xScPropHdlFactory;
86 : rtl::Reference < XMLPropertySetMapper > xCellStylesPropertySetMapper;
87 : rtl::Reference < XMLPropertySetMapper > xColumnStylesPropertySetMapper;
88 : rtl::Reference < XMLPropertySetMapper > xRowStylesPropertySetMapper;
89 : rtl::Reference < XMLPropertySetMapper > xTableStylesPropertySetMapper;
90 : rtl::Reference < SvXMLExportPropertyMapper > xCellStylesExportPropertySetMapper;
91 : rtl::Reference < SvXMLExportPropertyMapper > xColumnStylesExportPropertySetMapper;
92 : rtl::Reference < SvXMLExportPropertyMapper > xRowStylesExportPropertySetMapper;
93 : rtl::Reference < SvXMLExportPropertyMapper > xTableStylesExportPropertySetMapper;
94 : XMLNumberFormatAttributesExportHelper* pNumberFormatAttributesExportHelper;
95 : typedef std::unordered_map<sal_Int32, sal_Int32> NumberFormatIndexMap;
96 : NumberFormatIndexMap aNumFmtIndexMap;
97 : ScMySharedData* pSharedData;
98 : ScColumnStyles* pColumnStyles;
99 : ScRowStyles* pRowStyles;
100 : ScFormatRangeStyles* pCellStyles;
101 : ScRowFormatRanges* pRowFormatRanges;
102 : std::vector<OUString> aTableStyles;
103 : com::sun::star::table::CellRangeAddress aRowHeaderRange;
104 : ScMyOpenCloseColumnRowGroup* pGroupColumns;
105 : ScMyOpenCloseColumnRowGroup* pGroupRows;
106 : ScMyDefaultStyles* pDefaults;
107 : ScChartListener* pChartListener;
108 : const ScMyCell* pCurrentCell;
109 :
110 : ScMyMergedRangesContainer* pMergedRangesContainer;
111 : ScMyValidationsContainer* pValidationsContainer;
112 : ScChangeTrackingExportHelper* pChangeTrackingExportHelper;
113 : const OUString sLayerID;
114 : const OUString sCaptionShape;
115 : OUString sExternalRefTabStyleName;
116 : OUString sAttrName;
117 : OUString sAttrStyleName;
118 : OUString sAttrColumnsRepeated;
119 : OUString sAttrFormula;
120 : OUString sAttrValueType;
121 : OUString sAttrStringValue;
122 : OUString sElemCell;
123 : OUString sElemCoveredCell;
124 : OUString sElemCol;
125 : OUString sElemRow;
126 : OUString sElemTab;
127 : OUString sElemP;
128 : sal_Int32 nOpenRow;
129 : sal_Int32 nProgressCount;
130 : sal_uInt16 nCurrentTable;
131 : bool bHasRowHeader;
132 : bool bRowHeaderOpen;
133 : bool mbShowProgress;
134 :
135 : sal_Int32 GetNumberFormatStyleIndex(sal_Int32 nNumFmt) const;
136 : void CollectSharedData(SCTAB& nTableCount, sal_Int32& nShapesCount);
137 : void CollectShapesAutoStyles(SCTAB nTableCount);
138 : void WriteTablesView(const com::sun::star::uno::Any& aTableView);
139 : void WriteView(const com::sun::star::uno::Any& aView);
140 : virtual void _ExportFontDecls() SAL_OVERRIDE;
141 : virtual void _ExportStyles( bool bUsed ) SAL_OVERRIDE;
142 : virtual void _ExportAutoStyles() SAL_OVERRIDE;
143 : virtual void _ExportMasterStyles() SAL_OVERRIDE;
144 : virtual void SetBodyAttributes() SAL_OVERRIDE;
145 : virtual void _ExportContent() SAL_OVERRIDE;
146 : virtual void _ExportMeta() SAL_OVERRIDE;
147 :
148 : void CollectInternalShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
149 :
150 : static com::sun::star::table::CellRangeAddress GetEndAddress(const com::sun::star::uno::Reference<com::sun::star::sheet::XSpreadsheet>& xTable,
151 : const sal_Int32 nTable);
152 : // ScMyEmptyDatabaseRangesContainer GetEmptyDatabaseRanges();
153 : void GetAreaLinks( ScMyAreaLinksContainer& rAreaLinks );
154 : void GetDetectiveOpList( ScMyDetectiveOpContainer& rDetOp );
155 : void WriteSingleColumn(const sal_Int32 nRepeatColumns, const sal_Int32 nStyleIndex,
156 : const sal_Int32 nIndex, const bool bIsAutoStyle, const bool bIsVisible);
157 : void WriteColumn(const sal_Int32 nColumn, const sal_Int32 nRepeatColumns,
158 : const sal_Int32 nStyleIndex, const bool bIsVisible);
159 : void OpenHeaderColumn();
160 : void CloseHeaderColumn();
161 : void ExportColumns(const sal_Int32 nTable, const com::sun::star::table::CellRangeAddress& aColumnHeaderRange, const bool bHasColumnHeader);
162 : void ExportExternalRefCacheStyles();
163 : void ExportCellTextAutoStyles(sal_Int32 nTable);
164 : void ExportFormatRanges(const sal_Int32 nStartCol, const sal_Int32 nStartRow,
165 : const sal_Int32 nEndCol, const sal_Int32 nEndRow, const sal_Int32 nSheet);
166 : void WriteRowContent();
167 : void WriteRowStartTag(const sal_Int32 nIndex, const sal_Int32 nEmptyRows, bool bHidden, bool bFiltered);
168 : void OpenHeaderRows();
169 : void CloseHeaderRows();
170 : void OpenNewRow(const sal_Int32 nIndex, const sal_Int32 nStartRow, const sal_Int32 nEmptyRows,
171 : bool bHidden, bool bFiltered);
172 : void OpenAndCloseRow(const sal_Int32 nIndex, const sal_Int32 nStartRow, const sal_Int32 nEmptyRows,
173 : bool bHidden, bool bFiltered);
174 : void OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, const sal_Int32 nRepeatRow, ScXMLCachedRowAttrAccess& rRowAttr);
175 : void CloseRow(const sal_Int32 nRow);
176 : void GetColumnRowHeader(bool& bHasColumnHeader, com::sun::star::table::CellRangeAddress& aColumnHeaderRange,
177 : bool& bHasRowHeader, com::sun::star::table::CellRangeAddress& aRowHeaderRange,
178 : OUString& rPrintRanges) const;
179 : static void FillFieldGroup(ScOutlineArray* pFields, ScMyOpenCloseColumnRowGroup* pGroups);
180 : void FillColumnRowGroups();
181 :
182 : bool GetMerged (const com::sun::star::table::CellRangeAddress* pCellRange,
183 : const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet>& xTable);
184 :
185 : void WriteTable(sal_Int32 nTable, const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet>& xTable);
186 : void WriteCell(ScMyCell& aCell, sal_Int32 nEqualCellCount);
187 : void WriteEditCell(const EditTextObject* pText);
188 : void WriteMultiLineFormulaResult(const ScFormulaCell* pCell);
189 : void WriteAreaLink(const ScMyCell& rMyCell);
190 : void WriteAnnotation(ScMyCell& rMyCell);
191 : void WriteDetective(const ScMyCell& rMyCell);
192 : void ExportShape(const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape, com::sun::star::awt::Point* pPoint);
193 : void WriteShapes(const ScMyCell& rMyCell);
194 : void WriteTableShapes();
195 : void SetRepeatAttribute(sal_Int32 nEqualCellCount, bool bIncProgress);
196 :
197 : static bool IsCellTypeEqual (const ScMyCell& aCell1, const ScMyCell& aCell2);
198 : static bool IsEditCell(ScMyCell& rCell);
199 : bool IsCellEqual(ScMyCell& aCell1, ScMyCell& aCell2);
200 :
201 : void WriteCalculationSettings(const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheetDocument>& xSpreadDoc);
202 : void WriteTableSource();
203 : void WriteScenario(); // core implementation
204 : void WriteTheLabelRanges(const com::sun::star::uno::Reference< com::sun::star::sheet::XSpreadsheetDocument >& xSpreadDoc);
205 : void WriteLabelRanges( const com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess >& xRangesIAccess, bool bColumn );
206 : void WriteNamedExpressions();
207 : void WriteDataStream();
208 : void WriteNamedRange(ScRangeName* pRangeName);
209 : void ExportConditionalFormat(SCTAB nTab);
210 : void WriteExternalRefCaches();
211 : void WriteConsolidation(); // core implementation
212 :
213 : void CollectUserDefinedNamespaces(const SfxItemPool* pPool, sal_uInt16 nAttrib);
214 :
215 : void AddStyleFromCells(
216 : const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xProperties,
217 : const com::sun::star::uno::Reference< com::sun::star::sheet::XSpreadsheet >& xTable,
218 : sal_Int32 nTable, const OUString* pOldName );
219 : void AddStyleFromColumn(
220 : const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xColumnProperties,
221 : const OUString* pOldName, sal_Int32& rIndex, bool& rIsVisible );
222 : void AddStyleFromRow(
223 : const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xRowProperties,
224 : const OUString* pOldName, sal_Int32& rIndex );
225 :
226 : void IncrementProgressBar(bool bFlush, sal_Int32 nInc = 1);
227 :
228 : void CopySourceStream( sal_Int32 nStartOffset, sal_Int32 nEndOffset, sal_Int32& rNewStart, sal_Int32& rNewEnd );
229 :
230 : const ScXMLEditAttributeMap& GetEditAttributeMap() const;
231 :
232 : protected:
233 : virtual SvXMLAutoStylePoolP* CreateAutoStylePool() SAL_OVERRIDE;
234 : virtual XMLPageExport* CreatePageExport() SAL_OVERRIDE;
235 : virtual XMLShapeExport* CreateShapeExport() SAL_OVERRIDE;
236 : virtual XMLFontAutoStylePool* CreateFontAutoStylePool() SAL_OVERRIDE;
237 : public:
238 : ScXMLExport(
239 : const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rContext,
240 : OUString const & implementationName, SvXMLExportFlags nExportFlag);
241 :
242 : virtual ~ScXMLExport();
243 :
244 : static sal_Int16 GetMeasureUnit();
245 1298 : inline ScDocument* GetDocument() { return pDoc; }
246 : inline const ScDocument* GetDocument() const { return pDoc; }
247 : bool IsMatrix (const ScAddress& aCell,
248 : com::sun::star::table::CellRangeAddress& aCellAddress, bool& bIsFirst) const;
249 :
250 327 : rtl::Reference < XMLPropertySetMapper > GetCellStylesPropertySetMapper() { return xCellStylesPropertySetMapper; }
251 116 : rtl::Reference < XMLPropertySetMapper > GetTableStylesPropertySetMapper() { return xTableStylesPropertySetMapper; }
252 :
253 : void SetSourceStream( const com::sun::star::uno::Reference<com::sun::star::io::XInputStream>& xNewStream );
254 :
255 : void GetChangeTrackViewSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps);
256 : virtual void GetViewSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps) SAL_OVERRIDE;
257 : virtual void GetConfigurationSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps) SAL_OVERRIDE;
258 :
259 : virtual void exportAnnotationMeta( const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape) SAL_OVERRIDE;
260 :
261 : void CreateSharedData(const sal_Int32 nTableCount);
262 92 : void SetSharedData(ScMySharedData* pTemp) { pSharedData = pTemp; }
263 158 : ScMySharedData* GetSharedData() { return pSharedData; }
264 : XMLNumberFormatAttributesExportHelper* GetNumberFormatAttributesExportHelper();
265 :
266 : // Export the document.
267 : virtual sal_uInt32 exportDoc( enum ::xmloff::token::XMLTokenEnum eClass = ::xmloff::token::XML_TOKEN_INVALID ) SAL_OVERRIDE;
268 :
269 : // XExporter
270 : 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, std::exception) SAL_OVERRIDE;
271 :
272 : // XFilter
273 : virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
274 : virtual void SAL_CALL cancel() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
275 :
276 : // XInitialization
277 : 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, std::exception) SAL_OVERRIDE;
278 :
279 : // XUnoTunnel
280 : virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
281 :
282 : virtual void DisposingModel() SAL_OVERRIDE;
283 : };
284 :
285 : #endif
286 :
287 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|