blob: f488c5a6b8f6ad0c91c2ecd8064957fdd75182fe [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the 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 <editeng/numitem.hxx>
#include <editeng/editdata.hxx>
#include <filter/msfilter/msdffimp.hxx> // Escher-Grafikimport
#include <filter/msfilter/msocximex.hxx>
#include <filter/msfilter/msfiltertracer.hxx>
#include <editeng/eeitem.hxx>
#define ITEMID_FIELD EE_FEATURE_FIELD
#include <editeng/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
{
sal_uInt32 nSoundRef;
sal_uInt32 nExHyperlinkId;
sal_uInt8 nAction;
sal_uInt8 nOleVerb;
sal_uInt8 nJump;
sal_uInt8 nFlags;
sal_uInt8 nHyperlinkType;
// unknown, da Gesamtgroesse 16 ist
sal_uInt8 nUnknown1;
sal_uInt8 nUnknown2;
sal_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 sal_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 sal_uInt32 PPTInventor =sal_uInt32('P')*0x00000001+
sal_uInt32('P')*0x00000100+
sal_uInt32('T')*0x00010000+
sal_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
sal_uInt32 nNotesMasterPersist; // 0=nicht vorhanden
sal_uInt32 nHandoutMasterPersist; // 0=nicht vorhanden
sal_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
{
sal_Int32 eLayout; // 0..18
sal_uInt8 aPlaceholderId[ 8 ];
sal_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;
sal_uInt32 nMasterId;
sal_uInt32 nNotesId;
sal_uInt16 nFlags;
public:
PptSlideAtom() { Clear(); }
void Clear();
friend SvStream& operator>>(SvStream& rIn, PptSlideAtom& rAtom);
};
struct PptSlidePersistAtom
{
sal_uInt32 nPsrReference;
sal_uInt32 nFlags;
sal_uInt32 nNumberTexts;
sal_uInt32 nSlideId;
sal_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
{
sal_uInt32 nSlideId;
sal_uInt16 nFlags;
public:
PptNotesAtom() { Clear(); }
void Clear();
friend SvStream& operator>>(SvStream& rIn, PptNotesAtom& rAtom);
};
struct PptColorSchemeAtom
{
sal_uInt8 aData[32];
public:
PptColorSchemeAtom () { Clear(); }
void Clear();
Color GetColor( sal_uInt16 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;
sal_Int32 nLastSlideID; // ID of last visible slide
sal_uInt32 nVersion; // This is major/minor/build which did the edit
sal_uInt32 nOffsetLastEdit; // File offset of prev PptUserEditAtom
sal_uInt32 nOffsetPersistDirectory; // Offset to PersistPtrs for this file version.
sal_uInt32 nDocumentRef;
sal_uInt32 nMaxPersistWritten; // Gesamtanzahl der Persisteintraege bis hierher.
sal_Int16 eLastViewType; // enum view type
public:
PptUserEditAtom() : nOffsetPersistDirectory( 0 ) {}
friend SvStream& operator>>( SvStream& rIn, PptUserEditAtom& rAtom );
};
struct PptOEPlaceholderAtom
{
sal_uInt32 nPlacementId;
sal_uInt8 nPlaceholderId;
sal_uInt8 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();
sal_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:
sal_uInt16 FindPage( sal_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
{
sal_uInt32 nAspect;
sal_uInt32 nDummy1;
sal_uInt32 nId;
sal_uInt32 nDummy2;
sal_uInt32 nPersistPtr;
sal_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( sal_uInt16 nNum, Color& rColor ) const;
virtual sal_Bool SeekToShape( SvStream& rSt, void* pClientData, sal_uInt32 nId ) const;
PptFontEntityAtom* GetFontEnityAtom( sal_uInt32 nNum ) const;
CharSet GetCharSet( sal_uInt32 nNum ) const;
sal_Bool IsFontAvailable( sal_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
{
sal_uInt16 nPos;
sal_uInt16 nTextRangeEnd;
SvxFieldItem* pField1;
SvxFieldItem* pField2;
String* pString;
PPTFieldEntry() : nPos( 0 ), nTextRangeEnd( 0 ), pField1( NULL ), pField2( NULL ), pString( NULL ) {};
~PPTFieldEntry();
void SetDateTime( sal_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( sal_uInt32 nInstance );
sal_uInt32 IsToDisplay( sal_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;
sal_Bool bOk;
PptUserEditAtom aUserEditAtom;
PptColorSchemeAtom aPageColors;
List aHyperList;
sal_uInt32* pPersistPtr;
sal_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;
sal_uInt16 nAktPageNum;
sal_uLong nDocStreamPos;
sal_uInt16 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( sal_uInt32 nPersistPtr, sal_uInt32& nOleId ) const;
SdrPage* MakeBlancPage(sal_Bool bMaster) const;
sal_Bool ReadFontCollection();
sal_Bool ForceFontCollection() const { return pFonts!=NULL?sal_True:((SdrPowerPointImport*)this)->ReadFontCollection(); }
PptSlidePersistList* GetPageList(PptPageKind ePageKind) const;
sal_uInt32 GetAktPageId();
sal_uInt32 GetMasterPageId(sal_uInt16 nPageNum, PptPageKind ePageKind) const;
sal_uInt32 GetNotesPageId(sal_uInt16 nPageNum ) const;
SdrOutliner* GetDrawOutliner( SdrTextObj* pSdrText ) const;
void SeekOle( SfxObjectShell* pShell, sal_uInt32 nFilterOptions );
void ApplyTextAnchorAttributes( PPTTextObj& rTextObj, SfxItemSet& rSet ) const;
sal_Bool IsVerticalText() const;
public:
SdrPowerPointImport( PowerPointImportParam&, const String& rBaseURL );
virtual ~SdrPowerPointImport();
sal_uInt16 GetPageCount( PptPageKind eKind = PPT_SLIDEPAGE ) const;
void SetPageNum( sal_uInt16 nPageNum, PptPageKind = PPT_SLIDEPAGE );
sal_uInt16 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( sal_uInt16 nPageNum, PptPageKind ePageKind ) const;
sal_Bool HasMasterPage( sal_uInt16 nPageNum, PptPageKind ePageKind = PPT_SLIDEPAGE ) const;
sal_uInt16 GetMasterPageIndex( sal_uInt16 nPageNum, PptPageKind ePageKind = PPT_SLIDEPAGE ) const;
void ImportPage( SdrPage* pPage, const PptSlidePersistEntry* pMasterPersist = NULL );
virtual FASTBOOL GetColorFromPalette(sal_uInt16 nNum, Color& rColor) const;
virtual sal_Bool SeekToShape( SvStream& rSt, void* pClientData, sal_uInt32 nId ) const;
sal_Unicode PPTSubstitute( sal_uInt16 nFont, sal_Unicode nChar,
sal_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
{
sal_uInt32 nInstance;
Graphic aBuGra;
PPTBuGraEntry( Graphic& rGraphic, sal_uInt32 nInstance );
};
class PPTExtParaProv
{
List aBuGraList;
public :
sal_Bool bStyles;
sal_Bool bGraphics;
DffRecordManager aExtendedPresRules;
PPTExtParaSheet aExtParaSheet[ PPT_STYLESHEETENTRYS ];
sal_Bool GetGraphic( sal_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 );
void UpdateBulletRelSize( sal_uInt32 nLevel, sal_uInt16 nFontHeight );
};
////////////////////////////////////////////////////////////////////////////////////////////////////
class PPTParagraphObj;
class PPTNumberFormatCreator
{
sal_uInt32 nIsBullet;
sal_uInt32 nBulletChar;
sal_uInt32 nBulletFont;
sal_uInt32 nBulletHeight;
sal_uInt32 nBulletColor;
sal_uInt32 nTextOfs;
sal_uInt32 nBulletOfs;
void ImplGetNumberFormat( SdrPowerPointImport& rMan, SvxNumberFormat& rNumberFormat, sal_uInt32 nLevel );
sal_Bool ImplGetExtNumberFormat( SdrPowerPointImport& rMan, SvxNumberFormat& rNumberFormat, sal_uInt32 nLevel,
sal_uInt32 nInstance, sal_uInt32 nInstanceInSheet, boost::optional< sal_Int16 >& rStartNumbering,
sal_uInt32 nFontHeight, PPTParagraphObj* pPara );
protected :
PPTNumberFormatCreator( PPTExtParaProv* );
~PPTNumberFormatCreator();
public :
PPTExtParaProv* pExtParaProv;
void GetNumberFormat( SdrPowerPointImport& rMan, SvxNumberFormat& rNumberFormat, sal_uInt32 nLevel,
const PPTParaLevel& rParaLevel, const PPTCharLevel& rCharLevel, sal_uInt32 nInstance );
sal_Bool GetNumberFormat( SdrPowerPointImport& rMan, SvxNumberFormat& rNumberFormat,
PPTParagraphObj* pPara, sal_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
{
//when the bullet text has more than two color,next the text following with bullet has been set hyperlink.
//now,the bullet color should be set original hyperlink text's color
//so "mbHardHylinkOrigColor" hold the original hyperlink text's color.
sal_uInt32 mnHylinkOrigColor;
//the bullet text weather has a hyperlink.
sal_Bool mbIsHyperlink;
//the hyperlink text weather has a custom color.
sal_Bool mbHardHylinkOrigColor;
sal_uInt32 mnOriginalTextPos;
sal_uInt32 mnParagraph;
String maString;
SvxFieldItem* mpFieldItem;
sal_uInt16 mnLanguage[ 3 ];
ImplPPTCharPropSet* pCharSet;
void SetFont( sal_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
{
sal_uInt32 nRefCount;
sal_Int32 nFlags;
sal_uInt16 nDefaultTab;
sal_uInt16 nTextOfs[ 5 ];
sal_uInt16 nBulletOfs[ 5 ];
PPTTabEntry* pTab;
sal_uInt16 nTabCount;
PPTRuler();
~PPTRuler();
};
struct PPTTextRulerInterpreter
{
PPTRuler *mpImplRuler;
PPTTextRulerInterpreter();
PPTTextRulerInterpreter( PPTTextRulerInterpreter& rRuler );
PPTTextRulerInterpreter( sal_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; };
sal_uInt16 GetTabCount() const { return mpImplRuler->nTabCount; };
sal_Bool GetDefaultTab( sal_uInt32 nLevel, sal_uInt16& nValue ) const;
sal_Bool GetTextOfs( sal_uInt32 nLevel, sal_uInt16& nValue ) const;
sal_Bool GetBulletOfs( sal_uInt32 nLevel, sal_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;
sal_uInt32 mnInstance;
sal_uInt32 mnDepth;
public :
sal_Bool GetAttrib( sal_uInt32 nAttr, sal_uInt32& nVal, sal_uInt32 nInstanceInSheet );
SvxFieldItem* GetTextField();
PPTPortionObj( const PPTStyleSheet&, sal_uInt32 nInstance, sal_uInt32 nDepth );
PPTPortionObj( PPTCharPropSet&, const PPTStyleSheet&, sal_uInt32 nInstance, sal_uInt32 nDepth );
PPTPortionObj( PPTPortionObj& );
~PPTPortionObj();
// the following function should be removed during next full update
void ApplyTo( SfxItemSet& rSet, SdrPowerPointImport& rManager, sal_uInt32 nInstanceInSheet );
void ApplyTo( SfxItemSet& rSet, SdrPowerPointImport& rManager, sal_uInt32 nInstanceInSheet, const PPTTextObj* pTextObj );
sal_uInt32 Count() const { return ( mpFieldItem ) ? 1 : maString.Len(); };
sal_Bool HasTabulator();
};
class MSFILTER_DLLPUBLIC PPTParagraphObj : public PPTParaPropSet, public PPTNumberFormatCreator, public PPTTextRulerInterpreter
{
friend class PPTTextObj;
friend class PPTNumberFormatCreator;
const PPTStyleSheet& mrStyleSheet;
sal_uInt32 mnInstance;
protected :
void ImplClear();
public :
sal_Bool mbTab; // if true, this paragraph has tabulators in text
sal_uInt32 mnCurrentObject;
sal_uInt32 mnPortionCount;
PPTPortionObj** mpPortionList;
void UpdateBulletRelSize( sal_uInt32& nBulletRelSize ) const;
sal_Bool GetAttrib( sal_uInt32 nAttr, sal_uInt32& nVal, sal_uInt32 nInstanceInSheet );
PPTParagraphObj( const PPTStyleSheet&, sal_uInt32 nInstance, sal_uInt16 nDepth );
PPTParagraphObj( PPTStyleTextPropReader&, const PPTStyleSheet&, sal_uInt32 nInstance, PPTTextRulerInterpreter& rRuler );
~PPTParagraphObj();
sal_uInt32 GetTextSize();
PPTPortionObj* First();
PPTPortionObj* Next();
void AppendPortion( PPTPortionObj& rPortion );
void ApplyTo( SfxItemSet& rSet, boost::optional< sal_Int16 >& rStartNumbering, SdrPowerPointImport& rManager, sal_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
{
sal_uInt32 mnRefCount;
sal_uInt32 mnShapeId;
sal_uInt32 mnShapeMaster;
PptOEPlaceholderAtom* mpPlaceHolderAtom;
sal_uInt16 mnInstance;
sal_uInt16 mnDestinationInstance;
MSO_SPT meShapeType;
sal_uInt32 mnCurrentObject;
sal_uInt32 mnParagraphCount;
PPTParagraphObj** mpParagraphList;
PptSlidePersistEntry& mrPersistEntry;
sal_uInt32 mnTextFlags;
ImplPPTTextObj( PptSlidePersistEntry& rPersistEntry ) : mrPersistEntry ( rPersistEntry ) {};
};
class MSFILTER_DLLPUBLIC PPTTextObj
{
ImplPPTTextObj* mpImplTextObj;
void ImplClear();
PPTTextObj(){};
public :
PPTTextObj( SvStream& rSt, SdrPowerPointImport&, PptSlidePersistEntry&, DffObjData* );
PPTTextObj( PPTTextObj& rTextObj );
~PPTTextObj();
sal_uInt32 GetCurrentIndex() const { return mpImplTextObj->mnCurrentObject; };
sal_uInt32 Count() const { return mpImplTextObj->mnParagraphCount; };
PPTParagraphObj* First();
PPTParagraphObj* Next();
MSO_SPT GetShapeType() const { return mpImplTextObj->meShapeType; };
sal_uInt32 GetInstance() const { return mpImplTextObj->mnInstance; };
void SetInstance( sal_uInt16 nInstance ) { mpImplTextObj->mnInstance = nInstance; };
sal_uInt32 GetDestinationInstance() const { return mpImplTextObj->mnDestinationInstance; };
void SetDestinationInstance( sal_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,
sal_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 sal_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