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 :
20 : #ifndef INCLUDED_SC_SOURCE_FILTER_INC_XCL97REC_HXX
21 : #define INCLUDED_SC_SOURCE_FILTER_INC_XCL97REC_HXX
22 :
23 : #include "excrecds.hxx"
24 : #include "xcl97esc.hxx"
25 : #include "xlstyle.hxx"
26 : #include "tabprotection.hxx"
27 :
28 : class XclObj;
29 : class XclExpMsoDrawing;
30 : class SdrCaptionObj;
31 :
32 : class XclExpObjList : public ExcEmptyRec, protected XclExpRoot
33 : {
34 : public:
35 :
36 : typedef std::vector<XclObj*>::iterator iterator;
37 :
38 : explicit XclExpObjList( const XclExpRoot& rRoot, XclEscherEx& rEscherEx );
39 : virtual ~XclExpObjList();
40 :
41 : /// return: 1-based ObjId
42 : ///! count>=0xFFFF: Obj will be deleted, return 0
43 : sal_uInt16 Add( XclObj* );
44 :
45 0 : XclObj* back () { return maObjs.empty() ? NULL : maObjs.back(); }
46 :
47 : /**
48 : *
49 : * @brief Remove last element in the list.
50 : *
51 : */
52 :
53 : void pop_back ();
54 :
55 30 : inline bool empty () const { return maObjs.empty(); }
56 :
57 16 : inline size_t size () const { return maObjs.size(); }
58 :
59 32 : inline iterator begin () { return maObjs.begin(); }
60 :
61 48 : inline iterator end () { return maObjs.end(); }
62 :
63 30 : inline XclExpMsoDrawing* GetMsodrawingPerSheet() { return pMsodrawingPerSheet; }
64 :
65 : /// close groups and DgContainer opened in ctor
66 : void EndSheet();
67 :
68 : virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE;
69 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
70 :
71 : static void ResetCounters();
72 :
73 : private:
74 : static sal_Int32 mnDrawingMLCount, mnVmlCount;
75 : SCTAB mnScTab;
76 :
77 : XclEscherEx& mrEscherEx;
78 : XclExpMsoDrawing* pMsodrawingPerSheet;
79 : XclExpMsoDrawing* pSolverContainer;
80 :
81 : std::vector<XclObj*> maObjs;
82 : };
83 :
84 : // --- class XclObj --------------------------------------------------
85 :
86 : class XclTxo;
87 : class SdrTextObj;
88 :
89 : class XclObj : public XclExpRecord
90 : {
91 : protected:
92 : XclEscherEx& mrEscherEx;
93 : XclExpMsoDrawing* pMsodrawing;
94 : XclExpMsoDrawing* pClientTextbox;
95 : XclTxo* pTxo;
96 : sal_uInt16 mnObjType;
97 : sal_uInt16 nObjId;
98 : sal_uInt16 nGrbit;
99 : SCTAB mnScTab;
100 : bool bFirstOnSheet;
101 :
102 : bool mbOwnEscher; /// true = Escher part created on the fly.
103 :
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 );
107 :
108 : void ImplWriteAnchor( const XclExpRoot& rRoot, const SdrObject* pSdrObj, const Rectangle* pChildAnchor );
109 :
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 );
114 :
115 : public:
116 : virtual ~XclObj();
117 :
118 48 : inline sal_uInt16 GetObjType() const { return mnObjType; }
119 :
120 30 : inline void SetId( sal_uInt16 nId ) { nObjId = nId; }
121 : inline sal_uInt16 GetId() const { return nObjId; }
122 :
123 30 : inline void SetTab( SCTAB nScTab ) { mnScTab = nScTab; }
124 16 : inline SCTAB GetTab() const { return mnScTab; }
125 :
126 0 : inline void SetLocked( bool b )
127 0 : { b ? nGrbit |= 0x0001 : nGrbit &= ~0x0001; }
128 0 : inline void SetPrintable( bool b )
129 0 : { b ? nGrbit |= 0x0010 : nGrbit &= ~0x0010; }
130 0 : inline void SetAutoFill( bool b )
131 0 : { b ? nGrbit |= 0x2000 : nGrbit &= ~0x2000; }
132 0 : inline void SetAutoLine( bool b )
133 0 : { b ? nGrbit |= 0x4000 : nGrbit &= ~0x4000; }
134 :
135 : // set corresponding Excel object type in OBJ/ftCmo
136 : void SetEscherShapeType( sal_uInt16 nType );
137 0 : inline void SetEscherShapeTypeGroup() { mnObjType = EXC_OBJTYPE_GROUP; }
138 :
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 8 : inline bool IsOwnEscher() const { return mbOwnEscher; }
150 :
151 : //! actually writes ESCHER_ClientTextbox
152 : void SetText( const XclExpRoot& rRoot, const SdrTextObj& rObj );
153 :
154 : virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE;
155 : };
156 :
157 : // --- class XclObjComment -------------------------------------------
158 :
159 : class XclObjComment : public XclObj
160 : {
161 : ScAddress maScPos;
162 : std::unique_ptr< SdrCaptionObj >
163 : mpCaption;
164 : bool mbVisible;
165 : Rectangle maFrom;
166 : Rectangle maTo;
167 :
168 : public:
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();
172 :
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 );
177 :
178 : virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE;
179 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
180 : };
181 :
182 : // --- class XclObjDropDown ------------------------------------------
183 :
184 : class XclObjDropDown : public XclObj
185 : {
186 : private:
187 : bool bIsFiltered;
188 :
189 : virtual void WriteSubRecs( XclExpStream& rStrm ) SAL_OVERRIDE;
190 :
191 : protected:
192 : public:
193 : XclObjDropDown( XclExpObjectManager& rObjMgr, const ScAddress& rPos, bool bFilt );
194 : virtual ~XclObjDropDown();
195 : };
196 :
197 : // --- class XclTxo --------------------------------------------------
198 :
199 : class SdrTextObj;
200 :
201 12 : class XclTxo : public ExcRecord
202 : {
203 : public:
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 );
207 :
208 6 : inline void SetHorAlign( sal_uInt8 nHorAlign ) { mnHorAlign = nHorAlign; }
209 6 : inline void SetVerAlign( sal_uInt8 nVerAlign ) { mnVerAlign = nVerAlign; }
210 :
211 : virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE;
212 :
213 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
214 : virtual sal_Size GetLen() const SAL_OVERRIDE;
215 :
216 : private:
217 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
218 :
219 : private:
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.
224 : };
225 :
226 : // --- class XclObjOle -----------------------------------------------
227 :
228 : class XclObjOle : public XclObj
229 : {
230 : private:
231 :
232 : const SdrObject& rOleObj;
233 : SotStorage* pRootStorage;
234 :
235 : virtual void WriteSubRecs( XclExpStream& rStrm ) SAL_OVERRIDE;
236 :
237 : public:
238 : XclObjOle( XclExpObjectManager& rObjMgr, const SdrObject& rObj );
239 : virtual ~XclObjOle();
240 :
241 : virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE;
242 : };
243 :
244 : // --- class XclObjAny -----------------------------------------------
245 :
246 : class XclObjAny : public XclObj
247 : {
248 : protected:
249 : virtual void WriteSubRecs( XclExpStream& rStrm ) SAL_OVERRIDE;
250 :
251 : public:
252 : XclObjAny( XclExpObjectManager& rObjMgr,
253 : const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& rShape );
254 : virtual ~XclObjAny();
255 :
256 : com::sun::star::uno::Reference< com::sun::star::drawing::XShape >
257 8 : GetShape() const { return mxShape; }
258 :
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 );
263 :
264 : private:
265 : com::sun::star::uno::Reference< com::sun::star::drawing::XShape >
266 : mxShape;
267 : };
268 :
269 : // --- class ExcBof8_Base --------------------------------------------
270 :
271 76 : class ExcBof8_Base : public ExcBof_Base
272 : {
273 : protected:
274 : sal_uInt32 nFileHistory; // bfh
275 : sal_uInt32 nLowestBiffVer; // sfo
276 :
277 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
278 :
279 : public:
280 : ExcBof8_Base();
281 :
282 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
283 : virtual sal_Size GetLen() const SAL_OVERRIDE;
284 : };
285 :
286 : // --- class ExcBofW8 ------------------------------------------------
287 : // Header Record fuer WORKBOOKS
288 :
289 52 : class ExcBofW8 : public ExcBof8_Base
290 : {
291 : public:
292 : ExcBofW8();
293 : };
294 :
295 : // --- class ExcBof8 -------------------------------------------------
296 : // Header Record fuer WORKSHEETS
297 :
298 100 : class ExcBof8 : public ExcBof8_Base
299 : {
300 : public:
301 : ExcBof8();
302 : };
303 :
304 : // --- class ExcBundlesheet8 -----------------------------------------
305 :
306 248 : class ExcBundlesheet8 : public ExcBundlesheetBase
307 : {
308 : private:
309 : OUString sUnicodeName;
310 100 : XclExpString GetName() const { return XclExpString( sUnicodeName, EXC_STR_8BITLENGTH );}
311 :
312 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
313 :
314 : public:
315 : ExcBundlesheet8( RootData& rRootData, SCTAB nTab );
316 : ExcBundlesheet8( const OUString& rString );
317 :
318 : virtual sal_Size GetLen() const SAL_OVERRIDE;
319 :
320 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
321 : };
322 :
323 : // --- class XclObproj -----------------------------------------------
324 :
325 0 : class XclObproj : public ExcRecord
326 : {
327 : public:
328 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
329 : virtual sal_Size GetLen() const SAL_OVERRIDE;
330 : };
331 :
332 : // ---- class XclCodename --------------------------------------------
333 :
334 0 : class XclCodename : public ExcRecord
335 : {
336 : private:
337 : XclExpString aName;
338 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
339 : public:
340 : XclCodename( const OUString& );
341 :
342 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
343 : virtual sal_Size GetLen() const SAL_OVERRIDE;
344 : };
345 :
346 : // ---- Scenarios ----------------------------------------------------
347 : // - ExcEScenarioCell a cell of a scenario range
348 : // - ExcEScenario all ranges of a scenario table
349 : // - ExcEScenarioManager list of scenario tables
350 :
351 0 : class ExcEScenarioCell
352 : {
353 : private:
354 : sal_uInt16 nCol;
355 : sal_uInt16 nRow;
356 : XclExpString sText;
357 :
358 : protected:
359 : public:
360 : ExcEScenarioCell( sal_uInt16 nC, sal_uInt16 nR, const OUString& rTxt );
361 :
362 0 : inline sal_Size GetStringBytes() const
363 0 : { return sText.GetSize(); }
364 :
365 : void WriteAddress( XclExpStream& rStrm ) const ;
366 : void WriteText( XclExpStream& rStrm ) const;
367 :
368 : void SaveXml( XclExpXmlStream& rStrm ) const;
369 : };
370 :
371 : class ExcEScenario : public ExcRecord
372 : {
373 : private:
374 : sal_Size nRecLen;
375 : XclExpString sName;
376 : XclExpString sComment;
377 : XclExpString sUserName;
378 : sal_uInt8 nProtected;
379 :
380 : std::vector<ExcEScenarioCell> aCells;
381 :
382 : bool Append( sal_uInt16 nCol, sal_uInt16 nRow, const OUString& rTxt );
383 :
384 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
385 :
386 : protected:
387 : public:
388 : ExcEScenario( const XclExpRoot& rRoot, SCTAB nTab );
389 : virtual ~ExcEScenario();
390 :
391 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
392 : virtual sal_Size GetLen() const SAL_OVERRIDE;
393 :
394 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
395 : };
396 :
397 : class ExcEScenarioManager : public ExcRecord
398 : {
399 : private:
400 : sal_uInt16 nActive;
401 : std::vector<ExcEScenario*> aScenes;
402 :
403 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
404 :
405 : protected:
406 : public:
407 : ExcEScenarioManager( const XclExpRoot& rRoot, SCTAB nTab );
408 : virtual ~ExcEScenarioManager();
409 :
410 : virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE;
411 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
412 :
413 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
414 : virtual sal_Size GetLen() const SAL_OVERRIDE;
415 : };
416 :
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 100 : class XclExpSheetProtectOptions : public XclExpRecord
421 : {
422 : public:
423 : explicit XclExpSheetProtectOptions( const XclExpRoot& rRoot, SCTAB nTab );
424 :
425 : private:
426 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
427 :
428 : private:
429 : sal_uInt16 mnOptions; /// Encoded sheet protection options.
430 : };
431 :
432 : /** Represents one EnhancedProtection feature in a FEAT record.
433 : To be written only if such feature exists. */
434 0 : class XclExpSheetEnhancedProtection : public XclExpRecord
435 : {
436 : public:
437 : explicit XclExpSheetEnhancedProtection( const XclExpRoot& rRoot, const ScEnhancedProtection& rProt );
438 :
439 : private:
440 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
441 :
442 : private:
443 : const XclExpRoot& mrRoot;
444 : ScEnhancedProtection maEnhancedProtection;
445 : };
446 :
447 176 : class XclCalccount : public ExcRecord
448 : {
449 : private:
450 : sal_uInt16 nCount;
451 : protected:
452 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
453 : public:
454 : XclCalccount( const ScDocument& );
455 :
456 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
457 : virtual sal_Size GetLen() const SAL_OVERRIDE;
458 :
459 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
460 : };
461 :
462 176 : class XclIteration : public ExcRecord
463 : {
464 : private:
465 : sal_uInt16 nIter;
466 : protected:
467 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
468 : public:
469 : XclIteration( const ScDocument& );
470 :
471 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
472 : virtual sal_Size GetLen() const SAL_OVERRIDE;
473 :
474 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
475 : };
476 :
477 176 : class XclDelta : public ExcRecord
478 : {
479 : private:
480 : double fDelta;
481 : protected:
482 : virtual void SaveCont( XclExpStream& rStrm ) SAL_OVERRIDE;
483 : public:
484 : XclDelta( const ScDocument& );
485 :
486 : virtual sal_uInt16 GetNum() const SAL_OVERRIDE;
487 : virtual sal_Size GetLen() const SAL_OVERRIDE;
488 :
489 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
490 : };
491 :
492 176 : class XclRefmode : public XclExpBoolRecord
493 : {
494 : public:
495 : XclRefmode( const ScDocument& );
496 :
497 : virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE;
498 : };
499 :
500 : class XclExpFileEncryption : public XclExpRecord
501 : {
502 : public:
503 : explicit XclExpFileEncryption( const XclExpRoot& rRoot );
504 : virtual ~XclExpFileEncryption();
505 :
506 : private:
507 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
508 :
509 : private:
510 : const XclExpRoot& mrRoot;
511 : };
512 :
513 : /** Beginning of User Interface Records */
514 52 : class XclExpInterfaceHdr : public XclExpUInt16Record
515 : {
516 : public:
517 : explicit XclExpInterfaceHdr( sal_uInt16 nCodePage );
518 :
519 : private:
520 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
521 : };
522 :
523 : /** End of User Interface Records */
524 : class XclExpInterfaceEnd : public XclExpRecord
525 : {
526 : public:
527 : explicit XclExpInterfaceEnd();
528 : virtual ~XclExpInterfaceEnd();
529 :
530 : private:
531 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
532 : };
533 :
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
537 : {
538 : public:
539 : explicit XclExpWriteAccess();
540 : virtual ~XclExpWriteAccess();
541 :
542 : private:
543 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
544 : };
545 :
546 52 : class XclExpFileSharing : public XclExpRecord
547 : {
548 : public:
549 : explicit XclExpFileSharing( const XclExpRoot& rRoot, sal_uInt16 nPasswordHash, bool bRecommendReadOnly );
550 :
551 : virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE;
552 :
553 : private:
554 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
555 :
556 : private:
557 : XclExpString maUserName;
558 : sal_uInt16 mnPasswordHash;
559 : bool mbRecommendReadOnly;
560 : };
561 :
562 : class XclExpProt4Rev : public XclExpRecord
563 : {
564 : public:
565 : explicit XclExpProt4Rev();
566 : virtual ~XclExpProt4Rev();
567 :
568 : private:
569 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
570 : };
571 :
572 : class XclExpProt4RevPass : public XclExpRecord
573 : {
574 : public:
575 : explicit XclExpProt4RevPass();
576 : virtual ~XclExpProt4RevPass();
577 :
578 : private:
579 : virtual void WriteBody( XclExpStream& rStrm ) SAL_OVERRIDE;
580 : };
581 :
582 52 : class XclExpRecalcId : public XclExpDummyRecord
583 : {
584 : public:
585 : explicit XclExpRecalcId();
586 : };
587 :
588 52 : class XclExpBookExt : public XclExpDummyRecord
589 : {
590 : public:
591 : explicit XclExpBookExt();
592 : };
593 :
594 : #endif // _XCL97REC_HXX
595 :
596 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|