diff options
Diffstat (limited to 'filter/inc/filter/msfilter/svdfppt.hxx')
-rw-r--r-- | filter/inc/filter/msfilter/svdfppt.hxx | 1443 |
1 files changed, 1443 insertions, 0 deletions
diff --git a/filter/inc/filter/msfilter/svdfppt.hxx b/filter/inc/filter/msfilter/svdfppt.hxx new file mode 100644 index 000000000000..8d9b85c7301f --- /dev/null +++ b/filter/inc/filter/msfilter/svdfppt.hxx @@ -0,0 +1,1443 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: svdfppt.hxx,v $ + * $Revision: 1.7.6.1 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SVDFPPT_HXX +#define _SVDFPPT_HXX + +#ifndef SVX_LIGHT + +#include <tools/solar.h> +#include <svl/svarray.hxx> +#include <tools/string.hxx> +#include <tools/gen.hxx> +#include <tools/color.hxx> +#include <svx/svdobj.hxx> +#include <svx/numitem.hxx> +#include <svx/editdata.hxx> +#include <filter/msfilter/msdffimp.hxx> // Escher-Grafikimport +#include <filter/msfilter/msocximex.hxx> +#include <filter/msfilter/msfiltertracer.hxx> +#include <svx/eeitem.hxx> +#define ITEMID_FIELD EE_FEATURE_FIELD +#include <svx/flditem.hxx> +#undef ITEMID_FIELD +#include "filter/msfilter/msfilterdllapi.h" +#include <vcl/font.hxx> +#include <vector> +#include <boost/optional.hpp> +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SdrModel; +class SdPage; +class SdrPage; +class SdrObject; +class SvStream; +class Polygon; +class PolyPolygon; +class SfxItemSet; +class Outliner; +class Graphic; +class SvxMSDffManager; +class PptTextMetaCharList; +class PPTTextObj; +class DffRecordHeader; +struct PptCharAttrSet; +class SvxBulletItem; + +#define PPT_IMPORTFLAGS_NO_TEXT_ASSERT 1 + +struct MSFILTER_DLLPUBLIC PptCurrentUserAtom +{ + sal_uInt32 nMagic; + sal_uInt32 nCurrentUserEdit; + sal_uInt16 nDocFileVersion; + sal_uInt8 nMajorVersion; + sal_uInt8 nMinorVersion; + String aCurrentUser; + +public: + + PptCurrentUserAtom() : nMagic ( 0 ), + nCurrentUserEdit ( 0 ), + nDocFileVersion ( 0 ), + nMajorVersion ( 0 ), + nMinorVersion ( 0 ) {} + + MSFILTER_DLLPUBLIC friend SvStream& operator>>( SvStream& rIn, PptCurrentUserAtom& rAtom ); +}; + +struct MSFILTER_DLLPUBLIC PowerPointImportParam +{ + SvStream& rDocStream; + sal_uInt32 nImportFlags; + MSFilterTracer* pTracer; + PptCurrentUserAtom aCurrentUserAtom; + + PowerPointImportParam( SvStream& rDocStream, sal_uInt32 nImportFlags, MSFilterTracer* pTracer ); +}; + +struct SdHyperlinkEntry +{ + sal_uInt32 nIndex; + sal_Int32 nPrivate1; + sal_Int32 nPrivate2; + sal_Int32 nPrivate3; + sal_Int32 nInfo; + String aTarget; + String aSubAdress; + + sal_Int32 nStartPos; + sal_Int32 nEndPos; + + String aConvSubString; + ESelection aESelection; + sal_Bool bSelection; +}; + +// Hilfsklasse zum Einlesen der PPT InteractiveInfoAtom +struct MSFILTER_DLLPUBLIC PptInteractiveInfoAtom +{ + UINT32 nSoundRef; + UINT32 nExHyperlinkId; + UINT8 nAction; + UINT8 nOleVerb; + UINT8 nJump; + UINT8 nFlags; + UINT8 nHyperlinkType; + + // unknown, da Gesamtgroesse 16 ist + UINT8 nUnknown1; + UINT8 nUnknown2; + UINT8 nUnknown3; + +public: + + MSFILTER_DLLPUBLIC friend SvStream& operator>>( SvStream& rIn, PptInteractiveInfoAtom& rAtom ); +}; + +enum PptPageKind { PPT_MASTERPAGE, PPT_SLIDEPAGE, PPT_NOTEPAGE }; + +enum PptPageFormat +{ PPTPF_SCREEN, // + PPTPF_USLETTER, // 8.5x11" + PPTPF_A4, // 210x297mm + PPTPF_35MMDIA, // DIA + PPTPF_OVERHEAD, // + PPTPF_CUSTOM +}; + +// Werte fuer den ULONG im PPT_PST_TextHeaderAtom +enum PPT_TextHeader +{ + PPTTH_TITLE, + PPTTH_BODY, + PPTTH_NOTES, + PPTTH_NOTUSED, + PPTTH_OTHER, // Text in a Shape + PPTTH_CENTERBODY, // Subtitle in Title-Slide + PPTTH_CENTERTITLE, // Title in Title-Slide + PPTTH_HALFBODY, // Body in two-column slide + PPTTH_QUARTERBODY // Body in four-body slide +}; + +#define TSS_TYPE_PAGETITLE (0) +#define TSS_TYPE_BODY (1) +#define TSS_TYPE_NOTES (2) +#define TSS_TYPE_UNUSED (3) +#define TSS_TYPE_TEXT_IN_SHAPE (4) +#define TSS_TYPE_SUBTITLE (5) +#define TSS_TYPE_TITLE (6) +#define TSS_TYPE_HALFBODY (7) +#define TSS_TYPE_QUARTERBODY (8) + +// Inventor-Id fuer PPT UserData +const UINT32 PPTInventor =UINT32('P')*0x00000001+ + UINT32('P')*0x00000100+ + UINT32('T')*0x00010000+ + UINT32('0')*0x01000000; + +// Object-Ids fuer StarDraw UserData +#define PPT_OBJECTINFO_ID (1) + +struct MSFILTER_DLLPUBLIC PptDocumentAtom +{ + Size aSlidesPageSize; // Seitengroesse der Slides in 576DPI + Size aNotesPageSize; // Seitengroesse der Notes in 576DPI + // RatioAtom erstmal weggelassen + UINT32 nNotesMasterPersist; // 0=nicht vorhanden + UINT32 nHandoutMasterPersist; // 0=nicht vorhanden + UINT16 n1stPageNumber; // Seitennummer des ersten Slides + PptPageFormat eSlidesPageFormat; // Seitenformat der Slides + sal_Bool bEmbeddedTrueType : 1; // TrueType direkt im File? + sal_Bool bTitlePlaceholdersOmitted : 1; + sal_Bool bRightToLeft : 1; + sal_Bool bShowComments : 1; + +public: + + Size GetPageSize( const Size& rSiz ) const; + Size GetSlidesPageSize() const { return GetPageSize( aSlidesPageSize ); } + Size GetNotesPageSize() const { return GetPageSize( aNotesPageSize ); } + + friend SvStream& operator>>( SvStream& rIn, PptDocumentAtom& rAtom ); +}; + +struct PptSlideLayoutAtom +{ + INT32 eLayout; // 0..18 + BYTE aPlaceholderId[ 8 ]; + ULONG aPlacementId[ 8 ]; + +public: + + PptSlideLayoutAtom() { Clear(); } + void Clear(); + + // Das SlideLayoutAtom wird ohne Header eingelesen! + friend SvStream& operator>>( SvStream& rIn, PptSlideLayoutAtom& rAtom ); +}; + +struct PptSlideAtom +{ + PptSlideLayoutAtom aLayout; + UINT32 nMasterId; + UINT32 nNotesId; + UINT16 nFlags; + +public: + + PptSlideAtom() { Clear(); } + void Clear(); + + friend SvStream& operator>>(SvStream& rIn, PptSlideAtom& rAtom); +}; + +struct PptSlidePersistAtom +{ + UINT32 nPsrReference; + UINT32 nFlags; + UINT32 nNumberTexts; + UINT32 nSlideId; + UINT32 nReserved; // we will use nReserved temporarly to set the offset to SSSlideInfoAtom ( if possible ) + +public: + + PptSlidePersistAtom() { Clear(); } + void Clear(); + + friend SvStream& operator>>(SvStream& rIn, PptSlidePersistAtom& rAtom); +}; + +struct PptNotesAtom +{ + UINT32 nSlideId; + UINT16 nFlags; + +public: + + PptNotesAtom() { Clear(); } + void Clear(); + + friend SvStream& operator>>(SvStream& rIn, PptNotesAtom& rAtom); +}; + +struct PptColorSchemeAtom +{ + BYTE aData[32]; + +public: + PptColorSchemeAtom () { Clear(); } + void Clear(); + Color GetColor( USHORT nNum ) const; + + friend SvStream& operator>>(SvStream& rIn, PptColorSchemeAtom& rAtom); +}; + +struct PptFontEntityAtom +{ + String aName; + double fScaling; + sal_uInt8 lfClipPrecision; + sal_uInt8 lfQuality; + + sal_uInt32 nUniqueFontId; // not used anymore + CharSet eCharSet; + FontFamily eFamily; + FontPitch ePitch; + sal_Bool bAvailable; + + friend SvStream& operator>>(SvStream& rIn, PptFontEntityAtom& rAtom); +}; + +class PptFontCollection; +struct PptUserEditAtom +{ + DffRecordHeader aHd; + INT32 nLastSlideID; // ID of last visible slide + UINT32 nVersion; // This is major/minor/build which did the edit + UINT32 nOffsetLastEdit; // File offset of prev PptUserEditAtom + UINT32 nOffsetPersistDirectory; // Offset to PersistPtrs for this file version. + UINT32 nDocumentRef; + UINT32 nMaxPersistWritten; // Gesamtanzahl der Persisteintraege bis hierher. + INT16 eLastViewType; // enum view type + +public: + + PptUserEditAtom() : nOffsetPersistDirectory( 0 ) {} + + friend SvStream& operator>>( SvStream& rIn, PptUserEditAtom& rAtom ); +}; + +struct PptOEPlaceholderAtom +{ + UINT32 nPlacementId; + BYTE nPlaceholderId; + BYTE nPlaceholderSize; // 0=Full size, 1=Half size, 2=Quarter of Slide + +public: + + PptOEPlaceholderAtom() { Clear(); } + void Clear(); + + friend SvStream& operator>>( SvStream& rIn, PptOEPlaceholderAtom& rAtom ); +}; + +struct ProcessData; +struct PPTStyleSheet; +struct HeaderFooterEntry; +struct PptSlidePersistEntry +{ + PptSlidePersistAtom aPersistAtom; + PptSlideAtom aSlideAtom; + PptNotesAtom aNotesAtom; + PptColorSchemeAtom aColorScheme; // each slide includes this colorscheme atom + PPTStyleSheet* pStyleSheet; // stylesheet of this page ( only in masterpages ), since XP supports more than one masterpage + + sal_uInt32 HeaderFooterOfs[ 4 ]; // containing the ofs to the placeholder (only masterpage) + HeaderFooterEntry* pHeaderFooterEntry; + SvxMSDffSolverContainer* pSolverContainer; + sal_uInt32 nSlidePersistStartOffset;// is an array to the end of the SlidePersistAtom of this page, TextHeaderAtom is following + sal_uInt32 nSlidePersistEndOffset; + sal_uInt32 nBackgroundOffset; // fileoffset + sal_uInt32 nDrawingDgId; // valid, if not -1 + sal_uInt32* pPresentationObjects; // if valid, this is a pointer to an array that includes the offsets to the presentation objects + // on this masterpage for each instance ( 0 - 8 ); + SdrObject* pBObj; + sal_Bool bBObjIsTemporary; + + void* pDummy2; + PptPageKind ePageKind; // + + sal_Bool bNotesMaster : 1; // fuer NotesMaster + sal_Bool bHandoutMaster : 1; // fuer HandoutMaster + sal_Bool bStarDrawFiller : 1; // speziell fuer StarDraw +public: + PptSlidePersistEntry(); + ~PptSlidePersistEntry(); + UINT32 GetSlideId() const { return aPersistAtom.nSlideId; } +}; + +SV_DECL_PTRARR_DEL(_PptSlidePersistList,PptSlidePersistEntry*,16,16) + +#define PPTSLIDEPERSIST_ENTRY_NOTFOUND 0xFFFF + +class MSFILTER_DLLPUBLIC PptSlidePersistList: public _PptSlidePersistList +{ + + public: + + USHORT FindPage( UINT32 nId ) const; +}; + +class SfxObjectShell; +struct PPTOleEntry +{ + sal_uInt32 nId; // OleId + sal_uInt32 nPersistPtr; // PersistPtr + sal_uInt32 nRecHdOfs; // points to the record header: ExObjListHd + SfxObjectShell* pShell; + sal_uInt16 nType; // maybe PPT_PST_ExEmbed or PPT_PST_ExControl + sal_uInt32 nAspect; // the aspect of the OLE object + + PPTOleEntry( sal_uInt32 nid, sal_uInt32 nOfs, SfxObjectShell* pSh, sal_uInt16 nT, sal_uInt32 nAsp ) : + nId ( nid ), + nRecHdOfs ( nOfs ), + pShell ( pSh ), + nType ( nT ), + nAspect ( nAsp ) {} +}; + +struct PptExOleObjAtom +{ + UINT32 nAspect; + UINT32 nDummy1; + UINT32 nId; + UINT32 nDummy2; + UINT32 nPersistPtr; + UINT32 nDummy4; + +public: + + friend SvStream& operator>>( SvStream& rIn, PptExOleObjAtom& rAtom ); +}; + +class PPTExtParaProv; +class MSFILTER_DLLPUBLIC SdrEscherImport : public SvxMSDffManager +{ + +protected: + + friend class PPTTextObj; + friend class PPTPortionObj; + friend struct PPTStyleTextPropReader; + friend class ImplSdPPTImport; + + PptDocumentAtom aDocAtom; + DffRecordManager aDocRecManager; // contains all first level container and atoms of the document container + + List aHFMasterList; + List aOleObjectList; // contains PPTOleEntrys + + PptFontCollection* pFonts; + + sal_uInt32 nStreamLen; + sal_uInt16 nTextStylesIndex; + + CharSet eCharSetSystem; + + sal_Bool bWingdingsChecked : 1; + sal_Bool bWingdingsAvailable : 1; + sal_Bool bMonotypeSortsChecked : 1; + sal_Bool bMonotypeSortsAvailable : 1; + sal_Bool bTimesNewRomanChecked : 1; + sal_Bool bTimesNewRomanAvailable : 1; + + sal_Bool ReadString( String& rStr ) const; + // nur fuer PowerPoint-Filter: + virtual const PptSlideLayoutAtom* GetSlideLayoutAtom() const; + void CheckWingdings() const; + void CheckMonotypeSorts() const; + void CheckTimesNewRoman() const; + +public: + + PowerPointImportParam& rImportParam; + + void* pSdrEscherDummy1; + void* pSdrEscherDummy2; + void* pSdrEscherDummy3; + void* pSdrEscherDummy4; + + SdrEscherImport( PowerPointImportParam&, const String& rBaseURL ); + virtual ~SdrEscherImport(); + virtual FASTBOOL GetColorFromPalette( USHORT nNum, Color& rColor ) const; + virtual BOOL SeekToShape( SvStream& rSt, void* pClientData, UINT32 nId ) const; + PptFontEntityAtom* GetFontEnityAtom( UINT32 nNum ) const; + CharSet GetCharSet( UINT32 nNum ) const; + BOOL IsFontAvailable( UINT32 nNum ) const; + void RecolorGraphic( SvStream& rSt, sal_uInt32 nRecLen, Graphic& rGraph ); + using SvxMSDffManager::ReadObjText; + virtual SdrObject* ReadObjText( PPTTextObj* pTextObj, SdrObject* pObj, SdPage* pPage ) const; + virtual SdrObject* ProcessObj( SvStream& rSt, DffObjData& rData, void* pData, Rectangle& rTextRect, SdrObject* pObj ); + virtual void ProcessClientAnchor2( SvStream& rSt, DffRecordHeader& rHd, void* pData, DffObjData& rObj ); + void ImportHeaderFooterContainer( DffRecordHeader& rHeader, HeaderFooterEntry& rEntry ); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#define SD_HEADERFOOTER_DATE 1 +#define SD_HEADERFOOTER_TODAYDATE 2 +#define SD_HEADERFOOTER_USERDATE 4 +#define SD_HEADERFOOTER_SLIDENUMBER 8 +#define SD_HEADERFOOTER_HEADER 16 +#define SD_HEADERFOOTER_FOOTER 32 + +class SvxFieldItem; +struct MSFILTER_DLLPUBLIC PPTFieldEntry +{ + UINT16 nPos; + UINT16 nTextRangeEnd; + SvxFieldItem* pField1; + SvxFieldItem* pField2; + String* pString; + + PPTFieldEntry() : nPos( 0 ), nTextRangeEnd( 0 ), pField1( NULL ), pField2( NULL ), pString( NULL ) {}; + ~PPTFieldEntry(); + + void SetDateTime( UINT32 nType ); + + // converting PPT date time format: + static void GetDateTime( const sal_uInt32 nVal, SvxDateFormat& eDateFormat, SvxTimeFormat& eTimeFormat ); +}; + +struct MSFILTER_DLLPUBLIC HeaderFooterEntry +{ + const PptSlidePersistEntry* pMasterPersist; + String pPlaceholder[ 4 ]; + sal_uInt32 nAtom; + + sal_uInt32 GetMaskForInstance( UINT32 nInstance ); + sal_uInt32 IsToDisplay( UINT32 nInstance ); + sal_uInt32 NeedToImportInstance( const sal_uInt32 nInstance, const PptSlidePersistEntry& rSlidePersist ); + + HeaderFooterEntry( const PptSlidePersistEntry* pMaster = NULL ); + ~HeaderFooterEntry(); +}; + +struct ProcessData +{ + PptSlidePersistEntry& rPersistEntry; + SdPage* pPage; + List* pBackgroundColoredObjects; + sal_uInt32* pTableRowProperties; + + ProcessData( PptSlidePersistEntry& rP, SdPage* pP ) : + rPersistEntry ( rP ), + pPage ( pP ), + pBackgroundColoredObjects ( NULL ), + pTableRowProperties ( NULL ) {}; + ~ProcessData() { delete pBackgroundColoredObjects; delete[] pTableRowProperties; }; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SdrTextObj; +class SfxObjectShell; +class MSFILTER_DLLPUBLIC SdrPowerPointImport : public SdrEscherImport +{ + +protected: + + friend class PPTTextObj; + friend class PPTExtParaProv; + friend struct PPTStyleSheet; + friend class PPTNumberFormatCreator; + + BOOL bOk; + PptUserEditAtom aUserEditAtom; + PptColorSchemeAtom aPageColors; + List aHyperList; + UINT32* pPersistPtr; + ULONG nPersistPtrAnz; + + const PPTStyleSheet* pPPTStyleSheet; // this is the current stylesheet; + const PPTStyleSheet* pDefaultSheet; // this is a sheet we are using if no masterpage can be found, but that should + // never happen just preventing a crash + PptSlidePersistList* pMasterPages; + PptSlidePersistList* pSlidePages; + PptSlidePersistList* pNotePages; + USHORT nAktPageNum; + ULONG nDocStreamPos; + USHORT nPageColorsNum; + PptPageKind ePageColorsKind; + PptPageKind eAktPageKind; + +protected: + + sal_Bool SeekToAktPage(DffRecordHeader* pRecHd=NULL) const; + sal_Bool SeekToDocument(DffRecordHeader* pRecHd=NULL) const; + sal_Bool SeekToContentOfProgTag( sal_Int32 nVersion, SvStream& rSt, const DffRecordHeader& rProgTagBinaryDataHd, + DffRecordHeader& rContentHd ); + virtual SdrObject* ApplyTextObj( PPTTextObj* pTextObj, SdrTextObj* pText, SdPage* pPage, SfxStyleSheet*, SfxStyleSheet** ) const; + using SdrEscherImport::ReadObjText; + virtual SdrObject* ReadObjText( PPTTextObj* pTextObj, SdrObject* pObj, SdPage* pPage ) const; + // --> OD 2004-12-14 #i32596# - new parameter <_nCalledByGroup>, which + // indicates, if the OLE object is imported inside a group object. + virtual SdrObject* ImportOLE( long nOLEId, + const Graphic& rGraf, + const Rectangle& rBoundRect, + const Rectangle& rVisArea, + const int _nCalledByGroup, + sal_Int64 nAspect ) const; + // <-- + SvMemoryStream* ImportExOleObjStg( UINT32 nPersistPtr, UINT32& nOleId ) const; + SdrPage* MakeBlancPage(sal_Bool bMaster) const; + sal_Bool ReadFontCollection(); + sal_Bool ForceFontCollection() const { return pFonts!=NULL?TRUE:((SdrPowerPointImport*)this)->ReadFontCollection(); } + PptSlidePersistList* GetPageList(PptPageKind ePageKind) const; + UINT32 GetAktPageId(); + UINT32 GetMasterPageId(USHORT nPageNum, PptPageKind ePageKind) const; + UINT32 GetNotesPageId(USHORT nPageNum ) const; + SdrOutliner* GetDrawOutliner( SdrTextObj* pSdrText ) const; + void SeekOle( SfxObjectShell* pShell, sal_uInt32 nFilterOptions ); + +public: + SdrPowerPointImport( PowerPointImportParam&, const String& rBaseURL ); + virtual ~SdrPowerPointImport(); + USHORT GetPageCount( PptPageKind eKind = PPT_SLIDEPAGE ) const; + void SetPageNum( USHORT nPageNum, PptPageKind = PPT_SLIDEPAGE ); + USHORT GetPageNum() const { return nAktPageNum; } + PptPageKind GetPageKind() const { return eAktPageKind; } + Size GetPageSize() const; + SdrObject* ImportPageBackgroundObject( const SdrPage& rPage, sal_uInt32& nBgFileOffset, sal_Bool bForce ); + sal_Bool IsNoteOrHandout( USHORT nPageNum, PptPageKind ePageKind ) const; + sal_Bool HasMasterPage( USHORT nPageNum, PptPageKind ePageKind = PPT_SLIDEPAGE ) const; + USHORT GetMasterPageIndex( USHORT nPageNum, PptPageKind ePageKind = PPT_SLIDEPAGE ) const; + + void ImportPage( SdrPage* pPage, const PptSlidePersistEntry* pMasterPersist = NULL ); + virtual FASTBOOL GetColorFromPalette(USHORT nNum, Color& rColor) const; + virtual BOOL SeekToShape( SvStream& rSt, void* pClientData, UINT32 nId ) const; + sal_Unicode PPTSubstitute( UINT16 nFont, sal_Unicode nChar, + UINT32& nMappedFontId, Font& rFont, char nDefault ) const; + const PptDocumentAtom& GetDocumentAtom() const { return aDocAtom; } + virtual const PptSlideLayoutAtom* GetSlideLayoutAtom() const; + SdrObject* CreateTable( SdrObject* pGroupObject, sal_uInt32* pTableArry, SvxMSDffSolverContainer* ); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +struct PPTTextCharacterStyleAtomInterpreter +{ + sal_uInt16 nFlags1; + sal_uInt16 nFlags2; + sal_uInt16 nFlags3; + sal_Int32 n1; + sal_uInt16 nFontHeight; + sal_Int32 nFontColor; + + PPTTextCharacterStyleAtomInterpreter(); + ~PPTTextCharacterStyleAtomInterpreter(); + + sal_Bool Read( SvStream& rIn, const DffRecordHeader& rRecHd ); + + sal_uInt32 GetColor( sal_uInt32 nDefault ); +}; + +struct PPTTextParagraphStyleAtomInterpreter +{ + sal_Bool bValid; + sal_Bool bForbiddenRules; + sal_Bool bHangingPunctuation; + sal_Bool bLatinTextWrap; + + PPTTextParagraphStyleAtomInterpreter(); + ~PPTTextParagraphStyleAtomInterpreter(); + + sal_Bool Read( SvStream& rIn, const DffRecordHeader& rRecHd ); +}; + +struct PPTTextSpecInfo +{ + sal_uInt32 nCharIdx; + sal_uInt16 nLanguage[ 3 ]; + sal_uInt16 nDontKnow; + + PPTTextSpecInfo( sal_uInt32 nCharIdx ); + ~PPTTextSpecInfo(); +}; + +struct PPTTextSpecInfoAtomInterpreter +{ + sal_Bool bValid; + List aList; + + PPTTextSpecInfoAtomInterpreter(); + ~PPTTextSpecInfoAtomInterpreter(); + + sal_Bool Read( SvStream& rIn, const DffRecordHeader& rRecHd, + sal_uInt16 nRecordType, const PPTTextSpecInfo* pTextSpecDefault = NULL ); + +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#define PPT_STYLESHEETENTRYS 9 + +struct PPTExtParaLevel +{ + sal_uInt32 mnExtParagraphMask; + sal_uInt16 mnBuBlip; + sal_uInt16 mnHasAnm; + sal_uInt32 mnAnmScheme; + sal_uInt32 mpfPP10Ext; + sal_uInt32 mnExtCharacterMask; + sal_uInt32 mcfPP10Ext; + sal_Bool mbSet; + + PPTExtParaLevel(); + friend SvStream& operator>>( SvStream& rIn, PPTExtParaLevel& rL ); +}; + +struct PPTExtParaSheet +{ + PPTExtParaLevel aExtParaLevel[ 5 ]; +}; + +struct PPTBuGraEntry +{ + UINT32 nInstance; + Graphic aBuGra; + + PPTBuGraEntry( Graphic& rGraphic, UINT32 nInstance ); +}; + +class PPTExtParaProv +{ + List aBuGraList; + + public : + BOOL bStyles; + BOOL bGraphics; + DffRecordManager aExtendedPresRules; + + PPTExtParaSheet aExtParaSheet[ PPT_STYLESHEETENTRYS ]; + + BOOL GetGraphic( UINT32 nInstance, Graphic& rGraphic ) const; + + PPTExtParaProv( SdrPowerPointImport& rManager, SvStream& rSt, + const DffRecordHeader* pMainMasterHd ); + ~PPTExtParaProv(); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +struct PPTCharLevel +{ + Color mnFontColorInStyleSheet; + sal_uInt32 mnFontColor; + sal_uInt16 mnFlags; + sal_uInt16 mnFont; + sal_uInt16 mnAsianOrComplexFont; + sal_uInt16 mnFontHeight; + sal_uInt16 mnEscapement; +}; + +struct PPTCharSheet +{ + PPTCharLevel maCharLevel[ 5 ]; + + PPTCharSheet( sal_uInt32 nInstance ); + PPTCharSheet( const PPTCharSheet& rCharSheet ); + + void Read( SvStream& rIn, sal_Bool bMasterStyle, sal_uInt32 nLevel, sal_Bool bFirst ); +}; + +struct PPTParaLevel +{ + sal_uInt16 mnBuFlags; + sal_uInt16 mnBulletChar; + sal_uInt16 mnBulletFont; + sal_uInt16 mnBulletHeight; + sal_uInt32 mnBulletColor; + + sal_uInt16 mnAdjust; + sal_uInt16 mnLineFeed; + sal_uInt16 mnUpperDist; + sal_uInt16 mnLowerDist; + sal_uInt16 mnTextOfs; + sal_uInt16 mnBulletOfs; + sal_uInt16 mnDefaultTab; + sal_uInt16 mnAsianLineBreak; // bit0: use asian rules for first and last character + // 1: do not wrap latin text in the middle of the word + // 2: allow hanging punctuation + sal_uInt16 mnBiDi; +}; + +struct PPTParaSheet +{ + public: + + PPTParaLevel maParaLevel[ 5 ]; + + PPTParaSheet( sal_uInt32 nInstance ); + PPTParaSheet( const PPTParaSheet& rParaSheet ); + + void Read( SdrPowerPointImport& rMan, SvStream& rIn, sal_Bool bMasterStyle, + sal_uInt32 nLevel, sal_Bool bFirst ); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class PPTParagraphObj; +class PPTNumberFormatCreator +{ + UINT32 nIsBullet; + UINT32 nBulletChar; + UINT32 nBulletFont; + UINT32 nBulletHeight; + UINT32 nBulletColor; + UINT32 nTextOfs; + UINT32 nBulletOfs; + + void ImplGetNumberFormat( SdrPowerPointImport& rMan, SvxNumberFormat& rNumberFormat, UINT32 nLevel ); + BOOL ImplGetExtNumberFormat( SdrPowerPointImport& rMan, SvxNumberFormat& rNumberFormat, UINT32 nLevel, + UINT32 nInstance, UINT32 nInstanceInSheet, boost::optional< sal_Int16 >& rStartNumbering, + UINT32 nFontHeight, PPTParagraphObj* pPara ); + + protected : + + PPTNumberFormatCreator( PPTExtParaProv* ); + ~PPTNumberFormatCreator(); + + public : + + PPTExtParaProv* pExtParaProv; + + void GetNumberFormat( SdrPowerPointImport& rMan, SvxNumberFormat& rNumberFormat, UINT32 nLevel, + const PPTParaLevel& rParaLevel, const PPTCharLevel& rCharLevel, UINT32 nInstance ); + + BOOL GetNumberFormat( SdrPowerPointImport& rMan, SvxNumberFormat& rNumberFormat, + PPTParagraphObj* pPara, UINT32 nInstanceInSheet, boost::optional< sal_Int16 >& rStartNumbering ); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SvxNumBulletItem; +struct PPTStyleSheet : public PPTNumberFormatCreator +{ + PPTTextSpecInfo maTxSI; + PPTCharSheet* mpCharSheet[ PPT_STYLESHEETENTRYS ]; + PPTParaSheet* mpParaSheet[ PPT_STYLESHEETENTRYS ]; + SvxNumBulletItem* mpNumBulletItem[ PPT_STYLESHEETENTRYS ]; + void* mpDummy; + + PPTStyleSheet( const DffRecordHeader& rSlideHd, SvStream& rSt, SdrPowerPointImport&, + const PPTTextCharacterStyleAtomInterpreter&, const PPTTextParagraphStyleAtomInterpreter&, const PPTTextSpecInfo& ); + ~PPTStyleSheet(); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +struct ImplPPTParaPropSet +{ + sal_uInt32 mnRefCount; + + sal_uInt16 mnDepth; + sal_uInt32 mnAttrSet; + sal_uInt32 mnBulletColor; + sal_uInt16 mpArry[ 22 ]; + + sal_uInt32 mnExtParagraphMask; + sal_uInt32 mnAnmScheme; + sal_uInt16 mnHasAnm; + sal_uInt16 mnBuBlip; + + sal_uInt32 nDontKnow1; + sal_uInt32 nDontKnow2; + sal_uInt16 nDontKnow2bit06; + + ImplPPTParaPropSet(){ mnRefCount = 1; mnAttrSet = 0; mnExtParagraphMask = 0; mnDepth = 0; }; +}; + +struct PPTParaPropSet +{ + sal_uInt32 mnOriginalTextPos; + ImplPPTParaPropSet* pParaSet; + + PPTParaPropSet(); + PPTParaPropSet( PPTParaPropSet& rParaPropSet ); + ~PPTParaPropSet(); + + PPTParaPropSet& operator=( PPTParaPropSet& rParaPropSet ); +}; + +struct ImplPPTCharPropSet +{ + sal_uInt32 mnRefCount; + + sal_uInt32 mnAttrSet; + sal_uInt16 mnFlags; + sal_uInt32 mnColor; + sal_uInt16 mnFont; + sal_uInt16 mnAsianOrComplexFont; + sal_uInt16 mnANSITypeface; + sal_uInt16 mnFontHeight; + sal_uInt16 mnEscapement; + sal_uInt16 mnSymbolFont; + + ImplPPTCharPropSet(){ mnRefCount = 1; mnAttrSet = 0; }; +}; + +struct PPTCharPropSet +{ + + sal_uInt32 mnOriginalTextPos; + sal_uInt32 mnParagraph; + String maString; + SvxFieldItem* mpFieldItem; + sal_uInt16 mnLanguage[ 3 ]; + + ImplPPTCharPropSet* pCharSet; + + void SetFont( UINT16 nFont ); + void SetColor( sal_uInt32 nColor ); + + PPTCharPropSet( sal_uInt32 nParagraph ); + PPTCharPropSet( PPTCharPropSet& rCharPropSet ); + PPTCharPropSet( PPTCharPropSet& rCharPropSet, sal_uInt32 nParagraph ); + ~PPTCharPropSet(); + + PPTCharPropSet& operator=( PPTCharPropSet& rCharPropSet ); + + private : + + void ImplMakeUnique(); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +struct PPTTabEntry +{ + sal_uInt16 nOffset; + sal_uInt16 nStyle; +}; + +struct PPTRuler +{ + UINT32 nRefCount; + + INT32 nFlags; + UINT16 nDefaultTab; + UINT16 nTextOfs[ 5 ]; + UINT16 nBulletOfs[ 5 ]; + PPTTabEntry* pTab; + UINT16 nTabCount; + + PPTRuler(); + ~PPTRuler(); +}; + +struct PPTTextRulerInterpreter +{ + PPTRuler *mpImplRuler; + + PPTTextRulerInterpreter(); + PPTTextRulerInterpreter( PPTTextRulerInterpreter& rRuler ); + PPTTextRulerInterpreter( UINT32 nFileOfs, SdrPowerPointImport&, DffRecordHeader& rHd, SvStream& rIn ); + ~PPTTextRulerInterpreter(); + + sal_uInt16 GetTabOffsetByIndex( sal_uInt16 nIndex ) const { return mpImplRuler->pTab[ nIndex ].nOffset; }; + sal_uInt16 GetTabStyleByIndex( sal_uInt16 nIndex ) const { return mpImplRuler->pTab[ nIndex ].nStyle; }; + UINT16 GetTabCount() const { return mpImplRuler->nTabCount; }; + BOOL GetDefaultTab( UINT32 nLevel, UINT16& nValue ) const; + BOOL GetTextOfs( UINT32 nLevel, UINT16& nValue ) const; + BOOL GetBulletOfs( UINT32 nLevel, UINT16& nValue ) const; + + PPTTextRulerInterpreter& operator=( PPTTextRulerInterpreter& rRuler ); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#define PPT_SPEC_NEWLINE 0x10000 +#define PPT_SPEC_SYMBOL 0x20000 +#define PPT_SPEC_USE_STARBATS 0x40000 + +struct StyleTextProp9 +{ + sal_uInt32 mnExtParagraphMask; + sal_uInt16 mnBuBlip; + sal_uInt16 mnHasAnm; + sal_uInt32 mnAnmScheme; + sal_uInt32 mpfPP10Ext; + sal_uInt32 mnExtCharacterMask; + sal_uInt32 mncfPP10Ext; + sal_uInt32 mnSpecialInfoMask; + sal_uInt32 mnPP10Ext; + sal_uInt16 mfBidi; + + StyleTextProp9() + : mnExtParagraphMask( 0 ) + , mnBuBlip( 0 ) + , mnHasAnm( 0 ) + , mnAnmScheme( 0 ) + , mpfPP10Ext( 0 ) + , mnExtCharacterMask( 0 ) + , mncfPP10Ext( 0 ) + , mnSpecialInfoMask( 0 ) + , mnPP10Ext( 0 ) + , mfBidi( 0 ) + { + } + void Read( SvStream& rSt ); +}; + +struct PPTStyleTextPropReader +{ + List aSpecMarkerList; // hiword -> Flags, loword -> Position + List aParaPropList; + List aCharPropList; + + PPTStyleTextPropReader( SvStream& rIn, SdrPowerPointImport&, const DffRecordHeader& rClientTextBoxHd, + PPTTextRulerInterpreter& rInterpreter, const DffRecordHeader& rExtParaHd, sal_uInt32 nTextInstance ); + + void Init( SvStream& rIn, SdrPowerPointImport&, const DffRecordHeader& rClientTextBoxHd, + PPTTextRulerInterpreter& rInterpreter, const DffRecordHeader& rExtParaHd, sal_uInt32 nTextInstance ); + void ReadParaProps( SvStream& rIn, SdrPowerPointImport& rMan, const DffRecordHeader& rTextHeader, + const String& aString, PPTTextRulerInterpreter& rRuler, + sal_uInt32& nCharCount, sal_Bool& bTextPropAtom ); + void ReadCharProps( SvStream& rIn, PPTCharPropSet& aCharPropSet, const String& aString, + sal_uInt32& nCharCount, sal_uInt32 nCharAnzRead, + sal_Bool& bTextPropAtom, sal_uInt32 nExtParaPos, + const std::vector< StyleTextProp9 >& aStyleTextProp9, + sal_uInt32& nExtParaFlags, sal_uInt16& nBuBlip, + sal_uInt16& nHasAnm, sal_uInt32& nAnmScheme ); + + ~PPTStyleTextPropReader(); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SvxFieldItem; +class MSFILTER_DLLPUBLIC PPTPortionObj : public PPTCharPropSet +{ + + friend class PPTParagraphObj; + + const PPTStyleSheet& mrStyleSheet; + UINT32 mnInstance; + UINT32 mnDepth; + + public : + + BOOL GetAttrib( UINT32 nAttr, UINT32& nVal, UINT32 nInstanceInSheet ); + SvxFieldItem* GetTextField(); + + PPTPortionObj( const PPTStyleSheet&, UINT32 nInstance, UINT32 nDepth ); + PPTPortionObj( PPTCharPropSet&, const PPTStyleSheet&, UINT32 nInstance, UINT32 nDepth ); + PPTPortionObj( PPTPortionObj& ); + ~PPTPortionObj(); + + // the following function should be removed during next full update + void ApplyTo( SfxItemSet& rSet, SdrPowerPointImport& rManager, UINT32 nInstanceInSheet ); + void ApplyTo( SfxItemSet& rSet, SdrPowerPointImport& rManager, UINT32 nInstanceInSheet, const PPTTextObj* pTextObj ); + UINT32 Count() const { return ( mpFieldItem ) ? 1 : maString.Len(); }; + BOOL HasTabulator(); +}; + +class MSFILTER_DLLPUBLIC PPTParagraphObj : public PPTParaPropSet, public PPTNumberFormatCreator, public PPTTextRulerInterpreter +{ + friend class PPTTextObj; + friend class PPTNumberFormatCreator; + + const PPTStyleSheet& mrStyleSheet; + UINT32 mnInstance; + + protected : + + void ImplClear(); + + public : + + BOOL mbTab; // if true, this paragraph has tabulators in text + + UINT32 mnCurrentObject; + UINT32 mnPortionCount; + PPTPortionObj** mpPortionList; + + void UpdateBulletRelSize( sal_uInt32& nBulletRelSize ) const; + BOOL GetAttrib( UINT32 nAttr, UINT32& nVal, UINT32 nInstanceInSheet ); + + PPTParagraphObj( const PPTStyleSheet&, UINT32 nInstance, UINT16 nDepth ); + PPTParagraphObj( PPTStyleTextPropReader&, const PPTStyleSheet&, UINT32 nInstance, PPTTextRulerInterpreter& rRuler ); + ~PPTParagraphObj(); + + UINT32 GetTextSize(); + PPTPortionObj* First(); + PPTPortionObj* Next(); + + void AppendPortion( PPTPortionObj& rPortion ); + void ApplyTo( SfxItemSet& rSet, boost::optional< sal_Int16 >& rStartNumbering, SdrPowerPointImport& rManager, UINT32 nInstanceInSheet, const PPTParagraphObj* pPrev ); +}; + +#define PPT_TEXTOBJ_FLAGS_PARA_ALIGNMENT_USED_LEFT 1 +#define PPT_TEXTOBJ_FLAGS_PARA_ALIGNMENT_USED_CENTER 2 +#define PPT_TEXTOBJ_FLAGS_PARA_ALIGNMENT_USED_RIGHT 4 +#define PPT_TEXTOBJ_FLAGS_PARA_ALIGNMENT_USED_BLOCK 8 +#define PPT_TEXTOBJ_FLAGS_VERTICAL 16 + +struct ImplPPTTextObj +{ + UINT32 mnRefCount; + UINT32 mnShapeId; + UINT32 mnShapeMaster; + PptOEPlaceholderAtom* mpPlaceHolderAtom; + UINT16 mnInstance; + UINT16 mnDestinationInstance; + MSO_SPT meShapeType; + + UINT32 mnCurrentObject; + UINT32 mnParagraphCount; + PPTParagraphObj** mpParagraphList; + PptSlidePersistEntry& mrPersistEntry; + + sal_uInt32 mnTextFlags; + + ImplPPTTextObj( PptSlidePersistEntry& rPersistEntry ) : mrPersistEntry ( rPersistEntry ) {}; +}; + +class PPTTextObj +{ + ImplPPTTextObj* mpImplTextObj; + void ImplClear(); + + PPTTextObj(){}; + public : + PPTTextObj( SvStream& rSt, SdrPowerPointImport&, PptSlidePersistEntry&, DffObjData* ); + PPTTextObj( PPTTextObj& rTextObj ); + ~PPTTextObj(); + + UINT32 GetCurrentIndex() const { return mpImplTextObj->mnCurrentObject; }; + UINT32 Count() const { return mpImplTextObj->mnParagraphCount; }; + PPTParagraphObj* First(); + PPTParagraphObj* Next(); + MSO_SPT GetShapeType() const { return mpImplTextObj->meShapeType; }; + UINT32 GetInstance() const { return mpImplTextObj->mnInstance; }; + void SetInstance( UINT16 nInstance ) { mpImplTextObj->mnInstance = nInstance; }; + UINT32 GetDestinationInstance() const { return mpImplTextObj->mnDestinationInstance; }; + void SetDestinationInstance( UINT16 nInstance ) { mpImplTextObj->mnDestinationInstance = nInstance; }; + PptOEPlaceholderAtom* GetOEPlaceHolderAtom() const { return mpImplTextObj->mpPlaceHolderAtom; }; + sal_uInt32 GetTextFlags() const { return mpImplTextObj->mnTextFlags; }; + void SetVertical( sal_Bool bVertical ) + { + if ( bVertical ) + mpImplTextObj->mnTextFlags |= PPT_TEXTOBJ_FLAGS_VERTICAL; + else + mpImplTextObj->mnTextFlags &= ~PPT_TEXTOBJ_FLAGS_VERTICAL; + } + sal_Bool GetVertical() const { return ( mpImplTextObj->mnTextFlags & PPT_TEXTOBJ_FLAGS_VERTICAL ) != 0; }; + const SfxItemSet* GetBackground() const; + + PPTTextObj& operator=( PPTTextObj& rTextObj ); +}; + +class PPTConvertOCXControls : public SvxMSConvertOCXControls +{ + virtual const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > & GetDrawPage(); + PptPageKind ePageKind; + public : + + PPTConvertOCXControls( SfxObjectShell* pDSh, PptPageKind ePKind ) : + SvxMSConvertOCXControls ( pDSh, NULL ), + ePageKind ( ePKind ){}; + + virtual sal_Bool InsertControl( + const com::sun::star::uno::Reference< + com::sun::star::form::XFormComponent > &rFComp, + const com::sun::star::awt::Size& rSize, + com::sun::star::uno::Reference< com::sun::star::drawing::XShape > *pShape, + BOOL bFloatingCtrl ); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// Powerpoint Recordtypen +#define PPT_PST_Unknown 0 +#define PPT_PST_SubContainerCompleted 1 +#define PPT_PST_IRRAtom 2 +#define PPT_PST_PSS 3 +#define PPT_PST_SubContainerException 4 +#define PPT_PST_ClientSignal1 6 +#define PPT_PST_ClientSignal2 7 +#define PPT_PST_PowerPointStateInfoAtom 10 +#define PPT_PST_Document 1000 +#define PPT_PST_DocumentAtom 1001 +#define PPT_PST_EndDocument 1002 +#define PPT_PST_SlidePersist 1003 +#define PPT_PST_SlideBase 1004 +#define PPT_PST_SlideBaseAtom 1005 +#define PPT_PST_Slide 1006 +#define PPT_PST_SlideAtom 1007 +#define PPT_PST_Notes 1008 +#define PPT_PST_NotesAtom 1009 +#define PPT_PST_Environment 1010 +#define PPT_PST_SlidePersistAtom 1011 +#define PPT_PST_Scheme 1012 +#define PPT_PST_SchemeAtom 1013 +#define PPT_PST_DocViewInfo 1014 +#define PPT_PST_SslideLayoutAtom 1015 +#define PPT_PST_MainMaster 1016 +#define PPT_PST_SSSlideInfoAtom 1017 +#define PPT_PST_SlideViewInfo 1018 +#define PPT_PST_GuideAtom 1019 +#define PPT_PST_ViewInfo 1020 +#define PPT_PST_ViewInfoAtom 1021 +#define PPT_PST_SlideViewInfoAtom 1022 +#define PPT_PST_VBAInfo 1023 +#define PPT_PST_VBAInfoAtom 1024 +#define PPT_PST_SSDocInfoAtom 1025 +#define PPT_PST_Summary 1026 +#define PPT_PST_Texture 1027 +#define PPT_PST_VBASlideInfo 1028 +#define PPT_PST_VBASlideInfoAtom 1029 +#define PPT_PST_DocRoutingSlip 1030 +#define PPT_PST_OutlineViewInfo 1031 +#define PPT_PST_SorterViewInfo 1032 +#define PPT_PST_ExObjList 1033 +#define PPT_PST_ExObjListAtom 1034 +#define PPT_PST_PPDrawingGroup 1035 +#define PPT_PST_PPDrawing 1036 +#define PPT_PST_NewlyAddedAtomByXP1037 1037 +#define PPT_PST_NamedShows 1040 +#define PPT_PST_NamedShow 1041 +#define PPT_PST_NamedShowSlides 1042 +#define PPT_PST_List 2000 +#define PPT_PST_FontCollection 2005 +#define PPT_PST_ListPlaceholder 2017 +#define PPT_PST_BookmarkCollection 2019 +#define PPT_PST_SoundCollection 2020 +#define PPT_PST_SoundCollAtom 2021 +#define PPT_PST_Sound 2022 +#define PPT_PST_SoundData 2023 +#define PPT_PST_BookmarkSeedAtom 2025 +#define PPT_PST_GuideList 2026 +#define PPT_PST_RunArray 2028 +#define PPT_PST_RunArrayAtom 2029 +#define PPT_PST_ArrayElementAtom 2030 +#define PPT_PST_Int4ArrayAtom 2031 +#define PPT_PST_ColorSchemeAtom 2032 + +// these atoms first was seen in ppt2000 in a private Tag atom +#define PPT_PST_ExtendedBuGraContainer 2040 // consist of 4041 +#define PPT_PST_ExtendedBuGraAtom 2041 // the instance of this atom indices the current graphic + +#define PPT_PST_OEShape 3008 +#define PPT_PST_ExObjRefAtom 3009 +#define PPT_PST_OEPlaceholderAtom 3011 +#define PPT_PST_GrColor 3020 +#define PPT_PST_GrectAtom 3025 +#define PPT_PST_GratioAtom 3031 +#define PPT_PST_Gscaling 3032 +#define PPT_PST_GpointAtom 3034 +#define PPT_PST_OEShapeAtom 3035 +#define PPT_PST_OutlineTextRefAtom 3998 +#define PPT_PST_TextHeaderAtom 3999 +#define PPT_PST_TextCharsAtom 4000 +#define PPT_PST_StyleTextPropAtom 4001 +#define PPT_PST_BaseTextPropAtom 4002 +#define PPT_PST_TxMasterStyleAtom 4003 +#define PPT_PST_TxCFStyleAtom 4004 +#define PPT_PST_TxPFStyleAtom 4005 +#define PPT_PST_TextRulerAtom 4006 +#define PPT_PST_TextBookmarkAtom 4007 +#define PPT_PST_TextBytesAtom 4008 +#define PPT_PST_TxSIStyleAtom 4009 +#define PPT_PST_TextSpecInfoAtom 4010 +#define PPT_PST_DefaultRulerAtom 4011 + +// these atoms first was seen in ppt2000 in a private Tag atom +#define PPT_PST_ExtendedParagraphAtom 4012 +#define PPT_PST_ExtendedParagraphMasterAtom 4013 +#define PPT_PST_ExtendedPresRuleContainer 4014 // consist of 4012, 4015, +#define PPT_PST_ExtendedParagraphHeaderAtom 4015 // the instance of this atom indices the current presobj + // the first UINT32 in this atom indices the current slideId +#define PPT_PST_NewlyAddedAtom4016 4016 + +#define PPT_PST_FontEntityAtom 4023 +#define PPT_PST_FontEmbedData 4024 +#define PPT_PST_TypeFace 4025 +#define PPT_PST_CString 4026 +#define PPT_PST_ExternalObject 4027 +#define PPT_PST_MetaFile 4033 +#define PPT_PST_ExOleObj 4034 +#define PPT_PST_ExOleObjAtom 4035 +#define PPT_PST_ExPlainLinkAtom 4036 +#define PPT_PST_CorePict 4037 +#define PPT_PST_CorePictAtom 4038 +#define PPT_PST_ExPlainAtom 4039 +#define PPT_PST_SrKinsoku 4040 +#define PPT_PST_Handout 4041 +#define PPT_PST_ExEmbed 4044 +#define PPT_PST_ExEmbedAtom 4045 +#define PPT_PST_ExLink 4046 +#define PPT_PST_ExLinkAtom_old 4047 +#define PPT_PST_BookmarkEntityAtom 4048 +#define PPT_PST_ExLinkAtom 4049 +#define PPT_PST_SrKinsokuAtom 4050 +#define PPT_PST_ExHyperlinkAtom 4051 +#define PPT_PST_ExPlain 4053 +#define PPT_PST_ExPlainLink 4054 +#define PPT_PST_ExHyperlink 4055 +#define PPT_PST_SlideNumberMCAtom 4056 +#define PPT_PST_HeadersFooters 4057 +#define PPT_PST_HeadersFootersAtom 4058 +#define PPT_PST_RecolorEntryAtom 4062 +#define PPT_PST_TxInteractiveInfoAtom 4063 +#define PPT_PST_EmFormatAtom 4065 +#define PPT_PST_CharFormatAtom 4066 +#define PPT_PST_ParaFormatAtom 4067 +#define PPT_PST_MasterText 4068 +#define PPT_PST_RecolorInfoAtom 4071 +#define PPT_PST_ExQuickTime 4073 +#define PPT_PST_ExQuickTimeMovie 4074 +#define PPT_PST_ExQuickTimeMovieData 4075 +#define PPT_PST_ExSubscription 4076 +#define PPT_PST_ExSubscriptionSection 4077 +#define PPT_PST_ExControl 4078 +#define PPT_PST_ExControlAtom 4091 +#define PPT_PST_SlideListWithText 4080 +#define PPT_PST_AnimationInfoAtom 4081 +#define PPT_PST_InteractiveInfo 4082 +#define PPT_PST_InteractiveInfoAtom 4083 +#define PPT_PST_SlideList 4084 +#define PPT_PST_UserEditAtom 4085 +#define PPT_PST_CurrentUserAtom 4086 +#define PPT_PST_DateTimeMCAtom 4087 +#define PPT_PST_GenericDateMCAtom 4088 +#define PPT_PST_HeaderMCAtom 4089 +#define PPT_PST_FooterMCAtom 4090 +#define PPT_PST_ExMediaAtom 4100 +#define PPT_PST_ExVideo 4101 +#define PPT_PST_ExAviMovie 4102 +#define PPT_PST_ExMCIMovie 4103 +#define PPT_PST_ExMIDIAudio 4109 +#define PPT_PST_ExCDAudio 4110 +#define PPT_PST_ExWAVAudioEmbedded 4111 +#define PPT_PST_ExWAVAudioLink 4112 +#define PPT_PST_ExOleObjStg 4113 +#define PPT_PST_ExCDAudioAtom 4114 +#define PPT_PST_ExWAVAudioEmbeddedAtom 4115 +#define PPT_PST_AnimationInfo 4116 +#define PPT_PST_RTFDateTimeMCAtom 4117 +#define PPT_PST_ProgTags 5000 +#define PPT_PST_ProgStringTag 5001 +#define PPT_PST_ProgBinaryTag 5002 +#define PPT_PST_BinaryTagData 5003 +#define PPT_PST_PrintOptions 6000 +#define PPT_PST_PersistPtrFullBlock 6001 +#define PPT_PST_PersistPtrIncrementalBlock 6002 + +// these atoms first was seen in ppt2000 in a private Tag atom +#define PPT_PST_NewlyAddedAtomByPPT2000_6010 6010 +#define PPT_PST_NewlyAddedAtomByPPT2000_6011 6011 + +#define PPT_PST_RulerIndentAtom 10000 +#define PPT_PST_GscalingAtom 10001 +#define PPT_PST_GrColorAtom 10002 +#define PPT_PST_GLPointAtom 10003 +#define PPT_PST_GlineAtom 10004 + +#define PPT_PST_NewlyAddedAtomByXP11008 11008 +#define PPT_PST_NewlyAddedAtomByXP11010 11010 +#define PPT_PST_Comment10 12000 +#define PPT_PST_CommentAtom10 12001 +#define PPT_PST_NewlyAddedAtomByXP12004 12004 +#define PPT_PST_NewlyAddedAtomByXP12010 12010 +#define PPT_PST_NewlyAddedAtomByXP12011 12011 +#define PPT_PST_NewlyAddedAtomByXP14001 14001 + +// Attribute fuer PptTextStyleSheet +#define PPT_ParaAttr_BulletOn 0 //00000001 +#define PPT_ParaAttr_BuHardFont 1 //00000002 +#define PPT_ParaAttr_BuHardColor 2 //00000004 +#define PPT_ParaAttr_BuHardHeight 3 //00000008 +#define PPT_ParaAttr_BulletFont 4 //00000010 +#define PPT_ParaAttr_BulletColor 5 //00000020 +#define PPT_ParaAttr_BulletHeight 6 //00000040 +#define PPT_ParaAttr_BulletChar 7 //00000080 + +#define PPT_ParaAttr_DontKnow1 8 //00000100 +#define PPT_ParaAttr_DontKnow2 9 //00000200 +#define PPT_ParaAttr_DontKnow3 10 //00000400 +#define PPT_ParaAttr_Adjust 11 //00000800 0000=Left, 0001=Center, 0002=Right, 0003=Block + +#define PPT_ParaAttr_LineFeed 12 //00001000 +#define PPT_ParaAttr_UpperDist 13 //00002000 ist bei Textframes default immer auf 0032 gesetzt +#define PPT_ParaAttr_LowerDist 14 //00004000 +#define PPT_ParaAttr_TextOfs 15 //00008000 + +#define PPT_ParaAttr_BulletOfs 16 //00010000 +#define PPT_ParaAttr_DefaultTab 17 //00020000 +#define PPT_ParaAttr_AsianLB_1 18 +#define PPT_ParaAttr_AsianLB_2 19 +#define PPT_ParaAttr_AsianLB_3 20 +#define PPT_ParaAttr_BiDi 21 //00200000 + +#define PPT_CharAttr_Bold 0 //00000001 +#define PPT_CharAttr_Italic 1 //00000002 +#define PPT_CharAttr_Underline 2 //00000004 +#define PPT_CharAttr_Shadow 4 //00000010 +#define PPT_CharAttr_Strikeout 8 //00000100 +#define PPT_CharAttr_Embossed 9 //00000200 +#define PPT_CharAttr_ResetNumbering 10 //00000400 +#define PPT_CharAttr_EnableNumbering1 11 //00000800 +#define PPT_CharAttr_EnableNumbering2 12 //00001000 +#define PPT_CharAttr_Font 16 //00010000 +#define PPT_CharAttr_AsianOrComplexFont 21 //00200000 +#define PPT_CharAttr_ANSITypeface 22 //00400000 +#define PPT_CharAttr_Symbol 23 //00800000 +#define PPT_CharAttr_FontHeight 17 //00020000 +#define PPT_CharAttr_FontColor 18 //00040000 +#define PPT_CharAttr_Escapement 19 //00080000 + +// Werte fuer PptSlideLayoutAtom.eLayout +#define PPT_LAYOUT_TITLESLIDE 0 // The slide is a title slide +#define PPT_LAYOUT_TITLEANDBODYSLIDE 1 // Title and body slide +#define PPT_LAYOUT_TITLEMASTERSLIDE 2 // Title master slide +#define PPT_LAYOUT_MASTERSLIDE 3 // Master slide layout +#define PPT_LAYOUT_MASTERNOTES 4 // Master notes layout +#define PPT_LAYOUT_NOTESTITLEBODY 5 // Notes title/body layout +#define PPT_LAYOUT_HANDOUTLAYOUT 6 // Handout layout, therefore it doesn't have placeholders except header, footer, and date +#define PPT_LAYOUT_ONLYTITLE 7 // Only title placeholder +#define PPT_LAYOUT_2COLUMNSANDTITLE 8 // Body of the slide has 2 columns and a title +#define PPT_LAYOUT_2ROWSANDTITLE 9 // Slide's body has 2 rows and a title +#define PPT_LAYOUT_RIGHTCOLUMN2ROWS 10 // Body contains 2 columns, right column has 2 rows +#define PPT_LAYOUT_LEFTCOLUMN2ROWS 11 // Body contains 2 columns, left column has 2 rows +#define PPT_LAYOUT_BOTTOMROW2COLUMNS 12 // Body contains 2 rows, bottom row has 2 columns +#define PPT_LAYOUT_TOPROW2COLUMN 13 // Body contains 2 rows, top row has 2 columns +#define PPT_LAYOUT_4OBJECTS 14 // 4 objects +#define PPT_LAYOUT_BIGOBJECT 15 // Big object +#define PPT_LAYOUT_BLANCSLIDE 16 // Blank slide +#define PPT_LAYOUT_TITLERIGHTBODYLEFT 17 // Vertical title on the right, body on the left +#define PPT_LAYOUT_TITLERIGHT2BODIESLEFT 18 // Vertical title on the right, body on the left split into 2 rows + +// the following table describes the placeholder id's (values from reality followed by values taken from the documentation) +#define PPT_PLACEHOLDER_NONE 0 // 0 None +#define PPT_PLACEHOLDER_MASTERTITLE 1 // 1 Master title +#define PPT_PLACEHOLDER_MASTERBODY 2 // 2 Master body +#define PPT_PLACEHOLDER_MASTERCENTEREDTITLE 3 // 3 Master centered title +#define PPT_PLACEHOLDER_MASTERSUBTITLE 4 // 10 Master subtitle +#define PPT_PLACEHOLDER_MASTERNOTESSLIDEIMAGE 5 // 4 Master notes slide image +#define PPT_PLACEHOLDER_MASTERNOTESBODYIMAGE 6 // 5 Master notes body image +#define PPT_PLACEHOLDER_MASTERDATE 7 // 6 Master date +#define PPT_PLACEHOLDER_MASTERSLIDENUMBER 8 // 7 Master slide number +#define PPT_PLACEHOLDER_MASTERFOOTER 9 // 8 Master footer +#define PPT_PLACEHOLDER_MASTERHEADER 10 // 9 Master header +#define PPT_PLACEHOLDER_GENERICTEXTOBJECT // 11 Generic text object +#define PPT_PLACEHOLDER_TITLE 13 // 12 Title +#define PPT_PLACEHOLDER_BODY 14 // 13 Body +#define PPT_PLACEHOLDER_NOTESBODY 12 // 14 Notes body +#define PPT_PLACEHOLDER_CENTEREDTITLE 15 // 15 Centered title +#define PPT_PLACEHOLDER_SUBTITLE 16 // 16 Subtitle +#define PPT_PLACEHOLDER_VERTICALTEXTTITLE 17 // 17 Vertical text title +#define PPT_PLACEHOLDER_VERTICALTEXTBODY 18 // 18 Vertical text body +#define PPT_PLACEHOLDER_NOTESSLIDEIMAGE 11 // 19 Notes slide image +#define PPT_PLACEHOLDER_OBJECT 19 // 20 Object (no matter the size) +#define PPT_PLACEHOLDER_GRAPH 20 // 21 Graph +#define PPT_PLACEHOLDER_TABLE 21 // 22 Table +#define PPT_PLACEHOLDER_CLIPART 22 // 23 Clip Art +#define PPT_PLACEHOLDER_ORGANISZATIONCHART 23 // 24 Organization Chart +#define PPT_PLACEHOLDER_MEDIACLIP 24 // 25 Media Clip + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif // SVX_LIGHT + +#endif //_SVDFPPT_HXX + |