1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_SC_SOURCE_FILTER_INC_XCL97REC_HXX
21 #define INCLUDED_SC_SOURCE_FILTER_INC_XCL97REC_HXX
23 #include "excrecds.hxx"
24 #include "xcl97esc.hxx"
25 #include "xlstyle.hxx"
26 #include "tabprotection.hxx"
29 class XclExpMsoDrawing
;
32 class XclExpObjList
: public ExcEmptyRec
, protected XclExpRoot
36 typedef std::vector
<XclObj
*>::iterator iterator
;
38 explicit XclExpObjList( const XclExpRoot
& rRoot
, XclEscherEx
& rEscherEx
);
39 virtual ~XclExpObjList();
41 /// return: 1-based ObjId
42 ///! count>=0xFFFF: Obj will be deleted, return 0
43 sal_uInt16
Add( XclObj
* );
45 XclObj
* back () { return maObjs
.empty() ? NULL
: maObjs
.back(); }
49 * @brief Remove last element in the list.
55 inline bool empty () const { return maObjs
.empty(); }
57 inline size_t size () const { return maObjs
.size(); }
59 inline iterator
begin () { return maObjs
.begin(); }
61 inline iterator
end () { return maObjs
.end(); }
63 inline XclExpMsoDrawing
* GetMsodrawingPerSheet() { return pMsodrawingPerSheet
; }
65 /// close groups and DgContainer opened in ctor
68 virtual void Save( XclExpStream
& rStrm
) SAL_OVERRIDE
;
69 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
71 static void ResetCounters();
74 static sal_Int32 mnDrawingMLCount
, mnVmlCount
;
77 XclEscherEx
& mrEscherEx
;
78 XclExpMsoDrawing
* pMsodrawingPerSheet
;
79 XclExpMsoDrawing
* pSolverContainer
;
81 std::vector
<XclObj
*> maObjs
;
84 // --- class XclObj --------------------------------------------------
89 class XclObj
: public XclExpRecord
92 XclEscherEx
& mrEscherEx
;
93 XclExpMsoDrawing
* pMsodrawing
;
94 XclExpMsoDrawing
* pClientTextbox
;
102 bool mbOwnEscher
; /// true = Escher part created on the fly.
104 /** @param bOwnEscher If set to true, this object will create its escher data.
105 See SetOwnEscher() for details. */
106 explicit XclObj( XclExpObjectManager
& rObjMgr
, sal_uInt16 nObjType
, bool bOwnEscher
= false );
108 void ImplWriteAnchor( const XclExpRoot
& rRoot
, const SdrObject
* pSdrObj
, const Rectangle
* pChildAnchor
);
110 // overwritten for writing MSODRAWING record
111 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
112 virtual void WriteSubRecs( XclExpStream
& rStrm
);
113 void SaveTextRecs( XclExpStream
& rStrm
);
118 inline sal_uInt16
GetObjType() const { return mnObjType
; }
120 inline void SetId( sal_uInt16 nId
) { nObjId
= nId
; }
121 inline sal_uInt16
GetId() const { return nObjId
; }
123 inline void SetTab( SCTAB nScTab
) { mnScTab
= nScTab
; }
124 inline SCTAB
GetTab() const { return mnScTab
; }
126 inline void SetLocked( bool b
)
127 { b
? nGrbit
|= 0x0001 : nGrbit
&= ~0x0001; }
128 inline void SetPrintable( bool b
)
129 { b
? nGrbit
|= 0x0010 : nGrbit
&= ~0x0010; }
130 inline void SetAutoFill( bool b
)
131 { b
? nGrbit
|= 0x2000 : nGrbit
&= ~0x2000; }
132 inline void SetAutoLine( bool b
)
133 { b
? nGrbit
|= 0x4000 : nGrbit
&= ~0x4000; }
135 // set corresponding Excel object type in OBJ/ftCmo
136 void SetEscherShapeType( sal_uInt16 nType
);
137 inline void SetEscherShapeTypeGroup() { mnObjType
= EXC_OBJTYPE_GROUP
; }
139 /** If set to true, this object has created its own escher data.
140 @descr This causes the function EscherEx::EndShape() to not post process
141 this object. This is used i.e. for form controls. They are not handled in
142 the svx base code, so the XclExpEscherOcxCtrl c'tor creates the escher data
143 itself. The svx base code does not receive the correct shape ID after the
144 EscherEx::StartShape() call, which would result in deleting the object in
145 EscherEx::EndShape(). */
146 inline void SetOwnEscher( bool bOwnEscher
= true ) { mbOwnEscher
= bOwnEscher
; }
147 /** Returns true, if the object has created the escher data itself.
148 @descr See SetOwnEscher() for details. */
149 inline bool IsOwnEscher() const { return mbOwnEscher
; }
151 //! actually writes ESCHER_ClientTextbox
152 void SetText( const XclExpRoot
& rRoot
, const SdrTextObj
& rObj
);
154 virtual void Save( XclExpStream
& rStrm
) SAL_OVERRIDE
;
157 // --- class XclObjComment -------------------------------------------
159 class XclObjComment
: public XclObj
162 std::unique_ptr
< SdrCaptionObj
>
169 XclObjComment( XclExpObjectManager
& rObjMgr
,
170 const Rectangle
& rRect
, const EditTextObject
& rEditObj
, SdrCaptionObj
* pCaption
, bool bVisible
, const ScAddress
& rAddress
, Rectangle
&rFrom
, Rectangle
&To
);
171 virtual ~XclObjComment();
173 /** c'tor process for formatted text objects above .
174 @descr used to construct the MSODRAWING Escher object properties. */
175 void ProcessEscherObj( const XclExpRoot
& rRoot
,
176 const Rectangle
& rRect
, SdrObject
* pCaption
, bool bVisible
);
178 virtual void Save( XclExpStream
& rStrm
) SAL_OVERRIDE
;
179 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
182 // --- class XclObjDropDown ------------------------------------------
184 class XclObjDropDown
: public XclObj
189 virtual void WriteSubRecs( XclExpStream
& rStrm
) SAL_OVERRIDE
;
193 XclObjDropDown( XclExpObjectManager
& rObjMgr
, const ScAddress
& rPos
, bool bFilt
);
194 virtual ~XclObjDropDown();
197 // --- class XclTxo --------------------------------------------------
201 class XclTxo
: public ExcRecord
204 XclTxo( const OUString
& rString
, sal_uInt16 nFontIx
= EXC_FONT_APP
);
205 XclTxo( const XclExpRoot
& rRoot
, const SdrTextObj
& rEditObj
);
206 XclTxo( const XclExpRoot
& rRoot
, const EditTextObject
& rEditObj
, SdrObject
* pCaption
);
208 inline void SetHorAlign( sal_uInt8 nHorAlign
) { mnHorAlign
= nHorAlign
; }
209 inline void SetVerAlign( sal_uInt8 nVerAlign
) { mnVerAlign
= nVerAlign
; }
211 virtual void Save( XclExpStream
& rStrm
) SAL_OVERRIDE
;
213 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
214 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
217 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
220 XclExpStringRef mpString
; /// Text and formatting data.
221 sal_uInt16 mnRotation
; /// Text rotation.
222 sal_uInt8 mnHorAlign
; /// Horizontal alignment.
223 sal_uInt8 mnVerAlign
; /// Vertical alignment.
226 // --- class XclObjOle -----------------------------------------------
228 class XclObjOle
: public XclObj
232 const SdrObject
& rOleObj
;
233 SotStorage
* pRootStorage
;
235 virtual void WriteSubRecs( XclExpStream
& rStrm
) SAL_OVERRIDE
;
238 XclObjOle( XclExpObjectManager
& rObjMgr
, const SdrObject
& rObj
);
239 virtual ~XclObjOle();
241 virtual void Save( XclExpStream
& rStrm
) SAL_OVERRIDE
;
244 // --- class XclObjAny -----------------------------------------------
246 class XclObjAny
: public XclObj
249 virtual void WriteSubRecs( XclExpStream
& rStrm
) SAL_OVERRIDE
;
252 XclObjAny( XclExpObjectManager
& rObjMgr
,
253 const com::sun::star::uno::Reference
< com::sun::star::drawing::XShape
>& rShape
);
254 virtual ~XclObjAny();
256 com::sun::star::uno::Reference
< com::sun::star::drawing::XShape
>
257 GetShape() const { return mxShape
; }
259 virtual void Save( XclExpStream
& rStrm
) SAL_OVERRIDE
;
260 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
261 static void WriteFromTo( XclExpXmlStream
& rStrm
, const XclObjAny
& rObj
);
262 static void WriteFromTo( XclExpXmlStream
& rStrm
, const com::sun::star::uno::Reference
< com::sun::star::drawing::XShape
>& rShape
, SCTAB nTab
);
265 com::sun::star::uno::Reference
< com::sun::star::drawing::XShape
>
269 // --- class ExcBof8_Base --------------------------------------------
271 class ExcBof8_Base
: public ExcBof_Base
274 sal_uInt32 nFileHistory
; // bfh
275 sal_uInt32 nLowestBiffVer
; // sfo
277 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
282 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
283 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
286 // --- class ExcBofW8 ------------------------------------------------
287 // Header Record fuer WORKBOOKS
289 class ExcBofW8
: public ExcBof8_Base
295 // --- class ExcBof8 -------------------------------------------------
296 // Header Record fuer WORKSHEETS
298 class ExcBof8
: public ExcBof8_Base
304 // --- class ExcBundlesheet8 -----------------------------------------
306 class ExcBundlesheet8
: public ExcBundlesheetBase
309 OUString sUnicodeName
;
310 XclExpString
GetName() const { return XclExpString( sUnicodeName
, EXC_STR_8BITLENGTH
);}
312 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
315 ExcBundlesheet8( RootData
& rRootData
, SCTAB nTab
);
316 ExcBundlesheet8( const OUString
& rString
);
318 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
320 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
323 // --- class XclObproj -----------------------------------------------
325 class XclObproj
: public ExcRecord
328 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
329 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
332 // ---- class XclCodename --------------------------------------------
334 class XclCodename
: public ExcRecord
338 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
340 XclCodename( const OUString
& );
342 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
343 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
346 // ---- Scenarios ----------------------------------------------------
347 // - ExcEScenarioCell a cell of a scenario range
348 // - ExcEScenario all ranges of a scenario table
349 // - ExcEScenarioManager list of scenario tables
351 class ExcEScenarioCell
360 ExcEScenarioCell( sal_uInt16 nC
, sal_uInt16 nR
, const OUString
& rTxt
);
362 inline sal_Size
GetStringBytes() const
363 { return sText
.GetSize(); }
365 void WriteAddress( XclExpStream
& rStrm
) const ;
366 void WriteText( XclExpStream
& rStrm
) const;
368 void SaveXml( XclExpXmlStream
& rStrm
) const;
371 class ExcEScenario
: public ExcRecord
376 XclExpString sComment
;
377 XclExpString sUserName
;
380 std::vector
<ExcEScenarioCell
> aCells
;
382 bool Append( sal_uInt16 nCol
, sal_uInt16 nRow
, const OUString
& rTxt
);
384 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
388 ExcEScenario( const XclExpRoot
& rRoot
, SCTAB nTab
);
389 virtual ~ExcEScenario();
391 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
392 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
394 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
397 class ExcEScenarioManager
: public ExcRecord
401 std::vector
<ExcEScenario
*> aScenes
;
403 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
407 ExcEScenarioManager( const XclExpRoot
& rRoot
, SCTAB nTab
);
408 virtual ~ExcEScenarioManager();
410 virtual void Save( XclExpStream
& rStrm
) SAL_OVERRIDE
;
411 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
413 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
414 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
417 /** Represents a FEATHDR (SHEETPROTECTION) record that stores sheet protection
418 options. Note that a sheet still needs to save its sheet protection
419 options even when it's not protected. */
420 class XclExpSheetProtectOptions
: public XclExpRecord
423 explicit XclExpSheetProtectOptions( const XclExpRoot
& rRoot
, SCTAB nTab
);
426 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
429 sal_uInt16 mnOptions
; /// Encoded sheet protection options.
432 /** Represents one EnhancedProtection feature in a FEAT record.
433 To be written only if such feature exists. */
434 class XclExpSheetEnhancedProtection
: public XclExpRecord
437 explicit XclExpSheetEnhancedProtection( const XclExpRoot
& rRoot
, const ScEnhancedProtection
& rProt
);
440 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
443 const XclExpRoot
& mrRoot
;
444 ScEnhancedProtection maEnhancedProtection
;
447 class XclCalccount
: public ExcRecord
452 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
454 XclCalccount( const ScDocument
& );
456 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
457 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
459 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
462 class XclIteration
: public ExcRecord
467 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
469 XclIteration( const ScDocument
& );
471 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
472 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
474 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
477 class XclDelta
: public ExcRecord
482 virtual void SaveCont( XclExpStream
& rStrm
) SAL_OVERRIDE
;
484 XclDelta( const ScDocument
& );
486 virtual sal_uInt16
GetNum() const SAL_OVERRIDE
;
487 virtual sal_Size
GetLen() const SAL_OVERRIDE
;
489 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
492 class XclRefmode
: public XclExpBoolRecord
495 XclRefmode( const ScDocument
& );
497 virtual void SaveXml( XclExpXmlStream
& rStrm
) SAL_OVERRIDE
;
500 class XclExpFileEncryption
: public XclExpRecord
503 explicit XclExpFileEncryption( const XclExpRoot
& rRoot
);
504 virtual ~XclExpFileEncryption();
507 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
510 const XclExpRoot
& mrRoot
;
513 /** Beginning of User Interface Records */
514 class XclExpInterfaceHdr
: public XclExpUInt16Record
517 explicit XclExpInterfaceHdr( sal_uInt16 nCodePage
);
520 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
523 /** End of User Interface Records */
524 class XclExpInterfaceEnd
: public XclExpRecord
527 explicit XclExpInterfaceEnd();
528 virtual ~XclExpInterfaceEnd();
531 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
534 /** Write Access User Name - This record contains the user name, which is
535 the name you type when you install Excel. */
536 class XclExpWriteAccess
: public XclExpRecord
539 explicit XclExpWriteAccess();
540 virtual ~XclExpWriteAccess();
543 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
546 class XclExpFileSharing
: public XclExpRecord
549 explicit XclExpFileSharing( const XclExpRoot
& rRoot
, sal_uInt16 nPasswordHash
, bool bRecommendReadOnly
);
551 virtual void Save( XclExpStream
& rStrm
) SAL_OVERRIDE
;
554 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
557 XclExpString maUserName
;
558 sal_uInt16 mnPasswordHash
;
559 bool mbRecommendReadOnly
;
562 class XclExpProt4Rev
: public XclExpRecord
565 explicit XclExpProt4Rev();
566 virtual ~XclExpProt4Rev();
569 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
572 class XclExpProt4RevPass
: public XclExpRecord
575 explicit XclExpProt4RevPass();
576 virtual ~XclExpProt4RevPass();
579 virtual void WriteBody( XclExpStream
& rStrm
) SAL_OVERRIDE
;
582 class XclExpRecalcId
: public XclExpDummyRecord
585 explicit XclExpRecalcId();
588 class XclExpBookExt
: public XclExpDummyRecord
591 explicit XclExpBookExt();
594 #endif // _XCL97REC_HXX
596 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */