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