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 20 #pragma once 21 22 #include "xlroot.hxx" 23 #include <compiler.hxx> 24 #include <memory> 25 #include <rtl/ref.hxx> 26 27 // Forward declarations of objects in public use ============================== 28 29 namespace com::sun::star::beans { struct NamedValue; } 30 31 class XclExpRecordBase; 32 class XclExpString; 33 34 typedef rtl::Reference< XclExpRecordBase > XclExpRecordRef; 35 typedef std::shared_ptr< XclExpString > XclExpStringRef; 36 37 // Global data ================================================================ 38 39 class XclExpTabInfo; 40 class XclExpAddressConverter; 41 class XclExpFormulaCompiler; 42 class XclExpProgressBar; 43 class XclExpSst; 44 class XclExpPalette; 45 class XclExpFontBuffer; 46 class XclExpNumFmtBuffer; 47 class XclExpXFBuffer; 48 class XclExpLinkManager; 49 class XclExpNameManager; 50 class XclExpObjectManager; 51 class XclExpFilterManager; 52 class XclExpPivotTableManager; 53 class XclExpDxfs; 54 class XclExpXmlPivotTableManager; 55 class XclExpTablesManager; 56 namespace sc { class CompileFormulaContext; } 57 58 /** Stores global buffers and data needed for Excel export filter. */ 59 struct XclExpRootData : public XclRootData 60 { 61 typedef std::shared_ptr< XclExpTabInfo > XclExpTabInfoRef; 62 typedef std::shared_ptr< XclExpAddressConverter > XclExpAddrConvRef; 63 typedef std::shared_ptr< XclExpFormulaCompiler > XclExpFmlaCompRef; 64 typedef std::shared_ptr< XclExpProgressBar > XclExpProgressRef; 65 66 typedef rtl::Reference< XclExpSst > XclExpSstRef; 67 typedef rtl::Reference< XclExpPalette > XclExpPaletteRef; 68 typedef rtl::Reference< XclExpFontBuffer > XclExpFontBfrRef; 69 typedef rtl::Reference< XclExpNumFmtBuffer > XclExpNumFmtBfrRef; 70 typedef rtl::Reference< XclExpXFBuffer > XclExpXFBfrRef; 71 typedef rtl::Reference< XclExpNameManager > XclExpNameMgrRef; 72 typedef rtl::Reference< XclExpLinkManager > XclExpLinkMgrRef; 73 typedef std::shared_ptr< XclExpObjectManager > XclExpObjectMgrRef; 74 typedef std::shared_ptr< XclExpFilterManager > XclExpFilterMgrRef; 75 typedef std::shared_ptr< XclExpPivotTableManager > XclExpPTableMgrRef; 76 typedef rtl::Reference< XclExpDxfs > XclExpDxfsRef; 77 78 XclExpTabInfoRef mxTabInfo; /// Calc->Excel sheet index conversion. 79 XclExpAddrConvRef mxAddrConv; /// The address converter. 80 XclExpFmlaCompRef mxFmlaComp; /// The formula compiler. 81 XclExpProgressRef mxProgress; /// The export progress bar. 82 83 XclExpSstRef mxSst; /// The shared string table. 84 XclExpPaletteRef mxPalette; /// The color buffer. 85 XclExpFontBfrRef mxFontBfr; /// All fonts in the file. 86 XclExpNumFmtBfrRef mxNumFmtBfr; /// All number formats in the file. 87 XclExpXFBfrRef mxXFBfr; /// All XF records in the file. 88 XclExpNameMgrRef mxNameMgr; /// Internal defined names. 89 XclExpLinkMgrRef mxGlobLinkMgr; /// Global link manager for defined names. 90 XclExpLinkMgrRef mxLocLinkMgr; /// Local link manager for a sheet. 91 XclExpObjectMgrRef mxObjMgr; /// All drawing objects. 92 XclExpFilterMgrRef mxFilterMgr; /// Manager for filtered areas in all sheets. 93 XclExpPTableMgrRef mxPTableMgr; /// All pivot tables and pivot caches. 94 XclExpDxfsRef mxDxfs; /// All delta formatting entries 95 96 std::shared_ptr<XclExpXmlPivotTableManager> mxXmlPTableMgr; 97 std::shared_ptr<XclExpTablesManager> mxTablesMgr; 98 std::shared_ptr<sc::CompileFormulaContext> mpCompileFormulaCxt; 99 100 ScCompiler::OpCodeMapPtr mxOpCodeMap; /// mapping between op-codes and names 101 102 bool mbRelUrl; /// true = Store URLs relative. 103 104 OStringBuffer maStringBuf; /// buffer to avoid massive OUString allocations 105 106 explicit XclExpRootData( XclBiff eBiff, SfxMedium& rMedium, 107 const tools::SvRef<SotStorage>& xRootStrg, ScDocument& rDoc, rtl_TextEncoding eTextEnc ); 108 virtual ~XclExpRootData() override; 109 }; 110 111 /** Access to global data from other classes. */ 112 class XclExpRoot : public XclRoot 113 { 114 public: 115 explicit XclExpRoot( XclExpRootData& rExpRootData ); 116 117 /** Returns this root instance - for code readability in derived classes. */ GetRoot() const118 const XclExpRoot& GetRoot() const { return *this; } 119 /** Returns true, if URLs should be stored relative to the document location. */ IsRelUrl() const120 bool IsRelUrl() const { return mrExpData.mbRelUrl; } GetCompileFormulaContext() const121 sc::CompileFormulaContext& GetCompileFormulaContext() const { return *mrExpData.mpCompileFormulaCxt; } 122 123 /** Returns the buffer for Calc->Excel sheet index conversion. */ 124 XclExpTabInfo& GetTabInfo() const; 125 /** Returns the address converter. */ 126 XclExpAddressConverter& GetAddressConverter() const; 127 /** Returns the formula compiler to produce formula token arrays. */ 128 XclExpFormulaCompiler& GetFormulaCompiler() const; 129 /** Returns the export progress bar. */ 130 XclExpProgressBar& GetProgressBar() const; 131 132 /** Returns the shared string table. */ 133 XclExpSst& GetSst() const; 134 /** Returns the color buffer. */ 135 XclExpPalette& GetPalette() const; 136 /** Returns the font buffer. */ 137 XclExpFontBuffer& GetFontBuffer() const; 138 /** Returns the number format buffer. */ 139 XclExpNumFmtBuffer& GetNumFmtBuffer() const; 140 /** Returns the cell formatting attributes buffer. */ 141 XclExpXFBuffer& GetXFBuffer() const; 142 /** Returns the global link manager for defined names. */ 143 XclExpLinkManager& GetGlobalLinkManager() const; 144 /** Returns the local link manager for the current sheet. */ 145 XclExpLinkManager& GetLocalLinkManager() const; 146 /** Returns the buffer that contains internal defined names. */ 147 XclExpNameManager& GetNameManager() const; 148 /** Returns the drawing object manager. */ 149 XclExpObjectManager& GetObjectManager() const; 150 /** Returns the filter manager. */ 151 XclExpFilterManager& GetFilterManager() const; 152 /** Returns the pivot table manager. */ 153 XclExpPivotTableManager& GetPivotTableManager() const; 154 /** Returns the differential formatting list */ 155 XclExpDxfs& GetDxfs() const; 156 157 /** Clean and return the OStringBuffer */ GetStringBuf() const158 OStringBuffer& GetStringBuf() const { mrExpData.maStringBuf.setLength(0); return mrExpData.maStringBuf; } 159 160 XclExpXmlPivotTableManager& GetXmlPivotTableManager(); 161 162 XclExpTablesManager& GetTablesManager(); 163 164 /** Is called when export filter starts to create the Excel document (all BIFF versions). */ 165 void InitializeConvert(); 166 /** Is called when export filter starts to create the workbook global data (>=BIFF5). */ 167 void InitializeGlobals(); 168 /** Is called when export filter starts to create data for a single sheet (all BIFF versions). */ 169 void InitializeTable( SCTAB nScTab ); 170 /** Is called before export filter starts to write the records to the stream. */ 171 void InitializeSave(); 172 /** Returns the reference to a record (or record list) representing a root object. 173 @param nRecId Identifier that specifies which record is returned. */ 174 XclExpRecordRef CreateRecord( sal_uInt16 nRecId ) const; 175 176 bool IsDocumentEncrypted() const; 177 178 static css::uno::Sequence< css::beans::NamedValue > GenerateEncryptionData( const OUString& aPass ); 179 css::uno::Sequence< css::beans::NamedValue > GetEncryptionData() const; 180 static css::uno::Sequence< css::beans::NamedValue > GenerateDefaultEncryptionData(); 181 182 private: 183 184 /** Returns the local or global link manager, depending on current context. */ 185 XclExpRootData::XclExpLinkMgrRef const & GetLocalLinkMgrRef() const; 186 187 private: 188 XclExpRootData& mrExpData; /// Reference to the global export data struct. 189 }; 190 191 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 192