blob: cfdbb2e6db11043d177d7efcf4377008834858ae [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 _EPPT_HXX_
#define _EPPT_HXX_
#include <vector>
#ifndef _PptEscherEx_HXX
#include "escherex.hxx"
#endif
#include <tools/solar.h>
#include <sot/storage.hxx>
#include <tools/gen.hxx>
#include <vcl/graph.hxx>
#include <unotools/fontcvt.hxx>
#include <tools/string.hxx>
#include "pptexanimations.hxx"
#include <pptexsoundcollection.hxx>
// ------------------------------------------------------------------------
#include <vcl/mapmod.hxx>
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include <com/sun/star/drawing/LineStyle.hpp>
#include <com/sun/star/drawing/DashStyle.hpp>
#include <com/sun/star/drawing/HatchStyle.hpp>
#include <com/sun/star/drawing/LineEndType.hpp>
#include <com/sun/star/drawing/Alignment.hpp>
#include <com/sun/star/drawing/TextAdjust.hpp>
#include <com/sun/star/drawing/CircleKind.hpp>
#include <com/sun/star/drawing/PolygonKind.hpp>
#include <com/sun/star/drawing/PolygonFlags.hpp>
#include <com/sun/star/drawing/XUniversalShapeDescriptor.hpp>
#include <com/sun/star/drawing/XShapeGrouper.hpp>
#include <com/sun/star/text/XSimpleText.hpp>
#include <com/sun/star/drawing/XConnectorShape.hpp>
#include <com/sun/star/drawing/BezierPoint.hpp>
#include <com/sun/star/drawing/Hatch.hpp>
#include <com/sun/star/drawing/LineDash.hpp>
#include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
#include <com/sun/star/presentation/XPresentationSupplier.hpp>
#include <com/sun/star/presentation/XCustomPresentationSupplier.hpp>
#include <com/sun/star/drawing/XMasterPageTarget.hpp>
#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
#include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
#include <com/sun/star/awt/XGraphics.hpp>
#include <com/sun/star/task/XStatusIndicatorSupplier.hpp>
#include <com/sun/star/presentation/AnimationEffect.hpp>
#include <com/sun/star/presentation/FadeEffect.hpp>
#include <com/sun/star/presentation/ClickAction.hpp>
#include <com/sun/star/presentation/AnimationSpeed.hpp>
#include <com/sun/star/presentation/PresentationRange.hpp>
#include <com/sun/star/text/XTextFieldsSupplier.hpp>
#include <com/sun/star/text/XTextField.hpp>
#include <com/sun/star/container/XNamed.hpp>
#include <com/sun/star/awt/FontDescriptor.hpp>
#include <com/sun/star/container/XIndexContainer.hpp>
#include <com/sun/star/awt/XControlModel.hpp>
#include <com/sun/star/style/TabStop.hpp>
#include <filter/msfilter/msocximex.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/XPropertyState.hpp>
#include <com/sun/star/beans/XPropertySetInfo.hpp>
#include <com/sun/star/awt/FontFamily.hpp>
#include <com/sun/star/awt/FontPitch.hpp>
#include <com/sun/star/awt/CharSet.hpp>
#include <com/sun/star/text/WritingMode.hpp>
#include <com/sun/star/lang/Locale.hpp>
enum PageType { NORMAL = 0, MASTER = 1, NOTICE = 2, UNDEFINED = 3 };
#define EPP_MAINMASTER_PERSIST_KEY 0x80010000
#define EPP_MAINNOTESMASTER_PERSIST_KEY 0x80020000
#define EPP_MAINSLIDE_PERSIST_KEY 0x80030000
#define EPP_MAINNOTES_PERSIST_KEY 0x80040000
#define EPP_Persist_Document 0x80080000
#define EPP_Persist_MainMaster 0x80100000
#define EPP_Persist_MainNotes 0x80200000
#define EPP_Persist_Slide 0x80400000
#define EPP_Persist_Notes 0x80800000
#define EPP_Persist_CurrentPos 0x81000000
#define EPP_Persist_VBAInfoAtom 0x84000000
#define EPP_Persist_ExObj 0x88000000
#define EPP_TEXTSTYLE_NORMAL 0x00000001
#define EPP_TEXTSTYLE_TITLE 0x00000010
#define EPP_TEXTSTYLE_BODY 0x00000100
#define EPP_TEXTSTYLE_TEXT 0x00001000
// PLACEMENT_ID
#define EPP_LAYOUT_TITLESLIDE 0 /* The slide is a title slide */
#define EPP_LAYOUT_TITLEANDBODYSLIDE 1 /* Title and body slide */
#define EPP_LAYOUT_TITLEMASTERSLIDE 2 /* Title master slide */
#define EPP_LAYOUT_MASTERSLIDE 3 /* Master slide layout */
#define EPP_LAYOUT_MASTERNOTES 4 /* Master notes layout */
#define EPP_LAYOUT_NOTESTITLEBODY 5 /* Notes title/body layout */
#define EPP_LAYOUT_HANDOUTLAYOUT 6 /* Handout layout, therefore it doesn't have placeholders except header, footer, and date */
#define EPP_LAYOUT_ONLYTITLE 7 /* Only title placeholder */
#define EPP_LAYOUT_2COLUMNSANDTITLE 8 /* Body of the slide has 2 columns and a title */
#define EPP_LAYOUT_2ROWSANDTITLE 9 /* Slide's body has 2 rows and a title */
#define EPP_LAYOUT_RIGHTCOLUMN2ROWS 10 /* Body contains 2 columns, right column has 2 rows */
#define EPP_LAYOUT_LEFTCOLUMN2ROWS 11 /* Body contains 2 columns, left column has 2 rows */
#define EPP_LAYOUT_BOTTOMROW2COLUMNS 12 /* Body contains 2 rows, bottom row has 2 columns */
#define EPP_LAYOUT_TOPROW2COLUMN 13 /* Body contains 2 rows, top row has 2 columns */
#define EPP_LAYOUT_4OBJECTS 14 /* 4 objects */
#define EPP_LAYOUT_BIGOBJECT 15 /* Big object */
#define EPP_LAYOUT_BLANCSLIDE 16 /* Blank slide */
#define EPP_LAYOUT_TITLERIGHTBODYLEFT 17 /* Vertical title on the right, body on the left */
#define EPP_LAYOUT_TITLERIGHT2BODIESLEFT 18 /* Vertical title on the right, body on the left split into 2 rows */
class Polygon;
class PptEscherEx;
class XStatusIndicatorRef;
struct PHLayout
{
sal_Int32 nLayout;
sal_uInt8 nPlaceHolder[ 8 ];
sal_uInt8 nUsedObjectPlaceHolder;
sal_uInt8 nTypeOfTitle;
sal_uInt8 nTypeOfOutliner;
sal_Bool bTitlePossible;
sal_Bool bOutlinerPossible;
sal_Bool bSecOutlinerPossible;
};
struct SOParagraph
{
sal_Bool bExtendedParameters;
sal_uInt32 nParaFlags;
sal_Int16 nBulletFlags;
String sPrefix;
String sSuffix;
String sGraphicUrl; // String auf eine Graphic
Size aBuGraSize;
sal_uInt32 nNumberingType; // in wirlichkeit ist dies ein SvxEnum
sal_uInt32 nHorzAdjust;
sal_uInt32 nBulletColor;
sal_Int32 nBulletOfs;
sal_Int16 nStartWith; // Start der nummerierung
sal_Int16 nTextOfs;
sal_Int16 nBulletRealSize; // GroessenVerhaeltnis in Proz
sal_Int16 nDepth; // aktuelle tiefe
sal_Unicode cBulletId; // wenn Numbering Type == CharSpecial
::com::sun::star::awt::FontDescriptor aFontDesc;
sal_Bool bExtendedBulletsUsed;
sal_uInt16 nBulletId;
sal_uInt32 nMappedNumType;
sal_Bool bNumberingIsNumber;
SOParagraph()
{
nDepth = 0;
bExtendedParameters = sal_False;
nParaFlags = 0;
nBulletFlags = 0;
nBulletOfs = 0;
nTextOfs = 0;
bExtendedBulletsUsed = sal_False;
nBulletId = 0xffff;
bNumberingIsNumber = sal_True;
};
};
// ------------------------------------------------------------------------
class EscherGraphicProvider;
class PPTExBulletProvider
{
friend struct PPTExParaSheet;
protected :
SvMemoryStream aBuExPictureStream;
SvMemoryStream aBuExOutlineStream;
SvMemoryStream aBuExMasterStream;
EscherGraphicProvider* pGraphicProv;
public :
sal_uInt16 GetId( const ByteString& rUniqueId, Size& rGraphicSize );
PPTExBulletProvider();
~PPTExBulletProvider();
};
struct FontCollectionEntry
{
String Name;
double Scaling;
sal_Int16 Family;
sal_Int16 Pitch;
sal_Int16 CharSet;
String Original;
sal_Bool bIsConverted;
FontCollectionEntry( const String& rName, sal_Int16 nFamily, sal_Int16 nPitch, sal_Int16 nCharSet ) :
Scaling ( 1.0 ),
Family ( nFamily ),
Pitch ( nPitch ),
CharSet ( nCharSet ),
Original( rName )
{
ImplInit( rName );
};
FontCollectionEntry( const String& rName ) :
Scaling ( 1.0 ),
Original( rName )
{
ImplInit( rName );
};
~FontCollectionEntry();
private :
FontCollectionEntry() {};
void ImplInit( const String& rName );
};
class VirtualDevice;
class FontCollection : private List
{
VirtualDevice* pVDev;
public :
FontCollection();
~FontCollection();
short GetScriptDirection( const String& rText ) const;
sal_uInt32 GetId( FontCollectionEntry& rFontDescriptor );
sal_uInt32 GetCount() const { return List::Count(); };
const FontCollectionEntry* GetById( sal_uInt32 nId );
FontCollectionEntry& GetLast() { return *(FontCollectionEntry*)List::Last(); };
};
// ------------------------------------------------------------------------
#define PPTEX_STYLESHEETENTRYS 9
enum PPTExTextAttr
{
ParaAttr_BulletOn,
ParaAttr_BuHardFont,
ParaAttr_BuHardColor,
ParaAttr_BuHardHeight,
ParaAttr_BulletChar,
ParaAttr_BulletFont,
ParaAttr_BulletHeight,
ParaAttr_BulletColor,
ParaAttr_Adjust,
ParaAttr_LineFeed,
ParaAttr_UpperDist,
ParaAttr_LowerDist,
ParaAttr_TextOfs,
ParaAttr_BulletOfs,
ParaAttr_DefaultTab,
ParaAttr_AsianLB_1,
ParaAttr_AsianLB_2,
ParaAttr_AsianLB_3,
ParaAttr_BiDi,
CharAttr_Bold,
CharAttr_Italic,
CharAttr_Underline,
CharAttr_Shadow,
CharAttr_Strikeout,
CharAttr_Embossed,
CharAttr_Font,
CharAttr_AsianOrComplexFont,
CharAttr_Symbol,
CharAttr_FontHeight,
CharAttr_FontColor,
CharAttr_Escapement
};
struct PPTExCharLevel
{
sal_uInt16 mnFlags;
sal_uInt16 mnFont;
sal_uInt16 mnAsianOrComplexFont;
sal_uInt16 mnFontHeight;
sal_uInt16 mnEscapement;
sal_uInt32 mnFontColor;
};
struct PPTExCharSheet
{
PPTExCharLevel maCharLevel[ 5 ];
PPTExCharSheet( int nInstance );
void SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
FontCollection& rFontCollection, int nLevel );
void Write( SvStream& rSt, PptEscherEx* pEx, sal_uInt16 nLev, sal_Bool bFirst, sal_Bool bSimpleText,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPagePropSet );
};
struct PPTExParaLevel
{
sal_Bool mbIsBullet;
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_Bool mbExtendedBulletsUsed;
sal_uInt16 mnBulletId;
sal_uInt16 mnBulletStart;
sal_uInt32 mnMappedNumType;
sal_uInt32 mnNumberingType;
sal_uInt16 mnAsianSettings;
sal_uInt16 mnBiDi;
};
struct PPTExParaSheet
{
PPTExBulletProvider& rBuProv;
sal_uInt32 mnInstance;
PPTExParaLevel maParaLevel[ 5 ];
PPTExParaSheet( int nInstance, sal_uInt16 nDefaultTab, PPTExBulletProvider& rProv );
void SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
FontCollection& rFontCollection, int nLevel, const PPTExCharLevel& rCharLevel );
void Write( SvStream& rSt, PptEscherEx* pEx, sal_uInt16 nLev, sal_Bool bFirst, sal_Bool bSimpleText,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPagePropSet );
};
class PPTExStyleSheet
{
public :
PPTExCharSheet* mpCharSheet[ PPTEX_STYLESHEETENTRYS ];
PPTExParaSheet* mpParaSheet[ PPTEX_STYLESHEETENTRYS ];
PPTExStyleSheet( sal_uInt16 nDefaultTab, PPTExBulletProvider& rBuProv );
~PPTExStyleSheet();
PPTExParaSheet& GetParaSheet( int nInstance ) { return *mpParaSheet[ nInstance ]; };
PPTExCharSheet& GetCharSheet( int nInstance ) { return *mpCharSheet[ nInstance ]; };
void SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
FontCollection& rFontCollection, int nInstance, int nLevel );
sal_Bool IsHardAttribute( sal_uInt32 nInstance, sal_uInt32 nLevel, PPTExTextAttr eAttr, sal_uInt32 nValue );
sal_uInt32 SizeOfTxCFStyleAtom() const;
void WriteTxCFStyleAtom( SvStream& rSt );
};
struct EPPTHyperlink
{
String aURL;
sal_uInt32 nType; // bit 0-7 : type ( 1: click action to a slide )
// ( 2: hyperlink url )
// bit 8-23: index
// bit 31 : hyperlink is attached to a shape
EPPTHyperlink( const String rURL, sal_uInt32 nT ) :
aURL ( rURL ),
nType ( nT ){};
};
enum PPTExOleObjEntryType
{
NORMAL_OLE_OBJECT, OCX_CONTROL
};
struct PPTExOleObjEntry
{
PPTExOleObjEntryType eType;
sal_uInt32 nOfsA; // offset to the EPP_ExOleObjAtom in mpExEmbed (set at creation)
sal_uInt32 nOfsB; // offset to the EPP_ExOleObjStg
::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > xControlModel;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape;
PPTExOleObjEntry( PPTExOleObjEntryType eT, sal_uInt32 nOfs ) :
eType ( eT ),
nOfsA ( nOfs ) {};
};
struct TextRuleEntry
{
int nPageNumber;
SvMemoryStream* pOut;
TextRuleEntry( int nPg ) :
nPageNumber( nPg ),
pOut ( NULL ){};
~TextRuleEntry() { delete pOut; };
};
// ------------------------------------------------------------------------
struct GroupEntry
{
sal_uInt32 mnCurrentPos;
sal_uInt32 mnCount;
::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > mXIndexAccess;
GroupEntry( ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & rIndex )
{
mXIndexAccess = rIndex;
mnCount =mXIndexAccess->getCount();
mnCurrentPos = 0;
};
GroupEntry( sal_uInt32 nCount )
{
mnCount = nCount;
mnCurrentPos = 0;
};
~GroupEntry(){};
};
// ------------------------------------------------------------------------
class GroupTable
{
protected:
sal_uInt32 mnIndex;
sal_uInt32 mnCurrentGroupEntry;
sal_uInt32 mnMaxGroupEntry;
sal_uInt32 mnGroupsClosed;
GroupEntry** mpGroupEntry;
void ImplResizeGroupTable( sal_uInt32 nEntrys );
public:
sal_uInt32 GetCurrentGroupIndex() const { return mnIndex; };
sal_Int32 GetCurrentGroupLevel() const { return mnCurrentGroupEntry - 1; };
::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > &
GetCurrentGroupAccess() const { return mpGroupEntry[ mnCurrentGroupEntry - 1 ]->mXIndexAccess; };
sal_uInt32 GetGroupsClosed();
void ResetGroupTable( sal_uInt32 nCount );
void ClearGroupTable();
sal_Bool EnterGroup( ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & rIndex );
sal_Bool GetNextGroupEntry();
GroupTable();
~GroupTable();
};
class PropValue
{
protected :
::com::sun::star::uno::Any mAny;
::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySet > mXPropSet;
sal_Bool ImplGetPropertyValue( const String& rString );
sal_Bool ImplGetPropertyValue( const ::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySet > &, const String& );
public :
static sal_Bool GetPropertyValue(
::com::sun::star::uno::Any& rAny,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
const String& rPropertyName,
sal_Bool bTestPropertyAvailability = sal_False );
static ::com::sun::star::beans::PropertyState GetPropertyState(
const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > &,
const String& rPropertyName );
};
class PropStateValue : public PropValue
{
protected :
::com::sun::star::beans::PropertyState ePropState;
::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertyState > mXPropState;
sal_Bool ImplGetPropertyValue( const String& rString, sal_Bool bGetPropertyState = sal_True );
};
// ------------------------------------------------------------------------
struct FieldEntry;
class PortionObj : public PropStateValue
{
friend class ParagraphObj;
protected :
void ImplClear();
void ImplConstruct( const PortionObj& rPortionObj );
sal_uInt32 ImplGetTextField( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & rXTextRangeRef,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSetRef, String& rURL );
sal_uInt32 ImplCalculateTextPositions( sal_uInt32 nCurrentTextPosition );
void ImplGetPortionValues( FontCollection& rFontCollection, sal_Bool bGetPropStateValue = sal_False );
public :
::com::sun::star::beans::PropertyState meCharColor;
::com::sun::star::beans::PropertyState meCharHeight;
::com::sun::star::beans::PropertyState meFontName;
::com::sun::star::beans::PropertyState meAsianOrComplexFont;
::com::sun::star::beans::PropertyState meCharEscapement;
::com::sun::star::lang::Locale meCharLocale;
sal_uInt16 mnCharAttrHard;
sal_uInt32 mnCharColor;
sal_uInt16 mnCharAttr;
sal_uInt16 mnCharHeight;
sal_uInt16 mnFont;
sal_uInt16 mnAsianOrComplexFont;
sal_Int16 mnCharEscapement;
sal_uInt32 mnTextSize;
sal_Bool mbLastPortion;
sal_uInt16* mpText;
FieldEntry* mpFieldEntry;
PortionObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & rXTextRangeRef,
sal_Bool bLast, FontCollection& rFontCollection );
PortionObj( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSetRef,
FontCollection& rFontCollection );
PortionObj( const PortionObj& rPortionObj );
~PortionObj();
void Write( SvStream* pStrm, sal_Bool bLast );
sal_uInt32 Count() const { return mnTextSize; };
PortionObj& operator=( const PortionObj& rPortionObj );
};
struct ParaFlags
{
sal_Bool bFirstParagraph : 1;
sal_Bool bLastParagraph : 1;
ParaFlags() { bFirstParagraph = sal_True; bLastParagraph = sal_False; };
};
class ParagraphObj : public List, public PropStateValue, public SOParagraph
{
friend class TextObj;
friend struct PPTExParaSheet;
MapMode maMapModeSrc;
MapMode maMapModeDest;
protected :
void ImplConstruct( const ParagraphObj& rParagraphObj );
void ImplClear();
sal_uInt32 ImplCalculateTextPositions( sal_uInt32 nCurrentTextPosition );
void ImplGetParagraphValues( PPTExBulletProvider& rBuProv, sal_Bool bGetPropStateValue = sal_False );
void ImplGetNumberingLevel( PPTExBulletProvider& rBuProv, sal_Int16 nDepth, sal_Bool bIsBullet, sal_Bool bGetPropStateValue = sal_False );
public :
::com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop > maTabStop;
sal_uInt32 mnTextSize;
sal_Bool mbIsBullet;
sal_Bool mbFirstParagraph;
sal_Bool mbLastParagraph;
::com::sun::star::beans::PropertyState meBullet;
::com::sun::star::beans::PropertyState meTextAdjust;
::com::sun::star::beans::PropertyState meLineSpacing;
::com::sun::star::beans::PropertyState meLineSpacingTop;
::com::sun::star::beans::PropertyState meLineSpacingBottom;
::com::sun::star::beans::PropertyState meForbiddenRules;
::com::sun::star::beans::PropertyState meParagraphPunctation;
::com::sun::star::beans::PropertyState meBiDi;
sal_uInt16 mnTextAdjust;
sal_Int16 mnLineSpacing;
sal_Int16 mnLineSpacingTop;
sal_Int16 mnLineSpacingBottom;
sal_Bool mbForbiddenRules;
sal_Bool mbParagraphPunctation;
sal_uInt16 mnBiDi;
ParagraphObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > & rXTextContentRef,
ParaFlags, FontCollection& rFontCollection,
PPTExBulletProvider& rBuProv );
ParagraphObj( const ParagraphObj& rParargraphObj );
ParagraphObj( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSetRef,
PPTExBulletProvider& rBuProv );
void CalculateGraphicBulletSize( sal_uInt16 nFontHeight );
~ParagraphObj();
void Write( SvStream* pStrm );
sal_uInt32 Count() const { return mnTextSize; };
ParagraphObj& operator=( const ParagraphObj& rParagraphObj );
};
struct ImplTextObj
{
sal_uInt32 mnRefCount;
sal_uInt32 mnTextSize;
int mnInstance;
List* mpList;
sal_Bool mbHasExtendedBullets;
sal_Bool mbFixedCellHeightUsed;
ImplTextObj( int nInstance );
~ImplTextObj();
};
class TextObj
{
mutable ImplTextObj* mpImplTextObj;
void ImplCalculateTextPositions();
public :
TextObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XSimpleText > &
rXText, int nInstance, FontCollection& rFontCollection, PPTExBulletProvider& rBuProv );
TextObj( const TextObj& rTextObj );
~TextObj();
void Write( SvStream* pStrm );
ParagraphObj* First(){ return (ParagraphObj*)mpImplTextObj->mpList->First(); };
ParagraphObj* Next(){ return(ParagraphObj*)mpImplTextObj->mpList->Next(); };
sal_uInt32 Count() const { return mpImplTextObj->mnTextSize; };
int GetInstance() const { return mpImplTextObj->mnInstance; };
sal_Bool HasExtendedBullets(){ return mpImplTextObj->mbHasExtendedBullets; };
void WriteTextSpecInfo( SvStream* pStrm );
TextObj& operator=( TextObj& rTextObj );
};
// ------------------------------------------------------------------------
struct CellBorder;
class PPTWriter : public GroupTable, public PropValue, public PPTExBulletProvider
{
sal_Bool mbStatus;
sal_Bool mbUseNewAnimations;
sal_uInt32 mnStatMaxValue;
sal_uInt32 mnLatestStatValue;
std::vector< PPTExStyleSheet* > maStyleSheetList;
PPTExStyleSheet* mpStyleSheet;
Fraction maFraction;
MapMode maMapModeSrc;
MapMode maMapModeDest;
::com::sun::star::awt::Size maDestPageSize;
Size maPageSize; // #121183# Keep size in logic coordinates (100th mm)
::com::sun::star::awt::Size maNotesPageSize;
PageType meLatestPageType;
List maSlideNameList;
rtl::OUString maBaseURI;
::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mXModel;
::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > mXStatusIndicator;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPagesSupplier > mXDrawPagesSupplier;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XMasterPagesSupplier > mXMasterPagesSupplier;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPages > mXDrawPages;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > mXDrawPage;
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > mXPagePropSet;
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > mXBackgroundPropSet;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > mXShapes;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > mXShape;
::com::sun::star::uno::Reference< ::com::sun::star::text::XSimpleText > mXText; // TextRef des globalen Text
::com::sun::star::uno::Reference< ::com::sun::star::text::XTextCursor > mXCursor;
::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > mXCursorText; // TextRef des Teilstuecks des Cursors
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > mXCursorPropSet; // die Properties des Teilstueckes
::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > mXTextField;
::com::sun::star::awt::Size maSize;
::com::sun::star::awt::Point maPosition;
Rectangle maRect;
ByteString mType;
sal_Bool mbPresObj;
sal_Bool mbEmptyPresObj;
sal_Bool mbStatusIndicator;
sal_Int32 mnAngle;
sal_uInt32 mnTextStyle;
sal_Bool mbFontIndependentLineSpacing;
sal_uInt32 mnTextSize;
SvStorageRef mrStg;
SvStream* mpCurUserStrm;
SvStream* mpStrm;
SvStream* mpPicStrm;
PptEscherEx* mpPptEscherEx;
List maExOleObj;
sal_uInt32 mnVBAOleOfs;
SvMemoryStream* mpVBA;
sal_uInt32 mnExEmbed;
SvMemoryStream* mpExEmbed;
sal_uInt32 mnPages; // anzahl einzelner Slides ( ohne masterpages & notes & handout )
sal_uInt32 mnMasterPages; //
sal_uInt32 mnDrawings; // anzahl Slides + masterpages + notes + handout
sal_uInt32 mnPagesWritten;
sal_uInt32 mnUniqueSlideIdentifier;
sal_uInt32 mnTxId; // Identifier determined by the HOST (PP) ????
sal_uInt32 mnDiaMode; // 0 -> manuell
// 1 -> halbautomatisch
// 2 -> automatisch
sal_uInt32 mnShapeMasterTitle;
sal_uInt32 mnShapeMasterBody;
List maHyperlink;
FontCollection maFontCollection;
ppt::ExSoundCollection maSoundCollection;
PHLayout& ImplGetLayout( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPropSet ) const;
void ImplWriteExtParaHeader( SvMemoryStream& rSt, sal_uInt32 nRef, sal_uInt32 nInstance, sal_uInt32 nSlideId );
sal_uInt32 ImplProgBinaryTag( SvStream* pOutStrm = NULL );
sal_uInt32 ImplProgBinaryTagContainer( SvStream* pOutStrm = NULL, SvMemoryStream* pBinTag = NULL );
sal_uInt32 ImplProgTagContainer( SvStream* pOutStrm = NULL, SvMemoryStream* pBinTag = NULL );
sal_uInt32 ImplOutlineViewInfoContainer( SvStream* pOutStrm = NULL );
sal_uInt32 ImplSlideViewInfoContainer( sal_uInt32 nInstance, SvStream* pOutStrm = NULL );
sal_uInt32 ImplVBAInfoContainer( SvStream* pOutStrm = NULL );
sal_uInt32 ImplDocumentListContainer( SvStream* pOutStrm = NULL );
sal_uInt32 ImplMasterSlideListContainer( SvStream* pOutStrm = NULL );
public:
static void WriteCString( SvStream&, const String&, sal_uInt32 nInstance = 0 );
protected:
sal_Bool ImplCreateDocumentSummaryInformation( sal_uInt32 nCnvrtFlags );
sal_Bool ImplCreateCurrentUserStream();
void ImplCreateHeaderFooterStrings( SvStream& rOut,
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPagePropSet );
void ImplCreateHeaderFooters( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPagePropSet );
sal_Bool ImplCreateDocument();
sal_Bool ImplCreateHyperBlob( SvMemoryStream& rStream );
sal_uInt32 ImplInsertBookmarkURL( const String& rBookmark, const sal_uInt32 nType,
const String& rStringVer0, const String& rStringVer1, const String& rStringVer2, const String& rStringVer3 );
sal_Bool ImplCreateMaster( sal_uInt32 nPageNum );
sal_Bool ImplCreateMainNotes();
sal_Bool ImplCreateSlide( sal_uInt32 nPageNum );
sal_Bool ImplCreateNotes( sal_uInt32 nPageNum );
void ImplWriteBackground( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXBackgroundPropSet );
void ImplWriteVBA( SvMemoryStream* pVBA );
void ImplWriteOLE( sal_uInt32 nCnvrtFlags );
sal_Bool ImplWriteAtomEnding();
sal_Bool ImplInitSOIface();
sal_Bool ImplSetCurrentStyleSheet( sal_uInt32 nPageNum );
sal_Bool ImplGetPageByIndex( sal_uInt32 nIndex, PageType );
sal_Bool ImplGetShapeByIndex( sal_uInt32 nIndex, sal_Bool bGroup = sal_False );
sal_uInt32 ImplGetMasterIndex( PageType ePageType );
void ImplFlipBoundingBox( EscherPropertyContainer& rPropOpt );
sal_Bool ImplGetText();
sal_Bool ImplCreatePresentationPlaceholder( const sal_Bool bMaster, const PageType PageType,
const sal_uInt32 StyleInstance, const sal_uInt8 PlaceHolderId );
sal_Bool ImplGetEffect( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
::com::sun::star::presentation::AnimationEffect& eEffect,
::com::sun::star::presentation::AnimationEffect& eTextEffect,
sal_Bool& bHasSound );
void ImplWriteObjectEffect( SvStream& rSt,
::com::sun::star::presentation::AnimationEffect eEffect,
::com::sun::star::presentation::AnimationEffect eTextEffect,
sal_uInt16 nOrder );
void ImplWriteClickAction( SvStream& rSt, ::com::sun::star::presentation::ClickAction eAction, sal_Bool bMediaClickAction );
sal_Bool ImplGetStyleSheets();
void ImplWriteParagraphs( SvStream& rOutStrm, TextObj& rTextObj );
void ImplWritePortions( SvStream& rOutStrm, TextObj& rTextObj );
void ImplWriteTextStyleAtom( SvStream& rOut, int nTextInstance, sal_uInt32 nAtomInstance,
TextRuleEntry* pTextRule, SvStream& rExtBu, EscherPropertyContainer* );
void ImplAdjustFirstLineLineSpacing( TextObj& rTextObj, EscherPropertyContainer& rPropOpt );
void ImplCreateShape( sal_uInt32 nType, sal_uInt32 nFlags, EscherSolverContainer& );
void ImplCreateTextShape( EscherPropertyContainer&, EscherSolverContainer&, sal_Bool bFill );
void ImplWritePage( const PHLayout& rLayout,
EscherSolverContainer& rSolver,
PageType ePageType,
sal_Bool bMaster,
int nPageNumber = 0 );
sal_Bool ImplCreateCellBorder( const CellBorder* pCellBorder, sal_Int32 nX1, sal_Int32 nY1, sal_Int32 nX2, sal_Int32 nY2 );
void ImplCreateTable( com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& rXShape, EscherSolverContainer& aSolverContainer,
EscherPropertyContainer& aPropOpt );
::com::sun::star::awt::Point ImplMapPoint( const ::com::sun::star::awt::Point& );
::com::sun::star::awt::Size ImplMapSize( const ::com::sun::star::awt::Size& );
Rectangle ImplMapRectangle( const ::com::sun::star::awt::Rectangle& );
sal_Bool ImplCloseDocument(); // die font-, hyper-, Soundliste wird geschrieben ..
public:
PPTWriter( const std::vector< com::sun::star::beans::PropertyValue >&, SvStorageRef& rSvStorage,
::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & rModel,
::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > & rStatInd,
SvMemoryStream* pVBA, sal_uInt32 nCnvrtFlags );
~PPTWriter();
sal_Bool IsValid() const { return mbStatus; };
};
#endif