xref: /trunk/main/sc/source/filter/excel/xiroot.cxx (revision b77af630)
1b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3b3f79822SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4b3f79822SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5b3f79822SAndrew Rist  * distributed with this work for additional information
6b3f79822SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7b3f79822SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8b3f79822SAndrew Rist  * "License"); you may not use this file except in compliance
9b3f79822SAndrew Rist  * with the License.  You may obtain a copy of the License at
10b3f79822SAndrew Rist  *
11b3f79822SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12b3f79822SAndrew Rist  *
13b3f79822SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14b3f79822SAndrew Rist  * software distributed under the License is distributed on an
15b3f79822SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b3f79822SAndrew Rist  * KIND, either express or implied.  See the License for the
17b3f79822SAndrew Rist  * specific language governing permissions and limitations
18b3f79822SAndrew Rist  * under the License.
19b3f79822SAndrew Rist  *
20b3f79822SAndrew Rist  *************************************************************/
21b3f79822SAndrew Rist 
22b3f79822SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25*b77af630Sdamjan #include "precompiled_scfilt.hxx"
26cdf0e10cSrcweir #include "xiroot.hxx"
27cdf0e10cSrcweir #include "addincol.hxx"
28cdf0e10cSrcweir #include "document.hxx"
29cdf0e10cSrcweir #include "scextopt.hxx"
30cdf0e10cSrcweir #include "xltracer.hxx"
31cdf0e10cSrcweir #include "xihelper.hxx"
32cdf0e10cSrcweir #include "xiformula.hxx"
33cdf0e10cSrcweir #include "xilink.hxx"
34cdf0e10cSrcweir #include "xiname.hxx"
35cdf0e10cSrcweir #include "xistyle.hxx"
36cdf0e10cSrcweir #include "xicontent.hxx"
37cdf0e10cSrcweir #include "xiescher.hxx"
38cdf0e10cSrcweir #include "xipivot.hxx"
39cdf0e10cSrcweir #include "xipage.hxx"
40cdf0e10cSrcweir #include "xiview.hxx"
41cdf0e10cSrcweir 
42cdf0e10cSrcweir #include "root.hxx"
43cdf0e10cSrcweir #include "excimp8.hxx"
44cdf0e10cSrcweir 
45cdf0e10cSrcweir // Global data ================================================================
46cdf0e10cSrcweir 
XclImpRootData(XclBiff eBiff,SfxMedium & rMedium,SotStorageRef xRootStrg,ScDocument & rDoc,rtl_TextEncoding eTextEnc)47cdf0e10cSrcweir XclImpRootData::XclImpRootData( XclBiff eBiff, SfxMedium& rMedium,
48cdf0e10cSrcweir         SotStorageRef xRootStrg, ScDocument& rDoc, rtl_TextEncoding eTextEnc ) :
49cdf0e10cSrcweir     XclRootData( eBiff, rMedium, xRootStrg, rDoc, eTextEnc, false ),
50cdf0e10cSrcweir     mbHasCodePage( false ),
51cdf0e10cSrcweir     mbHasBasic( false )
52cdf0e10cSrcweir {
53cdf0e10cSrcweir }
54cdf0e10cSrcweir 
~XclImpRootData()55cdf0e10cSrcweir XclImpRootData::~XclImpRootData()
56cdf0e10cSrcweir {
57cdf0e10cSrcweir }
58cdf0e10cSrcweir 
59cdf0e10cSrcweir // ----------------------------------------------------------------------------
60cdf0e10cSrcweir 
XclImpRoot(XclImpRootData & rImpRootData)61cdf0e10cSrcweir XclImpRoot::XclImpRoot( XclImpRootData& rImpRootData ) :
62cdf0e10cSrcweir     XclRoot( rImpRootData ),
63cdf0e10cSrcweir     mrImpData( rImpRootData )
64cdf0e10cSrcweir {
65cdf0e10cSrcweir     mrImpData.mxAddrConv.reset( new XclImpAddressConverter( GetRoot() ) );
66cdf0e10cSrcweir     mrImpData.mxFmlaComp.reset( new XclImpFormulaCompiler( GetRoot() ) );
67cdf0e10cSrcweir     mrImpData.mxPalette.reset( new XclImpPalette( GetRoot() ) );
68cdf0e10cSrcweir     mrImpData.mxFontBfr.reset( new XclImpFontBuffer( GetRoot() ) );
69cdf0e10cSrcweir     mrImpData.mxNumFmtBfr.reset( new XclImpNumFmtBuffer( GetRoot() ) );
70cdf0e10cSrcweir     mrImpData.mpXFBfr.reset( new XclImpXFBuffer( GetRoot() ) );
71cdf0e10cSrcweir     mrImpData.mxXFRangeBfr.reset( new XclImpXFRangeBuffer( GetRoot() ) );
72cdf0e10cSrcweir     mrImpData.mxTabInfo.reset( new XclImpTabInfo );
73cdf0e10cSrcweir     mrImpData.mxNameMgr.reset( new XclImpNameManager( GetRoot() ) );
74cdf0e10cSrcweir     mrImpData.mxObjMgr.reset( new XclImpObjectManager( GetRoot() ) );
75cdf0e10cSrcweir 
76cdf0e10cSrcweir     if( GetBiff() == EXC_BIFF8 )
77cdf0e10cSrcweir     {
78cdf0e10cSrcweir         mrImpData.mxLinkMgr.reset( new XclImpLinkManager( GetRoot() ) );
79cdf0e10cSrcweir         mrImpData.mxSst.reset( new XclImpSst( GetRoot() ) );
80cdf0e10cSrcweir         mrImpData.mxCondFmtMgr.reset( new XclImpCondFormatManager( GetRoot() ) );
81cdf0e10cSrcweir         // TODO still in old RootData (deleted by RootData)
82cdf0e10cSrcweir         GetOldRoot().pAutoFilterBuffer = new XclImpAutoFilterBuffer;
83cdf0e10cSrcweir         mrImpData.mxWebQueryBfr.reset( new XclImpWebQueryBuffer( GetRoot() ) );
84cdf0e10cSrcweir         mrImpData.mxPTableMgr.reset( new XclImpPivotTableManager( GetRoot() ) );
85cdf0e10cSrcweir         mrImpData.mxTabProtect.reset( new XclImpSheetProtectBuffer( GetRoot() ) );
86cdf0e10cSrcweir         mrImpData.mxDocProtect.reset( new XclImpDocProtectBuffer( GetRoot() ) );
87cdf0e10cSrcweir     }
88cdf0e10cSrcweir 
89cdf0e10cSrcweir     mrImpData.mxPageSett.reset( new XclImpPageSettings( GetRoot() ) );
90cdf0e10cSrcweir     mrImpData.mxDocViewSett.reset( new XclImpDocViewSettings( GetRoot() ) );
91cdf0e10cSrcweir     mrImpData.mxTabViewSett.reset( new XclImpTabViewSettings( GetRoot() ) );
92cdf0e10cSrcweir }
93cdf0e10cSrcweir 
SetCodePage(sal_uInt16 nCodePage)94cdf0e10cSrcweir void XclImpRoot::SetCodePage( sal_uInt16 nCodePage )
95cdf0e10cSrcweir {
96cdf0e10cSrcweir     SetTextEncoding( XclTools::GetTextEncoding( nCodePage ) );
97cdf0e10cSrcweir     mrImpData.mbHasCodePage = true;
98cdf0e10cSrcweir }
99cdf0e10cSrcweir 
SetAppFontEncoding(rtl_TextEncoding eAppFontEnc)100cdf0e10cSrcweir void XclImpRoot::SetAppFontEncoding( rtl_TextEncoding eAppFontEnc )
101cdf0e10cSrcweir {
102cdf0e10cSrcweir     if( !mrImpData.mbHasCodePage )
103cdf0e10cSrcweir         SetTextEncoding( eAppFontEnc );
104cdf0e10cSrcweir }
105cdf0e10cSrcweir 
InitializeTable(SCTAB nScTab)106cdf0e10cSrcweir void XclImpRoot::InitializeTable( SCTAB nScTab )
107cdf0e10cSrcweir {
108cdf0e10cSrcweir     if( GetBiff() <= EXC_BIFF4 )
109cdf0e10cSrcweir     {
110cdf0e10cSrcweir         GetPalette().Initialize();
111cdf0e10cSrcweir         GetFontBuffer().Initialize();
112cdf0e10cSrcweir         GetNumFmtBuffer().Initialize();
113cdf0e10cSrcweir         GetXFBuffer().Initialize();
114cdf0e10cSrcweir     }
115cdf0e10cSrcweir     GetXFRangeBuffer().Initialize();
116cdf0e10cSrcweir     GetPageSettings().Initialize();
117cdf0e10cSrcweir     GetTabViewSettings().Initialize();
118cdf0e10cSrcweir     // delete the automatically generated codename
119cdf0e10cSrcweir     GetDoc().SetCodeName( nScTab, String::EmptyString() );
120cdf0e10cSrcweir }
121cdf0e10cSrcweir 
FinalizeTable()122cdf0e10cSrcweir void XclImpRoot::FinalizeTable()
123cdf0e10cSrcweir {
124cdf0e10cSrcweir     GetXFRangeBuffer().Finalize();
125cdf0e10cSrcweir     GetOldRoot().pColRowBuff->Convert( GetCurrScTab() );
126cdf0e10cSrcweir     GetPageSettings().Finalize();
127cdf0e10cSrcweir     GetTabViewSettings().Finalize();
128cdf0e10cSrcweir }
129cdf0e10cSrcweir 
GetAddressConverter() const130cdf0e10cSrcweir XclImpAddressConverter& XclImpRoot::GetAddressConverter() const
131cdf0e10cSrcweir {
132cdf0e10cSrcweir     return *mrImpData.mxAddrConv;
133cdf0e10cSrcweir }
134cdf0e10cSrcweir 
GetFormulaCompiler() const135cdf0e10cSrcweir XclImpFormulaCompiler& XclImpRoot::GetFormulaCompiler() const
136cdf0e10cSrcweir {
137cdf0e10cSrcweir     return *mrImpData.mxFmlaComp;
138cdf0e10cSrcweir }
139cdf0e10cSrcweir 
GetOldFmlaConverter() const140cdf0e10cSrcweir ExcelToSc& XclImpRoot::GetOldFmlaConverter() const
141cdf0e10cSrcweir {
142cdf0e10cSrcweir     // TODO still in old RootData
143cdf0e10cSrcweir     return *GetOldRoot().pFmlaConverter;
144cdf0e10cSrcweir }
145cdf0e10cSrcweir 
GetSst() const146cdf0e10cSrcweir XclImpSst& XclImpRoot::GetSst() const
147cdf0e10cSrcweir {
148cdf0e10cSrcweir     DBG_ASSERT( mrImpData.mxSst.is(), "XclImpRoot::GetSst - invalid call, wrong BIFF" );
149cdf0e10cSrcweir     return *mrImpData.mxSst;
150cdf0e10cSrcweir }
151cdf0e10cSrcweir 
GetPalette() const152cdf0e10cSrcweir XclImpPalette& XclImpRoot::GetPalette() const
153cdf0e10cSrcweir {
154cdf0e10cSrcweir     return *mrImpData.mxPalette;
155cdf0e10cSrcweir }
156cdf0e10cSrcweir 
GetFontBuffer() const157cdf0e10cSrcweir XclImpFontBuffer& XclImpRoot::GetFontBuffer() const
158cdf0e10cSrcweir {
159cdf0e10cSrcweir     return *mrImpData.mxFontBfr;
160cdf0e10cSrcweir }
161cdf0e10cSrcweir 
GetNumFmtBuffer() const162cdf0e10cSrcweir XclImpNumFmtBuffer& XclImpRoot::GetNumFmtBuffer() const
163cdf0e10cSrcweir {
164cdf0e10cSrcweir     return *mrImpData.mxNumFmtBfr;
165cdf0e10cSrcweir }
166cdf0e10cSrcweir 
GetXFBuffer() const167cdf0e10cSrcweir XclImpXFBuffer& XclImpRoot::GetXFBuffer() const
168cdf0e10cSrcweir {
169cdf0e10cSrcweir     return *mrImpData.mpXFBfr;
170cdf0e10cSrcweir }
171cdf0e10cSrcweir 
GetXFRangeBuffer() const172cdf0e10cSrcweir XclImpXFRangeBuffer& XclImpRoot::GetXFRangeBuffer() const
173cdf0e10cSrcweir {
174cdf0e10cSrcweir     return *mrImpData.mxXFRangeBfr;
175cdf0e10cSrcweir }
176cdf0e10cSrcweir 
GetPrintAreaBuffer() const177cdf0e10cSrcweir _ScRangeListTabs& XclImpRoot::GetPrintAreaBuffer() const
178cdf0e10cSrcweir {
179cdf0e10cSrcweir     // TODO still in old RootData
180cdf0e10cSrcweir     return *GetOldRoot().pPrintRanges;
181cdf0e10cSrcweir }
182cdf0e10cSrcweir 
GetTitleAreaBuffer() const183cdf0e10cSrcweir _ScRangeListTabs& XclImpRoot::GetTitleAreaBuffer() const
184cdf0e10cSrcweir {
185cdf0e10cSrcweir     // TODO still in old RootData
186cdf0e10cSrcweir     return *GetOldRoot().pPrintTitles;
187cdf0e10cSrcweir }
188cdf0e10cSrcweir 
GetTabInfo() const189cdf0e10cSrcweir XclImpTabInfo& XclImpRoot::GetTabInfo() const
190cdf0e10cSrcweir {
191cdf0e10cSrcweir     return *mrImpData.mxTabInfo;
192cdf0e10cSrcweir }
193cdf0e10cSrcweir 
GetNameManager() const194cdf0e10cSrcweir XclImpNameManager& XclImpRoot::GetNameManager() const
195cdf0e10cSrcweir {
196cdf0e10cSrcweir     return *mrImpData.mxNameMgr;
197cdf0e10cSrcweir }
198cdf0e10cSrcweir 
GetLinkManager() const199cdf0e10cSrcweir XclImpLinkManager& XclImpRoot::GetLinkManager() const
200cdf0e10cSrcweir {
201cdf0e10cSrcweir     DBG_ASSERT( mrImpData.mxLinkMgr.is(), "XclImpRoot::GetLinkManager - invalid call, wrong BIFF" );
202cdf0e10cSrcweir     return *mrImpData.mxLinkMgr;
203cdf0e10cSrcweir }
204cdf0e10cSrcweir 
GetObjectManager() const205cdf0e10cSrcweir XclImpObjectManager& XclImpRoot::GetObjectManager() const
206cdf0e10cSrcweir {
207cdf0e10cSrcweir     return *mrImpData.mxObjMgr;
208cdf0e10cSrcweir }
209cdf0e10cSrcweir 
GetCurrSheetDrawing() const210cdf0e10cSrcweir XclImpSheetDrawing& XclImpRoot::GetCurrSheetDrawing() const
211cdf0e10cSrcweir {
212cdf0e10cSrcweir     DBG_ASSERT( !IsInGlobals(), "XclImpRoot::GetCurrSheetDrawing - must not be called from workbook globals" );
213cdf0e10cSrcweir     return mrImpData.mxObjMgr->GetSheetDrawing( GetCurrScTab() );
214cdf0e10cSrcweir }
215cdf0e10cSrcweir 
GetCondFormatManager() const216cdf0e10cSrcweir XclImpCondFormatManager& XclImpRoot::GetCondFormatManager() const
217cdf0e10cSrcweir {
218cdf0e10cSrcweir     DBG_ASSERT( mrImpData.mxCondFmtMgr.is(), "XclImpRoot::GetCondFormatManager - invalid call, wrong BIFF" );
219cdf0e10cSrcweir     return *mrImpData.mxCondFmtMgr;
220cdf0e10cSrcweir }
221cdf0e10cSrcweir 
GetFilterManager() const222cdf0e10cSrcweir XclImpAutoFilterBuffer& XclImpRoot::GetFilterManager() const
223cdf0e10cSrcweir {
224cdf0e10cSrcweir     // TODO still in old RootData
225cdf0e10cSrcweir     DBG_ASSERT( GetOldRoot().pAutoFilterBuffer, "XclImpRoot::GetFilterManager - invalid call, wrong BIFF" );
226cdf0e10cSrcweir     return *GetOldRoot().pAutoFilterBuffer;
227cdf0e10cSrcweir }
228cdf0e10cSrcweir 
GetWebQueryBuffer() const229cdf0e10cSrcweir XclImpWebQueryBuffer& XclImpRoot::GetWebQueryBuffer() const
230cdf0e10cSrcweir {
231cdf0e10cSrcweir     DBG_ASSERT( mrImpData.mxWebQueryBfr.is(), "XclImpRoot::GetWebQueryBuffer - invalid call, wrong BIFF" );
232cdf0e10cSrcweir     return *mrImpData.mxWebQueryBfr;
233cdf0e10cSrcweir }
234cdf0e10cSrcweir 
GetPivotTableManager() const235cdf0e10cSrcweir XclImpPivotTableManager& XclImpRoot::GetPivotTableManager() const
236cdf0e10cSrcweir {
237cdf0e10cSrcweir     DBG_ASSERT( mrImpData.mxPTableMgr.is(), "XclImpRoot::GetPivotTableManager - invalid call, wrong BIFF" );
238cdf0e10cSrcweir     return *mrImpData.mxPTableMgr;
239cdf0e10cSrcweir }
240cdf0e10cSrcweir 
GetSheetProtectBuffer() const241cdf0e10cSrcweir XclImpSheetProtectBuffer& XclImpRoot::GetSheetProtectBuffer() const
242cdf0e10cSrcweir {
243cdf0e10cSrcweir     DBG_ASSERT( mrImpData.mxTabProtect.is(), "XclImpRoot::GetSheetProtectBuffer - invalid call, wrong BIFF" );
244cdf0e10cSrcweir     return *mrImpData.mxTabProtect;
245cdf0e10cSrcweir }
246cdf0e10cSrcweir 
GetDocProtectBuffer() const247cdf0e10cSrcweir XclImpDocProtectBuffer& XclImpRoot::GetDocProtectBuffer() const
248cdf0e10cSrcweir {
249cdf0e10cSrcweir     DBG_ASSERT( mrImpData.mxDocProtect.is(), "XclImpRoot::GetDocProtectBuffer - invalid call, wrong BIFF" );
250cdf0e10cSrcweir     return *mrImpData.mxDocProtect;
251cdf0e10cSrcweir }
252cdf0e10cSrcweir 
GetPageSettings() const253cdf0e10cSrcweir XclImpPageSettings& XclImpRoot::GetPageSettings() const
254cdf0e10cSrcweir {
255cdf0e10cSrcweir     return *mrImpData.mxPageSett;
256cdf0e10cSrcweir }
257cdf0e10cSrcweir 
GetDocViewSettings() const258cdf0e10cSrcweir XclImpDocViewSettings& XclImpRoot::GetDocViewSettings() const
259cdf0e10cSrcweir {
260cdf0e10cSrcweir     return *mrImpData.mxDocViewSett;
261cdf0e10cSrcweir }
262cdf0e10cSrcweir 
GetTabViewSettings() const263cdf0e10cSrcweir XclImpTabViewSettings& XclImpRoot::GetTabViewSettings() const
264cdf0e10cSrcweir {
265cdf0e10cSrcweir     return *mrImpData.mxTabViewSett;
266cdf0e10cSrcweir }
267cdf0e10cSrcweir 
GetScAddInName(const String & rXclName) const268cdf0e10cSrcweir String XclImpRoot::GetScAddInName( const String& rXclName ) const
269cdf0e10cSrcweir {
270cdf0e10cSrcweir     String aScName;
271cdf0e10cSrcweir     if( ScGlobal::GetAddInCollection()->GetCalcName( rXclName, aScName ) )
272cdf0e10cSrcweir         return aScName;
273cdf0e10cSrcweir     return rXclName;
274cdf0e10cSrcweir }
275cdf0e10cSrcweir 
ReadCodeName(XclImpStream & rStrm,bool bGlobals)276cdf0e10cSrcweir void XclImpRoot::ReadCodeName( XclImpStream& rStrm, bool bGlobals )
277cdf0e10cSrcweir {
278cdf0e10cSrcweir     if( mrImpData.mbHasBasic && (GetBiff() == EXC_BIFF8) )
279cdf0e10cSrcweir     {
280cdf0e10cSrcweir         String aName = rStrm.ReadUniString();
281cdf0e10cSrcweir         if( aName.Len() > 0 )
282cdf0e10cSrcweir         {
283cdf0e10cSrcweir             if( bGlobals )
284cdf0e10cSrcweir             {
285cdf0e10cSrcweir                 GetExtDocOptions().GetDocSettings().maGlobCodeName = aName;
286cdf0e10cSrcweir                 GetDoc().SetCodeName( aName );
287cdf0e10cSrcweir             }
288cdf0e10cSrcweir             else
289cdf0e10cSrcweir             {
290cdf0e10cSrcweir                 GetExtDocOptions().SetCodeName( GetCurrScTab(), aName );
291cdf0e10cSrcweir                 GetDoc().SetCodeName( GetCurrScTab(), aName );
292cdf0e10cSrcweir             }
293cdf0e10cSrcweir         }
294cdf0e10cSrcweir     }
295cdf0e10cSrcweir }
296cdf0e10cSrcweir 
297cdf0e10cSrcweir // ============================================================================
298