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 _SVDFPPT_HXX
21 : #define _SVDFPPT_HXX
22 :
23 : #include <tools/solar.h>
24 : #include <tools/string.hxx>
25 : #include <tools/gen.hxx>
26 : #include <tools/color.hxx>
27 : #include <svx/svdobj.hxx>
28 : #include <editeng/numitem.hxx>
29 : #include <editeng/editdata.hxx>
30 : #include <filter/msfilter/msdffimp.hxx>
31 : #include <filter/msfilter/msocximex.hxx>
32 : #include <editeng/eeitem.hxx>
33 : #define ITEMID_FIELD EE_FEATURE_FIELD
34 : #include <editeng/flditem.hxx>
35 : #undef ITEMID_FIELD
36 : #include "filter/msfilter/msfilterdllapi.h"
37 : #include <vcl/font.hxx>
38 : #include <vector>
39 : #include <boost/optional.hpp>
40 : #include <boost/ptr_container/ptr_vector.hpp>
41 :
42 : class SdrModel;
43 : class SdPage;
44 : class SdrPage;
45 : class SdrObject;
46 : class SvStream;
47 : class Polygon;
48 : class PolyPolygon;
49 : class SfxItemSet;
50 : class Outliner;
51 : class Graphic;
52 : class SvxMSDffManager;
53 : class PPTTextObj;
54 : class DffRecordHeader;
55 : class SvxBulletItem;
56 :
57 : #define PPT_IMPORTFLAGS_NO_TEXT_ASSERT 1
58 :
59 8 : struct MSFILTER_DLLPUBLIC PptCurrentUserAtom
60 : {
61 : sal_uInt32 nMagic;
62 : sal_uInt32 nCurrentUserEdit;
63 : sal_uInt16 nDocFileVersion;
64 : sal_uInt8 nMajorVersion;
65 : sal_uInt8 nMinorVersion;
66 : OUString aCurrentUser;
67 :
68 : public:
69 :
70 8 : PptCurrentUserAtom() : nMagic ( 0 ),
71 : nCurrentUserEdit ( 0 ),
72 : nDocFileVersion ( 0 ),
73 : nMajorVersion ( 0 ),
74 8 : nMinorVersion ( 0 ) {}
75 :
76 : MSFILTER_DLLPUBLIC friend SvStream& operator>>( SvStream& rIn, PptCurrentUserAtom& rAtom );
77 : };
78 :
79 8 : struct MSFILTER_DLLPUBLIC PowerPointImportParam
80 : {
81 : SvStream& rDocStream;
82 : sal_uInt32 nImportFlags;
83 : PptCurrentUserAtom aCurrentUserAtom;
84 :
85 : PowerPointImportParam( SvStream& rDocStream, sal_uInt32 nImportFlags );
86 : };
87 :
88 0 : struct SdHyperlinkEntry
89 : {
90 : sal_uInt32 nIndex;
91 : sal_Int32 nPrivate1;
92 : sal_Int32 nPrivate2;
93 : sal_Int32 nPrivate3;
94 : sal_Int32 nInfo;
95 : OUString aTarget;
96 : OUString aSubAdress;
97 :
98 : sal_Int32 nStartPos;
99 : sal_Int32 nEndPos;
100 :
101 : OUString aConvSubString;
102 : ESelection aESelection;
103 : sal_Bool bSelection;
104 : };
105 :
106 : // Hilfsklasse zum Einlesen der PPT InteractiveInfoAtom
107 : struct MSFILTER_DLLPUBLIC PptInteractiveInfoAtom
108 : {
109 : sal_uInt32 nSoundRef;
110 : sal_uInt32 nExHyperlinkId;
111 : sal_uInt8 nAction;
112 : sal_uInt8 nOleVerb;
113 : sal_uInt8 nJump;
114 : sal_uInt8 nFlags;
115 : sal_uInt8 nHyperlinkType;
116 :
117 : // unknown, da Gesamtgroesse 16 ist
118 : sal_uInt8 nUnknown1;
119 : sal_uInt8 nUnknown2;
120 : sal_uInt8 nUnknown3;
121 :
122 : public:
123 :
124 : MSFILTER_DLLPUBLIC friend SvStream& operator>>( SvStream& rIn, PptInteractiveInfoAtom& rAtom );
125 : };
126 :
127 : enum PptPageKind { PPT_MASTERPAGE, PPT_SLIDEPAGE, PPT_NOTEPAGE };
128 :
129 : enum PptPageFormat
130 : { PPTPF_SCREEN, //
131 : PPTPF_USLETTER, // 8.5x11"
132 : PPTPF_A4, // 210x297mm
133 : PPTPF_35MMDIA, // DIA
134 : PPTPF_OVERHEAD, //
135 : PPTPF_CUSTOM
136 : };
137 :
138 : // Werte fuer den sal_uLong im PPT_PST_TextHeaderAtom
139 : enum PPT_TextHeader
140 : {
141 : PPTTH_TITLE,
142 : PPTTH_BODY,
143 : PPTTH_NOTES,
144 : PPTTH_NOTUSED,
145 : PPTTH_OTHER, // Text in a Shape
146 : PPTTH_CENTERBODY, // Subtitle in Title-Slide
147 : PPTTH_CENTERTITLE, // Title in Title-Slide
148 : PPTTH_HALFBODY, // Body in two-column slide
149 : PPTTH_QUARTERBODY // Body in four-body slide
150 : };
151 :
152 : #define TSS_TYPE_PAGETITLE (0)
153 : #define TSS_TYPE_BODY (1)
154 : #define TSS_TYPE_NOTES (2)
155 : #define TSS_TYPE_UNUSED (3)
156 : #define TSS_TYPE_TEXT_IN_SHAPE (4)
157 : #define TSS_TYPE_SUBTITLE (5)
158 : #define TSS_TYPE_TITLE (6)
159 : #define TSS_TYPE_HALFBODY (7)
160 : #define TSS_TYPE_QUARTERBODY (8)
161 :
162 : // Inventor-Id fuer PPT UserData
163 : const sal_uInt32 PPTInventor = sal_uInt32('P') * 0x00000001
164 : + sal_uInt32('P') * 0x00000100
165 : + sal_uInt32('T') * 0x00010000
166 : + sal_uInt32('0') * 0x01000000;
167 :
168 : // Object-Ids fuer StarDraw UserData
169 : #define PPT_OBJECTINFO_ID (1)
170 :
171 8 : struct MSFILTER_DLLPUBLIC PptDocumentAtom
172 : {
173 : Size aSlidesPageSize; // page size of the slides in 576DPI
174 : Size aNotesPageSize; // page size of the notes in 576DPI
175 : // RatioAtom erstmal weggelassen
176 : sal_uInt32 nNotesMasterPersist; // 0=non-existent
177 : sal_uInt32 nHandoutMasterPersist; // 0=non-existent
178 : sal_uInt16 n1stPageNumber; // page number of the first slide
179 : PptPageFormat eSlidesPageFormat; // page format of the slides
180 : sal_Bool bEmbeddedTrueType : 1; // TrueType direcly within the File?
181 : sal_Bool bTitlePlaceholdersOmitted : 1;
182 : sal_Bool bRightToLeft : 1;
183 : sal_Bool bShowComments : 1;
184 :
185 : public:
186 :
187 : Size GetPageSize( const Size& rSiz ) const;
188 50 : Size GetSlidesPageSize() const { return GetPageSize( aSlidesPageSize ); }
189 57 : Size GetNotesPageSize() const { return GetPageSize( aNotesPageSize ); }
190 :
191 : friend SvStream& operator>>( SvStream& rIn, PptDocumentAtom& rAtom );
192 : };
193 :
194 : struct PptSlideLayoutAtom
195 : {
196 : sal_Int32 eLayout; // 0..18
197 : sal_uInt8 aPlaceholderId[ 8 ];
198 :
199 : public:
200 79 : PptSlideLayoutAtom() { Clear(); }
201 : void Clear();
202 :
203 : // Das SlideLayoutAtom wird ohne Header eingelesen!
204 : friend SvStream& operator>>( SvStream& rIn, PptSlideLayoutAtom& rAtom );
205 : };
206 :
207 : struct PptSlideAtom
208 : {
209 : PptSlideLayoutAtom aLayout;
210 : sal_uInt32 nMasterId;
211 : sal_uInt32 nNotesId;
212 : sal_uInt16 nFlags;
213 :
214 : public:
215 79 : PptSlideAtom() { Clear(); }
216 : void Clear();
217 :
218 : friend SvStream& operator>>(SvStream& rIn, PptSlideAtom& rAtom);
219 : };
220 :
221 : struct PptSlidePersistAtom
222 : {
223 : sal_uInt32 nPsrReference;
224 : sal_uInt32 nFlags;
225 : sal_uInt32 nNumberTexts;
226 : sal_uInt32 nSlideId;
227 : sal_uInt32 nReserved; // we will use nReserved temporarly to set the offset to SSSlideInfoAtom ( if possible )
228 :
229 : public:
230 79 : PptSlidePersistAtom() { Clear(); }
231 : void Clear();
232 :
233 : friend SvStream& operator>>(SvStream& rIn, PptSlidePersistAtom& rAtom);
234 : };
235 :
236 : struct PptNotesAtom
237 : {
238 : sal_uInt32 nSlideId;
239 : sal_uInt16 nFlags;
240 :
241 : public:
242 79 : PptNotesAtom() { Clear(); }
243 : void Clear();
244 :
245 : friend SvStream& operator>>(SvStream& rIn, PptNotesAtom& rAtom);
246 : };
247 :
248 : struct PptColorSchemeAtom
249 : {
250 : sal_uInt8 aData[32];
251 :
252 : public:
253 87 : PptColorSchemeAtom () { Clear(); }
254 : void Clear();
255 : Color GetColor( sal_uInt16 nNum ) const;
256 :
257 : friend SvStream& operator>>(SvStream& rIn, PptColorSchemeAtom& rAtom);
258 : };
259 :
260 54 : struct PptFontEntityAtom
261 : {
262 : OUString aName;
263 : double fScaling;
264 : sal_uInt8 lfClipPrecision;
265 : sal_uInt8 lfQuality;
266 :
267 : sal_uInt32 nUniqueFontId; // not used anymore
268 : CharSet eCharSet;
269 : FontFamily eFamily;
270 : FontPitch ePitch;
271 : sal_Bool bAvailable;
272 :
273 : friend SvStream& operator>>(SvStream& rIn, PptFontEntityAtom& rAtom);
274 : };
275 :
276 : class PptFontCollection;
277 : struct PptUserEditAtom
278 : {
279 : DffRecordHeader aHd;
280 : sal_Int32 nLastSlideID; // ID of last visible slide
281 : sal_uInt32 nVersion; // This is major/minor/build which did the edit
282 : sal_uInt32 nOffsetLastEdit; // File offset of prev PptUserEditAtom
283 : sal_uInt32 nOffsetPersistDirectory; // Offset to PersistPtrs for this file version.
284 : sal_uInt32 nDocumentRef;
285 : sal_uInt32 nMaxPersistWritten; // total number of Persist entries up to this point
286 : sal_Int16 eLastViewType; // enum view type
287 :
288 : public:
289 8 : PptUserEditAtom() : nOffsetPersistDirectory( 0 ) {}
290 :
291 : friend SvStream& operator>>( SvStream& rIn, PptUserEditAtom& rAtom );
292 : };
293 :
294 : struct PptOEPlaceholderAtom
295 : {
296 : sal_uInt32 nPlacementId;
297 : sal_uInt8 nPlaceholderId;
298 : sal_uInt8 nPlaceholderSize; // 0=Full size, 1=Half size, 2=Quarter of Slide
299 :
300 : public:
301 1397 : PptOEPlaceholderAtom() { Clear(); }
302 : void Clear();
303 :
304 : friend SvStream& operator>>( SvStream& rIn, PptOEPlaceholderAtom& rAtom );
305 : };
306 :
307 : struct ProcessData;
308 : struct PPTStyleSheet;
309 : struct HeaderFooterEntry;
310 : struct PptSlidePersistEntry
311 : {
312 : PptSlidePersistAtom aPersistAtom;
313 : PptSlideAtom aSlideAtom;
314 : PptNotesAtom aNotesAtom;
315 : PptColorSchemeAtom aColorScheme; // each slide includes this colorscheme atom
316 : PPTStyleSheet* pStyleSheet; // stylesheet of this page ( only in masterpages ), since XP supports more than one masterpage
317 :
318 : sal_uInt32 HeaderFooterOfs[ 4 ]; // containing the ofs to the placeholder (only masterpage)
319 : HeaderFooterEntry* pHeaderFooterEntry;
320 : SvxMSDffSolverContainer* pSolverContainer;
321 : sal_uInt32 nSlidePersistStartOffset;// is an array to the end of the SlidePersistAtom of this page, TextHeaderAtom is following
322 : sal_uInt32 nSlidePersistEndOffset;
323 : sal_uInt32 nBackgroundOffset; // fileoffset
324 : sal_uInt32 nDrawingDgId; // valid, if not -1
325 : sal_uInt32* pPresentationObjects; // if valid, this is a pointer to an array that includes the offsets to the presentation objects
326 : // on this masterpage for each instance ( 0 - 8 );
327 : SdrObject* pBObj;
328 : sal_Bool bBObjIsTemporary;
329 :
330 : PptPageKind ePageKind; //
331 :
332 : sal_Bool bNotesMaster : 1; // for NotesMaster
333 : sal_Bool bHandoutMaster : 1; // for HandoutMaster
334 : sal_Bool bStarDrawFiller : 1; // special for StarDraw
335 : public:
336 : PptSlidePersistEntry();
337 : ~PptSlidePersistEntry();
338 643 : sal_uInt32 GetSlideId() const { return aPersistAtom.nSlideId; }
339 : };
340 :
341 21 : class _PptSlidePersistList : public std::vector<PptSlidePersistEntry*>
342 : {
343 : public:
344 21 : ~_PptSlidePersistList()
345 21 : {
346 100 : for( const_iterator it = begin(); it != end(); ++it )
347 79 : delete *it;
348 21 : }
349 : };
350 :
351 : #define PPTSLIDEPERSIST_ENTRY_NOTFOUND 0xFFFF
352 :
353 42 : class MSFILTER_DLLPUBLIC PptSlidePersistList: public _PptSlidePersistList
354 : {
355 : public:
356 : sal_uInt16 FindPage( sal_uInt32 nId ) const;
357 : };
358 :
359 : class SfxObjectShell;
360 : struct PPTOleEntry
361 : {
362 : sal_uInt32 nId; // OleId
363 : sal_uInt32 nPersistPtr; // PersistPtr
364 : sal_uInt32 nRecHdOfs; // points to the record header: ExObjListHd
365 : SfxObjectShell* pShell;
366 : sal_uInt16 nType; // maybe PPT_PST_ExEmbed or PPT_PST_ExControl
367 : sal_uInt32 nAspect; // the aspect of the OLE object
368 :
369 3 : PPTOleEntry( sal_uInt32 nid, sal_uInt32 nOfs, SfxObjectShell* pSh, sal_uInt16 nT, sal_uInt32 nAsp ) :
370 : nId ( nid ),
371 : nRecHdOfs ( nOfs ),
372 : pShell ( pSh ),
373 : nType ( nT ),
374 3 : nAspect ( nAsp ) {}
375 : };
376 :
377 : struct PptExOleObjAtom
378 : {
379 : sal_uInt32 nAspect;
380 : sal_uInt32 nId;
381 : sal_uInt32 nPersistPtr;
382 :
383 : public:
384 :
385 : friend SvStream& operator>>( SvStream& rIn, PptExOleObjAtom& rAtom );
386 : };
387 :
388 : typedef ::std::vector< PPTOleEntry* > PPTOleEntryList;
389 : class PPTExtParaProv;
390 : class MSFILTER_DLLPUBLIC SdrEscherImport : public SvxMSDffManager
391 : {
392 : protected:
393 :
394 : friend class PPTTextObj;
395 : friend class PPTPortionObj;
396 : friend struct PPTStyleTextPropReader;
397 : friend class ImplSdPPTImport;
398 :
399 : PptDocumentAtom aDocAtom;
400 : DffRecordManager aDocRecManager; // contains all first level container and atoms of the document container
401 :
402 : PPTOleEntryList aOleObjectList; // contains PPTOleEntrys
403 :
404 : PptFontCollection* pFonts;
405 :
406 : sal_uInt32 nStreamLen;
407 : sal_uInt16 nTextStylesIndex;
408 :
409 : CharSet eCharSetSystem;
410 :
411 : sal_Bool bWingdingsChecked : 1;
412 : sal_Bool bWingdingsAvailable : 1;
413 : sal_Bool bMonotypeSortsChecked : 1;
414 : sal_Bool bMonotypeSortsAvailable : 1;
415 : sal_Bool bTimesNewRomanChecked : 1;
416 : sal_Bool bTimesNewRomanAvailable : 1;
417 :
418 : sal_Bool ReadString( OUString& rStr ) const;
419 : // nur fuer PowerPoint-Filter:
420 : virtual const PptSlideLayoutAtom* GetSlideLayoutAtom() const;
421 :
422 : public:
423 : using SvxMSDffManager::ReadObjText;
424 :
425 : PowerPointImportParam& rImportParam;
426 :
427 : SdrEscherImport( PowerPointImportParam&, const OUString& rBaseURL );
428 : virtual ~SdrEscherImport();
429 : virtual bool GetColorFromPalette( sal_uInt16 nNum, Color& rColor ) const;
430 : virtual sal_Bool SeekToShape( SvStream& rSt, void* pClientData, sal_uInt32 nId ) const;
431 : PptFontEntityAtom* GetFontEnityAtom( sal_uInt32 nNum ) const;
432 : void RecolorGraphic( SvStream& rSt, sal_uInt32 nRecLen, Graphic& rGraph );
433 : virtual SdrObject* ReadObjText( PPTTextObj* pTextObj, SdrObject* pObj, SdPage* pPage ) const;
434 : virtual SdrObject* ProcessObj( SvStream& rSt, DffObjData& rData, void* pData, Rectangle& rTextRect, SdrObject* pObj );
435 : virtual void ProcessClientAnchor2( SvStream& rSt, DffRecordHeader& rHd, void* pData, DffObjData& rObj );
436 : void ImportHeaderFooterContainer( DffRecordHeader& rHeader, HeaderFooterEntry& rEntry );
437 : };
438 :
439 : ////////////////////////////////////////////////////////////////////////////////////////////////////
440 :
441 : #define SD_HEADERFOOTER_DATE 1
442 : #define SD_HEADERFOOTER_TODAYDATE 2
443 : #define SD_HEADERFOOTER_USERDATE 4
444 : #define SD_HEADERFOOTER_SLIDENUMBER 8
445 : #define SD_HEADERFOOTER_HEADER 16
446 : #define SD_HEADERFOOTER_FOOTER 32
447 :
448 : class SvxFieldItem;
449 : struct MSFILTER_DLLPUBLIC PPTFieldEntry
450 : {
451 : sal_uInt16 nPos;
452 : sal_uInt16 nTextRangeEnd;
453 : SvxFieldItem* pField1;
454 : SvxFieldItem* pField2;
455 : OUString* pString;
456 :
457 46 : PPTFieldEntry() : nPos( 0 ), nTextRangeEnd( 0 ), pField1( NULL ), pField2( NULL ), pString( NULL ) {};
458 : ~PPTFieldEntry();
459 :
460 : void SetDateTime( sal_uInt32 nType );
461 :
462 : // converting PPT date time format:
463 : static void GetDateTime(
464 : const sal_uInt32 nVal,
465 : SvxDateFormat& eDateFormat,
466 : SvxTimeFormat& eTimeFormat
467 : );
468 : };
469 :
470 23 : struct MSFILTER_DLLPUBLIC HeaderFooterEntry
471 : {
472 : const PptSlidePersistEntry* pMasterPersist;
473 : OUString pPlaceholder[ 4 ];
474 : sal_uInt32 nAtom;
475 :
476 : sal_uInt32 GetMaskForInstance( sal_uInt32 nInstance );
477 : sal_uInt32 IsToDisplay( sal_uInt32 nInstance );
478 : sal_uInt32 NeedToImportInstance(
479 : const sal_uInt32 nInstance,
480 : const PptSlidePersistEntry& rSlidePersist
481 : );
482 :
483 : explicit HeaderFooterEntry( const PptSlidePersistEntry* pMaster = NULL );
484 : ~HeaderFooterEntry();
485 : };
486 :
487 : struct ProcessData
488 : {
489 : PptSlidePersistEntry& rPersistEntry;
490 : SdPage* pPage;
491 : ::std::vector< SdrObject* > aBackgroundColoredObjects;
492 : sal_uInt32* pTableRowProperties;
493 :
494 75 : ProcessData( PptSlidePersistEntry& rP, SdPage* pP ) :
495 : rPersistEntry ( rP ),
496 : pPage ( pP ),
497 75 : pTableRowProperties ( NULL ) {};
498 75 : ~ProcessData() { delete[] pTableRowProperties; };
499 : };
500 :
501 : ////////////////////////////////////////////////////////////////////////////////////////////////////
502 :
503 : typedef ::std::vector< SdHyperlinkEntry* > SdHyperlinkEntryList;
504 : class SdrTextObj;
505 : class SfxObjectShell;
506 :
507 : class MSFILTER_DLLPUBLIC SdrPowerPointImport : public SdrEscherImport
508 : {
509 : protected:
510 :
511 : friend class PPTTextObj;
512 : friend class PPTExtParaProv;
513 : friend struct PPTStyleSheet;
514 : friend class PPTNumberFormatCreator;
515 :
516 : sal_Bool bOk;
517 : PptUserEditAtom aUserEditAtom;
518 : PptColorSchemeAtom aPageColors;
519 : SdHyperlinkEntryList aHyperList;
520 : sal_uInt32* pPersistPtr;
521 : sal_uLong nPersistPtrAnz;
522 :
523 : const PPTStyleSheet* pPPTStyleSheet; // this is the current stylesheet;
524 : const PPTStyleSheet* pDefaultSheet; // this is a sheet we are using if no masterpage can be found, but that should
525 : // never happen just preventing a crash
526 : PptSlidePersistList* pMasterPages;
527 : PptSlidePersistList* pSlidePages;
528 : PptSlidePersistList* pNotePages;
529 : sal_uInt16 nAktPageNum;
530 : sal_uLong nDocStreamPos;
531 : sal_uInt16 nPageColorsNum;
532 : PptPageKind ePageColorsKind;
533 : PptPageKind eAktPageKind;
534 :
535 : protected:
536 : using SdrEscherImport::ReadObjText;
537 :
538 : sal_Bool SeekToAktPage(DffRecordHeader* pRecHd=NULL) const;
539 : sal_Bool SeekToDocument(DffRecordHeader* pRecHd=NULL) const;
540 : sal_Bool SeekToContentOfProgTag(
541 : sal_Int32 nVersion,
542 : SvStream& rSt,
543 : const DffRecordHeader& rProgTagBinaryDataHd,
544 : DffRecordHeader& rContentHd
545 : );
546 : virtual SdrObject* ApplyTextObj(
547 : PPTTextObj* pTextObj,
548 : SdrTextObj* pText,
549 : SdPage* pPage,
550 : SfxStyleSheet*,
551 : SfxStyleSheet** )
552 : const;
553 : virtual SdrObject* ReadObjText( PPTTextObj* pTextObj, SdrObject* pObj, SdPage* pPage ) const;
554 : // #i32596# - new parameter <_nCalledByGroup>, which
555 : // indicates, if the OLE object is imported inside a group object.
556 : virtual SdrObject* ImportOLE(
557 : long nOLEId,
558 : const Graphic& rGraf,
559 : const Rectangle& rBoundRect,
560 : const Rectangle& rVisArea,
561 : const int _nCalledByGroup,
562 : sal_Int64 nAspect
563 : ) const;
564 : SvMemoryStream* ImportExOleObjStg( sal_uInt32 nPersistPtr, sal_uInt32& nOleId ) const;
565 : SdrPage* MakeBlancPage(sal_Bool bMaster) const;
566 : sal_Bool ReadFontCollection();
567 : sal_Bool ForceFontCollection() const
568 : { return pFonts!=NULL?sal_True:((SdrPowerPointImport*)this)->ReadFontCollection(); }
569 : PptSlidePersistList* GetPageList(PptPageKind ePageKind) const;
570 : sal_uInt32 GetAktPageId();
571 : sal_uInt32 GetMasterPageId(sal_uInt16 nPageNum, PptPageKind ePageKind) const;
572 : sal_uInt32 GetNotesPageId(sal_uInt16 nPageNum ) const;
573 : SdrOutliner* GetDrawOutliner( SdrTextObj* pSdrText ) const;
574 : void SeekOle( SfxObjectShell* pShell, sal_uInt32 nFilterOptions );
575 :
576 : void ApplyTextAnchorAttributes( PPTTextObj& rTextObj, SfxItemSet& rSet ) const;
577 : sal_Bool IsVerticalText() const;
578 :
579 : public:
580 : SdrPowerPointImport( PowerPointImportParam&, const OUString& rBaseURL );
581 : virtual ~SdrPowerPointImport();
582 : sal_uInt16 GetPageCount( PptPageKind eKind = PPT_SLIDEPAGE ) const;
583 : void SetPageNum( sal_uInt16 nPageNum, PptPageKind = PPT_SLIDEPAGE );
584 : sal_uInt16 GetPageNum() const { return nAktPageNum; }
585 : PptPageKind GetPageKind() const { return eAktPageKind; }
586 : Size GetPageSize() const;
587 : SdrObject* ImportPageBackgroundObject(
588 : const SdrPage& rPage,
589 : sal_uInt32& nBgFileOffset,
590 : sal_Bool bForce
591 : );
592 : sal_Bool IsNoteOrHandout( sal_uInt16 nPageNum, PptPageKind ePageKind ) const;
593 : sal_Bool HasMasterPage(
594 : sal_uInt16 nPageNum,
595 : PptPageKind ePageKind = PPT_SLIDEPAGE
596 : ) const;
597 : sal_uInt16 GetMasterPageIndex(
598 : sal_uInt16 nPageNum,
599 : PptPageKind ePageKind = PPT_SLIDEPAGE
600 : ) const;
601 :
602 : void ImportPage( SdrPage* pPage, const PptSlidePersistEntry* pMasterPersist = NULL );
603 : virtual bool GetColorFromPalette(sal_uInt16 nNum, Color& rColor) const;
604 : virtual sal_Bool SeekToShape( SvStream& rSt, void* pClientData, sal_uInt32 nId ) const;
605 : sal_Unicode PPTSubstitute(
606 : sal_uInt16 nFont,
607 : sal_Unicode nChar,
608 : sal_uInt32& nMappedFontId,
609 : Font& rFont,
610 : char nDefault
611 : ) const;
612 : const PptDocumentAtom& GetDocumentAtom() const { return aDocAtom; }
613 : virtual const PptSlideLayoutAtom* GetSlideLayoutAtom() const;
614 : SdrObject* CreateTable(
615 : SdrObject* pGroupObject,
616 : sal_uInt32* pTableArry,
617 : SvxMSDffSolverContainer*
618 : );
619 : virtual bool ReadFormControl( SotStorageRef& rSrc1, com::sun::star::uno::Reference< com::sun::star::form::XFormComponent > & rFormComp ) const = 0;
620 : };
621 :
622 : struct PPTTextCharacterStyleAtomInterpreter
623 : {
624 : sal_uInt16 nFlags1;
625 : sal_uInt16 nFlags2;
626 : sal_uInt16 nFlags3;
627 : sal_Int32 n1;
628 : sal_uInt16 nFontHeight;
629 : sal_Int32 nFontColor;
630 :
631 : PPTTextCharacterStyleAtomInterpreter();
632 : ~PPTTextCharacterStyleAtomInterpreter();
633 :
634 : sal_Bool Read( SvStream& rIn, const DffRecordHeader& rRecHd );
635 :
636 : sal_uInt32 GetColor( sal_uInt32 nDefault );
637 : };
638 :
639 : struct PPTTextParagraphStyleAtomInterpreter
640 : {
641 : sal_Bool bValid;
642 : sal_Bool bForbiddenRules;
643 : sal_Bool bHangingPunctuation;
644 : sal_Bool bLatinTextWrap;
645 :
646 : PPTTextParagraphStyleAtomInterpreter();
647 : ~PPTTextParagraphStyleAtomInterpreter();
648 :
649 : sal_Bool Read( SvStream& rIn, const DffRecordHeader& rRecHd );
650 : };
651 :
652 : struct PPTTextSpecInfo
653 : {
654 : sal_uInt32 nCharIdx;
655 : sal_uInt16 nLanguage[ 3 ];
656 : sal_uInt16 nDontKnow;
657 :
658 : explicit PPTTextSpecInfo( sal_uInt32 nCharIdx );
659 : ~PPTTextSpecInfo();
660 : };
661 :
662 : typedef ::std::vector< PPTTextSpecInfo* > PPTTextSpecInfoList;
663 : struct PPTTextSpecInfoAtomInterpreter
664 : {
665 : sal_Bool bValid;
666 : PPTTextSpecInfoList aList;
667 :
668 : PPTTextSpecInfoAtomInterpreter();
669 : ~PPTTextSpecInfoAtomInterpreter();
670 :
671 : sal_Bool Read(
672 : SvStream& rIn,
673 : const DffRecordHeader& rRecHd,
674 : sal_uInt16 nRecordType,
675 : const PPTTextSpecInfo* pTextSpecDefault = NULL
676 : );
677 :
678 : };
679 :
680 : #define PPT_STYLESHEETENTRYS 9
681 :
682 : struct PPTExtParaLevel
683 : {
684 : sal_uInt32 mnExtParagraphMask;
685 : sal_uInt16 mnBuBlip;
686 : sal_uInt16 mnHasAnm;
687 : sal_uInt32 mnAnmScheme;
688 : sal_uInt32 mpfPP10Ext;
689 : sal_uInt32 mnExtCharacterMask;
690 : sal_uInt32 mcfPP10Ext;
691 : sal_Bool mbSet;
692 :
693 : PPTExtParaLevel();
694 : friend SvStream& operator>>( SvStream& rIn, PPTExtParaLevel& rL );
695 : };
696 :
697 90 : struct PPTExtParaSheet
698 : {
699 : PPTExtParaLevel aExtParaLevel[ 5 ];
700 : };
701 :
702 0 : struct PPTBuGraEntry
703 : {
704 : sal_uInt32 nInstance;
705 : Graphic aBuGra;
706 :
707 : PPTBuGraEntry( Graphic& rGraphic, sal_uInt32 nInstance );
708 : };
709 :
710 : typedef ::std::vector< PPTBuGraEntry* > PPTBuGraEntryList;
711 :
712 : class PPTExtParaProv
713 : {
714 : PPTBuGraEntryList aBuGraList;
715 :
716 : public :
717 : sal_Bool bStyles;
718 : sal_Bool bGraphics;
719 : DffRecordManager aExtendedPresRules;
720 :
721 : PPTExtParaSheet aExtParaSheet[ PPT_STYLESHEETENTRYS ];
722 :
723 : sal_Bool GetGraphic( sal_uInt32 nInstance, Graphic& rGraphic ) const;
724 :
725 : PPTExtParaProv(
726 : SdrPowerPointImport& rManager,
727 : SvStream& rSt,
728 : const DffRecordHeader* pMainMasterHd
729 : );
730 : ~PPTExtParaProv();
731 : };
732 :
733 450 : struct PPTCharLevel
734 : {
735 : Color mnFontColorInStyleSheet;
736 : sal_uInt32 mnFontColor;
737 : sal_uInt16 mnFlags;
738 : sal_uInt16 mnFont;
739 : sal_uInt16 mnAsianOrComplexFont;
740 : sal_uInt16 mnFontHeight;
741 : sal_uInt16 mnEscapement;
742 : };
743 :
744 : struct PPTCharSheet
745 : {
746 : PPTCharLevel maCharLevel[ 5 ];
747 :
748 : explicit PPTCharSheet( sal_uInt32 nInstance );
749 : PPTCharSheet( const PPTCharSheet& rCharSheet );
750 :
751 : void Read( SvStream& rIn, sal_Bool bMasterStyle, sal_uInt32 nLevel, sal_Bool bFirst );
752 : };
753 :
754 : struct PPTParaLevel
755 : {
756 : sal_uInt16 mnBuFlags;
757 : sal_uInt16 mnBulletChar;
758 : sal_uInt16 mnBulletFont;
759 : sal_uInt16 mnBulletHeight;
760 : sal_uInt32 mnBulletColor;
761 :
762 : sal_uInt16 mnAdjust;
763 : sal_uInt16 mnLineFeed;
764 : sal_uInt16 mnUpperDist;
765 : sal_uInt16 mnLowerDist;
766 : sal_uInt16 mnTextOfs;
767 : sal_uInt16 mnBulletOfs;
768 : sal_uInt16 mnDefaultTab;
769 : sal_uInt16 mnAsianLineBreak; // bit0: use asian rules for first and last character
770 : // 1: do not wrap latin text in the middle of the word
771 : // 2: allow hanging punctuation
772 : sal_uInt16 mnBiDi;
773 : };
774 :
775 : struct PPTParaSheet
776 : {
777 : public:
778 :
779 : PPTParaLevel maParaLevel[ 5 ];
780 :
781 : explicit PPTParaSheet( sal_uInt32 nInstance );
782 : PPTParaSheet( const PPTParaSheet& rParaSheet );
783 :
784 : void Read(
785 : SdrPowerPointImport& rMan,
786 : SvStream& rIn,
787 : sal_Bool bMasterStyle,
788 : sal_uInt32 nLevel,
789 : sal_Bool bFirst
790 : );
791 : void UpdateBulletRelSize( sal_uInt32 nLevel, sal_uInt16 nFontHeight );
792 : };
793 :
794 : class PPTParagraphObj;
795 : class PPTNumberFormatCreator
796 : {
797 : sal_uInt32 nIsBullet;
798 : sal_uInt32 nBulletChar;
799 : sal_uInt32 nBulletFont;
800 : sal_uInt32 nBulletHeight;
801 : sal_uInt32 nBulletColor;
802 : sal_uInt32 nTextOfs;
803 : sal_uInt32 nBulletOfs;
804 :
805 : void ImplGetNumberFormat(
806 : SdrPowerPointImport& rMan,
807 : SvxNumberFormat& rNumberFormat,
808 : sal_uInt32 nLevel
809 : );
810 : sal_Bool ImplGetExtNumberFormat(
811 : SdrPowerPointImport& rMan,
812 : SvxNumberFormat& rNumberFormat,
813 : sal_uInt32 nLevel,
814 : sal_uInt32 nInstance,
815 : sal_uInt32 nInstanceInSheet,
816 : boost::optional< sal_Int16 >& rStartNumbering,
817 : sal_uInt32 nFontHeight,
818 : PPTParagraphObj* pPara
819 : );
820 :
821 : protected:
822 :
823 : PPTNumberFormatCreator( PPTExtParaProv* );
824 : ~PPTNumberFormatCreator();
825 :
826 : public:
827 :
828 : PPTExtParaProv* pExtParaProv;
829 :
830 : void GetNumberFormat(
831 : SdrPowerPointImport& rMan,
832 : SvxNumberFormat& rNumberFormat,
833 : sal_uInt32 nLevel,
834 : const PPTParaLevel& rParaLevel,
835 : const PPTCharLevel& rCharLevel,
836 : sal_uInt32 nInstance
837 : );
838 :
839 : sal_Bool GetNumberFormat(
840 : SdrPowerPointImport& rMan,
841 : SvxNumberFormat& rNumberFormat,
842 : PPTParagraphObj* pPara,
843 : sal_uInt32 nInstanceInSheet,
844 : boost::optional< sal_Int16 >& rStartNumbering
845 : );
846 : };
847 :
848 : class SvxNumBulletItem;
849 : struct PPTStyleSheet : public PPTNumberFormatCreator
850 : {
851 : PPTTextSpecInfo maTxSI;
852 : PPTCharSheet* mpCharSheet[ PPT_STYLESHEETENTRYS ];
853 : PPTParaSheet* mpParaSheet[ PPT_STYLESHEETENTRYS ];
854 : SvxNumBulletItem* mpNumBulletItem[ PPT_STYLESHEETENTRYS ];
855 :
856 : PPTStyleSheet(
857 : const DffRecordHeader& rSlideHd,
858 : SvStream& rSt, SdrPowerPointImport&,
859 : const PPTTextCharacterStyleAtomInterpreter&,
860 : const PPTTextParagraphStyleAtomInterpreter&,
861 : const PPTTextSpecInfo&
862 : );
863 : ~PPTStyleSheet();
864 : };
865 :
866 : struct ImplPPTParaPropSet
867 : {
868 : sal_uInt32 mnRefCount;
869 :
870 : sal_uInt16 mnDepth;
871 : sal_uInt32 mnAttrSet;
872 : sal_uInt32 mnBulletColor;
873 : sal_uInt16 mpArry[ 22 ];
874 :
875 : sal_uInt32 mnExtParagraphMask;
876 : sal_uInt32 mnAnmScheme;
877 : sal_uInt16 mnHasAnm;
878 : sal_uInt16 mnBuBlip;
879 :
880 : sal_uInt32 nDontKnow1;
881 : sal_uInt32 nDontKnow2;
882 : sal_uInt16 nDontKnow2bit06;
883 :
884 801 : ImplPPTParaPropSet()
885 801 : { mnRefCount = 1; mnAttrSet = 0; mnExtParagraphMask = 0; mnDepth = 0; };
886 : };
887 :
888 : struct PPTParaPropSet
889 : {
890 : sal_uInt32 mnOriginalTextPos;
891 : ImplPPTParaPropSet* pParaSet;
892 :
893 : PPTParaPropSet();
894 : PPTParaPropSet( PPTParaPropSet& rParaPropSet );
895 : ~PPTParaPropSet();
896 :
897 : PPTParaPropSet& operator=( PPTParaPropSet& rParaPropSet );
898 : };
899 :
900 : struct ImplPPTCharPropSet
901 : {
902 : sal_uInt32 mnRefCount;
903 :
904 : sal_uInt32 mnAttrSet;
905 : sal_uInt16 mnFlags;
906 : sal_uInt32 mnColor;
907 : sal_uInt16 mnFont;
908 : sal_uInt16 mnAsianOrComplexFont;
909 : sal_uInt16 mnANSITypeface;
910 : sal_uInt16 mnFontHeight;
911 : sal_uInt16 mnEscapement;
912 : sal_uInt16 mnSymbolFont;
913 :
914 1177 : ImplPPTCharPropSet(){ mnRefCount = 1; mnAttrSet = 0; };
915 : };
916 :
917 : struct PPTCharPropSet
918 : {
919 : //when the bullet text has more than two color,next the text following with bullet has been set hyperlink.
920 : //now,the bullet color should be set original hyperlink text's color
921 : //so "mbHardHylinkOrigColor" hold the original hyperlink text's color.
922 : sal_uInt32 mnHylinkOrigColor;
923 : //the bullet text weather has a hyperlink.
924 : sal_Bool mbIsHyperlink;
925 : //the hyperlink text weather has a custom color.
926 : sal_Bool mbHardHylinkOrigColor;
927 :
928 : sal_uInt32 mnOriginalTextPos;
929 : sal_uInt32 mnParagraph;
930 : OUString maString;
931 : SvxFieldItem* mpFieldItem;
932 : sal_uInt16 mnLanguage[ 3 ];
933 :
934 : ImplPPTCharPropSet* pCharSet;
935 :
936 : void SetFont( sal_uInt16 nFont );
937 : void SetColor( sal_uInt32 nColor );
938 :
939 : explicit PPTCharPropSet( sal_uInt32 nParagraph );
940 : PPTCharPropSet( const PPTCharPropSet& rCharPropSet );
941 : PPTCharPropSet( const PPTCharPropSet& rCharPropSet, sal_uInt32 nParagraph );
942 : ~PPTCharPropSet();
943 :
944 : PPTCharPropSet& operator=( const PPTCharPropSet& rCharPropSet );
945 :
946 : private:
947 : void ImplMakeUnique();
948 : };
949 :
950 : struct PPTTabEntry
951 : {
952 : sal_uInt16 nOffset;
953 : sal_uInt16 nStyle;
954 : };
955 :
956 : struct PPTRuler
957 : {
958 : sal_uInt32 nRefCount;
959 :
960 : sal_Int32 nFlags;
961 : sal_uInt16 nDefaultTab;
962 : sal_uInt16 nTextOfs[ 5 ];
963 : sal_uInt16 nBulletOfs[ 5 ];
964 : PPTTabEntry* pTab;
965 : sal_uInt16 nTabCount;
966 :
967 : PPTRuler();
968 : ~PPTRuler();
969 : };
970 :
971 : struct PPTTextRulerInterpreter
972 : {
973 : PPTRuler *mpImplRuler;
974 :
975 : PPTTextRulerInterpreter();
976 : PPTTextRulerInterpreter( PPTTextRulerInterpreter& rRuler );
977 : PPTTextRulerInterpreter(
978 : sal_uInt32 nFileOfs,
979 : SdrPowerPointImport&,
980 : DffRecordHeader& rHd,
981 : SvStream& rIn
982 : );
983 : ~PPTTextRulerInterpreter();
984 :
985 0 : sal_uInt16 GetTabOffsetByIndex( sal_uInt16 nIndex ) const
986 0 : { return mpImplRuler->pTab[ nIndex ].nOffset; };
987 :
988 0 : sal_uInt16 GetTabStyleByIndex( sal_uInt16 nIndex ) const
989 0 : { return mpImplRuler->pTab[ nIndex ].nStyle; };
990 :
991 128 : sal_uInt16 GetTabCount() const { return mpImplRuler->nTabCount; };
992 : sal_Bool GetDefaultTab( sal_uInt32 nLevel, sal_uInt16& nValue ) const;
993 : sal_Bool GetTextOfs( sal_uInt32 nLevel, sal_uInt16& nValue ) const;
994 : sal_Bool GetBulletOfs( sal_uInt32 nLevel, sal_uInt16& nValue ) const;
995 :
996 : PPTTextRulerInterpreter& operator=( PPTTextRulerInterpreter& rRuler );
997 : };
998 :
999 : #define PPT_SPEC_NEWLINE 0x10000
1000 : #define PPT_SPEC_SYMBOL 0x20000
1001 : #define PPT_SPEC_USE_STARBATS 0x40000
1002 :
1003 : struct StyleTextProp9
1004 : {
1005 : sal_uInt32 mnExtParagraphMask;
1006 : sal_uInt16 mnBuBlip;
1007 : sal_uInt16 mnHasAnm;
1008 : sal_uInt32 mnAnmScheme;
1009 : sal_uInt32 mpfPP10Ext;
1010 : sal_uInt32 mnExtCharacterMask;
1011 : sal_uInt32 mncfPP10Ext;
1012 : sal_uInt32 mnSpecialInfoMask;
1013 : sal_uInt32 mnPP10Ext;
1014 : sal_uInt16 mfBidi;
1015 :
1016 4 : StyleTextProp9()
1017 : : mnExtParagraphMask( 0 )
1018 : , mnBuBlip( 0 )
1019 : , mnHasAnm( 0 )
1020 : , mnAnmScheme( 0 )
1021 : , mpfPP10Ext( 0 )
1022 : , mnExtCharacterMask( 0 )
1023 : , mncfPP10Ext( 0 )
1024 : , mnSpecialInfoMask( 0 )
1025 : , mnPP10Ext( 0 )
1026 4 : , mfBidi( 0 )
1027 : {
1028 4 : }
1029 : void Read( SvStream& rSt );
1030 : };
1031 :
1032 : typedef std::vector<PPTParaPropSet*> PPTParaPropSetList;
1033 : typedef std::vector<PPTCharPropSet*> PPTCharPropSetList;
1034 :
1035 : struct PPTStyleTextPropReader
1036 : {
1037 : std::vector< sal_uInt32 > aSpecMarkerList; // hiword -> Flags, loword -> Position
1038 : PPTParaPropSetList aParaPropList;
1039 : PPTCharPropSetList aCharPropList;
1040 :
1041 : PPTStyleTextPropReader(
1042 : SvStream& rIn,
1043 : SdrPowerPointImport&,
1044 : const DffRecordHeader& rClientTextBoxHd,
1045 : PPTTextRulerInterpreter& rInterpreter,
1046 : const DffRecordHeader& rExtParaHd,
1047 : sal_uInt32 nTextInstance
1048 : );
1049 : ~PPTStyleTextPropReader();
1050 :
1051 : void Init(
1052 : SvStream& rIn,
1053 : SdrPowerPointImport&,
1054 : const DffRecordHeader& rClientTextBoxHd,
1055 : PPTTextRulerInterpreter& rInterpreter,
1056 : const DffRecordHeader& rExtParaHd,
1057 : sal_uInt32 nTextInstance
1058 : );
1059 : void ReadParaProps(
1060 : SvStream& rIn,
1061 : SdrPowerPointImport& rMan,
1062 : const DffRecordHeader& rTextHeader,
1063 : const OUString& aString,
1064 : PPTTextRulerInterpreter& rRuler,
1065 : sal_uInt32& nCharCount,
1066 : sal_Bool& bTextPropAtom
1067 : );
1068 : void ReadCharProps(
1069 : SvStream& rIn,
1070 : PPTCharPropSet& aCharPropSet,
1071 : const OUString& aString,
1072 : sal_uInt32& nCharCount,
1073 : sal_uInt32 nCharAnzRead,
1074 : sal_Bool& bTextPropAtom,
1075 : sal_uInt32 nExtParaPos,
1076 : const std::vector< StyleTextProp9 >& aStyleTextProp9,
1077 : sal_uInt32& nExtParaFlags,
1078 : sal_uInt16& nBuBlip,
1079 : sal_uInt16& nHasAnm,
1080 : sal_uInt32& nAnmScheme
1081 : );
1082 : };
1083 :
1084 : class SvxFieldItem;
1085 : class MSFILTER_DLLPUBLIC PPTPortionObj : public PPTCharPropSet
1086 : {
1087 :
1088 : friend class PPTParagraphObj;
1089 :
1090 : const PPTStyleSheet& mrStyleSheet;
1091 : sal_uInt32 mnInstance;
1092 : sal_uInt32 mnDepth;
1093 :
1094 : public:
1095 :
1096 : sal_Bool GetAttrib( sal_uInt32 nAttr, sal_uInt32& nVal, sal_uInt32 nInstanceInSheet ) const;
1097 : SvxFieldItem* GetTextField();
1098 :
1099 : PPTPortionObj( const PPTStyleSheet&, sal_uInt32 nInstance, sal_uInt32 nDepth );
1100 : PPTPortionObj(
1101 : const PPTCharPropSet&,
1102 : const PPTStyleSheet&,
1103 : sal_uInt32 nInstance,
1104 : sal_uInt32 nDepth
1105 : );
1106 : PPTPortionObj( const PPTPortionObj& );
1107 : ~PPTPortionObj();
1108 :
1109 : // the following function should be removed during next full update
1110 : void ApplyTo(
1111 : SfxItemSet& rSet,
1112 : SdrPowerPointImport& rManager,
1113 : sal_uInt32 nInstanceInSheet
1114 : );
1115 : void ApplyTo(
1116 : SfxItemSet& rSet,
1117 : SdrPowerPointImport& rManager,
1118 : sal_uInt32 nInstanceInSheet,
1119 : const PPTTextObj* pTextObj
1120 : );
1121 2464 : sal_uInt32 Count() const { return ( mpFieldItem ) ? 1 : maString.getLength(); };
1122 : sal_Bool HasTabulator();
1123 : };
1124 :
1125 : class MSFILTER_DLLPUBLIC PPTParagraphObj
1126 : : public PPTParaPropSet,
1127 : public PPTNumberFormatCreator,
1128 : public PPTTextRulerInterpreter
1129 : {
1130 : friend class PPTTextObj;
1131 : friend class PPTNumberFormatCreator;
1132 :
1133 : const PPTStyleSheet& mrStyleSheet;
1134 : sal_uInt32 mnInstance;
1135 :
1136 : protected:
1137 :
1138 : void ImplClear();
1139 :
1140 : public:
1141 :
1142 : sal_Bool mbTab; // if true, this paragraph has tabulators in text
1143 :
1144 : sal_uInt32 mnCurrentObject;
1145 : ::boost::ptr_vector<PPTPortionObj> m_PortionList;
1146 :
1147 : void UpdateBulletRelSize( sal_uInt32& nBulletRelSize ) const;
1148 : sal_Bool GetAttrib( sal_uInt32 nAttr, sal_uInt32& nVal, sal_uInt32 nInstanceInSheet );
1149 :
1150 : PPTParagraphObj(
1151 : const PPTStyleSheet&,
1152 : sal_uInt32 nInstance,
1153 : sal_uInt16 nDepth
1154 : );
1155 : PPTParagraphObj(
1156 : PPTStyleTextPropReader&,
1157 : size_t nCurParaPos,
1158 : size_t& rnCurCharPos,
1159 : const PPTStyleSheet&,
1160 : sal_uInt32 nInstance,
1161 : PPTTextRulerInterpreter& rRuler
1162 : );
1163 : ~PPTParagraphObj();
1164 :
1165 : sal_uInt32 GetTextSize();
1166 : PPTPortionObj* First();
1167 : PPTPortionObj* Next();
1168 :
1169 : void AppendPortion( PPTPortionObj& rPortion );
1170 : void ApplyTo(
1171 : SfxItemSet& rSet,
1172 : boost::optional< sal_Int16 >& rStartNumbering,
1173 : SdrPowerPointImport& rManager,
1174 : sal_uInt32 nInstanceInSheet,
1175 : const PPTParagraphObj* pPrev
1176 : );
1177 : };
1178 :
1179 : #define PPT_TEXTOBJ_FLAGS_PARA_ALIGNMENT_USED_LEFT 1
1180 : #define PPT_TEXTOBJ_FLAGS_PARA_ALIGNMENT_USED_CENTER 2
1181 : #define PPT_TEXTOBJ_FLAGS_PARA_ALIGNMENT_USED_RIGHT 4
1182 : #define PPT_TEXTOBJ_FLAGS_PARA_ALIGNMENT_USED_BLOCK 8
1183 : #define PPT_TEXTOBJ_FLAGS_VERTICAL 16
1184 :
1185 : struct ImplPPTTextObj
1186 : {
1187 : sal_uInt32 mnRefCount;
1188 : sal_uInt32 mnShapeId;
1189 : sal_uInt32 mnShapeMaster;
1190 : PptOEPlaceholderAtom* mpPlaceHolderAtom;
1191 : sal_uInt16 mnInstance;
1192 : sal_uInt16 mnDestinationInstance;
1193 : MSO_SPT meShapeType;
1194 :
1195 : sal_uInt32 mnCurrentObject;
1196 : sal_uInt32 mnParagraphCount;
1197 : PPTParagraphObj** mpParagraphList;
1198 : PptSlidePersistEntry& mrPersistEntry;
1199 :
1200 : sal_uInt32 mnTextFlags;
1201 :
1202 1218 : explicit ImplPPTTextObj( PptSlidePersistEntry& rPersistEntry ) : mrPersistEntry ( rPersistEntry ) {};
1203 : };
1204 :
1205 : class MSFILTER_DLLPUBLIC PPTTextObj
1206 : {
1207 : ImplPPTTextObj* mpImplTextObj;
1208 : void ImplClear();
1209 :
1210 : PPTTextObj(){};
1211 : public:
1212 : PPTTextObj(
1213 : SvStream& rSt,
1214 : SdrPowerPointImport&,
1215 : PptSlidePersistEntry&,
1216 : DffObjData*
1217 : );
1218 : PPTTextObj( PPTTextObj& rTextObj );
1219 : ~PPTTextObj();
1220 :
1221 814 : sal_uInt32 GetCurrentIndex() const { return mpImplTextObj->mnCurrentObject; };
1222 1986 : sal_uInt32 Count() const { return mpImplTextObj->mnParagraphCount; };
1223 : PPTParagraphObj* First();
1224 : PPTParagraphObj* Next();
1225 71 : MSO_SPT GetShapeType() const { return mpImplTextObj->meShapeType; };
1226 3544 : sal_uInt32 GetInstance() const { return mpImplTextObj->mnInstance; };
1227 30 : void SetInstance( sal_uInt16 nInstance )
1228 30 : { mpImplTextObj->mnInstance = nInstance; }
1229 :
1230 1885 : sal_uInt32 GetDestinationInstance() const
1231 1885 : { return mpImplTextObj->mnDestinationInstance; }
1232 :
1233 1038 : void SetDestinationInstance( sal_uInt16 nInstance )
1234 1038 : { mpImplTextObj->mnDestinationInstance = nInstance; }
1235 :
1236 3718 : PptOEPlaceholderAtom* GetOEPlaceHolderAtom() const { return mpImplTextObj->mpPlaceHolderAtom; }
1237 644 : sal_uInt32 GetTextFlags() const { return mpImplTextObj->mnTextFlags; }
1238 634 : void SetVertical( sal_Bool bVertical )
1239 : {
1240 634 : if ( bVertical )
1241 0 : mpImplTextObj->mnTextFlags |= PPT_TEXTOBJ_FLAGS_VERTICAL;
1242 : else
1243 634 : mpImplTextObj->mnTextFlags &= ~PPT_TEXTOBJ_FLAGS_VERTICAL;
1244 634 : }
1245 613 : sal_Bool GetVertical() const
1246 613 : { return ( mpImplTextObj->mnTextFlags & PPT_TEXTOBJ_FLAGS_VERTICAL ) != 0; }
1247 :
1248 : const SfxItemSet* GetBackground() const;
1249 :
1250 : PPTTextObj& operator=( PPTTextObj& rTextObj );
1251 : };
1252 :
1253 0 : class PPTConvertOCXControls : public SvxMSConvertOCXControls
1254 : {
1255 : virtual const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > & GetDrawPage();
1256 : PptPageKind ePageKind;
1257 : const SdrPowerPointImport* mpPPTImporter;
1258 : com::sun::star::uno::Reference< com::sun::star::io::XInputStream > mxInStrm;
1259 : public :
1260 :
1261 0 : PPTConvertOCXControls( const SdrPowerPointImport* pPPTImporter, com::sun::star::uno::Reference< com::sun::star::io::XInputStream >& rxInStrm, const com::sun::star::uno::Reference< com::sun::star::frame::XModel >& rxModel, PptPageKind ePKind ) :
1262 : SvxMSConvertOCXControls ( rxModel ),
1263 : ePageKind ( ePKind ),
1264 : mpPPTImporter ( pPPTImporter ),
1265 0 : mxInStrm ( rxInStrm )
1266 0 : {};
1267 : virtual sal_Bool ReadOCXStream( SotStorageRef& rSrc1,
1268 : com::sun::star::uno::Reference<
1269 : com::sun::star::drawing::XShape > *pShapeRef=0,
1270 : sal_Bool bFloatingCtrl=sal_False );
1271 : virtual sal_Bool InsertControl(
1272 : const com::sun::star::uno::Reference< com::sun::star::form::XFormComponent > &rFComp,
1273 : const com::sun::star::awt::Size& rSize,
1274 : com::sun::star::uno::Reference< com::sun::star::drawing::XShape > *pShape,
1275 : sal_Bool bFloatingCtrl
1276 : );
1277 : };
1278 :
1279 : // Powerpoint Recordtypen
1280 : #define PPT_PST_Unknown 0
1281 : #define PPT_PST_SubContainerCompleted 1
1282 : #define PPT_PST_IRRAtom 2
1283 : #define PPT_PST_PSS 3
1284 : #define PPT_PST_SubContainerException 4
1285 : #define PPT_PST_ClientSignal1 6
1286 : #define PPT_PST_ClientSignal2 7
1287 : #define PPT_PST_PowerPointStateInfoAtom 10
1288 : #define PPT_PST_Document 1000
1289 : #define PPT_PST_DocumentAtom 1001
1290 : #define PPT_PST_EndDocument 1002
1291 : #define PPT_PST_SlidePersist 1003
1292 : #define PPT_PST_SlideBase 1004
1293 : #define PPT_PST_SlideBaseAtom 1005
1294 : #define PPT_PST_Slide 1006
1295 : #define PPT_PST_SlideAtom 1007
1296 : #define PPT_PST_Notes 1008
1297 : #define PPT_PST_NotesAtom 1009
1298 : #define PPT_PST_Environment 1010
1299 : #define PPT_PST_SlidePersistAtom 1011
1300 : #define PPT_PST_Scheme 1012
1301 : #define PPT_PST_SchemeAtom 1013
1302 : #define PPT_PST_DocViewInfo 1014
1303 : #define PPT_PST_SslideLayoutAtom 1015
1304 : #define PPT_PST_MainMaster 1016
1305 : #define PPT_PST_SSSlideInfoAtom 1017
1306 : #define PPT_PST_SlideViewInfo 1018
1307 : #define PPT_PST_GuideAtom 1019
1308 : #define PPT_PST_ViewInfo 1020
1309 : #define PPT_PST_ViewInfoAtom 1021
1310 : #define PPT_PST_SlideViewInfoAtom 1022
1311 : #define PPT_PST_VBAInfo 1023
1312 : #define PPT_PST_VBAInfoAtom 1024
1313 : #define PPT_PST_SSDocInfoAtom 1025
1314 : #define PPT_PST_Summary 1026
1315 : #define PPT_PST_Texture 1027
1316 : #define PPT_PST_VBASlideInfo 1028
1317 : #define PPT_PST_VBASlideInfoAtom 1029
1318 : #define PPT_PST_DocRoutingSlip 1030
1319 : #define PPT_PST_OutlineViewInfo 1031
1320 : #define PPT_PST_SorterViewInfo 1032
1321 : #define PPT_PST_ExObjList 1033
1322 : #define PPT_PST_ExObjListAtom 1034
1323 : #define PPT_PST_PPDrawingGroup 1035
1324 : #define PPT_PST_PPDrawing 1036
1325 : #define PPT_PST_NewlyAddedAtomByXP1037 1037
1326 : #define PPT_PST_NamedShows 1040
1327 : #define PPT_PST_NamedShow 1041
1328 : #define PPT_PST_NamedShowSlides 1042
1329 : #define PPT_PST_List 2000
1330 : #define PPT_PST_FontCollection 2005
1331 : #define PPT_PST_ListPlaceholder 2017
1332 : #define PPT_PST_BookmarkCollection 2019
1333 : #define PPT_PST_SoundCollection 2020
1334 : #define PPT_PST_SoundCollAtom 2021
1335 : #define PPT_PST_Sound 2022
1336 : #define PPT_PST_SoundData 2023
1337 : #define PPT_PST_BookmarkSeedAtom 2025
1338 : #define PPT_PST_GuideList 2026
1339 : #define PPT_PST_RunArray 2028
1340 : #define PPT_PST_RunArrayAtom 2029
1341 : #define PPT_PST_ArrayElementAtom 2030
1342 : #define PPT_PST_Int4ArrayAtom 2031
1343 : #define PPT_PST_ColorSchemeAtom 2032
1344 :
1345 : // these atoms first was seen in ppt2000 in a private Tag atom
1346 : #define PPT_PST_ExtendedBuGraContainer 2040 // consist of 4041
1347 : #define PPT_PST_ExtendedBuGraAtom 2041 // the instance of this atom indices the current graphic
1348 :
1349 : #define PPT_PST_OEShape 3008
1350 : #define PPT_PST_ExObjRefAtom 3009
1351 : #define PPT_PST_OEPlaceholderAtom 3011
1352 : #define PPT_PST_GrColor 3020
1353 : #define PPT_PST_GrectAtom 3025
1354 : #define PPT_PST_GratioAtom 3031
1355 : #define PPT_PST_Gscaling 3032
1356 : #define PPT_PST_GpointAtom 3034
1357 : #define PPT_PST_OEShapeAtom 3035
1358 : #define PPT_PST_OutlineTextRefAtom 3998
1359 : #define PPT_PST_TextHeaderAtom 3999
1360 : #define PPT_PST_TextCharsAtom 4000
1361 : #define PPT_PST_StyleTextPropAtom 4001
1362 : #define PPT_PST_BaseTextPropAtom 4002
1363 : #define PPT_PST_TxMasterStyleAtom 4003
1364 : #define PPT_PST_TxCFStyleAtom 4004
1365 : #define PPT_PST_TxPFStyleAtom 4005
1366 : #define PPT_PST_TextRulerAtom 4006
1367 : #define PPT_PST_TextBookmarkAtom 4007
1368 : #define PPT_PST_TextBytesAtom 4008
1369 : #define PPT_PST_TxSIStyleAtom 4009
1370 : #define PPT_PST_TextSpecInfoAtom 4010
1371 : #define PPT_PST_DefaultRulerAtom 4011
1372 :
1373 : // these atoms first was seen in ppt2000 in a private Tag atom
1374 : #define PPT_PST_ExtendedParagraphAtom 4012
1375 : #define PPT_PST_ExtendedParagraphMasterAtom 4013
1376 : #define PPT_PST_ExtendedPresRuleContainer 4014 // consist of 4012, 4015,
1377 : #define PPT_PST_ExtendedParagraphHeaderAtom 4015 // the instance of this atom indices the current presobj
1378 : // the first sal_uInt32 in this atom indices the current slideId
1379 : #define PPT_PST_NewlyAddedAtom4016 4016
1380 :
1381 : #define PPT_PST_FontEntityAtom 4023
1382 : #define PPT_PST_FontEmbedData 4024
1383 : #define PPT_PST_TypeFace 4025
1384 : #define PPT_PST_CString 4026
1385 : #define PPT_PST_ExternalObject 4027
1386 : #define PPT_PST_MetaFile 4033
1387 : #define PPT_PST_ExOleObj 4034
1388 : #define PPT_PST_ExOleObjAtom 4035
1389 : #define PPT_PST_ExPlainLinkAtom 4036
1390 : #define PPT_PST_CorePict 4037
1391 : #define PPT_PST_CorePictAtom 4038
1392 : #define PPT_PST_ExPlainAtom 4039
1393 : #define PPT_PST_SrKinsoku 4040
1394 : #define PPT_PST_Handout 4041
1395 : #define PPT_PST_ExEmbed 4044
1396 : #define PPT_PST_ExEmbedAtom 4045
1397 : #define PPT_PST_ExLink 4046
1398 : #define PPT_PST_ExLinkAtom_old 4047
1399 : #define PPT_PST_BookmarkEntityAtom 4048
1400 : #define PPT_PST_ExLinkAtom 4049
1401 : #define PPT_PST_SrKinsokuAtom 4050
1402 : #define PPT_PST_ExHyperlinkAtom 4051
1403 : #define PPT_PST_ExPlain 4053
1404 : #define PPT_PST_ExPlainLink 4054
1405 : #define PPT_PST_ExHyperlink 4055
1406 : #define PPT_PST_SlideNumberMCAtom 4056
1407 : #define PPT_PST_HeadersFooters 4057
1408 : #define PPT_PST_HeadersFootersAtom 4058
1409 : #define PPT_PST_RecolorEntryAtom 4062
1410 : #define PPT_PST_TxInteractiveInfoAtom 4063
1411 : #define PPT_PST_EmFormatAtom 4065
1412 : #define PPT_PST_CharFormatAtom 4066
1413 : #define PPT_PST_ParaFormatAtom 4067
1414 : #define PPT_PST_MasterText 4068
1415 : #define PPT_PST_RecolorInfoAtom 4071
1416 : #define PPT_PST_ExQuickTime 4073
1417 : #define PPT_PST_ExQuickTimeMovie 4074
1418 : #define PPT_PST_ExQuickTimeMovieData 4075
1419 : #define PPT_PST_ExSubscription 4076
1420 : #define PPT_PST_ExSubscriptionSection 4077
1421 : #define PPT_PST_ExControl 4078
1422 : #define PPT_PST_ExControlAtom 4091
1423 : #define PPT_PST_SlideListWithText 4080
1424 : #define PPT_PST_AnimationInfoAtom 4081
1425 : #define PPT_PST_InteractiveInfo 4082
1426 : #define PPT_PST_InteractiveInfoAtom 4083
1427 : #define PPT_PST_SlideList 4084
1428 : #define PPT_PST_UserEditAtom 4085
1429 : #define PPT_PST_CurrentUserAtom 4086
1430 : #define PPT_PST_DateTimeMCAtom 4087
1431 : #define PPT_PST_GenericDateMCAtom 4088
1432 : #define PPT_PST_HeaderMCAtom 4089
1433 : #define PPT_PST_FooterMCAtom 4090
1434 : #define PPT_PST_ExMediaAtom 4100
1435 : #define PPT_PST_ExVideo 4101
1436 : #define PPT_PST_ExAviMovie 4102
1437 : #define PPT_PST_ExMCIMovie 4103
1438 : #define PPT_PST_ExMIDIAudio 4109
1439 : #define PPT_PST_ExCDAudio 4110
1440 : #define PPT_PST_ExWAVAudioEmbedded 4111
1441 : #define PPT_PST_ExWAVAudioLink 4112
1442 : #define PPT_PST_ExOleObjStg 4113
1443 : #define PPT_PST_ExCDAudioAtom 4114
1444 : #define PPT_PST_ExWAVAudioEmbeddedAtom 4115
1445 : #define PPT_PST_AnimationInfo 4116
1446 : #define PPT_PST_RTFDateTimeMCAtom 4117
1447 : #define PPT_PST_ProgTags 5000
1448 : #define PPT_PST_ProgStringTag 5001
1449 : #define PPT_PST_ProgBinaryTag 5002
1450 : #define PPT_PST_BinaryTagData 5003
1451 : #define PPT_PST_PrintOptions 6000
1452 : #define PPT_PST_PersistPtrFullBlock 6001
1453 : #define PPT_PST_PersistPtrIncrementalBlock 6002
1454 :
1455 : // these atoms first was seen in ppt2000 in a private Tag atom
1456 : #define PPT_PST_NewlyAddedAtomByPPT2000_6010 6010
1457 : #define PPT_PST_NewlyAddedAtomByPPT2000_6011 6011
1458 :
1459 : #define PPT_PST_RulerIndentAtom 10000
1460 : #define PPT_PST_GscalingAtom 10001
1461 : #define PPT_PST_GrColorAtom 10002
1462 : #define PPT_PST_GLPointAtom 10003
1463 : #define PPT_PST_GlineAtom 10004
1464 :
1465 : #define PPT_PST_NewlyAddedAtomByXP11008 11008
1466 : #define PPT_PST_NewlyAddedAtomByXP11010 11010
1467 : #define PPT_PST_Comment10 12000
1468 : #define PPT_PST_CommentAtom10 12001
1469 : #define PPT_PST_NewlyAddedAtomByXP12004 12004
1470 : #define PPT_PST_NewlyAddedAtomByXP12010 12010
1471 : #define PPT_PST_NewlyAddedAtomByXP12011 12011
1472 : #define PPT_PST_NewlyAddedAtomByXP14001 14001
1473 :
1474 : // Attribute fuer PptTextStyleSheet
1475 : #define PPT_ParaAttr_BulletOn 0 //00000001
1476 : #define PPT_ParaAttr_BuHardFont 1 //00000002
1477 : #define PPT_ParaAttr_BuHardColor 2 //00000004
1478 : #define PPT_ParaAttr_BuHardHeight 3 //00000008
1479 : #define PPT_ParaAttr_BulletFont 4 //00000010
1480 : #define PPT_ParaAttr_BulletColor 5 //00000020
1481 : #define PPT_ParaAttr_BulletHeight 6 //00000040
1482 : #define PPT_ParaAttr_BulletChar 7 //00000080
1483 : #define PPT_ParaAttr_DontKnow1 8 //00000100
1484 : #define PPT_ParaAttr_DontKnow2 9 //00000200
1485 : #define PPT_ParaAttr_DontKnow3 10 //00000400
1486 : #define PPT_ParaAttr_Adjust 11 //00000800 0000=Left, 0001=Center, 0002=Right, 0003=Block
1487 : #define PPT_ParaAttr_LineFeed 12 //00001000
1488 : #define PPT_ParaAttr_UpperDist 13 //00002000 ist bei Textframes default immer auf 0032 gesetzt
1489 : #define PPT_ParaAttr_LowerDist 14 //00004000
1490 : #define PPT_ParaAttr_TextOfs 15 //00008000
1491 : #define PPT_ParaAttr_BulletOfs 16 //00010000
1492 : #define PPT_ParaAttr_DefaultTab 17 //00020000
1493 : #define PPT_ParaAttr_AsianLB_1 18
1494 : #define PPT_ParaAttr_AsianLB_2 19
1495 : #define PPT_ParaAttr_AsianLB_3 20
1496 : #define PPT_ParaAttr_BiDi 21 //00200000
1497 :
1498 : #define PPT_CharAttr_Bold 0 //00000001
1499 : #define PPT_CharAttr_Italic 1 //00000002
1500 : #define PPT_CharAttr_Underline 2 //00000004
1501 : #define PPT_CharAttr_Shadow 4 //00000010
1502 : #define PPT_CharAttr_Strikeout 8 //00000100
1503 : #define PPT_CharAttr_Embossed 9 //00000200
1504 : #define PPT_CharAttr_ResetNumbering 10 //00000400
1505 : #define PPT_CharAttr_EnableNumbering1 11 //00000800
1506 : #define PPT_CharAttr_EnableNumbering2 12 //00001000
1507 : #define PPT_CharAttr_Font 16 //00010000
1508 : #define PPT_CharAttr_AsianOrComplexFont 21 //00200000
1509 : #define PPT_CharAttr_ANSITypeface 22 //00400000
1510 : #define PPT_CharAttr_Symbol 23 //00800000
1511 : #define PPT_CharAttr_FontHeight 17 //00020000
1512 : #define PPT_CharAttr_FontColor 18 //00040000
1513 : #define PPT_CharAttr_Escapement 19 //00080000
1514 :
1515 : // Werte fuer PptSlideLayoutAtom.eLayout
1516 : #define PPT_LAYOUT_TITLESLIDE 0 // The slide is a title slide
1517 : #define PPT_LAYOUT_TITLEANDBODYSLIDE 1 // Title and body slide
1518 : #define PPT_LAYOUT_TITLEMASTERSLIDE 2 // Title master slide
1519 : #define PPT_LAYOUT_MASTERSLIDE 3 // Master slide layout
1520 : #define PPT_LAYOUT_MASTERNOTES 4 // Master notes layout
1521 : #define PPT_LAYOUT_NOTESTITLEBODY 5 // Notes title/body layout
1522 : #define PPT_LAYOUT_HANDOUTLAYOUT 6 // Handout layout, therefore it doesn't have placeholders except header, footer, and date
1523 : #define PPT_LAYOUT_ONLYTITLE 7 // Only title placeholder
1524 : #define PPT_LAYOUT_2COLUMNSANDTITLE 8 // Body of the slide has 2 columns and a title
1525 : #define PPT_LAYOUT_2ROWSANDTITLE 9 // Slide's body has 2 rows and a title
1526 : #define PPT_LAYOUT_RIGHTCOLUMN2ROWS 10 // Body contains 2 columns, right column has 2 rows
1527 : #define PPT_LAYOUT_LEFTCOLUMN2ROWS 11 // Body contains 2 columns, left column has 2 rows
1528 : #define PPT_LAYOUT_BOTTOMROW2COLUMNS 12 // Body contains 2 rows, bottom row has 2 columns
1529 : #define PPT_LAYOUT_TOPROW2COLUMN 13 // Body contains 2 rows, top row has 2 columns
1530 : #define PPT_LAYOUT_4OBJECTS 14 // 4 objects
1531 : #define PPT_LAYOUT_BIGOBJECT 15 // Big object
1532 : #define PPT_LAYOUT_BLANCSLIDE 16 // Blank slide
1533 : #define PPT_LAYOUT_TITLERIGHTBODYLEFT 17 // Vertical title on the right, body on the left
1534 : #define PPT_LAYOUT_TITLERIGHT2BODIESLEFT 18 // Vertical title on the right, body on the left split into 2 rows
1535 :
1536 : // the following table describes the placeholder id's (values from reality followed by values taken from the documentation)
1537 : #define PPT_PLACEHOLDER_NONE 0 // 0 None
1538 : #define PPT_PLACEHOLDER_MASTERTITLE 1 // 1 Master title
1539 : #define PPT_PLACEHOLDER_MASTERBODY 2 // 2 Master body
1540 : #define PPT_PLACEHOLDER_MASTERCENTEREDTITLE 3 // 3 Master centered title
1541 : #define PPT_PLACEHOLDER_MASTERSUBTITLE 4 // 10 Master subtitle
1542 : #define PPT_PLACEHOLDER_MASTERNOTESSLIDEIMAGE 5 // 4 Master notes slide image
1543 : #define PPT_PLACEHOLDER_MASTERNOTESBODYIMAGE 6 // 5 Master notes body image
1544 : #define PPT_PLACEHOLDER_MASTERDATE 7 // 6 Master date
1545 : #define PPT_PLACEHOLDER_MASTERSLIDENUMBER 8 // 7 Master slide number
1546 : #define PPT_PLACEHOLDER_MASTERFOOTER 9 // 8 Master footer
1547 : #define PPT_PLACEHOLDER_MASTERHEADER 10 // 9 Master header
1548 : #define PPT_PLACEHOLDER_GENERICTEXTOBJECT // 11 Generic text object
1549 : #define PPT_PLACEHOLDER_TITLE 13 // 12 Title
1550 : #define PPT_PLACEHOLDER_BODY 14 // 13 Body
1551 : #define PPT_PLACEHOLDER_NOTESBODY 12 // 14 Notes body
1552 : #define PPT_PLACEHOLDER_CENTEREDTITLE 15 // 15 Centered title
1553 : #define PPT_PLACEHOLDER_SUBTITLE 16 // 16 Subtitle
1554 : #define PPT_PLACEHOLDER_VERTICALTEXTTITLE 17 // 17 Vertical text title
1555 : #define PPT_PLACEHOLDER_VERTICALTEXTBODY 18 // 18 Vertical text body
1556 : #define PPT_PLACEHOLDER_NOTESSLIDEIMAGE 11 // 19 Notes slide image
1557 : #define PPT_PLACEHOLDER_OBJECT 19 // 20 Object (no matter the size)
1558 : #define PPT_PLACEHOLDER_GRAPH 20 // 21 Graph
1559 : #define PPT_PLACEHOLDER_TABLE 21 // 22 Table
1560 : #define PPT_PLACEHOLDER_CLIPART 22 // 23 Clip Art
1561 : #define PPT_PLACEHOLDER_ORGANISZATIONCHART 23 // 24 Organization Chart
1562 : #define PPT_PLACEHOLDER_MEDIACLIP 24 // 25 Media Clip
1563 :
1564 : #endif //_SVDFPPT_HXX
1565 :
1566 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|