summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sd/prj/build.lst5
-rwxr-xr-xsd/prj/d.lst1
-rw-r--r--sd/source/filter/pptx/eppt.hxx303
-rw-r--r--sd/source/filter/pptx/epptbase.hxx411
-rw-r--r--sd/source/filter/pptx/epptdef.hxx263
-rw-r--r--sd/source/filter/pptx/epptooxml.hxx138
-rw-r--r--sd/source/filter/pptx/escherex.hxx77
-rw-r--r--sd/source/filter/pptx/grouptable.hxx58
-rw-r--r--sd/source/filter/pptx/makefile.mk61
-rw-r--r--sd/source/filter/pptx/pptexanimations.hxx151
-rw-r--r--sd/source/filter/pptx/pptexsoundcollection.hxx86
-rw-r--r--sd/source/filter/pptx/pptx-NOTES2
-rw-r--r--sd/source/filter/pptx/pptx-eppt.cxx1580
-rw-r--r--sd/source/filter/pptx/pptx-epptbase.cxx947
-rw-r--r--sd/source/filter/pptx/pptx-epptooxml.cxx2076
-rw-r--r--sd/source/filter/pptx/pptx-epptso.cxx3907
-rw-r--r--sd/source/filter/pptx/pptx-escherex.cxx294
-rw-r--r--sd/source/filter/pptx/pptx-grouptable.cxx114
-rw-r--r--sd/source/filter/pptx/pptx-pptexanimations.cxx2229
-rw-r--r--sd/source/filter/pptx/pptx-pptexsoundcollection.cxx231
-rw-r--r--sd/source/filter/pptx/pptx-stylesheet.cxx485
-rw-r--r--sd/source/filter/pptx/pptx-text.cxx1410
-rw-r--r--sd/source/filter/pptx/text.hxx246
-rwxr-xr-xsd/util/makefile.mk31
-rw-r--r--sd/util/pptx.map9
25 files changed, 2 insertions, 15113 deletions
diff --git a/sd/prj/build.lst b/sd/prj/build.lst
index db9214a64774..6b4f478b7c20 100644
--- a/sd/prj/build.lst
+++ b/sd/prj/build.lst
@@ -1,4 +1,4 @@
-sd sd : filter l10n animations svx sfx2 stoc canvas slideshow oox NULL
+sd sd : filter l10n animations svx sfx2 stoc canvas NULL
sd sd usr1 - all sd_mkout NULL
sd sd\inc nmake - all sd_inc NULL
sd sd\prj get - all sd_prj NULL
@@ -33,7 +33,6 @@ sd sd\source\filter\ppt nmake - all sd_ppt sd_inc NULL
sd sd\source\filter nmake - all sd_filt sd_sdi sd_ppt sd_inc NULL
sd sd\source\filter\cgm nmake - all sd_cgm sd_inc NULL
sd sd\source\filter\eppt nmake - all sd_eppt sd_inc NULL
-sd sd\source\filter\pptx nmake - all sd_pptx sd_inc NULL
sd sd\source\filter\grf nmake - all sd_grf sd_inc NULL
sd sd\source\filter\xml nmake - all sd_xml sd_inc NULL
sd sd\source\filter\html nmake - all sd_html sd_inc NULL
@@ -45,5 +44,5 @@ sd sd\source\ui\framework\module nmake - all sd_framework_module sd_inc N
sd sd\source\ui\framework\factories nmake - all sd_framework_factories sd_inc NULL
sd sd\source\ui\framework\tools nmake - all sd_framework_tools sd_inc NULL
sd sd\source\ui\annotations nmake - all sd_uiannotations sd_inc NULL
-sd sd\util nmake - all sd_util sd_app sd_cgm sd_core sd_dlg sd_docsh sd_eppt sd_pptx sd_filt sd_func sd_grf sd_unid sd_view sd_xml sd_html sd_ppt sd_accessibility sd_animations sd_toolpanel sd_toolpanel_controls sd_tools sd_slsshell sd_slsmodel sd_slsview sd_slscontroller sd_slscache sd_notes sd_controller sd_table sd_slideshow sd_presenter sd_undo sd_helper sd_framework_configuration sd_framework_module sd_framework_tools sd_framework_factories sd_text sd_annotations sd_uiannotations NULL
+sd sd\util nmake - all sd_util sd_app sd_cgm sd_core sd_dlg sd_docsh sd_eppt sd_filt sd_func sd_grf sd_unid sd_view sd_xml sd_html sd_ppt sd_accessibility sd_animations sd_toolpanel sd_toolpanel_controls sd_tools sd_slsshell sd_slsmodel sd_slsview sd_slscontroller sd_slscache sd_notes sd_controller sd_table sd_slideshow sd_presenter sd_undo sd_helper sd_framework_configuration sd_framework_module sd_framework_tools sd_framework_factories sd_text sd_annotations sd_uiannotations NULL
sd sd\qa\unoapi nmake - all sd_qa_unoapi NULL
diff --git a/sd/prj/d.lst b/sd/prj/d.lst
index 7e7e9cd96f31..14f85e982eab 100755
--- a/sd/prj/d.lst
+++ b/sd/prj/d.lst
@@ -22,7 +22,6 @@ mkdir: %_DEST%\xml%_EXT%\uiconfig\modules\simpress\statusbar
..\%__SRC%\bin\sd??????.dll %_DEST%\bin%_EXT%\sd??????.dll
..\%__SRC%\bin\sd*.res %_DEST%\bin%_EXT%\sd*.res
..\%__SRC%\bin\sd???????.dll %_DEST%\bin%_EXT%\sd???????.dll
-..\%__SRC%\bin\pptx*.dll %_DEST%\bin%_EXT%\pptx*.dll
..\%__SRC%\bin\emp?????.* %_DEST%\bin%_EXT%\emp?????.*
mkdir: %_DEST%\pck%_EXT%
diff --git a/sd/source/filter/pptx/eppt.hxx b/sd/source/filter/pptx/eppt.hxx
deleted file mode 100644
index e5e1dcd3d4b1..000000000000
--- a/sd/source/filter/pptx/eppt.hxx
+++ /dev/null
@@ -1,303 +0,0 @@
-/*************************************************************************
- *
- * 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: eppt.hxx,v $
- * $Revision: 1.51 $
- *
- * 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 _EPPT_HXX_
-#define _EPPT_HXX_
-#include <vector>
-#ifndef _PptEscherEx_HXX
-#include "escherex.hxx"
-#endif
-#include <tools/solar.h>
-#include <sot/storage.hxx>
-#include <vcl/graph.hxx>
-#include <unotools/fontcvt.hxx>
-#include "pptexanimations.hxx"
-#include <pptexsoundcollection.hxx>
-#include "text.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/XCustomPresentationSupplier.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/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/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>
-
-#include <epptbase.hxx>
-
-#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
-
-class Polygon;
-class XStatusIndicatorRef;
-
-// ------------------------------------------------------------------------
-
-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; };
-};
-
-class TextObjBinary : public TextObj
-{
-public:
- TextObjBinary( ::com::sun::star::uno::Reference< ::com::sun::star::text::XSimpleText > &
- rXText, int nInstance, FontCollection& rFontCollection, PPTExBulletProvider& rBuProv ) : TextObj( rXText, nInstance, rFontCollection, rBuProv ) {}
-
- void Write( SvStream* pStrm );
- void WriteTextSpecInfo( SvStream* pStrm );
-};
-
-// ------------------------------------------------------------------------
-struct CellBorder;
-class PPTWriter : public PPTWriterBase, public PPTExBulletProvider
-{
- sal_uInt32 mnCnvrtFlags;
- sal_Bool mbStatus;
- sal_Bool mbUseNewAnimations;
- sal_uInt32 mnStatMaxValue;
- sal_uInt32 mnLatestStatValue;
-
- EscherGraphicProvider* mpGraphicProvider;
- List maSlideNameList;
-
- ::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;
- sal_uInt32 mnTextStyle;
-
- sal_Bool mbFontIndependentLineSpacing;
- sal_uInt32 mnTextSize;
-
- SvStorageRef mrStg;
- SvStorageStream* mpCurUserStrm;
- SvStorageStream* mpStrm;
- SvStorageStream* mpPicStrm;
- PptEscherEx* mpPptEscherEx;
-
- List maExOleObj;
- sal_uInt32 mnVBAOleOfs;
- SvMemoryStream* mpVBA;
- sal_uInt32 mnExEmbed;
- SvMemoryStream* mpExEmbed;
-
- 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;
-
- ppt::ExSoundCollection maSoundCollection;
-
- 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 );
-
- protected:
-
- sal_Bool ImplCreateDocumentSummaryInformation();
- 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 );
- virtual 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 );
- virtual sal_Bool ImplCreateMainNotes();
- sal_Bool ImplCreateNotes( sal_uInt32 nPageNum );
- void ImplWriteBackground( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXBackgroundPropSet );
- void ImplWriteVBA();
- void ImplWriteOLE();
- sal_Bool ImplWriteAtomEnding();
-
- 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 );
- 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 );
- void 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 );
-
- sal_Bool ImplCloseDocument(); // die font-, hyper-, Soundliste wird geschrieben ..
- void ImplWriteCString( SvStream&, const String&, sal_uInt32 nInstance = 0 );
-
- virtual void ImplWriteSlide( sal_uInt32 nPageNum, sal_uInt32 nMasterID, sal_uInt16 nMode,
- sal_Bool bHasBackground, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > aXBackgroundPropSet );
- virtual void ImplWriteNotes( sal_uInt32 nPageNum );
- virtual void ImplWriteSlideMaster( sal_uInt32 nPageNum, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > aXBackgroundPropSet );
-
- public:
- PPTWriter( 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; };
-
- virtual void exportPPTPre();
- virtual void exportPPTPost();
-};
-
-
-#endif
diff --git a/sd/source/filter/pptx/epptbase.hxx b/sd/source/filter/pptx/epptbase.hxx
deleted file mode 100644
index e54ceab10be5..000000000000
--- a/sd/source/filter/pptx/epptbase.hxx
+++ /dev/null
@@ -1,411 +0,0 @@
-#ifndef EPP_EPPTBASE_HXX
-#define EPP_EPPTBASE_HXX
-
-#include "grouptable.hxx"
-#include <vector>
-#include <vcl/mapmod.hxx>
-#include <tools/list.hxx>
-#include <tools/string.hxx>
-#include <tools/stream.hxx>
-#include <tools/gen.hxx>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
-#include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
-#include <com/sun/star/drawing/XMasterPageTarget.hpp>
-#include <com/sun/star/frame/XModel.hpp>
-#include <com/sun/star/presentation/XPresentationSupplier.hpp>
-#include <com/sun/star/presentation/FadeEffect.hpp>
-#include <com/sun/star/task/XStatusIndicatorSupplier.hpp>
-
-// 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 */
-
-#define EPP_LAYOUT_SIZE 25
-
-class PptEscherEx;
-
-struct PHLayout
-{
- sal_Int32 nLayout;
- sal_uInt8 nPlaceHolder[ 8 ];
-
- sal_uInt8 nUsedObjectPlaceHolder;
- sal_uInt8 nTypeOfTitle;
- sal_uInt8 nTypeOfOutliner;
-
- BOOL bTitlePossible;
- BOOL bOutlinerPossible;
- BOOL bSecOutlinerPossible;
-};
-
-enum PageType { NORMAL = 0, MASTER = 1, NOTICE = 2, UNDEFINED = 3 };
-
-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 :
-
- PropValue() {}
-
- PropValue( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet )
- : mXPropSet( rXPropSet )
- {}
-
- ::com::sun::star::uno::Any GetAny() { return mAny; }
-
- 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 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_Int16 mnOOAdjust;
- 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 );
-};
-
-// ------------------------------------------------------------------------
-
-class PPTWriterBase : public PropValue, public GroupTable
-{
-protected:
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mXModel;
- ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > mXStatusIndicator;
-
- sal_Bool mbStatusIndicator;
-
- ::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::awt::Size maSize;
- ::com::sun::star::awt::Point maPosition;
- Rectangle maRect;
- ByteString mType;
- sal_Bool mbPresObj;
- sal_Bool mbEmptyPresObj;
- sal_Int32 mnAngle;
-
- sal_uInt32 mnPages; // number of Slides ( w/o master pages & notes & handout )
- sal_uInt32 mnMasterPages;
-
- Fraction maFraction;
- MapMode maMapModeSrc;
- MapMode maMapModeDest;
- ::com::sun::star::awt::Size maDestPageSize;
- ::com::sun::star::awt::Size maNotesPageSize;
-
- PageType meLatestPageType;
- std::vector< PPTExStyleSheet* > maStyleSheetList;
- PPTExStyleSheet* mpStyleSheet;
-
- FontCollection maFontCollection;
-
- List maTextRuleList; // TextRuleEntry's
-
- virtual void ImplWriteSlide( sal_uInt32 /* nPageNum */, sal_uInt32 /* nMasterNum */, sal_uInt16 /* nMode */,
- sal_Bool /* bHasBackground */, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > /* aXBackgroundPropSet */ ) {}
- virtual void ImplWriteNotes( sal_uInt32 nPageNum ) = 0;
- virtual void ImplWriteSlideMaster( sal_uInt32 /* nPageNum */, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > /* aXBackgroundPropSet */ ) {}
- virtual void ImplWriteLayout( sal_Int32 /* nOffset */, sal_uInt32 /* nMasterNum */ ) {}
-
- virtual void exportPPTPre() {}
- virtual void exportPPTPost() {}
-
- virtual sal_Bool ImplCreateDocument()=0;
- virtual sal_Bool ImplCreateMainNotes()=0;
-
- sal_Bool GetStyleSheets();
- sal_Bool GetShapeByIndex( sal_uInt32 nIndex, sal_Bool bGroup = FALSE );
-
- sal_Bool CreateMainNotes();
-
- ::com::sun::star::awt::Size MapSize( const ::com::sun::star::awt::Size& );
- ::com::sun::star::awt::Point MapPoint( const ::com::sun::star::awt::Point& );
- Rectangle MapRectangle( const ::com::sun::star::awt::Rectangle& );
-
- sal_Bool ContainsOtherShapeThanPlaceholders( sal_Bool bForOOMLX );
-
-public:
- PPTWriterBase();
- PPTWriterBase( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & rModel,
- const ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > & rStatInd );
-
- ~PPTWriterBase();
-
- void exportPPT();
-
- sal_Bool InitSOIface();
- sal_Bool GetPageByIndex( sal_uInt32 nIndex, PageType );
- sal_uInt32 GetMasterIndex( PageType ePageType );
- sal_Bool SetCurrentStyleSheet( sal_uInt32 nPageNum );
-
- sal_Bool GetPresObj() { return mbPresObj; }
-
- PHLayout& GetLayout( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPropSet ) const;
- PHLayout& GetLayout( sal_Int32 nOffset ) const;
- sal_Int32 GetLayoutOffset( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPropSet ) const;
-
- sal_Bool CreateSlide( sal_uInt32 nPageNum );
- sal_Bool CreateSlideMaster( sal_uInt32 nPageNum );
- sal_Bool CreateNotes( sal_uInt32 nPageNum );
-
- static sal_Int8 GetTransition( sal_Int16 nTransitionType, sal_Int16 nTransitionSubtype, ::com::sun::star::presentation::FadeEffect eEffect, sal_uInt8& nDirection );
- static sal_Int8 GetTransition( ::com::sun::star::presentation::FadeEffect eEffect, sal_uInt8& nDirection );
-};
-
-#define PPT_TRANSITION_TYPE_NONE 0
-#define PPT_TRANSITION_TYPE_RANDOM 1
-#define PPT_TRANSITION_TYPE_BLINDS 2
-#define PPT_TRANSITION_TYPE_CHECKER 3
-#define PPT_TRANSITION_TYPE_COVER 4
-#define PPT_TRANSITION_TYPE_DISSOLVE 5
-#define PPT_TRANSITION_TYPE_FADE 6
-#define PPT_TRANSITION_TYPE_PULL 7
-#define PPT_TRANSITION_TYPE_RANDOM_BARS 8
-#define PPT_TRANSITION_TYPE_STRIPS 9
-#define PPT_TRANSITION_TYPE_WIPE 10
-#define PPT_TRANSITION_TYPE_ZOOM 11
-#define PPT_TRANSITION_TYPE_SPLIT 13
-
-// effects, new in xp
-#define PPT_TRANSITION_TYPE_DIAMOND 17
-#define PPT_TRANSITION_TYPE_PLUS 18
-#define PPT_TRANSITION_TYPE_WEDGE 19
-#define PPT_TRANSITION_TYPE_PUSH 20
-#define PPT_TRANSITION_TYPE_COMB 21
-#define PPT_TRANSITION_TYPE_NEWSFLASH 22
-#define PPT_TRANSITION_TYPE_SMOOTHFADE 23
-#define PPT_TRANSITION_TYPE_WHEEL 26
-#define PPT_TRANSITION_TYPE_CIRCLE 27
-
-#endif
diff --git a/sd/source/filter/pptx/epptdef.hxx b/sd/source/filter/pptx/epptdef.hxx
deleted file mode 100644
index 788b668e14ba..000000000000
--- a/sd/source/filter/pptx/epptdef.hxx
+++ /dev/null
@@ -1,263 +0,0 @@
-/*************************************************************************
- *
- * 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: epptdef.hxx,v $
- * $Revision: 1.4 $
- *
- * 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 _EPPT_DEF_HXX
-#define _EPPT_DEF_HXX
-
-#include <tools/solar.h>
-
-#define EPP_FLAG_CONTAINER 0x0F // If the version field of a record
- // header takes on this value, the
- // record header marks the start of
- // a container.
-
-#define EPP_Unknown 0
-#define EPP_SubContainerCompleted 1
-#define EPP_IRRAtom 2
-#define EPP_PSS 3
-#define EPP_SubContainerException 4
-#define EPP_ClientSignal1 6
-#define EPP_ClientSignal2 7
-#define EPP_PowerPointStateInfoAtom 10
-#define EPP_Document 1000
-#define EPP_DocumentAtom 1001
-#define EPP_EndDocument 1002
-#define EPP_SlidePersist 1003
-#define EPP_SlideBase 1004
-#define EPP_SlideBaseAtom 1005
-#define EPP_Slide 1006
-#define EPP_SlideAtom 1007
-#define EPP_Notes 1008
-#define EPP_NotesAtom 1009
-#define EPP_Environment 1010
-#define EPP_SlidePersistAtom 1011 //0x03F3
-#define EPP_Scheme 1012
-#define EPP_SchemeAtom 1013
-#define EPP_DocViewInfo 1014
-#define EPP_SslideLayoutAtom 1015
-#define EPP_MainMaster 1016
-#define EPP_SSSlideInfoAtom 1017
-#define EPP_SlideViewInfo 1018
-#define EPP_GuideAtom 1019
-#define EPP_ViewInfo 1020
-#define EPP_ViewInfoAtom 1021
-#define EPP_SlideViewInfoAtom 1022
-#define EPP_VBAInfo 1023
-#define EPP_VBAInfoAtom 1024
-#define EPP_SSDocInfoAtom 1025
-#define EPP_Summary 1026
-#define EPP_Texture 1027
-#define EPP_VBASlideInfo 1028
-#define EPP_VBASlideInfoAtom 1029
-#define EPP_DocRoutingSlip 1030
-#define EPP_OutlineViewInfo 1031
-#define EPP_SorterViewInfo 1032
-#define EPP_ExObjList 1033
-#define EPP_ExObjListAtom 1034
-#define EPP_PPDrawingGroup 1035
-#define EPP_PPDrawing 1036
-#define EPP_NamedShows 1040
-#define EPP_NamedShow 1041
-#define EPP_NamedShowSlides 1042
-#define EPP_List 2000
-#define EPP_FontCollection 2005
-#define EPP_ListPlaceholder 2017
-#define EPP_BookmarkCollection 2019
-#define EPP_SoundCollection 2020
-#define EPP_SoundCollAtom 2021
-#define EPP_Sound 2022
-#define EPP_SoundData 2023
-#define EPP_BookmarkSeedAtom 2025
-#define EPP_GuideList 2026
-#define EPP_RunArray 2028
-#define EPP_RunArrayAtom 2029
-#define EPP_ArrayElementAtom 2030
-#define EPP_Int4ArrayAtom 2031
-#define EPP_ColorSchemeAtom 2032
-
-// these atoms first was seen in ppt2000 in a private Tag atom
-#define EPP_PST_ExtendedBuGraContainer 2040 // consist of 4041
-#define EPP_PST_ExtendedBuGraAtom 2041 // the instance of this atom indices the current graphic
-
-#define EPP_OEShape 3008
-#define EPP_ExObjRefAtom 3009
-#define EPP_OEPlaceholderAtom 3011
-#define EPP_GrColor 3020
-#define EPP_GrectAtom 3025
-#define EPP_GratioAtom 3031
-#define EPP_Gscaling 3032
-#define EPP_GpointAtom 3034
-#define EPP_OEShapeAtom 3035
-#define EPP_OutlineTextRefAtom 3998
-#define EPP_TextHeaderAtom 3999
-#define EPP_TextCharsAtom 4000
-#define EPP_StyleTextPropAtom 4001
-#define EPP_BaseTextPropAtom 4002
-#define EPP_TxMasterStyleAtom 4003
-#define EPP_TxCFStyleAtom 4004
-#define EPP_TxPFStyleAtom 4005
-#define EPP_TextRulerAtom 4006
-#define EPP_TextBookmarkAtom 4007
-#define EPP_TextBytesAtom 4008
-#define EPP_TxSIStyleAtom 4009
-#define EPP_TextSpecInfoAtom 4010
-#define EPP_DefaultRulerAtom 4011
-
-// these atoms first was seen in ppt2000 in a private Tag atom
-#define EPP_PST_ExtendedParagraphAtom 4012
-#define EPP_PST_ExtendedParagraphMasterAtom 4013
-#define EPP_PST_ExtendedPresRuleContainer 4014 // consist of 4012, 4015,
-#define EPP_PST_ExtendedParagraphHeaderAtom 4015 // the instance of this atom indices the current presobj
- // the first UINT32 in this atom indices the current slideId
-
-#define EPP_FontEnityAtom 4023
-#define EPP_FontEmbedData 4024
-#define EPP_TypeFace 4025
-#define EPP_CString 4026
-#define EPP_ExternalObject 4027
-#define EPP_MetaFile 4033
-#define EPP_ExOleObj 4034
-#define EPP_ExOleObjAtom 4035
-#define EPP_ExPlainLinkAtom 4036
-#define EPP_CorePict 4037
-#define EPP_CorePictAtom 4038
-#define EPP_ExPlainAtom 4039
-#define EPP_SrKinsoku 4040
-#define EPP_Handout 4041
-#define EPP_ExEmbed 4044
-#define EPP_ExEmbedAtom 4045
-#define EPP_ExLink 4046
-#define EPP_ExLinkAtom_old 4047
-#define EPP_BookmarkEntityAtom 4048
-#define EPP_ExLinkAtom 4049
-#define EPP_SrKinsokuAtom 4050
-#define EPP_ExHyperlinkAtom 4051
-#define EPP_ExPlain 4053
-#define EPP_ExPlainLink 4054
-#define EPP_ExHyperlink 4055
-#define EPP_SlideNumberMCAtom 4056
-#define EPP_HeadersFooters 4057
-#define EPP_HeadersFootersAtom 4058
-#define EPP_RecolorEntryAtom 4062
-#define EPP_TxInteractiveInfoAtom 4063
-#define EPP_EmFormatAtom 4065
-#define EPP_CharFormatAtom 4066
-#define EPP_ParaFormatAtom 4067
-#define EPP_MasterText 4068
-#define EPP_RecolorInfoAtom 4071
-#define EPP_ExQuickTime 4073
-#define EPP_ExQuickTimeMovie 4074
-#define EPP_ExQuickTimeMovieData 4075
-#define EPP_ExSubscription 4076
-#define EPP_ExSubscriptionSection 4077
-#define EPP_ExControl 4078
-#define EPP_ExControlAtom 4091
-#define EPP_SlideListWithText 4080 // 0x0FF0
-#define EPP_AnimationInfoAtom 4081
-#define EPP_InteractiveInfo 4082
-#define EPP_InteractiveInfoAtom 4083
-#define EPP_SlideList 4084
-#define EPP_UserEditAtom 4085
-#define EPP_CurrentUserAtom 4086
-#define EPP_DateTimeMCAtom 4087
-#define EPP_GenericDateMCAtom 4088
-#define EPP_HeaderMCAtom 4089
-#define EPP_FooterMCAtom 4090
-#define EPP_ExMediaAtom 4100
-#define EPP_ExVideo 4101
-#define EPP_ExAviMovie 4102
-#define EPP_ExMCIMovie 4103
-#define EPP_ExMIDIAudio 4109
-#define EPP_ExCDAudio 4110
-#define EPP_ExWAVAudioEmbedded 4111
-#define EPP_ExWAVAudioLink 4112
-#define EPP_ExOleObjStg 4113
-#define EPP_ExCDAudioAtom 4114
-#define EPP_ExWAVAudioEmbeddedAtom 4115
-#define EPP_AnimationInfo 4116
-#define EPP_RTFDateTimeMCAtom 4117
-#define EPP_ProgTags 5000
-#define EPP_ProgStringTag 5001
-#define EPP_ProgBinaryTag 5002
-#define EPP_BinaryTagData 5003
-#define EPP_PrintOptions 6000
-#define EPP_PersistPtrFullBlock 6001
-#define EPP_PersistPtrIncrementalBlock 6002
-#define EPP_RulerIndentAtom 10000
-#define EPP_GscalingAtom 10001
-#define EPP_GrColorAtom 10002
-#define EPP_GLPointAtom 10003
-
-#define EPP_PLACEHOLDER_NONE 0 // 0 None
-#define EPP_PLACEHOLDER_MASTERTITLE 1 // 1 Master title
-#define EPP_PLACEHOLDER_MASTERBODY 2 // 2 Master body
-#define EPP_PLACEHOLDER_MASTERCENTEREDTITLE 3 // 3 Master centered title
-#define EPP_PLACEHOLDER_MASTERSUBTITLE 4 // 10 Master subtitle
-#define EPP_PLACEHOLDER_MASTERNOTESSLIDEIMAGE 5 // 4 Master notes slide image
-#define EPP_PLACEHOLDER_MASTERNOTESBODYIMAGE 6 // 5 Master notes body image
-#define EPP_PLACEHOLDER_MASTERDATE 7 // 6 Master date
-#define EPP_PLACEHOLDER_MASTERSLIDENUMBER 8 // 7 Master slide number
-#define EPP_PLACEHOLDER_MASTERFOOTER 9 // 8 Master footer
-#define EPP_PLACEHOLDER_MASTERHEADER 10 // 9 Master header
-#define EPP_PLACEHOLDER_GENERICTEXTOBJECT // 11 Generic text object
-#define EPP_PLACEHOLDER_TITLE 13 // 12 Title
-#define EPP_PLACEHOLDER_BODY 14 // 13 Body
-#define EPP_PLACEHOLDER_NOTESBODY 12 // 14 Notes body
-#define EPP_PLACEHOLDER_CENTEREDTITLE 15 // 15 Centered title
-#define EPP_PLACEHOLDER_SUBTITLE 16 // 16 Subtitle
-#define EPP_PLACEHOLDER_VERTICALTEXTTITLE 17 // 17 Vertical text title
-#define EPP_PLACEHOLDER_VERTICALTEXTBODY 18 // 18 Vertical text body
-#define EPP_PLACEHOLDER_NOTESSLIDEIMAGE 11 // 19 Notes slide image
-#define EPP_PLACEHOLDER_OBJECT 19 // 20 Object (no matter the size)
-#define EPP_PLACEHOLDER_GRAPH 20 // 21 Graph
-#define EPP_PLACEHOLDER_TABLE 21 // 22 Table
-#define EPP_PLACEHOLDER_CLIPART 22 // 23 Clip Art
-#define EPP_PLACEHOLDER_ORGANISZATIONCHART 23 // 24 Organization Chart
-#define EPP_PLACEHOLDER_MEDIACLIP 24 // 25 Media Clip
-
-#define EPP_TEXTTYPE_Title 0
-#define EPP_TEXTTYPE_Body 1
-#define EPP_TEXTTYPE_Notes 2
-#define EPP_TEXTTYPE_notUsed 3
-#define EPP_TEXTTYPE_Other 4 // ( Text in a shape )
-#define EPP_TEXTTYPE_CenterBody 5 // ( subtitle in title slide )
-#define EPP_TEXTTYPE_CenterTitle 6 // ( title in title slide )
-#define EPP_TEXTTYPE_HalfBody 7 // ( body in two-column slide )
-#define EPP_TEXTTYPE_QuarterBody 8 // ( body in four-body slide )
-
-#define EPP_SLIDESIZE_TYPEONSCREEN 0
-#define EPP_SLIDESIZE_TYPELETTERSIZERPAPER 1
-#define EPP_SLIDESIZE_TYPEA4PAPER 2
-#define EPP_SLIDESIZE_TYPE35MM 3
-#define EPP_SLIDESIZE_TYPEOVERHEAD 4
-#define EPP_SLIDESIZE_TYPEBANNER 5
-#define EPP_SLIDESIZE_TYPECUSTOM 6
-
-#endif
diff --git a/sd/source/filter/pptx/epptooxml.hxx b/sd/source/filter/pptx/epptooxml.hxx
deleted file mode 100644
index d54169f215bc..000000000000
--- a/sd/source/filter/pptx/epptooxml.hxx
+++ /dev/null
@@ -1,138 +0,0 @@
-#ifndef EPPT_POWERPOINT_EXPORT_HXX
-#define EPPT_POWERPOINT_EXPORT_HXX
-
-#include <oox/core/xmlfilterbase.hxx>
-#include <oox/helper/zipstorage.hxx>
-#include <oox/export/shapes.hxx>
-#include "epptbase.hxx"
-
-namespace com { namespace sun { namespace star {
- namespace animations {
- class XAnimate;
- class XAnimationNode;
- }
-}}}
-
-namespace oox {
- namespace drawingml {
- class ShapeExport;
- }
-namespace core {
-
-class PowerPointShapeExport;
-
-struct LayoutInfo
-{
- std::vector< sal_Int32 > mnFileIdArray;
-};
-
-enum PlaceholderType
-{
- None,
- SlideImage,
- Notes,
- Header,
- Footer,
- SlideNumber,
- DateAndTime,
- Outliner,
- Title,
- Subtitle
-};
-
-class PowerPointExport : public XmlFilterBase, public PPTWriterBase
-{
- friend class PowerPointShapeExport;
-public:
-
- PowerPointExport( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > & rSMgr );
- ~PowerPointExport();
-
- // from FilterBase
- virtual bool importDocument() throw();
- virtual bool exportDocument() throw();
-
- // only needed for import, leave them empty, refactor later XmlFilterBase to export and import base?
- virtual sal_Int32 getSchemeClr( sal_Int32 /* nColorSchemeToken */ ) const { return 0; }
- virtual oox::vml::Drawing* getVmlDrawing() { return NULL; }
- virtual const oox::drawingml::Theme* getCurrentTheme() const { return NULL; }
- virtual const oox::drawingml::table::TableStyleListPtr getTableStyles() { return oox::drawingml::table::TableStyleListPtr(); }
- virtual oox::drawingml::chart::ChartConverter* getChartConverter() { return &maChartConverter; }
-
- static const char* GetSideDirection( sal_uInt8 nDirection );
- static const char* GetCornerDirection( sal_uInt8 nDirection );
- static const char* Get8Direction( sal_uInt8 nDirection );
-
-protected:
-
- virtual void ImplWriteSlide( sal_uInt32 nPageNum, sal_uInt32 nMasterNum, sal_uInt16 nMode,
- sal_Bool bHasBackground, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > aXBackgroundPropSet );
- virtual void ImplWriteNotes( sal_uInt32 nPageNum );
- virtual void ImplWriteSlideMaster( sal_uInt32 nPageNum, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > aXBackgroundPropSet );
- virtual void ImplWriteLayout( sal_Int32 nOffset, sal_uInt32 nMasterNum );
- void WriteTheme( sal_Int32 nThemeNum );
-
- virtual sal_Bool ImplCreateDocument();
- virtual sal_Bool ImplCreateMainNotes();
-
- sal_Bool WriteNotesMaster();
-
- void WriteAnimateTo( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Any aValue, const ::rtl::OUString& rAttributeName );
- void WriteAnimateValues( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimate >& rXAnimate );
- void WriteAnimationCondition( ::sax_fastparser::FSHelperPtr pFS, ::com::sun::star::uno::Any& rAny, sal_Bool bWriteEvent, sal_Bool bMainSeqChild );
- void WriteAnimationCondition( ::sax_fastparser::FSHelperPtr pFS, const char* pDelay, const char* pEvent, double fDelay, sal_Bool bHasFDelay );
- void WriteAnimations( ::sax_fastparser::FSHelperPtr pFS );
- void WriteAnimationAttributeName( ::sax_fastparser::FSHelperPtr pFS, const ::rtl::OUString& rAttributeName );
- void WriteAnimationNode( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& rXNode, sal_Bool bMainSeqChild );
- void WriteAnimationNodeAnimate( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& rXNode, sal_Int32 nXmlNodeType, sal_Bool bMainSeqChild );
- void WriteAnimationNodeAnimateInside( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& rXNode, sal_Bool bMainSeqChild, sal_Bool bSimple );
- void WriteAnimationNodeSeq( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& rXNode, sal_Int32 nXmlNodeType, sal_Bool bMainSeqChild );
- void WriteAnimationNodeEffect( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& rXNode, sal_Int32 nXmlNodeType, sal_Bool bMainSeqChild );
- void WriteAnimationNodeCommonPropsStart( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& rXNode, sal_Bool bSingle, sal_Bool bMainSeqChild );
- void WriteAnimationNodeCommonPropsEnd( ::sax_fastparser::FSHelperPtr pFS );
- void WriteAnimationProperty( ::sax_fastparser::FSHelperPtr pFS, const ::com::sun::star::uno::Any& rAny );
- void WriteAnimationTarget( ::sax_fastparser::FSHelperPtr pFS, ::com::sun::star::uno::Any aTarget );
- void WriteTextStyles( ::sax_fastparser::FSHelperPtr pFS );
- void WriteTextStyle( ::sax_fastparser::FSHelperPtr pFS, int nInstance, sal_Int32 xmlToken );
- void WriteTextStyleLevel( ::sax_fastparser::FSHelperPtr pFS, int nInstance, int nLevel );
- void ImplWriteBackground( ::sax_fastparser::FSHelperPtr pFS, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > aXBackgroundPropSet );
- void WriteTransition( ::sax_fastparser::FSHelperPtr pFS );
-
- sal_Int32 GetLayoutFileId( sal_Int32 nOffset, sal_uInt32 nMasterNum );
-
- // shapes
- void WriteShapeTree( ::sax_fastparser::FSHelperPtr pFS, PageType ePageType, sal_Bool bMaster );
-
- sal_uInt32 GetNewSlideId() { return mnSlideIdMax ++; }
- sal_uInt32 GetNewSlideMasterId() { return mnSlideMasterIdMax ++; }
-
-private:
- void AddLayoutIdAndRelation( ::sax_fastparser::FSHelperPtr pFS, sal_Int32 nLayoutFileId );
-
- virtual ::rtl::OUString implGetImplementationName() const;
-
- ::boost::shared_ptr< ::oox::drawingml::chart::ChartConverter > mxChartConv;
-
- ::sax_fastparser::FSHelperPtr mPresentationFS;
-
- LayoutInfo mLayoutInfo[EPP_LAYOUT_SIZE];
- std::vector< ::sax_fastparser::FSHelperPtr > mpSlidesFSArray;
- std::vector< ::sax_fastparser::FSHelperPtr > mpMasterFSArray;
- sal_Int32 mnLayoutFileIdMax;
-
- sal_uInt32 mnSlideIdMax;
- sal_uInt32 mnSlideMasterIdMax;
- sal_uInt32 mnAnimationNodeIdMax;
-
- sal_Bool mbCreateNotes;
-
- static sal_Int32 nStyleLevelToken[5];
-
- ::oox::drawingml::ShapeExport::ShapeHashMap maShapeMap;
- oox::drawingml::chart::ChartConverter maChartConverter;
-};
-
-}
-}
-
-#endif
diff --git a/sd/source/filter/pptx/escherex.hxx b/sd/source/filter/pptx/escherex.hxx
deleted file mode 100644
index 739ef6300d1c..000000000000
--- a/sd/source/filter/pptx/escherex.hxx
+++ /dev/null
@@ -1,77 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 _PptEscherEX_HXX
-#define _PptEscherEX_HXX
-#include <filter/msfilter/escherex.hxx>
-
-// ---------------------------------------------------------------------------------------------
-// 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
-};
-
-// ---------------------------------------------------------------------------------------------
-
-class PptEscherEx : public EscherEx
-{
- sal_uInt32 ImplDggContainerSize();
- void ImplWriteDggContainer( SvStream& rSt );
-
- sal_uInt32 ImplOptAtomSize();
- void ImplWriteOptAtom( SvStream& rSt );
-
- sal_uInt32 ImplSplitMenuColorsAtomSize();
- void ImplWriteSplitMenuColorsAtom( SvStream& rSt );
-
- public:
-
- PptEscherEx( SvStream& rOut );
- ~PptEscherEx();
-
- void OpenContainer( UINT16 n_EscherContainer, int nRecInstance = 0 );
- void CloseContainer();
-
- sal_uInt32 EnterGroup( Rectangle* pBoundRect, SvMemoryStream* pClientData );
-
- UINT32 DrawingGroupContainerSize();
- void WriteDrawingGroupContainer( SvStream& rSt );
-
- using EscherEx::EnterGroup;
-};
-
-
-#endif
diff --git a/sd/source/filter/pptx/grouptable.hxx b/sd/source/filter/pptx/grouptable.hxx
deleted file mode 100644
index 4ff0fd209586..000000000000
--- a/sd/source/filter/pptx/grouptable.hxx
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef EPPT_GROUP_TABLE
-#define EPPT_GROUP_TABLE
-
-#include <com/sun/star/container/XIndexAccess.hpp>
-
-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 SkipCurrentGroup();
- 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();
-};
-
-
-#endif
diff --git a/sd/source/filter/pptx/makefile.mk b/sd/source/filter/pptx/makefile.mk
deleted file mode 100644
index e833a18c1ecf..000000000000
--- a/sd/source/filter/pptx/makefile.mk
+++ /dev/null
@@ -1,61 +0,0 @@
-#*************************************************************************
-#
-# 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: makefile.mk,v $
-#
-# $Revision: 1.15 $
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ=..$/..$/..
-PRJNAME=sd
-TARGET=pptx
-ENABLE_EXCEPTIONS=TRUE
-VISIBILITY_HIDDEN=TRUE
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# --- Files --------------------------------------------------------
-
-.IF "$(COM)"=="GCC"
-NOOPTFILES= $(SLO)$/pptx-epptso.obj
-.ENDIF
-
-SLOFILES = $(SLO)$/pptx-eppt.obj \
- $(SLO)$/pptx-epptbase.obj \
- $(SLO)$/pptx-epptooxml.obj \
- $(SLO)$/pptx-epptso.obj \
- $(SLO)$/pptx-escherex.obj \
- $(SLO)$/pptx-grouptable.obj \
- $(SLO)$/pptx-pptexanimations.obj \
- $(SLO)$/pptx-pptexsoundcollection.obj \
- $(SLO)$/pptx-text.obj \
- $(SLO)$/pptx-stylesheet.obj
-
-# --- Targets --------------------------------------------------------------
-
-.INCLUDE : target.mk
diff --git a/sd/source/filter/pptx/pptexanimations.hxx b/sd/source/filter/pptx/pptexanimations.hxx
deleted file mode 100644
index 7618467f3d28..000000000000
--- a/sd/source/filter/pptx/pptexanimations.hxx
+++ /dev/null
@@ -1,151 +0,0 @@
-/*************************************************************************
- *
- * 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: pptexanimations.hxx,v $
- * $Revision: 1.9 $
- *
- * 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 _SD_PPT_EXANIMATIONS_HXX
-#define _SD_PPT_EXANIMATIONS_HXX
-
-#include <com/sun/star/animations/XTimeContainer.hpp>
-#include <com/sun/star/drawing/XDrawPage.hpp>
-#include <com/sun/star/animations/XAnimate.hpp>
-#include <com/sun/star/beans/NamedValue.hpp>
-#ifndef _SD_PPTANIMATIONS_HXX
-#include "../ppt/pptanimations.hxx"
-#endif
-#include <pptexsoundcollection.hxx>
-#include <filter/msfilter/escherex.hxx>
-
-#ifdef DBG_ANIM_LOG
-#include <stdio.h>
-#endif
-
-#ifndef BOOST_SHARED_PTR_HPP_INCLUDED
-#include <boost/shared_ptr.hpp>
-#endif
-
-#include <list>
-
-class DffRecordHeader;
-class SdPage;
-class SvStream;
-
-namespace ppt
-{
-
- struct AfterEffectNode
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > mxNode;
- ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > mxMaster;
-
- AfterEffectNode( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode,
- const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xMaster )
- : mxNode( xNode ), mxMaster( xMaster ) {}
- };
-
- typedef boost::shared_ptr< AfterEffectNode > AfterEffectNodePtr;
-
-typedef sal_uInt32 TranslateMode;
-#define TRANSLATE_NONE 0
-#define TRANSLATE_VALUE 1
-#define TRANSLATE_ATTRIBUTE 2
-#define TRANSLATE_MEASURE 4
-#define TRANSLATE_NUMBER_TO_STRING 8
-
-const int AFTEREFFECT_NONE = 0;
-const int AFTEREFFECT_COLOR = 1;
-const int AFTEREFFECT_SET = 2;
-
-class AnimationExporter
-{
- ::com::sun::star::uno::Any aTarget;
-
- void writeZString( SvStream& rStrm, const rtl::OUString& rVal );
- sal_Bool getColorAny( const ::com::sun::star::uno::Any& rAny, const sal_Int16 nColorSpace, sal_Int32& rMode, sal_Int32& rA, sal_Int32& rB, sal_Int32& rC ) const;
- sal_Bool exportAnimProperty( SvStream& rStrm, const sal_uInt16 nPropertyId, const ::com::sun::star::uno::Any& rAny, const TranslateMode eTranslateMode );
- void exportAnimPropertyString( SvStream& rStrm, const sal_uInt16 nPropertyId, const rtl::OUString& rVal, const TranslateMode eTranslateMode );
- void exportAnimPropertyFloat( SvStream& rStrm, const sal_uInt16 nPropertyId, const double& rVal, const TranslateMode eTranslateMode );
- void exportAnimPropertyuInt32( SvStream& rStrm, const sal_uInt16 nPropertyId, const sal_uInt32 nVal, const TranslateMode eTranslateMode );
- void exportAnimPropertyByte( SvStream& rStrm, const sal_uInt16 nPropertyId, const sal_uInt8 nVal, const TranslateMode eTranslateMode );
-
- // if available exportAnimPropertySet returns the ::com::sun::star::presentation::EffectNodeType
- sal_Int16 exportAnimPropertySet( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode );
- void exportAnimNode( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode,
- const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >* pParent, const sal_Int32 nGroupLevel, const sal_Int16 nFillDefault );
- void exportAnimate( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode );
- void exportAnimateTarget( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode, const sal_uInt32 nForceAttributeName = 0, int nAfterEffectType = AFTEREFFECT_NONE );
- void exportAnimateSet( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode, int nAfterEffectType );
- void exportAnimAction( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode );
- void exportAnimEvent( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode, const sal_Int32 nFlags = 0 );
- void exportNode( SvStream& rStrm, ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > xNode,
- const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >* xParent,
- const sal_uInt16 nContainerRecType, const sal_uInt16 nInstance, const sal_Int32 nGroupLevel, const sal_Bool bTakeBackInteractiveSequenceTiming,
- const sal_Int16 nFillDefault );
- void exportAnimateTargetElement( SvStream& rStrm, const ::com::sun::star::uno::Any aAny, const sal_Bool bCreate2b01Atom );
- void exportAnimateKeyPoints( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimate >& xAnimate );
- void exportAnimValue( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode, const sal_Bool bExportAlways );
- void exportTransitionFilter( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode );
- void exportAnimateMotion( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode );
- void exportAnimateTransform( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode );
- void exportAnimateColor( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode, int nAfterEffectType );
- void exportIterate( SvStream& rStrm, const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode );
-
- const EscherSolverContainer& mrSolverContainer;
- ppt::ExSoundCollection& mrExSoundCollection;
- void processAfterEffectNodes( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode );
-
- bool isAfterEffectNode( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode ) const;
- bool hasAfterEffectNode( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode, ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xAfterEffectNode ) const;
- bool isEmptyNode( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode ) const;
-
- ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > createAfterEffectNodeClone( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode ) const;
-
- std::list< AfterEffectNodePtr > maAfterEffectNodes;
-
-public:
- AnimationExporter( const EscherSolverContainer& rSolverContainer, ppt::ExSoundCollection& rExSoundCollection );
-
- void doexport( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& xPage, SvStream& rStrm );
-
- sal_Int32 mnCurrentGroup;
-
- // helper methods also used in ooxml export
- static ::com::sun::star::uno::Any convertAnimateValue( const ::com::sun::star::uno::Any& rSource, const rtl::OUString& rAttributeName );
- static sal_Bool GetNodeType( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode, sal_Int16& nType );
- static sal_Int16 GetFillMode( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode, const sal_Int16 nFillDefault );
- static void GetUserData( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& rUserData, const ::com::sun::star::uno::Any ** pAny, sal_Size nLen );
- static sal_uInt32 TranslatePresetSubType( const sal_uInt32 nPresetClass, const sal_uInt32 nPresetId, const rtl::OUString& rPresetSubType );
- static sal_uInt32 GetPresetID( const rtl::OUString& rPreset, sal_uInt32 nAPIPresetClass, sal_Bool& bPresetId );
- static sal_uInt32 GetValueTypeForAttributeName( const rtl::OUString& rAttributeName );
-
- static const sal_Char* FindTransitionName( const sal_Int16 nType, const sal_Int16 nSubType, const sal_Bool bDirection );
- static ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > getTargetElementShape( const ::com::sun::star::uno::Any& rAny, sal_Int32& rBegin, sal_Int32& rEnd, sal_Bool& rParagraphTarget );
-};
-} // namespace ppt
-
-#endif
diff --git a/sd/source/filter/pptx/pptexsoundcollection.hxx b/sd/source/filter/pptx/pptexsoundcollection.hxx
deleted file mode 100644
index abf63d36a776..000000000000
--- a/sd/source/filter/pptx/pptexsoundcollection.hxx
+++ /dev/null
@@ -1,86 +0,0 @@
-/*************************************************************************
- *
- * 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: pptexsoundcollection.hxx,v $
- * $Revision: 1.4 $
- *
- * 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 _SD_PPT_EXSOUNDCOLLECTION_HXX
-#define _SD_PPT_EXSOUNDCOLLECTION_HXX
-
-#ifdef DBG_ANIM_LOG
-#include <stdio.h>
-#endif
-#include <tools/string.hxx>
-#include <tools/stream.hxx>
-#ifndef BOOST_SHARED_PTR_HPP_INCLUDED
-#include <boost/shared_ptr.hpp>
-#endif
-
-#include <list>
-
-namespace ppt
-{
-
-class ExSoundEntry
-{
- sal_uInt32 nFileSize;
- String aSoundURL;
-
- String ImplGetName() const;
- String ImplGetExtension() const;
-
- public :
-
- sal_Bool IsSameURL( const String& rURL ) const;
- sal_uInt32 GetFileSize( ) const { return nFileSize; };
-
- ExSoundEntry( const String& rSoundURL );
-
- // returns the size of a complete SoundContainer
- sal_uInt32 GetSize( sal_uInt32 nId ) const;
- void Write( SvStream& rSt, sal_uInt32 nId );
-};
-
-class ExSoundCollection : private List
-{
- const ExSoundEntry* ImplGetByIndex( sal_uInt32 nId ) const;
-
- public:
-
- ExSoundCollection() {}
- ~ExSoundCollection();
-
- sal_uInt32 GetId( const String& );
-
- // returns the size of a complete SoundCollectionContainer
- sal_uInt32 GetSize() const;
- void Write( SvStream& rSt );
-};
-
-} // namespace ppt
-
-#endif
diff --git a/sd/source/filter/pptx/pptx-NOTES b/sd/source/filter/pptx/pptx-NOTES
deleted file mode 100644
index 1e2f168f6f21..000000000000
--- a/sd/source/filter/pptx/pptx-NOTES
+++ /dev/null
@@ -1,2 +0,0 @@
-* ParaAdjust of empty text paragraph in shapes is by default set to left, but
-should be set to center. Same problem exist for ppt as well as pptx export
diff --git a/sd/source/filter/pptx/pptx-eppt.cxx b/sd/source/filter/pptx/pptx-eppt.cxx
deleted file mode 100644
index 485e44f856b1..000000000000
--- a/sd/source/filter/pptx/pptx-eppt.cxx
+++ /dev/null
@@ -1,1580 +0,0 @@
-/*************************************************************************
- *
- * 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: eppt.cxx,v $
- * $Revision: 1.64.78.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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-#include <eppt.hxx>
-#include "epptdef.hxx"
-#include <tools/globname.hxx>
-#include <tools/datetime.hxx>
-#include <tools/poly.hxx>
-#include <vcl/graph.hxx>
-#include <vcl/bmpacc.hxx>
-#include <vcl/gradient.hxx>
-#include <rtl/ustring.hxx>
-#include <tools/stream.hxx>
-#include <svtools/fltcall.hxx>
-#include <sfx2/docfile.hxx>
-#include <svx/unoapi.hxx>
-#include <svx/svdobj.hxx>
-#include <svx/svdoole2.hxx>
-#include <svx/svdmodel.hxx>
-#include <svx/svdpage.hxx>
-#include <com/sun/star/view/PaperOrientation.hpp>
-#include <com/sun/star/view/PaperFormat.hpp>
-#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
-#include <tools/zcodec.hxx>
-#include <editeng/svxenum.hxx>
-#include <sot/storinfo.hxx>
-#include <filter/msfilter/msoleexp.hxx>
-#include <vcl/virdev.hxx>
-#include <svtools/wmf.hxx>
-#include <filter/msfilter/msdffimp.hxx>
-#include <editeng/flditem.hxx>
-#include <sfx2/docinf.hxx>
-#include <oox/export/utils.hxx>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::presentation;
-
-using ::com::sun::star::beans::XPropertySet;
-
-//============================ PPTWriter ==================================
-
-PPTWriter::PPTWriter( SvStorageRef& rSvStorage,
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & rXModel,
- ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > & rXStatInd,
- SvMemoryStream* pVBA, sal_uInt32 nCnvrtFlags ) :
- PPTWriterBase ( rXModel, rXStatInd ),
- mnCnvrtFlags ( nCnvrtFlags ),
- mbStatus ( sal_False ),
- mbUseNewAnimations ( sal_True ),
- mnLatestStatValue ( 0 ),
- mrStg ( rSvStorage ),
- mpCurUserStrm ( NULL ),
- mpStrm ( NULL ),
- mpPicStrm ( NULL ),
- mpPptEscherEx ( NULL ),
- mnVBAOleOfs ( 0 ),
- mpVBA ( pVBA ),
- mnExEmbed ( 0 ),
- mpExEmbed ( new SvMemoryStream ),
- mnPagesWritten ( 0 ),
- mnTxId ( 0x7a2f64 )
-{
-}
-
-void PPTWriter::exportPPTPre()
-{
- if ( !mrStg.Is() )
- return;
-
- // MasterPages + Slides und Notizen + NotesMasterPage
- mnDrawings = mnMasterPages + ( mnPages << 1 ) + 1;
-
- if ( mXStatusIndicator.is() )
- {
- mbStatusIndicator = TRUE;
- mnStatMaxValue = ( mnPages + mnMasterPages ) * 5;
- mXStatusIndicator->start( String( RTL_CONSTASCII_USTRINGPARAM( "PowerPoint Export" ) ),
- mnStatMaxValue + ( mnStatMaxValue >> 3 ) );
- }
-
- SvGlobalName aGName( 0x64818d10L, 0x4f9b, 0x11cf, 0x86, 0xea, 0x00, 0xaa, 0x00, 0xb9, 0x29, 0xe8 );
- mrStg->SetClass( aGName, 0, String( RTL_CONSTASCII_USTRINGPARAM( "MS PowerPoint 97" ) ) );
-
- if ( !ImplCreateCurrentUserStream() )
- return;
-
- mpStrm = mrStg->OpenSotStream( String( RTL_CONSTASCII_USTRINGPARAM( "PowerPoint Document" ) ) );
- if ( !mpStrm )
- return;
-
- if ( !mpPicStrm )
- mpPicStrm = mrStg->OpenSotStream( String( RTL_CONSTASCII_USTRINGPARAM( "Pictures" ) ) );
-
- mpPptEscherEx = new PptEscherEx( *mpStrm );
-};
-
-void PPTWriter::exportPPTPost()
-{
- if ( !ImplCloseDocument() )
- return;
-
- if ( mbStatusIndicator )
- {
- mXStatusIndicator->setText( String( RTL_CONSTASCII_USTRINGPARAM( "PowerPoint Export" ) ) );
- sal_uInt32 nValue = mnStatMaxValue + ( mnStatMaxValue >> 3 );
- if ( nValue > mnLatestStatValue )
- {
- mXStatusIndicator->setValue( nValue );
- mnLatestStatValue = nValue;
- }
- }
-
- ImplWriteOLE();
-
- ImplWriteVBA();
-
- if ( !ImplWriteAtomEnding() )
- return;
-
- if ( !ImplCreateDocumentSummaryInformation() )
- return;
-
- mbStatus = TRUE;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PPTWriter::ImplWriteSlide( sal_uInt32 nPageNum, sal_uInt32 nMasterNum, sal_uInt16 nMode,
- sal_Bool bHasBackground, Reference< XPropertySet > aXBackgroundPropSet )
-{
- Any aAny;
-
- const PHLayout& rLayout = GetLayout( mXPagePropSet );
- mpPptEscherEx->PtReplaceOrInsert( EPP_Persist_Slide | nPageNum, mpStrm->Tell() );
- mpPptEscherEx->OpenContainer( EPP_Slide );
- mpPptEscherEx->AddAtom( 24, EPP_SlideAtom, 2 );
- *mpStrm << rLayout.nLayout;
- mpStrm->Write( rLayout.nPlaceHolder, 8 ); // placeholderIDs ( 8Stueck )
- *mpStrm << (sal_uInt32)(nMasterNum | 0x80000000) // master ID ( ist gleich 0x80000000 bei einer masterpage )
- << (sal_uInt32)nPageNum + 0x100 // notes ID ( ist gleich null wenn keine notizen vorhanden )
- << nMode
- << (sal_uInt16)0; // padword
-
- mnDiaMode = 0;
- sal_Bool bVisible = sal_True;
- FadeEffect eFe = FadeEffect_NONE;
-
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Visible" ) ) ) )
- aAny >>= bVisible;
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Change" ) ) ) )
- {
- switch ( *(INT32*)aAny.getValue() )
- {
- case 1 : // automatisch
- mnDiaMode++;
- case 2 : // halbautomatisch
- mnDiaMode++;
- default :
- case 0 : // manuell
- break;
- }
- }
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Effect" ) ) ) )
- aAny >>= eFe;
-
- sal_uInt32 nSoundRef = 0;
- sal_Bool bIsSound = sal_False;
- sal_Bool bStopSound = sal_False;
- sal_Bool bLoopSound = sal_False;
-
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Sound" ) ) ) )
- {
- rtl::OUString aSoundURL;
- if ( aAny >>= aSoundURL )
- {
- nSoundRef = maSoundCollection.GetId( aSoundURL );
- bIsSound = sal_True;
- }
- else
- aAny >>= bStopSound;
- }
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "LoopSound" ) ) ) )
- aAny >>= bLoopSound;
-
-
- sal_Bool bNeedsSSSlideInfoAtom = ( bVisible == FALSE )
- || ( mnDiaMode == 2 )
- || ( bIsSound )
- || ( bStopSound )
- || ( eFe != FadeEffect_NONE );
-
- if ( bNeedsSSSlideInfoAtom )
- {
- sal_uInt8 nDirection = 0;
- sal_uInt8 nTransitionType = 0;
- sal_uInt16 nBuildFlags = 1; // advange by mouseclick
- INT32 nSlideTime = 0; // muss noch !!!
- sal_uInt8 nSpeed = 1;
-
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Speed" ) ) ) )
- {
- AnimationSpeed aAs;
- aAny >>= aAs;
- nSpeed = (sal_uInt8)aAs;
- }
-
- sal_Int16 nTT = 0, nTST = 0;
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "TransitionType" ) ) )
- && ( aAny >>= nTT ) )
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "TransitionSubtype" ) ) )
- && ( aAny >>= nTST ) )
- nTransitionType = GetTransition( nTT, nTST, eFe, nDirection );
-
- if( !nTransitionType )
- nTransitionType = GetTransition( eFe, nDirection );
-
- if ( mnDiaMode == 2 ) // automatic ?
- nBuildFlags |= 0x400;
- if ( bVisible == FALSE )
- nBuildFlags |= 4;
- if ( bIsSound )
- nBuildFlags |= 16;
- if ( bLoopSound )
- nBuildFlags |= 64;
- if ( bStopSound )
- nBuildFlags |= 256;
-
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Duration" ) ) ) )// duration of this slide
- nSlideTime = *(INT32*)aAny.getValue() << 10; // in ticks
-
-
- mpPptEscherEx->AddAtom( 16, EPP_SSSlideInfoAtom );
- *mpStrm << nSlideTime // standtime in ticks
- << nSoundRef
- << nDirection
- << nTransitionType
- << nBuildFlags
- << nSpeed
- << (sal_uInt8)0 << (sal_uInt8)0 << (sal_uInt8)0;
- }
-
- ImplCreateHeaderFooters( mXPagePropSet );
-
- EscherSolverContainer aSolverContainer;
- mpPptEscherEx->OpenContainer( EPP_PPDrawing );
- mpPptEscherEx->OpenContainer( ESCHER_DgContainer );
- mpPptEscherEx->EnterGroup(0,0);
- ImplWritePage( rLayout, aSolverContainer, NORMAL, FALSE, nPageNum ); // Die Shapes der Seite werden im PPT Dok. erzeugt
- mpPptEscherEx->LeaveGroup();
-
- if ( bHasBackground )
- ImplWriteBackground( aXBackgroundPropSet );
- else
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Rectangle, 0xc00 ); // Flags: Connector | Background | HasSpt
- EscherPropertyContainer aPropOpt;
- aPropOpt.AddOpt( ESCHER_Prop_fillRectRight, PPTtoEMU( maDestPageSize.Width ) );
- aPropOpt.AddOpt( ESCHER_Prop_fillRectBottom, PPTtoEMU( maDestPageSize.Width ) );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x120012 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x80000 );
- aPropOpt.AddOpt( ESCHER_Prop_bWMode, ESCHER_wDontShow );
- aPropOpt.AddOpt( ESCHER_Prop_fBackground, 0x10001 ); // if true, this is the background shape
- aPropOpt.Commit( *mpStrm );
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
- }
-
- aSolverContainer.WriteSolver( *mpStrm );
-
- mpPptEscherEx->CloseContainer(); // ESCHER_DgContainer
- mpPptEscherEx->CloseContainer(); // EPP_Drawing
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 1 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x808080 << (sal_uInt32)0x000000 << (sal_uInt32)0x99cc00 << (sal_uInt32)0xcc3333 << (sal_uInt32)0xffcccc << (sal_uInt32)0xb2b2b2;
-
- if ( mbUseNewAnimations )
- {
- SvMemoryStream amsofbtAnimGroup;
- ppt::AnimationExporter aExporter( aSolverContainer, maSoundCollection );
- aExporter.doexport( mXDrawPage, amsofbtAnimGroup );
- sal_uInt32 nmsofbtAnimGroupSize = amsofbtAnimGroup.Tell();
- if ( nmsofbtAnimGroupSize )
- {
- EscherExContainer aProgTags ( *mpStrm, EPP_ProgTags );
- EscherExContainer aProgBinaryTag( *mpStrm, EPP_ProgBinaryTag );
- {
- EscherExAtom aCString( *mpStrm, EPP_CString );
- *mpStrm << (sal_uInt32)0x5f005f
- << (sal_uInt32)0x50005f
- << (sal_uInt32)0x540050
- << (sal_uInt16)0x31
- << (sal_uInt16)0x30;
- }
- {
- EscherExAtom aBinaryTagData( *mpStrm, EPP_BinaryTagData );
- {
- {
- EscherExAtom aMagic2( *mpStrm, 0x2eeb );
- *mpStrm << (sal_uInt32)0x01c45df9
- << (sal_uInt32)0xe1471b30;
- }
- {
- EscherExAtom aMagic( *mpStrm, 0x2b00 );
- *mpStrm << (sal_uInt32)0;
- }
- }
- mpStrm->Write( amsofbtAnimGroup.GetData(), amsofbtAnimGroup.Tell() );
- {
- EscherExContainer aMagic2( *mpStrm, 0x2b02 );
- }
- }
- }
- }
- mpPptEscherEx->CloseContainer(); // EPP_Slide
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PPTWriter::ImplWriteSlideMaster( sal_uInt32 nPageNum, Reference< XPropertySet > aXBackgroundPropSet )
-{
- sal_uInt32 nFillColor = 0xffffff;
- sal_uInt32 nFillBackColor = 0x000000;
-
- ::com::sun::star::drawing::FillStyle aFS = ::com::sun::star::drawing::FillStyle_NONE;
- if ( ImplGetPropertyValue( aXBackgroundPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillStyle" ) ) ) )
- mAny >>= aFS;
- switch ( aFS )
- {
- case ::com::sun::star::drawing::FillStyle_GRADIENT :
- {
- if ( ImplGetPropertyValue( aXBackgroundPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillGradient" ) ) ) )
- {
- nFillColor = EscherPropertyContainer::GetGradientColor( (::com::sun::star::awt::Gradient*)mAny.getValue(), 0 );
- nFillBackColor = EscherPropertyContainer::GetGradientColor( (::com::sun::star::awt::Gradient*)mAny.getValue(), 1 );
- }
- }
- break;
-
- case ::com::sun::star::drawing::FillStyle_SOLID :
- {
- if ( ImplGetPropertyValue( aXBackgroundPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillColor" ) ) ) )
- {
- nFillColor = mpPptEscherEx->GetColor( *((sal_uInt32*)mAny.getValue()) );
- nFillBackColor = nFillColor ^ 0xffffff;
- }
- }
- break;
-
- default:
- break;
- }
-
- mpPptEscherEx->PtReplaceOrInsert( EPP_Persist_MainMaster | nPageNum, mpStrm->Tell() );
- mpPptEscherEx->OpenContainer( EPP_MainMaster );
- mpPptEscherEx->AddAtom( 24, EPP_SlideAtom, 2 );
- *mpStrm << (INT32)EPP_LAYOUT_TITLEANDBODYSLIDE // slide layout -> title and body slide
- << (sal_uInt8)1 << (sal_uInt8)2 << (sal_uInt8)0 << (sal_uInt8)0 << (sal_uInt8)0 << (sal_uInt8)0 << (sal_uInt8)0 << (sal_uInt8)0 // placeholderID
- << (sal_uInt32)0 // master ID ( ist gleich null bei einer masterpage )
- << (sal_uInt32)0 // notes ID ( ist gleich null wenn keine notizen vorhanden )
- << (sal_uInt16)0 // Bit 1: Follow master objects, Bit 2: Follow master scheme, Bit 3: Follow master background
- << (sal_uInt16)0; // padword
-
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 6 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x808080 << (sal_uInt32)0x000000 << (sal_uInt32)0x99cc00 << (sal_uInt32)0xcc3333 << (sal_uInt32)0xffcccc << (sal_uInt32)0xb2b2b2;
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 6 );
- *mpStrm << (sal_uInt32)0xff0000 << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x00ffff << (sal_uInt32)0x0099ff << (sal_uInt32)0xffff00 << (sal_uInt32)0x0000ff << (sal_uInt32)0x969696;
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 6 );
- *mpStrm << (sal_uInt32)0xccffff << (sal_uInt32)0x000000 << (sal_uInt32)0x336666 << (sal_uInt32)0x008080 << (sal_uInt32)0x339933 << (sal_uInt32)0x000080 << (sal_uInt32)0xcc3300 << (sal_uInt32)0x66ccff;
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 6 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x333333 << (sal_uInt32)0x000000 << (sal_uInt32)0xdddddd << (sal_uInt32)0x808080 << (sal_uInt32)0x4d4d4d << (sal_uInt32)0xeaeaea;
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 6 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x808080 << (sal_uInt32)0x000000 << (sal_uInt32)0x66ccff << (sal_uInt32)0xff0000 << (sal_uInt32)0xcc00cc << (sal_uInt32)0xc0c0c0;
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 6 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x808080 << (sal_uInt32)0x000000 << (sal_uInt32)0xc0c0c0 << (sal_uInt32)0xff6600 << (sal_uInt32)0x0000ff << (sal_uInt32)0x009900;
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 6 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x808080 << (sal_uInt32)0x000000 << (sal_uInt32)0xff9933 << (sal_uInt32)0xccff99 << (sal_uInt32)0xcc00cc << (sal_uInt32)0xb2b2b2;
-
- for ( int nInstance = EPP_TEXTTYPE_Title; nInstance <= EPP_TEXTTYPE_QuarterBody; nInstance++ )
- {
- if ( nInstance == EPP_TEXTTYPE_notUsed )
- continue;
-
- // the auto color is dependent to the page background,so we have to set a page that is in the right context
- if ( nInstance == EPP_TEXTTYPE_Notes )
- GetPageByIndex( 0, NOTICE );
- else
- GetPageByIndex( 0, MASTER );
-
- mpPptEscherEx->BeginAtom();
-
- sal_Bool bFirst = TRUE;
- sal_Bool bSimpleText = FALSE;
-
- *mpStrm << (sal_uInt16)5; // paragraph count
-
- for ( sal_uInt16 nLev = 0; nLev < 5; nLev++ )
- {
- if ( nInstance >= EPP_TEXTTYPE_CenterBody )
- {
- bFirst = FALSE;
- bSimpleText = TRUE;
- *mpStrm << nLev;
- }
- mpStyleSheet->mpParaSheet[ nInstance ]->Write( *mpStrm, mpPptEscherEx, nLev, bFirst, bSimpleText, mXPagePropSet );
- mpStyleSheet->mpCharSheet[ nInstance ]->Write( *mpStrm, mpPptEscherEx, nLev, bFirst, bSimpleText, mXPagePropSet );
- bFirst = FALSE;
- }
- mpPptEscherEx->EndAtom( EPP_TxMasterStyleAtom, 0, nInstance );
- }
- GetPageByIndex( nPageNum, MASTER );
-
- EscherSolverContainer aSolverContainer;
-
- mpPptEscherEx->OpenContainer( EPP_PPDrawing );
- mpPptEscherEx->OpenContainer( ESCHER_DgContainer );
-
- mpPptEscherEx->EnterGroup(0,0);
- ImplWritePage( GetLayout(0), aSolverContainer, MASTER, TRUE ); // Die Shapes der Seite werden im PPT Dok. erzeugt
- mpPptEscherEx->LeaveGroup();
-
- ImplWriteBackground( aXBackgroundPropSet );
-
- aSolverContainer.WriteSolver( *mpStrm );
-
- mpPptEscherEx->CloseContainer(); // ESCHER_DgContainer
- mpPptEscherEx->CloseContainer(); // EPP_Drawing
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 1 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x808080 << (sal_uInt32)0x000000 << (sal_uInt32)0x99cc00 << (sal_uInt32)0xcc3333 << (sal_uInt32)0xffcccc << (sal_uInt32)0xb2b2b2;
-
- if ( aBuExMasterStream.Tell() )
- {
- ImplProgTagContainer( mpStrm, &aBuExMasterStream );
- }
- mpPptEscherEx->CloseContainer(); // EPP_MainMaster
-}
-
-// ---------------------------------------------------------------------------------------------
-
-PPTWriter::~PPTWriter()
-{
- void* pPtr;
- delete mpExEmbed;
- delete mpPptEscherEx;
-
- std::vector< PPTExStyleSheet* >::iterator aStyleSheetIter( maStyleSheetList.begin() );
- while( aStyleSheetIter < maStyleSheetList.end() )
- delete *aStyleSheetIter++;
-
- for ( pPtr = maTextRuleList.First(); pPtr; pPtr = maTextRuleList.Next() )
- delete (TextRuleEntry*)pPtr;
- for ( pPtr = maSlideNameList.First(); pPtr; pPtr = maSlideNameList.Next() )
- delete (::rtl::OUString*)pPtr;
- for ( pPtr = maHyperlink.First(); pPtr; pPtr = maHyperlink.Next() )
- delete (EPPTHyperlink*)pPtr;
- for ( pPtr = maExOleObj.First(); pPtr; pPtr = maExOleObj.Next() )
- delete (PPTExOleObjEntry*)pPtr;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriter::ImplCreateCurrentUserStream()
-{
- mpCurUserStrm = mrStg->OpenSotStream( String( RTL_CONSTASCII_USTRINGPARAM( "Current User" ) ) );
- if ( !mpCurUserStrm )
- return FALSE;
- char pUserName[] = "Current User";
- sal_uInt32 nLenOfUserName = strlen( pUserName );
- sal_uInt32 nSizeOfRecord = 0x14 + ( ( nLenOfUserName + 4 ) & ~ 3 );
-
- *mpCurUserStrm << (sal_uInt16)0 << (sal_uInt16)EPP_CurrentUserAtom << nSizeOfRecord;
- *mpCurUserStrm << (sal_uInt32)0x14 // Len
- << (sal_uInt32)0xe391c05f; // Magic
-
- sal_uInt32 nEditPos = mpCurUserStrm->Tell();
- *mpCurUserStrm << (sal_uInt32)0x0 // OffsetToCurrentEdit;
- << (sal_uInt16)nLenOfUserName //
- << (sal_uInt16)0x3f4 // DocFileVersion
- << (sal_uInt8)3 // MajorVersion
- << (sal_uInt8)0 // MinorVersion
- << (sal_uInt16)0; // Pad Word
- pUserName[ nLenOfUserName ] = 8;
- mpCurUserStrm->Write( pUserName, nLenOfUserName + 1 );
- for ( sal_uInt32 i = 0x15 + nLenOfUserName; i < nSizeOfRecord; i++ )
- {
- *mpCurUserStrm << (sal_uInt8)0; // pad bytes
- };
- mpCurUserStrm->Seek( nEditPos );
- return TRUE;
-};
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriter::ImplCreateDocumentSummaryInformation()
-{
- uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
- mXModel, uno::UNO_QUERY_THROW);
- uno::Reference<document::XDocumentProperties> xDocProps(
- xDPS->getDocumentProperties());
-
- if (xDocProps.is()) {
-
- // no idea what this is...
- static sal_uInt8 aGuid[ 0x52 ] =
- {
- 0x4e, 0x00, 0x00, 0x00,
- '{',0,'D',0,'B',0,'1',0,'A',0,'C',0,'9',0,'6',0,'4',0,'-',0,
- 'E',0,'3',0,'9',0,'C',0,'-',0,'1',0,'1',0,'D',0,'2',0,'-',0,
- 'A',0,'1',0,'E',0,'F',0,'-',0,'0',0,'0',0,'6',0,'0',0,'9',0,
- '7',0,'D',0,'A',0,'5',0,'6',0,'8',0,'9',0,'}',0
- };
- uno::Sequence<sal_uInt8> aGuidSeq(aGuid, 0x52);
-
- SvMemoryStream aHyperBlob;
- ImplCreateHyperBlob( aHyperBlob );
-
- uno::Sequence<sal_uInt8> aHyperSeq(aHyperBlob.Tell());
- const sal_uInt8* pBlob(
- static_cast<const sal_uInt8*>(aHyperBlob.GetData()));
- for (sal_Int32 j = 0; j < aHyperSeq.getLength(); ++j) {
- aHyperSeq[j] = pBlob[j];
- }
-
- if ( mnCnvrtFlags & 0x8000 )
- {
- uno::Sequence<sal_uInt8> aThumbSeq;
- if ( GetPageByIndex( 0, NORMAL ) &&
- ImplGetPropertyValue( mXPagePropSet,
- String( RTL_CONSTASCII_USTRINGPARAM( "PreviewBitmap" ) ) ) )
- {
- aThumbSeq =
- *static_cast<const uno::Sequence<sal_uInt8>*>(mAny.getValue());
- }
- sfx2::SaveOlePropertySet( xDocProps, mrStg,
- &aThumbSeq, &aGuidSeq, &aHyperSeq);
- }
- else
- {
- sfx2::SaveOlePropertySet( xDocProps, mrStg,
- NULL, &aGuidSeq, &aHyperSeq );
- }
- }
-
- return sal_True;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PPTWriter::ImplWriteExtParaHeader( SvMemoryStream& rSt, sal_uInt32 nRef, sal_uInt32 nInstance, sal_uInt32 nSlideId )
-{
- if ( rSt.Tell() )
- {
- aBuExOutlineStream << (sal_uInt32)( ( EPP_PST_ExtendedParagraphHeaderAtom << 16 )
- | ( nRef << 4 ) )
- << (sal_uInt32)8
- << (sal_uInt32)nSlideId
- << (sal_uInt32)nInstance;
- aBuExOutlineStream.Write( rSt.GetData(), rSt.Tell() );
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PPTWriter::ImplCreateHeaderFooterStrings( SvStream& rStrm, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPagePropSet )
-{
- if ( rXPagePropSet.is() )
- {
- rtl::OUString aString;
- ::com::sun::star::uno::Any aAny;
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "HeaderText" ) ), sal_True ) )
- {
- if ( aAny >>= aString )
- ImplWriteCString( rStrm, aString, 1 );
- }
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FooterText" ) ), sal_True ) )
- {
- if ( aAny >>= aString )
- ImplWriteCString( rStrm, aString, 2 );
- }
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "DateTimeText" ) ), sal_True ) )
- {
- if ( aAny >>= aString )
- ImplWriteCString( rStrm, aString, 0 );
- }
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PPTWriter::ImplCreateHeaderFooters( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPagePropSet )
-{
- if ( rXPagePropSet.is() )
- {
- sal_Bool bVal = sal_False;
- sal_uInt32 nVal = 0;
- ::com::sun::star::uno::Any aAny;
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsHeaderVisible" ) ), sal_True ) )
- {
- if ( ( aAny >>= bVal ) && bVal )
- nVal |= 0x100000;
- }
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsFooterVisible" ) ), sal_True ) )
- {
- if ( ( aAny >>= bVal ) && bVal )
- nVal |= 0x200000;
- }
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsDateTimeVisible" ) ), sal_True ) )
- {
- if ( ( aAny >>= bVal ) && bVal )
- nVal |= 0x010000;
- }
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsPageNumberVisible" ) ), sal_True ) )
- {
- if ( ( aAny >>= bVal ) && bVal )
- nVal |= 0x080000;
- }
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsDateTimeFixed" ) ), sal_True ) )
- {
- if ( ( aAny >>= bVal ) && !bVal )
- nVal |= 0x20000;
- else
- nVal |= 0x40000;
- }
- if ( PropValue::GetPropertyValue( aAny, rXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "DateTimeFormat" ) ), sal_True ) )
- {
- sal_Int32 nFormat = *(sal_Int32*)aAny.getValue();
- SvxDateFormat eDateFormat = (SvxDateFormat)( nFormat & 0xf );
- SvxTimeFormat eTimeFormat = (SvxTimeFormat)( ( nFormat >> 4 ) & 0xf );
- switch( eDateFormat )
- {
- case SVXDATEFORMAT_F :
- nFormat = 1;
- break;
- case SVXDATEFORMAT_D :
- nFormat = 2;
- break;
- case SVXDATEFORMAT_C :
- nFormat = 4;
- break;
- default:
- case SVXDATEFORMAT_A :
- nFormat = 0;
- }
- switch( eTimeFormat )
- {
- case SVXTIMEFORMAT_24_HM :
- nFormat = 9;
- break;
- case SVXTIMEFORMAT_12_HM :
- nFormat = 11;
- break;
- case SVXTIMEFORMAT_24_HMS :
- nFormat = 10;
- break;
- case SVXTIMEFORMAT_12_HMS :
- nFormat = 12;
- break;
- default:
- break;
- }
- nVal |= nFormat;
- }
-
- mpPptEscherEx->OpenContainer( EPP_HeadersFooters, 0 );
- mpPptEscherEx->AddAtom( 4, EPP_HeadersFootersAtom );
- *mpStrm << nVal;
- ImplCreateHeaderFooterStrings( *mpStrm, rXPagePropSet );
- mpPptEscherEx->CloseContainer();
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriter::ImplCreateDocument()
-{
- sal_uInt32 i;
- sal_uInt16 nSlideType = EPP_SLIDESIZE_TYPECUSTOM;
-
- sal_uInt32 nWidth = maDestPageSize.Width;
- sal_uInt32 nHeight = maDestPageSize.Height;
-
- if ( ( nWidth == 0x1680 ) && ( nHeight == 0x10e0 ) )
- nSlideType = EPP_SLIDESIZE_TYPEONSCREEN;
- else if ( ( nWidth == 0x1200 ) && ( nHeight == 0x240 ) )
- nSlideType = EPP_SLIDESIZE_TYPEBANNER;
- else if ( ( nWidth == 0x1950 ) && ( nHeight == 0x10e0 ) )
- nSlideType = EPP_SLIDESIZE_TYPE35MM;
- else if ( ( nWidth == 0x1860 ) && ( nHeight == 0x10e0 ) )
- nSlideType = EPP_SLIDESIZE_TYPEA4PAPER;
-
- mpPptEscherEx->OpenContainer( EPP_Document );
- // CREATE DOCUMENT ATOM
- mpPptEscherEx->AddAtom( 40, EPP_DocumentAtom, 1 );
- *mpStrm << nWidth // Slide Size in Master coordinates X
- << nHeight // " " " " " Y
- << (INT32)maNotesPageSize.Width // Notes Page Size X
- << (INT32)maNotesPageSize.Height // " " " Y
- << (INT32)1 << (INT32)2; // the scale used when the Powerpoint document is embedded. the default is 1:2
- mpPptEscherEx->InsertPersistOffset( EPP_MAINNOTESMASTER_PERSIST_KEY, mpStrm->Tell() );
- *mpStrm << (sal_uInt32)0 // Reference to NotesMaster ( 0 if none );
- << (sal_uInt32)0 // Reference to HandoutMaster ( 0 if none );
- << (sal_Int16)1 // Number of the first slide;
- << nSlideType // Size of the document slides ( default: EPP_SLIDESIZETYPEONSCREEN )
- << (sal_uInt8)0 // bool1 indicates if document was saved with embedded true type fonts
- << (sal_uInt8)0 // bool1 indicates if the placeholders on the title slide are omitted
- << (sal_uInt8)0 // bool1 right to left ( flag for Bidi version )
- << (sal_uInt8)1; // bool1 visibility of comments shapes
-
- mpPptEscherEx->PtInsert( EPP_Persist_Document, mpStrm->Tell() );
-
- mpPptEscherEx->OpenContainer( EPP_HeadersFooters, 3 ); //Master footer (default)
- mpPptEscherEx->AddAtom( 4, EPP_HeadersFootersAtom );
- *mpStrm << (sal_uInt32)0x25000d;
- if ( GetPageByIndex( 0, MASTER ) )
- ImplCreateHeaderFooterStrings( *mpStrm, mXPagePropSet );
- mpPptEscherEx->CloseContainer();
- mpPptEscherEx->OpenContainer( EPP_HeadersFooters, 4 ); //NotesMaster footer (default)
- mpPptEscherEx->AddAtom( 4, EPP_HeadersFootersAtom );
- *mpStrm << (sal_uInt32)0x3d000d;
- if ( GetPageByIndex( 0, NOTICE ) )
- ImplCreateHeaderFooterStrings( *mpStrm, mXPagePropSet );
- mpPptEscherEx->CloseContainer();
-
- mpPptEscherEx->OpenContainer( EPP_SlideListWithText ); // Animation info fuer die Slides
-
- sal_uInt32 nShapes;
- sal_Bool bOtherThanPlaceHolders;
-
- for ( i = 0; i < mnPages; i++ )
- {
- sal_uInt32 nPOffset, nPObjects;
- sal_Bool bOutliner, bTitle;
-
- bOtherThanPlaceHolders = bOutliner = bTitle = FALSE;
- nPObjects = 0;
-
- mpPptEscherEx->AddAtom( 20, EPP_SlidePersistAtom );
- mpPptEscherEx->InsertPersistOffset( EPP_MAINSLIDE_PERSIST_KEY | i, mpStrm->Tell() );
- *mpStrm << (sal_uInt32)0; // psrReference - logical reference to the slide persist object ( EPP_MAINSLIDE_PERSIST_KEY )
- nPOffset = mpStrm->Tell();
- *mpStrm << (sal_uInt32)0 // flags - only bit 3 used, if set then slide contains shapes other than placeholders
- << (INT32)0 // numberTexts - number of placeholder texts stored with the persist object. Allows to display outline view without loading the slide persist objects
- << (INT32)i + 0x100 // slideId - Unique slide identifier, used for OLE link monikers for example
- << (sal_uInt32)0; // reserved, usualy 0
-
- if ( !GetPageByIndex( i, NORMAL ) ) // sehr aufregend: noch einmal ueber alle seiten
- return FALSE;
- SetCurrentStyleSheet( GetMasterIndex( NORMAL ) );
-
- const PHLayout& rLayout = GetLayout( mXPagePropSet );
-
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XNamed >
- aXName( mXDrawPage, ::com::sun::star::uno::UNO_QUERY );
-
- if ( aXName.is() )
- {
- ::rtl::OUString aStr = aXName->getName();
- ::rtl::OUString *pUStr = new ::rtl::OUString( aStr );
- maSlideNameList.Insert( pUStr, LIST_APPEND );
- }
- else
- maSlideNameList.Insert( new ::rtl::OUString(), LIST_APPEND );
-
- nShapes = mXShapes->getCount();
-
- sal_Bool bSecOutl = FALSE;
- if ( nShapes && ( rLayout.bTitlePossible || rLayout.bOutlinerPossible ) )
- {
- for ( sal_uInt32 nIndex = 0; nIndex < nShapes; nIndex++ )
- {
- if ( !GetShapeByIndex( nIndex ) )
- continue;
-
- if ( mbPresObj && ( ( mType == "presentation.Outliner" ) || ( mType == "presentation.Subtitle" ) ) )
- {
- if ( bOutliner == FALSE )
- {
- bOutliner = TRUE;
- mnTextStyle = EPP_TEXTSTYLE_BODY;
- sal_uInt32 nTextType = EPP_TEXTTYPE_Body;
- if ( bSecOutl )
- nTextType = EPP_TEXTTYPE_HalfBody;
- else if ( mType == "presentation.Subtitle" )
- nTextType = EPP_TEXTTYPE_CenterBody;
-
- TextRuleEntry* pRule = new TextRuleEntry( i );
- SvMemoryStream aExtBu( 0x200, 0x200 );
- if ( !mbEmptyPresObj )
- ImplGetText();
- ImplWriteTextStyleAtom( *mpStrm, nTextType, nPObjects, pRule, aExtBu, NULL );
- ImplWriteExtParaHeader( aExtBu, nPObjects++, nTextType, i + 0x100 );
- maTextRuleList.Insert( (void*)pRule, LIST_APPEND );
- if ( rLayout.bSecOutlinerPossible )
- {
- if ( ( nIndex + 1 ) < nShapes )
- {
- if ( GetShapeByIndex( nIndex + 1 ) && mType == "presentation.Outliner" )
- {
- bSecOutl = TRUE;
- TextRuleEntry* pTempRule = new TextRuleEntry( i );
- SvMemoryStream aTmpStrm( 0x200, 0x200 );
- if ( !mbEmptyPresObj )
- ImplGetText();
- ImplWriteTextStyleAtom( *mpStrm, nTextType, nPObjects, pTempRule, aTmpStrm, NULL );
- ImplWriteExtParaHeader( aTmpStrm, nPObjects++, nTextType, i + 0x100 );
- maTextRuleList.Insert( (void*)pTempRule, LIST_APPEND );
- }
- }
- }
- }
- }
- else if ( rLayout.bTitlePossible && ( mType == "presentation.TitleText" ) )
- {
- if ( bTitle == FALSE )
- {
- bTitle = TRUE;
- mnTextStyle = EPP_TEXTSTYLE_TITLE;
- TextRuleEntry* pRule = new TextRuleEntry( i );
- SvMemoryStream aExtBu( 0x200, 0x200 );
- if ( !mbEmptyPresObj )
- ImplGetText();
- ImplWriteTextStyleAtom( *mpStrm, EPP_TEXTTYPE_Title, nPObjects, pRule, aExtBu, NULL );
- ImplWriteExtParaHeader( aExtBu, nPObjects++, EPP_TEXTTYPE_Title, i + 0x100 );
- maTextRuleList.Insert( (void*)pRule, LIST_APPEND );
- }
- }
- else
- {
- if ( mbEmptyPresObj )
- nPObjects++;
- else
- bOtherThanPlaceHolders = TRUE; // muss noch auf background und leeren Title/outliner geprueft werden !!!
- }
- if ( bOutliner && bTitle && bOtherThanPlaceHolders )
- break;
- }
- }
- if ( nPObjects )
- {
- sal_uInt32 nOldPos = mpStrm->Tell();
- mpStrm->Seek( nPOffset );
- *mpStrm << (sal_uInt32)( ( bOtherThanPlaceHolders ) ? 4 : 0 );
- *mpStrm << nPObjects;
- mpStrm->Seek( nOldPos );
- }
- }
- mpPptEscherEx->CloseContainer(); // EPP_SlideListWithText
-
- mpPptEscherEx->OpenContainer( EPP_SlideListWithText, 2 ); // Animation info fuer die notes
- for( i = 0; i < mnPages; i++ )
- {
- if ( !GetPageByIndex( i, NOTICE ) )
- return FALSE;
-
- mpPptEscherEx->AddAtom( 20, EPP_SlidePersistAtom );
- mpPptEscherEx->InsertPersistOffset( EPP_MAINNOTES_PERSIST_KEY | i, mpStrm->Tell() );
- *mpStrm << (sal_uInt32)0
- << (sal_uInt32)( ( ContainsOtherShapeThanPlaceholders( FALSE ) ) ? 4 : 0 )
- << (INT32)0
- << (INT32)i + 0x100
- << (sal_uInt32)0;
- }
- mpPptEscherEx->CloseContainer(); // EPP_SlideListWithText
-
- ::com::sun::star::uno::Reference< ::com::sun::star::presentation::XPresentationSupplier >
- aXPresSupplier( mXModel, ::com::sun::star::uno::UNO_QUERY ); ;
- if ( aXPresSupplier.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::presentation::XPresentation >
- aXPresentation( aXPresSupplier->getPresentation() );
- if ( aXPresentation.is() )
- {
- mXPropSet = ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XPropertySet >
- ( aXPresentation, ::com::sun::star::uno::UNO_QUERY );
- if ( mXPropSet.is() )
- {
- ::rtl::OUString aCustomShow;
- sal_uInt32 nPenColor = 0x1000000;
- INT32 nRestartTime = 0x7fffffff;
- sal_Int16 nStartSlide = 0;
- sal_Int16 nEndSlide = 0;
- sal_uInt32 nFlags = 0; // Bit 0: Auto advance
- // Bit 1 Skip builds ( do not allow slide effects )
- // Bit 2 Use slide range
- // Bit 3 Use named show
- // Bit 4 Browse mode on
- // Bit 5 Kiosk mode on
- // Bit 7 loop continously
- // Bit ? show scrollbar
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CustomShow" ) ) ) )
- {
- aCustomShow = ( *(::rtl::OUString*)mAny.getValue() );
- if ( aCustomShow.getLength() )
- {
- nFlags |= 8;
- }
- }
- if ( ( nFlags & 8 ) == 0 )
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "FirstPage" ) ) ) )
- {
- ::rtl::OUString aSlideName( *(::rtl::OUString*)mAny.getValue() );
- ::rtl::OUString* pStr;
- for ( pStr = (::rtl::OUString*)maSlideNameList.First(); pStr;
- pStr = (::rtl::OUString*)maSlideNameList.Next(), nStartSlide++ )
- {
- if ( *pStr == aSlideName )
- {
- nStartSlide++;
- nFlags |= 4;
- nEndSlide = (sal_uInt16)mnPages;
- break;
- }
- }
- if ( !pStr )
- nStartSlide = 0;
- }
- }
-
-// if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "DiaName" ) ) ) )
-// {
-// }
-// if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "IsAlwaysOnTop" ) ) ) )
-// {
-// }
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "IsAutomatic" ) ) ) )
- {
- sal_Bool bBool = sal_False;
- mAny >>= bBool;
- if ( !bBool )
- nFlags |= 1;
- }
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "IsEndless" ) ) ) ) // muesste eigendlich heissen IsNotEndless !=)"()&
- {
- sal_Bool bBool = sal_False;
- mAny >>= bBool;
- if ( bBool )
- nFlags |= 0x80;
- }
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "IsFullScreen" ) ) ) )
- {
- sal_Bool bBool = sal_False;
- mAny >>= bBool;
- if ( !bBool )
- nFlags |= 0x11;
- }
-// if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "IsMouseVisible" ) ) ) )
-// {
-// }
-// if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "PageRange" ) ) ) )
-// {
-// }
-// if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "StartWithNavigator" ) ) ) )
-// {
-// }
-// if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "UsePen" ) ) ) )
-// {
-// }
- mpPptEscherEx->AddAtom( 80, EPP_SSDocInfoAtom, 1 );
- *mpStrm << nPenColor << nRestartTime << nStartSlide << nEndSlide;
-
- sal_uInt32 nCustomShowNameLen = aCustomShow.getLength();
- if ( nCustomShowNameLen > 31 )
- nCustomShowNameLen = 31;
- if ( nCustomShowNameLen ) // named show identifier
- {
- const sal_Unicode* pCustomShow = aCustomShow.getStr();
- for ( i = 0; i < nCustomShowNameLen; i++ )
- {
- *mpStrm << (sal_uInt16)( pCustomShow[ i ] );
- }
- }
- for ( i = nCustomShowNameLen; i < 32; i++, *mpStrm << (sal_uInt16)0 ) {}
-
- *mpStrm << nFlags;
- ::com::sun::star::uno::Reference< ::com::sun::star::presentation::XCustomPresentationSupplier >
- aXCPSup( mXModel, ::com::sun::star::uno::UNO_QUERY );
- if ( aXCPSup.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >
- aXCont( aXCPSup->getCustomPresentations() );
- if ( aXCont.is() )
- {
- ::com::sun::star::uno::Sequence< ::rtl::OUString> aNameSeq( aXCont->getElementNames() );
- const ::rtl::OUString* pUString = aNameSeq.getArray();
- sal_uInt32 nCount = aNameSeq.getLength();
- if ( nCount )
- {
- mpPptEscherEx->OpenContainer( EPP_NamedShows );
- sal_uInt32 nCustomShowIndex = 0;
- for( i = 0; i < nCount; i++ ) // Anzahl der Custom Shows
- {
- if ( pUString[ i ].getLength() )
- {
- mpPptEscherEx->OpenContainer( EPP_NamedShow, nCustomShowIndex++ );
-
- sal_uInt32 nNamedShowLen = pUString[ i ].getLength();
- if ( nNamedShowLen > 31 )
- nNamedShowLen = 31;
- mpPptEscherEx->AddAtom( nNamedShowLen << 1, EPP_CString );
- const sal_Unicode* pCustomShowName = pUString[ i ].getStr();
- for ( sal_uInt32 k = 0; k < nNamedShowLen; *mpStrm << (sal_uInt16)( pCustomShowName[ k++ ] ) ) {}
- mAny = aXCont->getByName( pUString[ i ] );
- if ( mAny.getValue() )
- {
-
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > aXIC;
- if ( mAny >>= aXIC )
- {
- mpPptEscherEx->BeginAtom();
-
- INT32 nSlideCount = aXIC->getCount();
- for ( INT32 j = 0; j < nSlideCount; j++ ) // Anzahl der Slides
- {
- mAny = aXIC->getByIndex( j );
- if ( mAny.getValue() )
- {
- ::com::sun::star::uno::Reference<
- ::com::sun::star::drawing::XDrawPage > aXDrawPage;
- if ( mAny >>= aXDrawPage )
- {
- ::com::sun::star::uno::Reference<
- ::com::sun::star::container::XNamed >
- aXName( aXDrawPage, ::com::sun::star::uno::UNO_QUERY );
- if ( aXName.is() )
- {
- ::rtl::OUString aSlideName( aXName->getName() );
- sal_uInt32 nPageNumber = 0;
- for ( ::rtl::OUString* pSlideName = (::rtl::OUString*)maSlideNameList.First();
- pSlideName;
- pSlideName = (::rtl::OUString*)maSlideNameList.Next(), nPageNumber++ )
- {
- if ( *pSlideName == aSlideName )
- {
- *mpStrm << (sal_uInt32)( nPageNumber + 0x100 ); // unique slide id
- break;
- }
- }
- }
- }
- }
- }
- mpPptEscherEx->EndAtom( EPP_NamedShowSlides );
- }
- }
- mpPptEscherEx->CloseContainer(); // EPP_NamedShow
- }
- }
- mpPptEscherEx->CloseContainer(); // EPP_NamedShows
- }
- }
- }
- }
- }
- }
- mpPptEscherEx->AddAtom( 0, EPP_EndDocument );
- mpPptEscherEx->CloseContainer(); // EPP_Document
- return TRUE;
-};
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriter::ImplCreateHyperBlob( SvMemoryStream& rStrm )
-{
- sal_uInt32 nCurrentOfs, nParaOfs, nParaCount = 0;
-// SfxOlePropertySection does this...
-// rStrm << (sal_uInt32)0x41; // property type VT_BLOB
- nParaOfs = rStrm.Tell();
- rStrm << (sal_uInt32)0; // property size
- rStrm << (sal_uInt32)0; // property count
-
- for ( EPPTHyperlink* pLink = (EPPTHyperlink*)maHyperlink.First(); pLink; pLink = (EPPTHyperlink*)maHyperlink.Next() )
- {
- nParaCount += 6;
- rStrm << (sal_uInt32)3 // Type VT_I4
- << (sal_uInt32)7 // (VTI4 - Private1)
- << (sal_uInt32)3 // Type VT_I4
- << (sal_uInt32)6 // (VTI4 - Private2)
- << (sal_uInt32)3 // Type VT_I4
- << (sal_uInt32)0; // (VTI4 - Private3)
-
- // INFO
- // HIWORD: = 0 : do not change anything
- // = 1 : replace the hyperlink with the target and subadress in the following two VTLPWSTR
- // = 2 : delete the hyperlink
- // LOWORD: = 0 : graphic shown as background (link)
- // = 1 : graphic shown as shape (link)
- // = 2 : graphic is used to fill a shape
- // = 3 : graphic used to fill a shape outline (future use)
- // = 4 : hyperlink attached to a shape
- // = 5 : " " " " (Word) field
- // = 6 : " " " " (Excel) range
- // = 7 : " " " " (PPT) text range
- // = 8 : " " " " (Project) task
-
- sal_uInt32 nUrlLen = pLink->aURL.Len();
- const sal_Unicode* pUrl = pLink->aURL.GetBuffer();
-
- sal_uInt32 nInfo = 7;
-
- rStrm << (sal_uInt32)3 // Type VT_I4
- << nInfo; // Info
-
- switch( pLink->nType & 0xff )
- {
- case 1 : // click action to slidenumber
- {
- rStrm << (sal_uInt32)0x1f << (sal_uInt32)1 << (sal_uInt32)0; // path
- rStrm << (sal_uInt32)0x1f << (sal_uInt32)( nUrlLen + 1 );
- for ( sal_uInt32 i = 0; i < nUrlLen; i++ )
- {
- rStrm << pUrl[ i ];
- }
- rStrm << (sal_uInt16)0;
- }
- break;
- case 2 :
- {
- sal_uInt32 i;
-
- rStrm << (sal_uInt32)0x1f
- << (sal_uInt32)( nUrlLen + 1 );
- for ( i = 0; i < nUrlLen; i++ )
- {
- rStrm << pUrl[ i ];
- }
- if ( ! ( i & 1 ) )
- rStrm << (sal_uInt16)0;
- rStrm << (sal_uInt16)0
- << (sal_uInt32)0x1f
- << (sal_uInt32)1
- << (sal_uInt32)0;
- }
- break;
- }
- }
- nCurrentOfs = rStrm.Tell();
- rStrm.Seek( nParaOfs );
- rStrm << (sal_uInt32)( nCurrentOfs - ( nParaOfs + 4 ) );
- rStrm << nParaCount;
- rStrm.Seek( nCurrentOfs );
- return TRUE;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriter::ImplCreateMainNotes()
-{
- EscherSolverContainer aSolverContainer;
-
- mpPptEscherEx->PtReplaceOrInsert( EPP_Persist_MainNotes, mpStrm->Tell() );
- mpPptEscherEx->OpenContainer( EPP_Notes );
- mpPptEscherEx->AddAtom( 8, EPP_NotesAtom, 1 );
- *mpStrm << (sal_uInt32)0x80000001 // Number that identifies this slide
- << (sal_uInt32)0; // follow nothing
- mpPptEscherEx->OpenContainer( EPP_PPDrawing );
- mpPptEscherEx->OpenContainer( ESCHER_DgContainer );
- mpPptEscherEx->EnterGroup(0,0);
-
- ImplWritePage( GetLayout( 20 ), aSolverContainer, NOTICE, TRUE );
-
- mpPptEscherEx->LeaveGroup();
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Rectangle, 0xc00 );
- EscherPropertyContainer aPropOpt;
- aPropOpt.AddOpt( ESCHER_Prop_fillColor, 0xffffff ); // stock valued fill color
- aPropOpt.AddOpt( ESCHER_Prop_fillBackColor, 0 );
- aPropOpt.AddOpt( ESCHER_Prop_fillRectRight, 0x68bdde );
- aPropOpt.AddOpt( ESCHER_Prop_fillRectBottom, 0x8b9f8e );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x120012 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0 );
- aPropOpt.AddOpt( ESCHER_Prop_bWMode, ESCHER_wDontShow );
- aPropOpt.AddOpt( ESCHER_Prop_fBackground, 0x10001 ); // if true, this is the background shape
- aPropOpt.Commit( *mpStrm );
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
-
- aSolverContainer.WriteSolver( *mpStrm );
-
- mpPptEscherEx->CloseContainer(); // ESCHER_DgContainer
- mpPptEscherEx->CloseContainer(); // EPP_Drawing
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 1 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x808080 << (sal_uInt32)0x000000 << (sal_uInt32)0x99cc00 << (sal_uInt32)0xcc3333 << (sal_uInt32)0xffcccc << (sal_uInt32)0xb2b2b2;
- mpPptEscherEx->CloseContainer(); // EPP_Notes
- return TRUE;
-}
-
-void PPTWriter::ImplWriteNotes( sal_uInt32 nPageNum )
-{
- mpPptEscherEx->PtReplaceOrInsert( EPP_Persist_Notes | nPageNum, mpStrm->Tell() );
- mpPptEscherEx->OpenContainer( EPP_Notes );
- mpPptEscherEx->AddAtom( 8, EPP_NotesAtom, 1 );
- *mpStrm << (sal_uInt32)nPageNum + 0x100
- << (sal_uInt16)3 // follow master ....
- << (sal_uInt16)0;
-
- ImplCreateHeaderFooters( mXPagePropSet );
-
- EscherSolverContainer aSolverContainer;
-
- mpPptEscherEx->OpenContainer( EPP_PPDrawing );
- mpPptEscherEx->OpenContainer( ESCHER_DgContainer );
- mpPptEscherEx->EnterGroup(0,0);
-
- ImplWritePage( GetLayout( 20 ), aSolverContainer, NOTICE, FALSE ); // Die Shapes der Seite werden im PPT Dok. erzeugt
-
- mpPptEscherEx->LeaveGroup();
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Rectangle, 0xc00 ); // Flags: Connector | Background | HasSpt
- EscherPropertyContainer aPropOpt;
- aPropOpt.AddOpt( ESCHER_Prop_fillColor, 0xffffff ); // stock valued fill color
- aPropOpt.AddOpt( ESCHER_Prop_fillBackColor, 0 );
- aPropOpt.AddOpt( ESCHER_Prop_fillRectRight, 0x8b9f8e );
- aPropOpt.AddOpt( ESCHER_Prop_fillRectBottom, 0x68bdde );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x120012 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x80000 );
- aPropOpt.AddOpt( ESCHER_Prop_bWMode, ESCHER_wDontShow );
- aPropOpt.AddOpt( ESCHER_Prop_fBackground, 0x10001 );
- aPropOpt.Commit( *mpStrm );
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
-
- aSolverContainer.WriteSolver( *mpStrm );
-
- mpPptEscherEx->CloseContainer(); // ESCHER_DgContainer
- mpPptEscherEx->CloseContainer(); // EPP_Drawing
- mpPptEscherEx->AddAtom( 32, EPP_ColorSchemeAtom, 0, 1 );
- *mpStrm << (sal_uInt32)0xffffff << (sal_uInt32)0x000000 << (sal_uInt32)0x808080 << (sal_uInt32)0x000000 << (sal_uInt32)0x99cc00 << (sal_uInt32)0xcc3333 << (sal_uInt32)0xffcccc << (sal_uInt32)0xb2b2b2;
- mpPptEscherEx->CloseContainer(); // EPP_Notes
-}
-
-void PPTWriter::ImplWriteBackground( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet )
-{
- //************************ ******
- //** DEFAULT BACKGROUND SHAPE **
- //******************************
-
- sal_uInt32 nFillColor = 0xffffff;
- sal_uInt32 nFillBackColor = 0;
-
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Rectangle, 0xc00 ); // Flags: Connector | Background | HasSpt
- Point aEmptyPoint = Point();
- Rectangle aRect( aEmptyPoint, Size( 28000, 21000 ) );
- EscherPropertyContainer aPropOpt( mpPptEscherEx->GetGraphicProvider(), mpPicStrm, aRect );
- aPropOpt.AddOpt( ESCHER_Prop_fillType, ESCHER_FillSolid );
- ::com::sun::star::drawing::FillStyle aFS( ::com::sun::star::drawing::FillStyle_NONE );
- if ( ImplGetPropertyValue( rXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillStyle" ) ) ) )
- mAny >>= aFS;
-
- switch( aFS )
- {
- case ::com::sun::star::drawing::FillStyle_GRADIENT :
- {
- aPropOpt.CreateGradientProperties( rXPropSet );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x1f001e );
- aPropOpt.GetOpt( ESCHER_Prop_fillColor, nFillColor );
- aPropOpt.GetOpt( ESCHER_Prop_fillBackColor, nFillBackColor );
- }
- break;
-
- case ::com::sun::star::drawing::FillStyle_BITMAP :
- aPropOpt.CreateGraphicProperties( rXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillBitmapURL" ) ), sal_True );
- break;
-
- case ::com::sun::star::drawing::FillStyle_HATCH :
- aPropOpt.CreateGraphicProperties( rXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillHatch" ) ), sal_True );
- break;
-
- case ::com::sun::star::drawing::FillStyle_SOLID :
- {
- if ( ImplGetPropertyValue( rXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillColor" ) ) ) )
- {
- nFillColor = mpPptEscherEx->GetColor( *((sal_uInt32*)mAny.getValue()) );
- nFillBackColor = nFillColor ^ 0xffffff;
- }
- } // PASSTHROUGH INTENDED
- case ::com::sun::star::drawing::FillStyle_NONE :
- default:
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x120012 );
- break;
- }
- aPropOpt.AddOpt( ESCHER_Prop_fillColor, nFillColor );
- aPropOpt.AddOpt( ESCHER_Prop_fillBackColor, nFillBackColor );
- aPropOpt.AddOpt( ESCHER_Prop_fillRectRight, PPTtoEMU( maDestPageSize.Width ) );
- aPropOpt.AddOpt( ESCHER_Prop_fillRectBottom, PPTtoEMU( maDestPageSize.Height ) );
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x80000 );
- aPropOpt.AddOpt( ESCHER_Prop_bWMode, ESCHER_bwWhite );
- aPropOpt.AddOpt( ESCHER_Prop_fBackground, 0x10001 );
- aPropOpt.Commit( *mpStrm );
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
-}
-
-void PPTWriter::ImplWriteCString( SvStream& rSt, const String& rString, sal_uInt32 nInstance )
-{
- sal_uInt32 i, nLen = rString.Len();
- if ( nLen )
- {
- rSt << (sal_uInt32)( ( nInstance << 4 ) | ( EPP_CString << 16 ) )
- << (sal_uInt32)( nLen << 1 );
- for ( i = 0; i < nLen; i++ )
- rSt << rString.GetChar( (sal_uInt16)i );
- }
-}
-
-void PPTWriter::ImplWriteVBA()
-{
- if ( mpVBA )
- {
- mpVBA->Seek( STREAM_SEEK_TO_END );
- sal_uInt32 nLen = mpVBA->Tell();
- if ( nLen > 8 )
- {
- nLen -= 8;
- mnVBAOleOfs = mpStrm->Tell();
- mpPptEscherEx->BeginAtom();
- mpStrm->Write( (sal_Int8*)mpVBA->GetData() + 8, nLen );
- mpPptEscherEx->EndAtom( EPP_ExOleObjStg, 0, 1 );
- }
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PPTWriter::ImplWriteOLE()
-{
- PPTExOleObjEntry* pPtr;
-
- SvxMSExportOLEObjects aOleExport( mnCnvrtFlags );
-
- for ( pPtr = (PPTExOleObjEntry*)maExOleObj.First(); pPtr;
- pPtr = (PPTExOleObjEntry*)maExOleObj.Next() )
- {
- SvMemoryStream* pStrm = NULL;
- pPtr->nOfsB = mpStrm->Tell();
- switch ( pPtr->eType )
- {
- case NORMAL_OLE_OBJECT :
- {
- SdrObject* pSdrObj = GetSdrObjectFromXShape( pPtr->xShape );
- if ( pSdrObj && pSdrObj->ISA( SdrOle2Obj ) )
- {
- ::uno::Reference < embed::XEmbeddedObject > xObj( ( (SdrOle2Obj*) pSdrObj )->GetObjRef() );
- if( xObj.is() )
- {
- SvStorageRef xTempStorage( new SvStorage( new SvMemoryStream(), TRUE ) );
- aOleExport.ExportOLEObject( xObj, *xTempStorage );
-
- //TODO/MBA: testing
- String aPersistStream( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( SVEXT_PERSIST_STREAM ) ) );
- SvMemoryStream aStream;
- SvStorageRef xCleanStorage( new SvStorage( FALSE, aStream ) );
- xTempStorage->CopyTo( xCleanStorage );
- // SJ: #99809# create a dummy content stream, the dummy content is necessary for ppt, but not for
- // doc files, so we can't share code.
- SotStorageStreamRef xStm = xCleanStorage->OpenSotStream( aPersistStream, STREAM_STD_READWRITE );
- *xStm << (sal_uInt32)0 // no ClipboardId
- << (sal_uInt32)4 // no target device
- << (sal_uInt32)1 // aspect ratio
- << (sal_Int32)-1 // L-Index
- << (sal_uInt32)0 // Advanced Flags
- << (sal_uInt32)0 // compression
- << (sal_uInt32)0 // Size
- << (sal_uInt32)0 // "
- << (sal_uInt32)0;
- pStrm = xCleanStorage->CreateMemoryStream();
- }
- }
- }
- break;
-
- case OCX_CONTROL :
- {
- if ( pPtr->xControlModel.is() )
- {
- String aName;
- ::com::sun::star::awt::Size aSize;
- SvStorageRef xDest( new SvStorage( new SvMemoryStream(), TRUE ) );
- sal_Bool bOk = SvxMSConvertOCXControls::WriteOCXStream( xDest, pPtr->xControlModel, aSize, aName );
- if ( bOk )
- pStrm = xDest->CreateMemoryStream();
- }
- }
- }
- if ( pStrm )
- {
- mpPptEscherEx->BeginAtom();
- pStrm->Seek( STREAM_SEEK_TO_END );
- sal_uInt32 npStrmSize = pStrm->Tell();
- *mpStrm << npStrmSize; // uncompressed size
-
-#ifdef DBG_EXTRACTOLEOBJECTS
- SvFileStream aOut( String::CreateFromAscii( "D:\\OUT.OLE" ), STREAM_TRUNC | STREAM_WRITE );
- pStrm->Seek( 0 );
- aOut.Write( pStrm->GetData(), npStrmSize );
-#endif
-
- pStrm->Seek( 0 );
- ZCodec aZCodec( 0x8000, 0x8000 );
- aZCodec.BeginCompression();
- aZCodec.Compress( *pStrm, *mpStrm );
- aZCodec.EndCompression();
- delete pStrm;
- mpPptEscherEx->EndAtom( EPP_ExOleObjStg, 0, 1 );
- }
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-// PersistantTable und UserEditAtom schreiben
-
-sal_Bool PPTWriter::ImplWriteAtomEnding()
-{
-
-#define EPP_LastViewTypeNone 0
-#define EPP_LastViewTypeSlideView 1
-#define EPP_LastViewTypeOutlineView 2
-#define EPP_LastViewTypeNotes 3
-
-
- sal_uInt32 i, nPos, nOfs, nPersistOfs = mpStrm->Tell();
- sal_uInt32 nPersistEntrys = 0;
- *mpStrm << (sal_uInt32)0 << (sal_uInt32)0 << (sal_uInt32)0; // Record Header und ersten Eintrag ueberspringen
-
- // Document pesist schreiben
- nPersistEntrys++;
- *mpStrm << (sal_uInt32)0;
- // MasterPages persists schreiben
- for ( i = 0; i < mnMasterPages; i++ )
- {
- nOfs = mpPptEscherEx->PtGetOffsetByID( EPP_Persist_MainMaster | i );
- if ( nOfs )
- {
- *mpStrm << nOfs;
- mpPptEscherEx->InsertAtPersistOffset( EPP_MAINMASTER_PERSIST_KEY | i, ++nPersistEntrys );
- }
- }
- // MainNotesMaster persist schreiben
- nOfs = mpPptEscherEx->PtGetOffsetByID( EPP_Persist_MainNotes );
- if ( nOfs )
- {
- *mpStrm << nOfs;
- mpPptEscherEx->InsertAtPersistOffset( EPP_MAINNOTESMASTER_PERSIST_KEY, ++nPersistEntrys );
- }
- // Slide persists schreiben -> es gilt hier auch den EPP_SlidePersistAtome mit einem gueltigen wert zu beschreiben
- for ( i = 0; i < mnPages; i++ )
- {
- nOfs = mpPptEscherEx->PtGetOffsetByID( EPP_Persist_Slide | i );
- if ( nOfs )
- {
- *mpStrm << nOfs;
- mpPptEscherEx->InsertAtPersistOffset( EPP_MAINSLIDE_PERSIST_KEY | i, ++nPersistEntrys );
- }
- }
- // Notes persists schreiben
- for ( i = 0; i < mnPages; i++ )
- {
- nOfs = mpPptEscherEx->PtGetOffsetByID( EPP_Persist_Notes | i );
- if ( nOfs )
- {
- *mpStrm << nOfs;
- mpPptEscherEx->InsertAtPersistOffset( EPP_MAINNOTES_PERSIST_KEY | i, ++nPersistEntrys );
- }
- }
- // Ole persists
- PPTExOleObjEntry* pPtr;
- for ( pPtr = (PPTExOleObjEntry*)maExOleObj.First(); pPtr; pPtr = (PPTExOleObjEntry*)maExOleObj.Next() )
- {
- nOfs = mpPptEscherEx->PtGetOffsetByID( EPP_Persist_ExObj );
- if ( nOfs )
- {
- nPersistEntrys++;
- *mpStrm << pPtr->nOfsB;
- sal_uInt32 nOldPos, nPersOfs = nOfs + pPtr->nOfsA + 16 + 8; // 8 bytes atom header, +16 to the persist entry
- nOldPos = mpStrm->Tell();
- mpStrm->Seek( nPersOfs );
- *mpStrm << nPersistEntrys;
- mpStrm->Seek( nOldPos );
- }
- }
- // VB persist
- if ( mnVBAOleOfs && mpVBA )
- {
- nOfs = mpPptEscherEx->PtGetOffsetByID( EPP_Persist_VBAInfoAtom );
- if ( nOfs )
- {
- nPersistEntrys++;
- sal_uInt32 n1, n2;
-
- mpVBA->Seek( 0 );
- *mpVBA >> n1
- >> n2;
-
- *mpStrm << mnVBAOleOfs;
- sal_uInt32 nOldPos = mpStrm->Tell();
- mpStrm->Seek( nOfs ); // Fill the VBAInfoAtom with the correct index to the persisttable
- *mpStrm << nPersistEntrys
- << n1
- << 2;
- mpStrm->Seek( nOldPos );
-
- }
- }
- nPos = mpStrm->Tell();
- mpStrm->Seek( nPersistOfs );
- mpPptEscherEx->AddAtom( ( nPersistEntrys + 1 ) << 2, EPP_PersistPtrIncrementalBlock ); // Record Header eintragen
- *mpStrm << (sal_uInt32)( ( nPersistEntrys << 20 ) | 1 );
- mpStrm->Seek( nPos );
-
- *mpCurUserStrm << (sal_uInt32)nPos; // offset to current edit setzen
- mpPptEscherEx->AddAtom( 28, EPP_UserEditAtom );
- *mpStrm << (INT32)0x100 // last slide ID
- << (sal_uInt32)0x03000dbc // minor and major app version that did the save
- << (sal_uInt32)0 // offset last save, 0 after a full save
- << nPersistOfs // File offset to persist pointers for this save operation
- << (sal_uInt32)1 // Persist reference to the document persist object
- << (sal_uInt32)nPersistEntrys // max persists written, Seed value for persist object id management
- << (sal_Int16)EPP_LastViewTypeSlideView // last view type
- << (sal_Int16)0x12; // padword
-
- return TRUE;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-
-
-// ---------------------------------------------------------------------------------------------
-
-// ---------------------
-// - exported function -
-// ---------------------
-
-extern "C" SAL_DLLPUBLIC_EXPORT BOOL __LOADONCALLAPI ExportPPT( SvStorageRef& rSvStorage,
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & rXModel,
- ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > & rXStatInd,
- SvMemoryStream* pVBA, sal_uInt32 nCnvrtFlags )
-{
- PPTWriter* pPPTWriter;
- BOOL bStatus = FALSE;
-
- pPPTWriter = new PPTWriter( rSvStorage, rXModel, rXStatInd, pVBA, nCnvrtFlags );
- if ( pPPTWriter )
- {
- pPPTWriter->exportPPT();
- bStatus = ( pPPTWriter->IsValid() == TRUE );
- delete pPPTWriter;
- }
-
- return bStatus;
-}
diff --git a/sd/source/filter/pptx/pptx-epptbase.cxx b/sd/source/filter/pptx/pptx-epptbase.cxx
deleted file mode 100644
index 216e9a2358eb..000000000000
--- a/sd/source/filter/pptx/pptx-epptbase.cxx
+++ /dev/null
@@ -1,947 +0,0 @@
-#include <com/sun/star/animations/TransitionType.hpp>
-#include <com/sun/star/animations/TransitionSubType.hpp>
-#include <com/sun/star/awt/FontDescriptor.hpp>
-#include <com/sun/star/awt/FontFamily.hpp>
-#include <com/sun/star/awt/FontPitch.hpp>
-#include <com/sun/star/container/XNamed.hpp>
-#include <com/sun/star/container/XNameAccess.hpp>
-#include <com/sun/star/presentation/XPresentationPage.hpp>
-#include <com/sun/star/text/XSimpleText.hpp>
-#include <com/sun/star/style/XStyle.hpp>
-#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
-
-#include <cppuhelper/extract.hxx>
-#include <vcl/outdev.hxx>
-
-#include "epptbase.hxx"
-#include "epptdef.hxx"
-
-#ifdef DEBUG
-#define DBG(x) x
-#include <stdio.h>
-#else
-#define DBG(x)
-#endif
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::animations;
-using namespace ::com::sun::star::awt::FontFamily;
-using namespace ::com::sun::star::awt::FontPitch;
-using namespace ::com::sun::star::presentation;
-
-using ::com::sun::star::awt::FontDescriptor;
-using ::com::sun::star::beans::XPropertySet;
-using ::com::sun::star::container::XNameAccess;
-using ::com::sun::star::container::XNamed;
-using ::com::sun::star::drawing::XDrawPagesSupplier;
-using ::com::sun::star::drawing::XMasterPagesSupplier;
-using ::com::sun::star::drawing::XShapes;
-using ::com::sun::star::drawing::XMasterPageTarget;
-using ::com::sun::star::drawing::XDrawPage;
-using ::com::sun::star::frame::XModel;
-using ::com::sun::star::style::XStyleFamiliesSupplier;
-using ::com::sun::star::style::XStyle;
-using ::com::sun::star::task::XStatusIndicator;
-using ::com::sun::star::text::XSimpleText;
-using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::Exception;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::UNO_QUERY;
-
-static PHLayout pPHLayout[EPP_LAYOUT_SIZE] =
-{
- { EPP_LAYOUT_TITLESLIDE, { 0x0d, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x00, 0x0d, 0x10, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_TITLEANDBODYSLIDE, { 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x00, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_TITLEANDBODYSLIDE, { 0x0d, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x14, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_2COLUMNSANDTITLE, { 0x0d, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x00, 0x0d, 0x0e, TRUE, TRUE, TRUE },
- { EPP_LAYOUT_2COLUMNSANDTITLE, { 0x0d, 0x0e, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x14, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_BLANCSLIDE, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x00, 0x0d, 0x0e, FALSE, FALSE, FALSE },
- { EPP_LAYOUT_2COLUMNSANDTITLE, { 0x0d, 0x0e, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x16, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_2COLUMNSANDTITLE, { 0x0d, 0x14, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x14, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_TITLEANDBODYSLIDE, { 0x0d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x15, 0x0d, 0x0e, TRUE, FALSE, FALSE },
- { EPP_LAYOUT_2COLUMNSANDTITLE, { 0x0d, 0x16, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x16, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_2COLUMNSANDTITLE, { 0x0d, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_TITLEANDBODYSLIDE, { 0x0d, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, FALSE, FALSE },
- { EPP_LAYOUT_RIGHTCOLUMN2ROWS, { 0x0d, 0x0e, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_2COLUMNSANDTITLE, { 0x0d, 0x13, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_2ROWSANDTITLE, { 0x0d, 0x13, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_LEFTCOLUMN2ROWS, { 0x0d, 0x13, 0x13, 0x0e, 0x00, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_TOPROW2COLUMN, { 0x0d, 0x13, 0x13, 0x0e, 0x00, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_2ROWSANDTITLE, { 0x0d, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_4OBJECTS, { 0x0d, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00 }, 0x13, 0x0d, 0x0e, TRUE, FALSE, FALSE },
- { EPP_LAYOUT_ONLYTITLE, { 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x00, 0x0d, 0x0e, TRUE, FALSE, FALSE },
- { EPP_LAYOUT_BLANCSLIDE, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x00, 0x0d, 0x0e, FALSE, FALSE, FALSE },
- { EPP_LAYOUT_TITLERIGHT2BODIESLEFT, { 0x11, 0x12, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x14, 0x11, 0x12, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_TITLERIGHTBODYLEFT, { 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x00, 0x11, 0x12, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_TITLEANDBODYSLIDE, { 0x0d, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x00, 0x0d, 0x12, TRUE, TRUE, FALSE },
- { EPP_LAYOUT_2COLUMNSANDTITLE, { 0x0d, 0x16, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0x16, 0x0d, 0x12, TRUE, TRUE, FALSE }
-};
-
-#define PPT_WRITER_BASE_INIT_VALUES \
- maFraction ( 1, 576 ), \
- maMapModeSrc ( MAP_100TH_MM ), \
- maMapModeDest ( MAP_INCH, Point(), maFraction, maFraction ), \
- meLatestPageType ( NORMAL )
-
-
-PPTWriterBase::PPTWriterBase() :
- PPT_WRITER_BASE_INIT_VALUES
-{
- DBG(printf ("PPTWriterBase::PPTWriterBase()\n"));
-}
-
-PPTWriterBase::PPTWriterBase( const Reference< XModel > & rXModel,
- const Reference< XStatusIndicator > & rXStatInd ) :
- mXModel ( rXModel ),
- mXStatusIndicator ( rXStatInd ),
- mbStatusIndicator ( false ),
- PPT_WRITER_BASE_INIT_VALUES
-{
-}
-
-// ---------------------------------------------------------------------------------------------
-
-PPTWriterBase::~PPTWriterBase()
-{
- if ( mbStatusIndicator )
- mXStatusIndicator->end();
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PPTWriterBase::exportPPT()
-{
- if ( !InitSOIface() )
- return;
-
- FontCollectionEntry aDefaultFontDesc( String( RTL_CONSTASCII_USTRINGPARAM( "Times New Roman" ) ),
- ROMAN,
- awt::FontPitch::VARIABLE,
- RTL_TEXTENCODING_MS_1252 );
- maFontCollection.GetId( aDefaultFontDesc ); // default is always times new roman
-
- if ( !GetPageByIndex( 0, NOTICE ) )
- return;
-
- INT32 nWidth = 21000;
- if ( ImplGetPropertyValue( mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Width" ) ) ) )
- mAny >>= nWidth;
- INT32 nHeight = 29700;
- if ( ImplGetPropertyValue( mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Height" ) ) ) )
- mAny >>= nHeight;
-
- maNotesPageSize = MapSize( awt::Size( nWidth, nHeight ) );
-
- if ( !GetPageByIndex( 0, MASTER ) )
- return;
-
- nWidth = 28000;
- if ( ImplGetPropertyValue( mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Width" ) ) ) )
- mAny >>= nWidth;
- nHeight = 21000;
- if ( ImplGetPropertyValue( mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Height" ) ) ) )
- mAny >>= nHeight;
- maDestPageSize = MapSize( awt::Size( nWidth, nHeight ) );
-
- DBG(printf( "call exportDocumentPre()\n"));
- exportPPTPre();
-
- if ( !GetStyleSheets() )
- return;
-
- if ( !ImplCreateDocument() )
- return;
-
- sal_uInt32 i;
-
- for ( i = 0; i < mnPages; i++ )
- {
- if ( GetPageByIndex( i, NORMAL ) ) {
- sal_uInt32 nMasterNum = GetMasterIndex( NORMAL );
- ImplWriteLayout( GetLayoutOffset( mXPagePropSet ), nMasterNum );
- }
- }
-
- for ( i = 0; i < mnMasterPages; i++ )
- {
- if ( !CreateSlideMaster( i ) )
- return;
- }
- if ( !CreateMainNotes() )
- return;
- maTextRuleList.First(); // rewind list, so we can get the current or next entry without
- // searching, all entrys are sorted#
- for ( i = 0; i < mnPages; i++ )
- {
- DBG(printf( "call ImplCreateSlide( %d )\n", i));
- if ( !CreateSlide( i ) )
- return;
- }
-
- for ( i = 0; i < mnPages; i++ )
- {
- if ( !CreateNotes( i ) )
- return;
- }
-
- DBG(printf( "call exportDocumentPost()\n"));
- exportPPTPost();
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::InitSOIface()
-{
- while( TRUE )
- {
- mXDrawPagesSupplier = Reference< XDrawPagesSupplier >( mXModel, UNO_QUERY );
- if ( !mXDrawPagesSupplier.is() )
- break;
-
- mXMasterPagesSupplier = Reference< XMasterPagesSupplier >( mXModel, UNO_QUERY );
- if ( !mXMasterPagesSupplier.is() )
- break;
- mXDrawPages = mXMasterPagesSupplier->getMasterPages();
- if ( !mXDrawPages.is() )
- break;
- mnMasterPages = mXDrawPages->getCount();
- mXDrawPages = mXDrawPagesSupplier->getDrawPages();
- if( !mXDrawPages.is() )
- break;
- mnPages = mXDrawPages->getCount();
- if ( !GetPageByIndex( 0, NORMAL ) )
- break;
-
- return TRUE;
- }
- return FALSE;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::GetPageByIndex( sal_uInt32 nIndex, PageType ePageType )
-{
- while( TRUE )
- {
- if ( ePageType != meLatestPageType )
- {
- switch( ePageType )
- {
- case NORMAL :
- case NOTICE :
- {
- mXDrawPages = mXDrawPagesSupplier->getDrawPages();
- if( !mXDrawPages.is() )
- return FALSE;
- }
- break;
-
- case MASTER :
- {
- mXDrawPages = mXMasterPagesSupplier->getMasterPages();
- if( !mXDrawPages.is() )
- return FALSE;
- }
- break;
- default:
- break;
- }
- meLatestPageType = ePageType;
- }
- Any aAny( mXDrawPages->getByIndex( nIndex ) );
- aAny >>= mXDrawPage;
- if ( !mXDrawPage.is() )
- break;
- if ( ePageType == NOTICE )
- {
- Reference< XPresentationPage > aXPresentationPage( mXDrawPage, UNO_QUERY );
- if ( !aXPresentationPage.is() )
- break;
- mXDrawPage = aXPresentationPage->getNotesPage();
- if ( !mXDrawPage.is() )
- break;
- }
- mXPagePropSet = Reference< XPropertySet >( mXDrawPage, UNO_QUERY );
- if ( !mXPagePropSet.is() )
- break;
-
- mXShapes = Reference< XShapes >( mXDrawPage, UNO_QUERY );
- if ( !mXShapes.is() )
- break;
-
- /* try to get the "real" background PropertySet. If the normal page is not supporting this property, it is
- taken the property from the master */
- sal_Bool bHasBackground = GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Background" ) ), sal_True );
- if ( bHasBackground )
- bHasBackground = ( aAny >>= mXBackgroundPropSet );
- if ( !bHasBackground )
- {
- Reference< XMasterPageTarget > aXMasterPageTarget( mXDrawPage, UNO_QUERY );
- if ( aXMasterPageTarget.is() )
- {
- Reference< XDrawPage > aXMasterDrawPage;
- aXMasterDrawPage = aXMasterPageTarget->getMasterPage();
- if ( aXMasterDrawPage.is() )
- {
- Reference< XPropertySet > aXMasterPagePropSet;
- aXMasterPagePropSet = Reference< XPropertySet >
- ( aXMasterDrawPage, UNO_QUERY );
- if ( aXMasterPagePropSet.is() )
- {
- sal_Bool bBackground = GetPropertyValue( aAny, aXMasterPagePropSet,
- String( RTL_CONSTASCII_USTRINGPARAM( "Background" ) ) );
- if ( bBackground )
- {
- aAny >>= mXBackgroundPropSet;
- }
- }
- }
- }
- }
- return TRUE;
- }
- return FALSE;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::CreateSlide( sal_uInt32 nPageNum )
-{
- Any aAny;
-
- if ( !GetPageByIndex( nPageNum, NORMAL ) )
- return FALSE;
-
- sal_uInt32 nMasterNum = GetMasterIndex( NORMAL );
- SetCurrentStyleSheet( nMasterNum );
-
- Reference< XPropertySet > aXBackgroundPropSet;
- sal_Bool bHasBackground = GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Background" ) ) );
- if ( bHasBackground )
- bHasBackground = ( aAny >>= aXBackgroundPropSet );
-
- sal_uInt16 nMode = 7; // Bit 1: Follow master objects, Bit 2: Follow master scheme, Bit 3: Follow master background
- if ( bHasBackground )
- nMode &=~4;
-
-/* sj: Don't know what's IsBackgroundVisible for, have to ask cl
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsBackgroundVisible" ) ) ) )
- {
- sal_Bool bBackgroundVisible;
- if ( aAny >>= bBackgroundVisible )
- {
- if ( bBackgroundVisible )
- nMode &= ~4;
- }
- }
-*/
- if ( GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsBackgroundObjectsVisible" ) ) ) )
- {
- sal_Bool bBackgroundObjectsVisible = sal_False;
- if ( aAny >>= bBackgroundObjectsVisible )
- {
- if ( !bBackgroundObjectsVisible )
- nMode &= ~1;
- }
- }
-
- ImplWriteSlide( nPageNum, nMasterNum, nMode, bHasBackground, aXBackgroundPropSet );
-
- return TRUE;
-};
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::CreateNotes( sal_uInt32 nPageNum )
-{
- if ( !GetPageByIndex( nPageNum, NOTICE ) )
- return FALSE;
- SetCurrentStyleSheet( GetMasterIndex( NORMAL ) );
-
- ImplWriteNotes( nPageNum );
-
- return TRUE;
-};
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::CreateSlideMaster( sal_uInt32 nPageNum )
-{
- if ( !GetPageByIndex( nPageNum, MASTER ) )
- return FALSE;
- SetCurrentStyleSheet( nPageNum );
-
- if ( !ImplGetPropertyValue( mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Background" ) ) ) ) // Backgroundshape laden
- return FALSE;
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > aXBackgroundPropSet;
- if ( !( mAny >>= aXBackgroundPropSet ) )
- return FALSE;
-
- ImplWriteSlideMaster( nPageNum, aXBackgroundPropSet );
-
- return TRUE;
-};
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Int32 PPTWriterBase::GetLayoutOffset( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPropSet ) const
-{
- ::com::sun::star::uno::Any aAny;
- sal_Int32 nLayout = 20;
- if ( GetPropertyValue( aAny, rXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Layout" ) ) ), sal_True )
- aAny >>= nLayout;
-
- if ( ( nLayout >= 21 ) && ( nLayout <= 26 ) ) // NOTES _> HANDOUT6
- nLayout = 20;
- if ( ( nLayout >= 27 ) && ( nLayout <= 30 ) ) // VERTICAL LAYOUT
- nLayout -= 6;
- else if ( nLayout > 30 )
- nLayout = 20;
-
- return nLayout;
-}
-
-PHLayout& PPTWriterBase::GetLayout( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPropSet ) const
-{
- return pPHLayout[ GetLayoutOffset( rXPropSet ) ];
-}
-
-// ---------------------------------------------------------------------------------------------
-
-PHLayout& PPTWriterBase::GetLayout( sal_Int32 nOffset ) const
-{
- if( nOffset >= 0 && nOffset < EPP_LAYOUT_SIZE )
- return pPHLayout[ nOffset ];
-
- DBG(printf("asked %d for layout outside of 0,%d array scope\n", nOffset, EPP_LAYOUT_SIZE ));
-
- return pPHLayout[ 0 ];
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriterBase::GetMasterIndex( PageType ePageType )
-{
- sal_uInt32 nRetValue = 0;
- ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XMasterPageTarget >
- aXMasterPageTarget( mXDrawPage, ::com::sun::star::uno::UNO_QUERY );
-
- if ( aXMasterPageTarget.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >
- aXDrawPage = aXMasterPageTarget->getMasterPage();
- if ( aXDrawPage.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
- aXPropertySet( aXDrawPage, ::com::sun::star::uno::UNO_QUERY );
-
- if ( aXPropertySet.is() )
- {
- if ( ImplGetPropertyValue( aXPropertySet, String( RTL_CONSTASCII_USTRINGPARAM( "Number" ) ) ) )
- nRetValue |= *(sal_Int16*)mAny.getValue();
- if ( nRetValue & 0xffff ) // ueberlauf vermeiden
- nRetValue--;
- }
- }
- }
- if ( ePageType == NOTICE )
- nRetValue += mnMasterPages;
- return nRetValue;
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::SetCurrentStyleSheet( sal_uInt32 nPageNum )
-{
- sal_Bool bRet = sal_False;
- if ( nPageNum >= maStyleSheetList.size() )
- nPageNum = 0;
- else
- bRet = sal_True;
- mpStyleSheet = maStyleSheetList[ nPageNum ];
- return bRet;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::GetStyleSheets()
-{
- int nInstance, nLevel;
- sal_Bool bRetValue = sal_False;
- sal_uInt32 nPageNum;
-
- for ( nPageNum = 0; nPageNum < mnMasterPages; nPageNum++ )
- {
- Reference< XNamed >
- aXNamed;
-
- Reference< XNameAccess >
- aXNameAccess;
-
- Reference< XStyleFamiliesSupplier >
- aXStyleFamiliesSupplier( mXModel, UNO_QUERY );
-
- Reference< XPropertySet >
- aXPropSet( mXModel, UNO_QUERY );
-
- sal_uInt16 nDefaultTab = ( aXPropSet.is() && ImplGetPropertyValue( aXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "TabStop" ) ) ) )
- ? (sal_uInt16)( *(sal_Int32*)mAny.getValue() / 4.40972 )
- : 1250;
-
- maStyleSheetList.push_back( new PPTExStyleSheet( nDefaultTab, (PPTExBulletProvider&)*this ) );
- SetCurrentStyleSheet( nPageNum );
- if ( GetPageByIndex( nPageNum, MASTER ) )
- aXNamed = Reference< XNamed >
- ( mXDrawPage, UNO_QUERY );
-
- if ( aXStyleFamiliesSupplier.is() )
- aXNameAccess = aXStyleFamiliesSupplier->getStyleFamilies();
-
- bRetValue = aXNamed.is() && aXNameAccess.is() && aXStyleFamiliesSupplier.is();
- if ( bRetValue )
- {
- for ( nInstance = EPP_TEXTTYPE_Title; nInstance <= EPP_TEXTTYPE_CenterTitle; nInstance++ )
- {
- String aStyle;
- String aFamily;
- switch ( nInstance )
- {
- case EPP_TEXTTYPE_CenterTitle :
- case EPP_TEXTTYPE_Title :
- {
- aStyle = String( RTL_CONSTASCII_USTRINGPARAM( "title" ) );
- aFamily = aXNamed->getName();
- }
- break;
- case EPP_TEXTTYPE_Body :
- {
- aStyle = String( RTL_CONSTASCII_USTRINGPARAM( "outline1" ) ); // SD_LT_SEPARATOR
- aFamily = aXNamed->getName();
- }
- break;
- case EPP_TEXTTYPE_Other :
- {
- aStyle = String( RTL_CONSTASCII_USTRINGPARAM( "standard" ) );
- aFamily = String( RTL_CONSTASCII_USTRINGPARAM( "graphics" ) );
- }
- break;
- case EPP_TEXTTYPE_CenterBody :
- {
- aStyle = String( RTL_CONSTASCII_USTRINGPARAM( "subtitle" ) );
- aFamily = aXNamed->getName();
- }
- break;
- }
- if ( aStyle.Len() && aFamily.Len() )
- {
- try
- {
- Reference< XNameAccess >xNameAccess;
- if ( aXNameAccess->hasByName( aFamily ) )
- {
- Any aAny( aXNameAccess->getByName( aFamily ) );
- if( aAny.getValue() && ::cppu::extractInterface( xNameAccess, aAny ) )
- {
- Reference< XNameAccess > aXFamily;
- if ( aAny >>= aXFamily )
- {
- if ( aXFamily->hasByName( aStyle ) )
- {
- Reference< XStyle > xStyle;
- aAny = aXFamily->getByName( aStyle );
- if( aAny.getValue() && ::cppu::extractInterface( xStyle, aAny ) )
- {
- Reference< XStyle > aXStyle;
- aAny >>= aXStyle;
- Reference< XPropertySet >
- xPropSet( aXStyle, UNO_QUERY );
- if( xPropSet.is() )
- mpStyleSheet->SetStyleSheet( xPropSet, maFontCollection, nInstance, 0 );
- for ( nLevel = 1; nLevel < 5; nLevel++ )
- {
- if ( nInstance == EPP_TEXTTYPE_Body )
- {
- sal_Unicode cTemp = aStyle.GetChar( aStyle.Len() - 1 );
- aStyle.SetChar( aStyle.Len() - 1, ++cTemp );
- if ( aXFamily->hasByName( aStyle ) )
- {
- aXFamily->getByName( aStyle ) >>= xStyle;
- if( xStyle.is() )
- {
- Reference< XPropertySet >
- xPropertySet( xStyle, UNO_QUERY );
- if ( xPropertySet.is() )
- mpStyleSheet->SetStyleSheet( xPropertySet, maFontCollection, nInstance, nLevel );
- }
- }
- }
- else
- mpStyleSheet->SetStyleSheet( xPropSet, maFontCollection, nInstance, nLevel );
- }
- }
- }
- }
- }
- }
- }
- catch( Exception& )
- {
- //
- }
- }
- }
- for ( ; nInstance <= EPP_TEXTTYPE_QuarterBody; nInstance++ )
- {
-
- }
- }
- }
- return bRetValue;
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::CreateMainNotes()
-{
- if ( !GetPageByIndex( 0, NOTICE ) )
- return FALSE;
- SetCurrentStyleSheet( 0 );
-
- ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XMasterPageTarget >
- aXMasterPageTarget( mXDrawPage, ::com::sun::star::uno::UNO_QUERY );
-
- if ( !aXMasterPageTarget.is() )
- return FALSE;
-
- mXDrawPage = aXMasterPageTarget->getMasterPage();
- if ( !mXDrawPage.is() )
- return FALSE;
-
- mXPropSet = ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XPropertySet >
- ( mXDrawPage, ::com::sun::star::uno::UNO_QUERY );
- if ( !mXPropSet.is() )
- return FALSE;
-
- mXShapes = ::com::sun::star::uno::Reference<
- ::com::sun::star::drawing::XShapes >
- ( mXDrawPage, ::com::sun::star::uno::UNO_QUERY );
- if ( !mXShapes.is() )
- return FALSE;
-
- return ImplCreateMainNotes();
-}
-
-// -----------------------------------------------------------------------
-
-awt::Size PPTWriterBase::MapSize( const awt::Size& rSize )
-{
- Size aRetSize( OutputDevice::LogicToLogic( Size( rSize.Width, rSize.Height ), maMapModeSrc, maMapModeDest ) );
-
- if ( !aRetSize.Width() )
- aRetSize.Width()++;
- if ( !aRetSize.Height() )
- aRetSize.Height()++;
- return awt::Size( aRetSize.Width(), aRetSize.Height() );
-}
-
-// -----------------------------------------------------------------------
-
-awt::Point PPTWriterBase::MapPoint( const awt::Point& rPoint )
-{
- Point aRet( OutputDevice::LogicToLogic( Point( rPoint.X, rPoint.Y ), maMapModeSrc, maMapModeDest ) );
- return awt::Point( aRet.X(), aRet.Y() );
-}
-
-// -----------------------------------------------------------------------
-
-Rectangle PPTWriterBase::MapRectangle( const awt::Rectangle& rRect )
-{
- ::com::sun::star::awt::Point aPoint( rRect.X, rRect.Y );
- ::com::sun::star::awt::Size aSize( rRect.Width, rRect.Height );
- ::com::sun::star::awt::Point aP( MapPoint( aPoint ) );
- ::com::sun::star::awt::Size aS( MapSize( aSize ) );
- return Rectangle( Point( aP.X, aP.Y ), Size( aS.Width, aS.Height ) );
-}
-
-
-// -----------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::GetShapeByIndex( sal_uInt32 nIndex, sal_Bool bGroup )
-{
- while(TRUE)
- {
- if ( ( bGroup == FALSE ) || ( GetCurrentGroupLevel() == 0 ) )
- {
- Any aAny( mXShapes->getByIndex( nIndex ) );
- aAny >>= mXShape;
- }
- else
- {
- Any aAny( GetCurrentGroupAccess()->getByIndex( GetCurrentGroupIndex() ) );
- aAny >>= mXShape;
- }
- if ( !mXShape.is() )
- break;
-
- Any aAny( mXShape->queryInterface( ::getCppuType( (const Reference< XPropertySet >*) 0 ) ));
- aAny >>= mXPropSet;
-
- if ( !mXPropSet.is() )
- break;
- maPosition = MapPoint( mXShape->getPosition() );
- maSize = MapSize( mXShape->getSize() );
- maRect = Rectangle( Point( maPosition.X, maPosition.Y ), Size( maSize.Width, maSize.Height ) );
- mType = ByteString( String( mXShape->getShapeType() ), RTL_TEXTENCODING_UTF8 );
- mType.Erase( 0, 13 ); // "com.sun.star." entfernen
- sal_uInt16 nPos = mType.Search( (const char*)"Shape" );
- mType.Erase( nPos, 5 );
-
- mbPresObj = mbEmptyPresObj = FALSE;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "IsPresentationObject" ) ) ) )
- mAny >>= mbPresObj;
-
- if ( mbPresObj && ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "IsEmptyPresentationObject" ) ) ) )
- mAny >>= mbEmptyPresObj;
-
- mnAngle = ( PropValue::GetPropertyValue( aAny,
- mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "RotateAngle" ) ), sal_True ) )
- ? *((sal_Int32*)aAny.getValue() )
- : 0;
-
- return TRUE;
- }
- return FALSE;
-}
-
-// -----------------------------------------------------------------------
-
-sal_Int8 PPTWriterBase::GetTransition( sal_Int16 nTransitionType, sal_Int16 nTransitionSubtype, FadeEffect eEffect, sal_uInt8& nDirection )
-{
- sal_Int8 nPPTTransitionType = 0;
- nDirection = 0;
-
- switch( nTransitionType )
- {
- case TransitionType::FADE :
- {
- if ( nTransitionSubtype == TransitionSubType::CROSSFADE )
- nPPTTransitionType = PPT_TRANSITION_TYPE_SMOOTHFADE;
- else if ( nTransitionSubtype == TransitionSubType::FADEOVERCOLOR )
- nPPTTransitionType = PPT_TRANSITION_TYPE_FADE;
- }
- break;
- case PPT_TRANSITION_TYPE_COMB :
- {
- nPPTTransitionType = PPT_TRANSITION_TYPE_COMB;
- if ( nTransitionSubtype == TransitionSubType::COMBVERTICAL )
- nDirection++;
- }
- break;
- case TransitionType::PUSHWIPE :
- {
- nPPTTransitionType = PPT_TRANSITION_TYPE_PUSH;
- switch( nTransitionSubtype )
- {
- case TransitionSubType::FROMRIGHT: nDirection = 0; break;
- case TransitionSubType::FROMBOTTOM: nDirection = 1; break;
- case TransitionSubType::FROMLEFT: nDirection = 2; break;
- case TransitionSubType::FROMTOP: nDirection = 3; break;
- }
- }
- break;
- case TransitionType::PINWHEELWIPE :
- {
- nPPTTransitionType = PPT_TRANSITION_TYPE_WHEEL;
- switch( nTransitionSubtype )
- {
- case TransitionSubType::ONEBLADE: nDirection = 1; break;
- case TransitionSubType::TWOBLADEVERTICAL : nDirection = 2; break;
- case TransitionSubType::THREEBLADE : nDirection = 3; break;
- case TransitionSubType::FOURBLADE: nDirection = 4; break;
- case TransitionSubType::EIGHTBLADE: nDirection = 8; break;
- }
- }
- break;
- case TransitionType::FANWIPE :
- {
- nPPTTransitionType = PPT_TRANSITION_TYPE_WEDGE;
- }
- break;
- case TransitionType::ELLIPSEWIPE :
- {
- nPPTTransitionType = PPT_TRANSITION_TYPE_CIRCLE;
- }
- break;
- case TransitionType::FOURBOXWIPE :
- {
- nPPTTransitionType = PPT_TRANSITION_TYPE_PLUS;
- }
- break;
- case TransitionType::IRISWIPE :
- {
- switch( nTransitionSubtype ) {
- case TransitionSubType::RECTANGLE:
- nPPTTransitionType = PPT_TRANSITION_TYPE_ZOOM;
- nDirection = (eEffect == FadeEffect_FADE_FROM_CENTER) ? 0 : 1;
- break;
- default:
- nPPTTransitionType = PPT_TRANSITION_TYPE_DIAMOND;
- break;
- }
- }
- break;
- }
-
- return nPPTTransitionType;
-}
-
-sal_Int8 PPTWriterBase::GetTransition( FadeEffect eEffect, sal_uInt8& nDirection )
-{
- sal_Int8 nPPTTransitionType = 0;
-
- switch ( eEffect )
- {
- default :
- case FadeEffect_RANDOM :
- nPPTTransitionType = PPT_TRANSITION_TYPE_RANDOM;
- break;
-
- case FadeEffect_HORIZONTAL_STRIPES :
- nDirection++;
- case FadeEffect_VERTICAL_STRIPES :
- nPPTTransitionType = PPT_TRANSITION_TYPE_BLINDS;
- break;
-
- case FadeEffect_VERTICAL_CHECKERBOARD :
- nDirection++;
- case FadeEffect_HORIZONTAL_CHECKERBOARD :
- nPPTTransitionType = PPT_TRANSITION_TYPE_CHECKER;
- break;
-
- case FadeEffect_MOVE_FROM_UPPERLEFT :
- nDirection++;
- case FadeEffect_MOVE_FROM_UPPERRIGHT :
- nDirection++;
- case FadeEffect_MOVE_FROM_LOWERLEFT :
- nDirection++;
- case FadeEffect_MOVE_FROM_LOWERRIGHT :
- nDirection++;
- case FadeEffect_MOVE_FROM_TOP :
- nDirection++;
- case FadeEffect_MOVE_FROM_LEFT :
- nDirection++;
- case FadeEffect_MOVE_FROM_BOTTOM :
- nDirection++;
- case FadeEffect_MOVE_FROM_RIGHT :
- nPPTTransitionType = PPT_TRANSITION_TYPE_COVER;
- break;
-
- case FadeEffect_DISSOLVE :
- nPPTTransitionType = PPT_TRANSITION_TYPE_DISSOLVE;
- break;
-
- case FadeEffect_VERTICAL_LINES :
- nDirection++;
- case FadeEffect_HORIZONTAL_LINES :
- nPPTTransitionType = PPT_TRANSITION_TYPE_RANDOM_BARS;
- break;
-
- case FadeEffect_CLOSE_HORIZONTAL :
- nDirection++;
- case FadeEffect_OPEN_HORIZONTAL :
- nDirection++;
- case FadeEffect_CLOSE_VERTICAL :
- nDirection++;
- case FadeEffect_OPEN_VERTICAL :
- nPPTTransitionType = PPT_TRANSITION_TYPE_SPLIT;
- break;
-
- case FadeEffect_FADE_FROM_UPPERLEFT :
- nDirection++;
- case FadeEffect_FADE_FROM_UPPERRIGHT :
- nDirection++;
- case FadeEffect_FADE_FROM_LOWERLEFT :
- nDirection++;
- case FadeEffect_FADE_FROM_LOWERRIGHT :
- nDirection += 4;
- nPPTTransitionType = PPT_TRANSITION_TYPE_STRIPS;
- break;
-
- case FadeEffect_UNCOVER_TO_LOWERRIGHT :
- nDirection++;
- case FadeEffect_UNCOVER_TO_LOWERLEFT :
- nDirection++;
- case FadeEffect_UNCOVER_TO_UPPERRIGHT :
- nDirection++;
- case FadeEffect_UNCOVER_TO_UPPERLEFT :
- nDirection++;
- case FadeEffect_UNCOVER_TO_BOTTOM :
- nDirection++;
- case FadeEffect_UNCOVER_TO_RIGHT :
- nDirection++;
- case FadeEffect_UNCOVER_TO_TOP :
- nDirection++;
- case FadeEffect_UNCOVER_TO_LEFT :
- nPPTTransitionType = PPT_TRANSITION_TYPE_PULL;
- break;
-
- case FadeEffect_FADE_FROM_TOP :
- nDirection++;
- case FadeEffect_FADE_FROM_LEFT :
- nDirection++;
- case FadeEffect_FADE_FROM_BOTTOM :
- nDirection++;
- case FadeEffect_FADE_FROM_RIGHT :
- nPPTTransitionType = PPT_TRANSITION_TYPE_WIPE;
- break;
-
- case FadeEffect_ROLL_FROM_TOP :
- nDirection++;
- case FadeEffect_ROLL_FROM_LEFT :
- nDirection++;
- case FadeEffect_ROLL_FROM_BOTTOM :
- nDirection++;
- case FadeEffect_ROLL_FROM_RIGHT :
- nPPTTransitionType = PPT_TRANSITION_TYPE_WIPE;
- break;
-
- case FadeEffect_FADE_TO_CENTER :
- nDirection++;
- case FadeEffect_FADE_FROM_CENTER :
- nPPTTransitionType = PPT_TRANSITION_TYPE_ZOOM;
- break;
-
- case FadeEffect_NONE :
- nDirection = 2;
- break;
- }
-
- return nPPTTransitionType;
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool PPTWriterBase::ContainsOtherShapeThanPlaceholders( sal_Bool bForOOMLX )
-{
- sal_uInt32 nShapes = mXShapes->getCount();
- sal_Bool bOtherThanPlaceHolders = FALSE;
-
- if ( nShapes )
- for ( sal_uInt32 nIndex = 0; ( nIndex < nShapes ) && ( bOtherThanPlaceHolders == FALSE ); nIndex++ ) {
- if ( GetShapeByIndex( nIndex ) && mType != "drawing.Page" ) {
- if( bForOOMLX &&
- ( mType == "presentation.Page" ||
- mType == "presentation.Notes" ) ) {
- Reference< XSimpleText > rXText( mXShape, UNO_QUERY );
-
- if( rXText.is() && rXText->getString().getLength() != 0 )
- bOtherThanPlaceHolders = TRUE;
- } else
- bOtherThanPlaceHolders = TRUE;
- }
- DBG(printf("mType == %s\n", mType.GetBuffer()));
- }
-
- return bOtherThanPlaceHolders;
-}
diff --git a/sd/source/filter/pptx/pptx-epptooxml.cxx b/sd/source/filter/pptx/pptx-epptooxml.cxx
deleted file mode 100644
index 950e17968c70..000000000000
--- a/sd/source/filter/pptx/pptx-epptooxml.cxx
+++ /dev/null
@@ -1,2076 +0,0 @@
-#include <hash_map>
-#include <stdio.h>
-#include <oox/drawingml/chart/chartconverter.hxx>
-#include <oox/core/tokens.hxx>
-#include <epptooxml.hxx>
-#include <epptdef.hxx>
-#include <oox/export/shapes.hxx>
-
-#include <cppuhelper/factory.hxx>
-#include <sax/fshelper.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <filter/msfilter/escherex.hxx>
-#include <tools/poly.hxx>
-
-#include <com/sun/star/animations/AnimationAdditiveMode.hpp>
-#include <com/sun/star/animations/AnimationCalcMode.hpp>
-#include <com/sun/star/animations/AnimationFill.hpp>
-#include <com/sun/star/animations/AnimationNodeType.hpp>
-#include <com/sun/star/animations/AnimationRestart.hpp>
-#include <com/sun/star/animations/AnimationValueType.hpp>
-#include <com/sun/star/animations/Event.hpp>
-#include <com/sun/star/animations/EventTrigger.hpp>
-#include <com/sun/star/animations/Timing.hpp>
-#include <com/sun/star/animations/ValuePair.hpp>
-#include <com/sun/star/animations/XAnimateSet.hpp>
-#include <com/sun/star/animations/XAnimationNode.hpp>
-#include <com/sun/star/animations/XAnimationNodeSupplier.hpp>
-#include <com/sun/star/animations/XTransitionFilter.hpp>
-#include <com/sun/star/beans/Property.hpp>
-#include <com/sun/star/beans/XPropertySetInfo.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/drawing/FillStyle.hpp>
-#include <com/sun/star/drawing/RectanglePoint.hpp>
-#include <com/sun/star/presentation/AnimationSpeed.hpp>
-#include <com/sun/star/presentation/EffectNodeType.hpp>
-#include <com/sun/star/text/XSimpleText.hpp>
-
-#include <oox/export/utils.hxx>
-
-#include "pptexanimations.hxx"
-
-// presentation namespaces
-#define PNMSS FSNS( XML_xmlns, XML_a ), "http://schemas.openxmlformats.org/drawingml/2006/main", \
- FSNS( XML_xmlns, XML_p ), "http://schemas.openxmlformats.org/presentationml/2006/main", \
- FSNS( XML_xmlns, XML_r ), "http://schemas.openxmlformats.org/officeDocument/2006/relationships"
-
-using ::rtl::OString;
-using ::rtl::OUString;
-using ::rtl::OUStringBuffer;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::animations;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::drawing;
-using namespace ::com::sun::star::presentation;
-using namespace ::com::sun::star::uno;
-using namespace ::ppt;
-using ::com::sun::star::beans::XPropertySet;
-using ::com::sun::star::beans::XPropertySetInfo;
-using ::com::sun::star::lang::XMultiServiceFactory;
-using ::com::sun::star::container::XIndexAccess;
-using ::com::sun::star::frame::XModel;
-using ::com::sun::star::io::XOutputStream;
-using ::com::sun::star::task::XStatusIndicator;
-using ::com::sun::star::text::XSimpleText;
-using ::sax_fastparser::FastSerializerHelper;
-using ::sax_fastparser::FSHelperPtr;
-
-void dump_pset(Reference< XPropertySet > rXPropSet);
-
-#define IDS(x) (OString(#x " ") + OString::valueOf( mnShapeIdMax++ )).getStr()
-
-namespace oox {
- using namespace drawingml;
- namespace core {
-
-class PowerPointShapeExport : public ShapeExport
-{
- PowerPointExport& mrExport;
- PageType mePageType;
- sal_Bool mbMaster;
-public:
- PowerPointShapeExport( FSHelperPtr pFS, ShapeHashMap* pShapeMap, PowerPointExport* pFB );
- void SetMaster( sal_Bool bMaster );
- void SetPageType( PageType ePageType );
- ShapeExport& WriteNonVisualProperties( Reference< XShape > xShape );
- ShapeExport& WriteTextShape( Reference< XShape > xShape );
- ShapeExport& WriteUnknownShape( Reference< XShape > xShape );
- ShapeExport& WritePlaceholderShape( Reference< XShape > xShape, PlaceholderType ePlaceholder );
- ShapeExport& WritePageShape( Reference< XShape > xShape, PageType ePageType, sal_Bool bPresObj );
-
- // helper parts
- sal_Bool WritePlaceholder( Reference< XShape > xShape, PlaceholderType ePlaceholder, sal_Bool bMaster );
-};
-
- PowerPointShapeExport::PowerPointShapeExport( FSHelperPtr pFS, ShapeHashMap* pShapeMap, PowerPointExport* pFB )
- : ShapeExport( XML_p, pFS, pShapeMap, pFB )
- , mrExport( *pFB )
-{
-}
-
-void PowerPointShapeExport::SetMaster( sal_Bool bMaster )
-{
- mbMaster = bMaster;
-}
-
-void PowerPointShapeExport::SetPageType( PageType ePageType )
-{
- mePageType = ePageType;
-}
-
-ShapeExport& PowerPointShapeExport::WriteNonVisualProperties( Reference< XShape > )
-{
- GetFS()->singleElementNS( XML_p, XML_nvPr, FSEND );
-
- return *this;
-}
-
-ShapeExport& PowerPointShapeExport::WriteTextShape( Reference< XShape > xShape )
-{
- OUString sShapeType = xShape->getShapeType();
-
- DBG(printf( "shape(text): %s\n", USS(sShapeType) ));
-
- if( sShapeType.equalsAscii( "com.sun.star.drawing.TextShape" ) )
- {
- ShapeExport::WriteTextShape( xShape );
- }
- else if( sShapeType.equalsAscii( "com.sun.star.presentation.DateTimeShape" ) )
- {
- if( !WritePlaceholder( xShape, DateAndTime, mbMaster ) )
- ShapeExport::WriteTextShape( xShape );
- }
- else if( sShapeType.equalsAscii( "com.sun.star.presentation.FooterShape" ) )
- {
- if( !WritePlaceholder( xShape, Footer, mbMaster ) )
- ShapeExport::WriteTextShape( xShape );
- }
- else if( sShapeType.equalsAscii( "com.sun.star.presentation.HeaderShape" ) )
- {
- if( !WritePlaceholder( xShape, Header, mbMaster ) )
- ShapeExport::WriteTextShape( xShape );
- }
- else if( sShapeType.equalsAscii( "com.sun.star.presentation.NotesShape" ) )
- {
- if( mePageType == NOTICE && mrExport.GetPresObj() )
- WritePlaceholderShape( xShape, Notes );
- else
- ShapeExport::WriteTextShape( xShape );
- }
- else if( sShapeType.equalsAscii( "com.sun.star.presentation.OutlinerShape" ) )
- {
- if( !WritePlaceholder( xShape, Outliner, mbMaster ) )
- ShapeExport::WriteTextShape( xShape );
- }
- else if( sShapeType.equalsAscii( "com.sun.star.presentation.SlideNumberShape" ) )
- {
- if( !WritePlaceholder( xShape, SlideNumber, mbMaster ) )
- ShapeExport::WriteTextShape( xShape );
- }
- else if( sShapeType.equalsAscii( "com.sun.star.presentation.TitleTextShape" ) )
- {
- if( !WritePlaceholder( xShape, Title, mbMaster ) )
- ShapeExport::WriteTextShape( xShape );
- }
-
- return *this;
-}
-
-ShapeExport& PowerPointShapeExport::WriteUnknownShape( Reference< XShape > xShape )
-{
- OUString sShapeType = xShape->getShapeType();
-
- DBG(printf( "shape(unknown): %s\n", USS(sShapeType) ));
-
- if( sShapeType.equalsAscii( "com.sun.star.drawing.GroupShape" ) )
- {
- Reference< XIndexAccess > rXIndexAccess( xShape, UNO_QUERY );
-
- mrExport.EnterGroup( rXIndexAccess );
- DBG(printf( "enter group\n" ));
- }
- else if( sShapeType.equalsAscii( "com.sun.star.drawing.PageShape" ) )
- {
- WritePageShape( xShape, mePageType, mrExport.GetPresObj() );
- }
- else if( sShapeType.equalsAscii( "com.sun.star.presentation.SubtitleShape" ) )
- {
- if( !WritePlaceholder( xShape, Subtitle, mbMaster ) )
- ShapeExport::WriteTextShape( xShape );
- }
-
- return *this;
-}
-
-PowerPointExport::PowerPointExport( const Reference< XMultiServiceFactory > & rSMgr )
- : XmlFilterBase( rSMgr ),
- PPTWriterBase(),
- mnLayoutFileIdMax( 1 ),
- mnSlideIdMax( 1 << 8 ),
- mnSlideMasterIdMax( 1 << 31 ),
- mnAnimationNodeIdMax( 1 )
-{
- memset( mLayoutInfo, 0, sizeof(mLayoutInfo) );
-}
-
-PowerPointExport::~PowerPointExport()
-{
-}
-
-bool PowerPointExport::importDocument() throw()
-{
- return false;
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-bool PowerPointExport::exportDocument() throw()
-{
- DrawingML::ResetCounters();
- maShapeMap.clear ();
-
- addRelation( US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" ), S( "ppt/presentation.xml" ) );
-
- mPresentationFS = openFragmentStreamWithSerializer( US( "ppt/presentation.xml" ),
- US( "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml" ) );
-
- addRelation( mPresentationFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" ),
- US( "theme/theme1.xml" ) );
-
- mPresentationFS->startElementNS( XML_p, XML_presentation, PNMSS, FSEND );
-
- mXModel.set( getModel(), UNO_QUERY );
- mXStatusIndicator.set( getStatusIndicator(), UNO_QUERY );
-
- exportPPT();
-
- mPresentationFS->singleElementNS( XML_p, XML_sldSz,
- XML_cx, IS( PPTtoEMU( maDestPageSize.Width ) ),
- XML_cy, IS( PPTtoEMU( maDestPageSize.Height ) ),
- FSEND );
- // for some reason if added before slides list it will not load the slides (alas with error reports) in mso
- mPresentationFS->singleElementNS( XML_p, XML_notesSz,
- XML_cx, IS( PPTtoEMU( maNotesPageSize.Width ) ),
- XML_cy, IS( PPTtoEMU( maNotesPageSize.Height ) ),
- FSEND );
-
- mPresentationFS->endElementNS( XML_p, XML_presentation );
- mPresentationFS.reset();
-
- commitStorage();
-
- maShapeMap.clear ();
-
- return true;
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void PowerPointExport::ImplWriteBackground( FSHelperPtr pFS, Reference< XPropertySet > rXPropSet )
-{
- FillStyle aFillStyle( FillStyle_NONE );
- if ( ImplGetPropertyValue( rXPropSet, S( "FillStyle" ) ) )
- mAny >>= aFillStyle;
-
- if( aFillStyle == FillStyle_BITMAP ) {
- //DBG(printf ("FillStyle_BITMAP properties\n"));
- //DBG(dump_pset(rXPropSet));
- }
-
- if( aFillStyle == FillStyle_NONE ||
- aFillStyle == FillStyle_GRADIENT ||
- aFillStyle == FillStyle_HATCH )
- return;
-
- pFS->startElementNS( XML_p, XML_bg, FSEND );
- pFS->startElementNS( XML_p, XML_bgPr, FSEND );
-
- PowerPointShapeExport( pFS, &maShapeMap, this ).WriteFill( rXPropSet );
-
- pFS->endElementNS( XML_p, XML_bgPr );
- pFS->endElementNS( XML_p, XML_bg );
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-#define MINIMAL_SPTREE "<p:spTree>\
- <p:nvGrpSpPr>\
- <p:cNvPr id=\"1\" name=\"\"/>\
- <p:cNvGrpSpPr/>\
- <p:nvPr/>\
- </p:nvGrpSpPr>\
- <p:grpSpPr>\
- <a:xfrm>\
- <a:off x=\"0\" y=\"0\"/>\
- <a:ext cx=\"0\" cy=\"0\"/>\
- <a:chOff x=\"0\" y=\"0\"/>\
- <a:chExt cx=\"0\" cy=\"0\"/>\
- </a:xfrm>\
- </p:grpSpPr>\
- </p:spTree>"
-
-#define MAIN_GROUP \
- "<p:nvGrpSpPr>\
- <p:cNvPr id=\"1\" name=\"\"/>\
- <p:cNvGrpSpPr/>\
- <p:nvPr/>\
- </p:nvGrpSpPr>\
- <p:grpSpPr>\
- <a:xfrm>\
- <a:off x=\"0\" y=\"0\"/>\
- <a:ext cx=\"0\" cy=\"0\"/>\
- <a:chOff x=\"0\" y=\"0\"/>\
- <a:chExt cx=\"0\" cy=\"0\"/>\
- </a:xfrm>\
- </p:grpSpPr>"
-
-
-#define GETA(propName) \
- ImplGetPropertyValue( mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( #propName ) ) )
-
-#define GET(variable, propName) \
- if ( GETA(propName) ) \
- mAny >>= variable;
-
-const char* PowerPointExport::GetSideDirection( sal_uInt8 nDirection )
-{
- const char* pDirection = NULL;
-
- switch( nDirection ) {
- case 0:
- pDirection = "r";
- break;
- case 1:
- pDirection = "d";
- break;
- case 2:
- pDirection = "l";
- break;
- case 3:
- pDirection = "u";
- break;
- }
-
- return pDirection;
-}
-
-const char* PowerPointExport::GetCornerDirection( sal_uInt8 nDirection )
-{
- const char* pDirection = NULL;
-
- switch( nDirection ) {
- case 4:
- pDirection = "rd";
- break;
- case 5:
- pDirection = "ld";
- break;
- case 6:
- pDirection = "ru";
- break;
- case 7:
- pDirection = "lu";
- break;
- }
-
- return pDirection;
-}
-
-const char* PowerPointExport::Get8Direction( sal_uInt8 nDirection )
-{
- const char* pDirection = GetSideDirection( nDirection );
-
- if( !pDirection )
- pDirection = GetCornerDirection( nDirection );
-
- return pDirection;
-}
-
-void PowerPointExport::WriteTransition( FSHelperPtr pFS )
-{
- FadeEffect eFadeEffect = FadeEffect_NONE;
- GET( eFadeEffect, Effect );
-
- OSL_TRACE("fade effect %d", eFadeEffect);
-
- sal_Int16 nTransitionType = 0, nTransitionSubtype = 0;
- sal_Int8 nPPTTransitionType = 0;
- sal_uInt8 nDirection = 0;
-
- if( GETA( TransitionType ) && ( mAny >>= nTransitionType ) &&
- GETA( TransitionSubtype ) && ( mAny >>= nTransitionSubtype ) )
- nPPTTransitionType = GetTransition( nTransitionType, nTransitionSubtype, eFadeEffect, nDirection );
-
- if( !nPPTTransitionType && eFadeEffect != FadeEffect_NONE )
- nPPTTransitionType = GetTransition( eFadeEffect, nDirection );
-
- if( nPPTTransitionType ) {
- AnimationSpeed animationSpeed = AnimationSpeed_MEDIUM;
- const char* speed = NULL;
- sal_Int32 advanceTiming = -1;
- sal_Int32 changeType = 0;
-
- if( GETA( Speed ) ) {
- mAny >>= animationSpeed;
-
- switch( animationSpeed ) {
- default:
- case AnimationSpeed_MEDIUM:
- speed = "med";
- break;
- case AnimationSpeed_SLOW:
- speed = "slow";
- break;
- case AnimationSpeed_FAST:
- break;
- }
- }
-
- if( GETA( Change ) )
- mAny >>= changeType;
-
- // 1 means automatic, 2 half automatic - not sure what it means - at least I don't see it in UI
- if( changeType == 1 && GETA( Duration ) )
- mAny >>= advanceTiming;
-
- pFS->startElementNS( XML_p, XML_transition,
- XML_spd, speed,
- XML_advTm, advanceTiming != -1 ? I32S( advanceTiming*1000 ) : NULL,
- FSEND );
-
- sal_Int32 nTransition = 0;
- const char* pDirection = NULL;
- const char* pOrientation = NULL;
- const char* pThruBlk = NULL;
- const char* pSpokes = NULL;
- char pSpokesTmp[2] = "0";
-
- switch( nPPTTransitionType ) {
- case PPT_TRANSITION_TYPE_BLINDS:
- nTransition = XML_blinds;
- pDirection = ( nDirection == 0) ? "vert" : "horz";
- break;
- case PPT_TRANSITION_TYPE_CHECKER:
- nTransition = XML_checker;
- pDirection = ( nDirection == 1) ? "vert" : "horz";
- break;
- case PPT_TRANSITION_TYPE_CIRCLE:
- nTransition = XML_circle;
- break;
- case PPT_TRANSITION_TYPE_COMB:
- nTransition = XML_comb;
- pDirection = ( nDirection == 1) ? "vert" : "horz";
- break;
- case PPT_TRANSITION_TYPE_COVER:
- nTransition = XML_cover;
- pDirection = Get8Direction( nDirection );
- break;
-// we don't have cut transition AFAIK
-// case PPT_TRANSITION_TYPE_CUT:
-// nTransition = XML_cut;
-// break;
- case PPT_TRANSITION_TYPE_DIAMOND:
- nTransition = XML_diamond;
- break;
- case PPT_TRANSITION_TYPE_DISSOLVE:
- nTransition = XML_dissolve;
- break;
- case PPT_TRANSITION_TYPE_FADE:
- nTransition = XML_fade;
- pThruBlk = "true";
- break;
- case PPT_TRANSITION_TYPE_SMOOTHFADE:
- nTransition = XML_fade;
- break;
- case PPT_TRANSITION_TYPE_NEWSFLASH:
- nTransition = XML_newsflash;
- break;
- case PPT_TRANSITION_TYPE_PLUS:
- nTransition = XML_plus;
- break;
- case PPT_TRANSITION_TYPE_PULL:
- nTransition = XML_pull;
- pDirection = Get8Direction( nDirection );
- break;
- case PPT_TRANSITION_TYPE_PUSH:
- nTransition = XML_push;
- pDirection = GetSideDirection( nDirection );
- break;
- case PPT_TRANSITION_TYPE_RANDOM:
- nTransition = XML_random;
- break;
- case PPT_TRANSITION_TYPE_RANDOM_BARS:
- nTransition = XML_randomBar;
- pDirection = ( nDirection == 1) ? "vert" : "horz";
- break;
- case PPT_TRANSITION_TYPE_SPLIT:
- nTransition = XML_split;
- pDirection = ( nDirection & 1) ? "in" : "out";
- pOrientation = ( nDirection < 2) ? "horz" : "vert";
- break;
- case PPT_TRANSITION_TYPE_STRIPS:
- nTransition = XML_strips;
- pDirection = GetCornerDirection( nDirection );
- break;
- case PPT_TRANSITION_TYPE_WEDGE:
- nTransition = XML_wedge;
- break;
- case PPT_TRANSITION_TYPE_WHEEL:
- nTransition = XML_wheel;
- if( nDirection != 4 && nDirection <= 9 ) {
- pSpokesTmp[0] = '0' + nDirection;
- pSpokes = pSpokesTmp;
- }
- break;
- case PPT_TRANSITION_TYPE_WIPE:
- nTransition = XML_wipe;
- pDirection = GetSideDirection( nDirection );
- break;
- case PPT_TRANSITION_TYPE_ZOOM:
- nTransition = XML_zoom;
- pDirection = ( nDirection == 1) ? "in" : "out";
- break;
- case PPT_TRANSITION_TYPE_NONE:
- default:
- nTransition = 0;
- }
-
- if( nTransition )
- pFS->singleElementNS( XML_p, nTransition,
- XML_dir, pDirection,
- XML_orient, pOrientation,
- XML_spokes, pSpokes,
- XML_thruBlk, pThruBlk,
- FSEND );
-
- pFS->endElementNS( XML_p, XML_transition );
- }
-}
-
-void PowerPointExport::WriteAnimationProperty( FSHelperPtr pFS, const Any& rAny )
-{
- if( !rAny.hasValue() )
- return;
-
- switch( rAny.getValueType().getTypeClass() ) {
- case TypeClass_STRING:
- pFS->singleElementNS( XML_p, XML_strVal,
- XML_val, USS( *static_cast< const OUString* >( rAny.getValue() ) ),
- FSEND );
- break;
- default:
- break;
- }
-}
-
-void PowerPointExport::WriteAnimateValues( FSHelperPtr pFS, const Reference< XAnimate >& rXAnimate )
-{
- const Sequence< double > aKeyTimes = rXAnimate->getKeyTimes();
- if( aKeyTimes.getLength() <= 0 )
- return;
- const Sequence< Any > aValues = rXAnimate->getValues();
- const OUString& sFormula = rXAnimate->getFormula();
- const OUString& rAttributeName = rXAnimate->getAttributeName();
-
- DBG(printf("animate values, formula: %s\n", USS( sFormula )));
-
- pFS->startElementNS( XML_p, XML_tavLst, FSEND );
-
- for( int i = 0; i < aKeyTimes.getLength(); i++ ) {
- DBG(printf("animate value %d: %f\n", i, aKeyTimes[ i ]));
- if( aValues[ i ].hasValue() ) {
- pFS->startElementNS( XML_p, XML_tav,
- XML_fmla, sFormula.getLength() > 0 ? USS( sFormula ) : NULL,
- XML_tm, I32S( ( sal_Int32 )( aKeyTimes[ i ]*100000.0 ) ),
- FSEND );
- pFS->startElementNS( XML_p, XML_val, FSEND );
- ValuePair aPair;
- if( aValues[ i ] >>= aPair ) {
- WriteAnimationProperty( pFS, AnimationExporter::convertAnimateValue( aPair.First, rAttributeName ) );
- WriteAnimationProperty( pFS, AnimationExporter::convertAnimateValue( aPair.Second, rAttributeName ) );
- } else
- WriteAnimationProperty( pFS, AnimationExporter::convertAnimateValue( aValues[ i ], rAttributeName ) );
-
- pFS->endElementNS( XML_p, XML_val );
- pFS->endElementNS( XML_p, XML_tav );
- }
- }
-
- pFS->endElementNS( XML_p, XML_tavLst );
-}
-
-void PowerPointExport::WriteAnimateTo( FSHelperPtr pFS, Any aValue, const OUString& rAttributeName )
-{
- if( !aValue.hasValue() )
- return;
-
- DBG(printf("to attribute name: %s\n", USS( rAttributeName )));
-
- pFS->startElementNS( XML_p, XML_to, FSEND );
-
- WriteAnimationProperty( pFS, AnimationExporter::convertAnimateValue( aValue, rAttributeName ) );
-
- pFS->endElementNS( XML_p, XML_to );
-}
-
-void PowerPointExport::WriteAnimationAttributeName( FSHelperPtr pFS, const OUString& rAttributeName )
-{
- if( ! rAttributeName.getLength() )
- return;
-
- pFS->startElementNS( XML_p, XML_attrNameLst, FSEND );
-
- DBG(printf("write attribute name: %s\n", USS( rAttributeName )));
-
- const char* sAttributeName = NULL;
- if( rAttributeName.equalsAscii( "Visibility" ) ) {
- sAttributeName = "style.visibility";
- } else if( rAttributeName.equalsAscii( "X" ) ) {
- sAttributeName = "ppt_x";
- } else if( rAttributeName.equalsAscii( "Y" ) ) {
- sAttributeName = "ppt_y";
- }
-
- pFS->startElementNS( XML_p, XML_attrName, FSEND );
- pFS->writeEscaped( sAttributeName );
- pFS->endElementNS( XML_p, XML_attrName );
-
- pFS->endElementNS( XML_p, XML_attrNameLst );
-}
-
-void PowerPointExport::WriteAnimationTarget( FSHelperPtr pFS, Any aTarget )
-{
- sal_Int32 nBegin = -1, nEnd = -1;
- sal_Bool bParagraphTarget;
- Reference< XShape > rXShape = AnimationExporter::getTargetElementShape( aTarget, nBegin, nEnd, bParagraphTarget );
-
- if( rXShape.is() ) {
- pFS->startElementNS( XML_p, XML_tgtEl, FSEND );
- pFS->startElementNS( XML_p, XML_spTgt,
- XML_spid, I32S( ShapeExport::GetShapeID( rXShape, &maShapeMap ) ),
- FSEND );
- if( bParagraphTarget ) {
- pFS->startElementNS( XML_p, XML_txEl, FSEND );
- pFS->singleElementNS( XML_p, XML_pRg,
- XML_st, I32S( nBegin ),
- XML_end, I32S( nEnd ),
- FSEND );
- pFS->endElementNS( XML_p, XML_txEl );
- }
- pFS->endElementNS( XML_p, XML_spTgt );
- pFS->endElementNS( XML_p, XML_tgtEl );
- }
-}
-
-void PowerPointExport::WriteAnimationNodeAnimate( FSHelperPtr pFS, const Reference< XAnimationNode >& rXNode, sal_Int32 nXmlNodeType, sal_Bool bMainSeqChild )
-{
- Reference< XAnimate > rXAnimate( rXNode, UNO_QUERY );
- if( !rXAnimate.is() )
- return;
-
- const char* pCalcMode = NULL;
- const char* pValueType = NULL;
- sal_Bool bSimple = ( nXmlNodeType != XML_anim );
-
- if( !bSimple ) {
- switch( rXAnimate->getCalcMode() ) {
- case AnimationCalcMode::DISCRETE:
- pCalcMode = "discrete";
- break;
- case AnimationCalcMode::LINEAR:
- pCalcMode = "lin";
- break;
- }
-
- switch( AnimationExporter::GetValueTypeForAttributeName( rXAnimate->getAttributeName() ) ) {
- case AnimationValueType::STRING:
- pValueType = "str";
- break;
- case AnimationValueType::NUMBER:
- pValueType = "num";
- break;
- case AnimationValueType::COLOR:
- pValueType = "clr";
- break;
- }
- }
-
- pFS->startElementNS( XML_p, nXmlNodeType,
- XML_calcmode, pCalcMode,
- XML_valueType, pValueType,
- FSEND );
- WriteAnimationNodeAnimateInside( pFS, rXNode, bMainSeqChild, bSimple );
- pFS->endElementNS( XML_p, nXmlNodeType );
-}
-
-void PowerPointExport::WriteAnimationNodeAnimateInside( FSHelperPtr pFS, const Reference< XAnimationNode >& rXNode, sal_Bool bMainSeqChild, sal_Bool bSimple )
-{
- Reference< XAnimate > rXAnimate( rXNode, UNO_QUERY );
- if( !rXAnimate.is() )
- return;
-
- const char* pAdditive = NULL;
-
- if( !bSimple ) {
- switch( rXAnimate->getAdditive() ) {
- case AnimationAdditiveMode::BASE:
- pAdditive = "base";
- break;
- case AnimationAdditiveMode::SUM:
- pAdditive = "sum";
- break;
- case AnimationAdditiveMode::REPLACE:
- pAdditive = "repl";
- break;
- case AnimationAdditiveMode::MULTIPLY:
- pAdditive = "mult";
- break;
- case AnimationAdditiveMode::NONE:
- pAdditive = "none";
- break;
- }
- }
-
- pFS->startElementNS( XML_p, XML_cBhvr,
- XML_additive, pAdditive,
- FSEND );
- WriteAnimationNodeCommonPropsStart( pFS, rXNode, TRUE, bMainSeqChild );
- WriteAnimationTarget( pFS, rXAnimate->getTarget() );
- WriteAnimationAttributeName( pFS, rXAnimate->getAttributeName() );
- pFS->endElementNS( XML_p, XML_cBhvr );
- WriteAnimateValues( pFS, rXAnimate );
- WriteAnimateTo( pFS, rXAnimate->getTo(), rXAnimate->getAttributeName() );
-}
-
-void PowerPointExport::WriteAnimationCondition( FSHelperPtr pFS, const char* pDelay, const char* pEvent, double fDelay, sal_Bool bHasFDelay )
-{
- if( bHasFDelay || pDelay || pEvent ) {
- if( !pEvent )
- pFS->singleElementNS( XML_p, XML_cond,
- XML_delay, bHasFDelay ? I64S( (sal_uInt32) (fDelay*1000.0) ) : pDelay,
- FSEND );
- else {
- pFS->startElementNS( XML_p, XML_cond,
- XML_delay, bHasFDelay ? I64S( (sal_uInt32) (fDelay*1000.0) ) : pDelay,
- XML_evt, pEvent,
- FSEND );
-
- pFS->startElementNS( XML_p, XML_tgtEl, FSEND );
- pFS->singleElementNS( XML_p, XML_sldTgt, FSEND );
- pFS->endElementNS( XML_p, XML_tgtEl );
-
- pFS->endElementNS( XML_p, XML_cond );
- }
- }
-}
-
-void PowerPointExport::WriteAnimationCondition( FSHelperPtr pFS, Any& rAny, sal_Bool bWriteEvent, sal_Bool bMainSeqChild )
-{
- sal_Bool bHasFDelay = FALSE;
- double fDelay = 0;
- Timing eTiming;
- Event aEvent;
- const char* pDelay = NULL;
- const char* pEvent = NULL;
-
- if( rAny >>= fDelay )
- bHasFDelay = TRUE;
- else if( rAny >>= eTiming ) {
- if( eTiming == Timing_INDEFINITE )
- pDelay = "indefinite";
- } else if( rAny >>= aEvent ) {
- // TODO
- DBG(printf ("animation condition event: TODO\n"));
- DBG(printf ("event offset has value: %d triger: %d source has value: %d\n", aEvent.Offset.hasValue(), aEvent.Trigger, aEvent.Source.hasValue()));
-
- if( !bWriteEvent && aEvent.Trigger == EventTrigger::ON_NEXT && bMainSeqChild )
- pDelay = "indefinite";
- else if( bWriteEvent ) {
- switch( aEvent.Trigger ) {
- case EventTrigger::ON_NEXT:
- pEvent = "onNext";
- break;
- case EventTrigger::ON_PREV:
- pEvent = "onPrev";
- break;
- case EventTrigger::BEGIN_EVENT:
- pEvent = "begin";
- break;
- case EventTrigger::END_EVENT:
- pEvent = "end";
- break;
- case EventTrigger::ON_BEGIN:
- pEvent = "onBegin";
- break;
- case EventTrigger::ON_END:
- pEvent = "onEnd";
- break;
- case EventTrigger::ON_CLICK:
- pEvent = "onClick";
- break;
- case EventTrigger::ON_DBL_CLICK:
- pEvent = "onDblClick";
- break;
- case EventTrigger::ON_STOP_AUDIO:
- pEvent = "onStopAudio";
- break;
- case EventTrigger::ON_MOUSE_ENTER:
- pEvent = "onMouseOver"; // not exact?
- break;
- case EventTrigger::ON_MOUSE_LEAVE:
- pEvent = "onMouseOut";
- break;
- }
- }
-
- if( aEvent.Offset >>= fDelay ) {
- bHasFDelay = TRUE;
- DBG(printf ("event offset: %f\n", fDelay));
- } else if( aEvent.Offset >>= eTiming ) {
- if( eTiming == Timing_INDEFINITE )
- pDelay = "indefinite";
- DBG(printf ("event offset timing: %d\n", eTiming));
- }
- }
-
- WriteAnimationCondition( pFS, pDelay, pEvent, fDelay, bHasFDelay );
-}
-
-void PowerPointExport::WriteAnimationNodeCommonPropsStart( FSHelperPtr pFS, const Reference< XAnimationNode >& rXNode, sal_Bool bSingle, sal_Bool bMainSeqChild )
-{
- const char* pDuration = NULL;
- const char* pRestart = NULL;
- const char* pNodeType = NULL;
- const char* pPresetClass = NULL;
- const char* pFill = NULL;
- double fDuration = 0;
- Any aAny;
-
- aAny = rXNode->getDuration();
- if( aAny.hasValue() ) {
- Timing eTiming;
-
- if( aAny >>= eTiming ) {
- if( eTiming == Timing_INDEFINITE )
- pDuration = "indefinite";
- } else
- aAny >>= fDuration;
- }
-
- switch( rXNode->getRestart() ) {
- case AnimationRestart::ALWAYS:
- pRestart = "always";
- break;
- case AnimationRestart::WHEN_NOT_ACTIVE:
- pRestart = "whenNotActive";
- break;
- case AnimationRestart::NEVER:
- pRestart = "never";
- break;
- }
-
- const Sequence< NamedValue > aUserData = rXNode->getUserData();
- const Any* pAny[ DFF_ANIM_PROPERTY_ID_COUNT ];
- AnimationExporter::GetUserData( aUserData, pAny, sizeof( pAny ) );
-
- sal_Int16 nType = 0;
- if( pAny[ DFF_ANIM_NODE_TYPE ] && ( *pAny[ DFF_ANIM_NODE_TYPE ] >>= nType ) ) {
- switch( nType ) {
- case EffectNodeType::TIMING_ROOT:
- pNodeType = "tmRoot";
- if( !pDuration )
- pDuration = "indefinite";
- if( !pRestart )
- pRestart = "never";
- break;
- case EffectNodeType::MAIN_SEQUENCE:
- pNodeType = "mainSeq";
- break;
- case EffectNodeType::ON_CLICK:
- pNodeType = "clickEffect";
- break;
- case EffectNodeType::AFTER_PREVIOUS:
- pNodeType = "afterEffect";
- break;
- case EffectNodeType::WITH_PREVIOUS:
- pNodeType = "withEffect";
- break;
- case EffectNodeType::INTERACTIVE_SEQUENCE:
- pNodeType = "interactiveSeq";
- break;
- }
- }
-
- sal_uInt32 nPresetClass = DFF_ANIM_PRESS_CLASS_USER_DEFINED;
- if ( pAny[ DFF_ANIM_PRESET_CLASS ] ) {
- if ( *pAny[ DFF_ANIM_PRESET_CLASS ] >>= nPresetClass ) {
- switch( nPresetClass ) {
- case EffectPresetClass::ENTRANCE:
- pPresetClass = "entr";
- break;
- case EffectPresetClass::EXIT:
- pPresetClass = "exit";
- break;
- case EffectPresetClass::EMPHASIS:
- pPresetClass = "emph";
- break;
- case EffectPresetClass::MOTIONPATH:
- pPresetClass = "path";
- break;
- case EffectPresetClass::OLEACTION:
- pPresetClass = "verb"; // ?
- break;
- case EffectPresetClass::MEDIACALL:
- pPresetClass = "mediacall";
- break;
- }
- }
- }
-
- sal_uInt32 nPresetId = 0;
- sal_Bool bPresetId = FALSE;
- if ( pAny[ DFF_ANIM_PRESET_ID ] ) {
- rtl::OUString sPreset;
- if ( *pAny[ DFF_ANIM_PRESET_ID ] >>= sPreset )
- nPresetId = AnimationExporter::GetPresetID( sPreset, nPresetClass, bPresetId );
- }
-
- sal_uInt32 nPresetSubType = 0;
- sal_Bool bPresetSubType = FALSE;
- if ( pAny[ DFF_ANIM_PRESET_SUB_TYPE ] ) {
- rtl::OUString sPresetSubType;
- if ( *pAny[ DFF_ANIM_PRESET_SUB_TYPE ] >>= sPresetSubType ) {
- nPresetSubType = AnimationExporter::TranslatePresetSubType( nPresetClass, nPresetId, sPresetSubType );
- bPresetSubType = sal_True;
- }
- }
-
- if( nType != EffectNodeType::TIMING_ROOT && nType != EffectNodeType::MAIN_SEQUENCE ) {
- // it doesn't seem to work right on root and mainseq nodes
- sal_Int16 nFill = AnimationExporter::GetFillMode( rXNode, AnimationFill::AUTO );
- switch( nFill ) {
- case AnimationFill::FREEZE:
- pFill = "freeze";
- break;
- case AnimationFill::HOLD:
- pFill = "hold";
- break;
- case AnimationFill::REMOVE:
- pFill = "remove";
- break;
- case AnimationFill::TRANSITION:
- pFill = "transition";
- break;
- }
- }
-
- pFS->startElementNS( XML_p, XML_cTn,
- XML_id, I64S( mnAnimationNodeIdMax ++ ),
- XML_dur, fDuration != 0 ? I32S( (sal_Int32) ( fDuration * 1000.0 ) ) : pDuration,
- XML_restart, pRestart,
- XML_nodeType, pNodeType,
- XML_fill, pFill,
- XML_presetClass, pPresetClass,
- XML_presetID, bPresetId ? I64S( nPresetId ) : NULL,
- XML_presetSubtype, bPresetSubType ? I64S( nPresetSubType ) : NULL,
- FSEND );
-
- aAny = rXNode->getBegin();
- if( aAny.hasValue() ) {
- Sequence< Any > aCondSeq;
-
- pFS->startElementNS( XML_p, XML_stCondLst, FSEND );
- if( aAny >>= aCondSeq ) {
- for( int i = 0; i < aCondSeq.getLength(); i ++ )
- WriteAnimationCondition( pFS, aCondSeq[ i ], FALSE, bMainSeqChild );
- } else
- WriteAnimationCondition( pFS, aAny, FALSE, bMainSeqChild );
- pFS->endElementNS( XML_p, XML_stCondLst );
- }
-
- aAny = rXNode->getEnd();
- if( aAny.hasValue() ) {
- Sequence< Any > aCondSeq;
-
- pFS->startElementNS( XML_p, XML_endCondLst, FSEND );
- if( aAny >>= aCondSeq ) {
- for( int i = 0; i < aCondSeq.getLength(); i ++ )
- WriteAnimationCondition( pFS, aCondSeq[ i ], FALSE, bMainSeqChild );
- } else
- WriteAnimationCondition( pFS, aAny, FALSE, bMainSeqChild );
- pFS->endElementNS( XML_p, XML_stCondLst );
- }
-
- Reference< XEnumerationAccess > xEnumerationAccess( rXNode, UNO_QUERY );
- if( xEnumerationAccess.is() ) {
- Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY );
- if( xEnumeration.is() ) {
- DBG(printf ("-----\n"));
-
- pFS->startElementNS( XML_p, XML_childTnLst, FSEND );
-
- while( xEnumeration->hasMoreElements() ) {
- Reference< XAnimationNode > xChildNode( xEnumeration->nextElement(), UNO_QUERY );
- if( xChildNode.is() )
- WriteAnimationNode( pFS, xChildNode, nType == EffectNodeType::MAIN_SEQUENCE );
- }
-
- pFS->endElementNS( XML_p, XML_childTnLst );
-
- DBG(printf ("-----\n"));
- }
- }
-
- if( bSingle )
- pFS->endElementNS( XML_p, XML_cTn );
-}
-
-void PowerPointExport::WriteAnimationNodeCommonPropsEnd( FSHelperPtr pFS )
-{
- pFS->endElementNS( XML_p, XML_cTn );
-}
-
-void PowerPointExport::WriteAnimationNodeSeq( FSHelperPtr pFS, const Reference< XAnimationNode >& rXNode, sal_Int32, sal_Bool bMainSeqChild )
-{
- DBG(printf ("write animation node SEQ\n"));
-
- pFS->startElementNS( XML_p, XML_seq, FSEND );
-
- WriteAnimationNodeCommonPropsStart( pFS, rXNode, TRUE, bMainSeqChild );
-
- pFS->startElementNS( XML_p, XML_prevCondLst, FSEND );
- WriteAnimationCondition( pFS, NULL, "onPrev", 0, TRUE );
- pFS->endElementNS( XML_p, XML_prevCondLst );
-
- pFS->startElementNS( XML_p, XML_nextCondLst, FSEND );
- WriteAnimationCondition( pFS, NULL, "onNext", 0, TRUE );
- pFS->endElementNS( XML_p, XML_nextCondLst );
-
- pFS->endElementNS( XML_p, XML_seq );
-}
-
-void PowerPointExport::WriteAnimationNodeEffect( FSHelperPtr pFS, const Reference< XAnimationNode >& rXNode, sal_Int32, sal_Bool bMainSeqChild )
-{
- DBG(printf ("write animation node FILTER\n"));
-
- Reference< XTransitionFilter > xFilter( rXNode, UNO_QUERY );
- if ( xFilter.is() ) {
- const char* pFilter = ppt::AnimationExporter::FindTransitionName( xFilter->getTransition(), xFilter->getSubtype(), xFilter->getDirection() );
- const char* pDirection = xFilter->getDirection() ? "in" : "out";
- pFS->startElementNS( XML_p, XML_animEffect,
- XML_filter, pFilter,
- XML_transition, pDirection,
- FSEND );
-
- WriteAnimationNodeAnimateInside( pFS, rXNode, bMainSeqChild, FALSE );
-
- pFS->endElementNS( XML_p, XML_animEffect );
- }
-}
-
-void PowerPointExport::WriteAnimationNode( FSHelperPtr pFS, const Reference< XAnimationNode >& rXNode, sal_Bool bMainSeqChild )
-{
- DBG(printf ("export node type: %d\n", rXNode->getType()));
- sal_Int32 xmlNodeType = -1;
- typedef void (PowerPointExport::*AnimationNodeWriteMethod)( FSHelperPtr, const Reference< XAnimationNode >&, sal_Int32, sal_Bool );
- AnimationNodeWriteMethod pMethod = NULL;
-
- switch( rXNode->getType() ) {
- case AnimationNodeType::PAR:
- xmlNodeType = XML_par;
- break;
- case AnimationNodeType::SEQ:
- pMethod = &PowerPointExport::WriteAnimationNodeSeq;
- break;
- case AnimationNodeType::ANIMATE:
- xmlNodeType = XML_anim;
- pMethod = &PowerPointExport::WriteAnimationNodeAnimate;
- break;
- case AnimationNodeType::SET:
- xmlNodeType = XML_set;
- pMethod = &PowerPointExport::WriteAnimationNodeAnimate;
- break;
- case AnimationNodeType::TRANSITIONFILTER:
- xmlNodeType = XML_animEffect;
- pMethod = &PowerPointExport::WriteAnimationNodeEffect;
- break;
- }
-
- if( pMethod ) {
- (this->*(pMethod))( pFS, rXNode, xmlNodeType, bMainSeqChild );
- return;
- }
-
- if( xmlNodeType == -1 )
- return;
-
- pFS->startElementNS( XML_p, xmlNodeType, FSEND );
-
- WriteAnimationNodeCommonPropsStart( pFS, rXNode, TRUE, bMainSeqChild );
-
- pFS->endElementNS( XML_p, xmlNodeType );
-}
-
-void PowerPointExport::WriteAnimations( FSHelperPtr pFS )
-{
- Reference< XAnimationNodeSupplier > xNodeSupplier( mXDrawPage, UNO_QUERY );
- if( xNodeSupplier.is() ) {
- const Reference< XAnimationNode > xNode( xNodeSupplier->getAnimationNode() );
- if( xNode.is() ) {
- Reference< XEnumerationAccess > xEnumerationAccess( xNode, UNO_QUERY );
- if( xEnumerationAccess.is() ) {
- Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY );
- if( xEnumeration.is() && xEnumeration->hasMoreElements() ) {
-
- pFS->startElementNS( XML_p, XML_timing, FSEND );
- pFS->startElementNS( XML_p, XML_tnLst, FSEND );
-
- WriteAnimationNode( pFS, xNode, FALSE );
-
- pFS->endElementNS( XML_p, XML_tnLst );
- pFS->endElementNS( XML_p, XML_timing );
- }
- }
- }
- }
-}
-
-void PowerPointExport::ImplWriteSlide( sal_uInt32 nPageNum, sal_uInt32 nMasterNum, sal_uInt16 /* nMode */,
- sal_Bool bHasBackground, Reference< XPropertySet > aXBackgroundPropSet )
-{
- DBG(printf("write slide: %d\n----------------\n", nPageNum));
-
- // slides list
- if( nPageNum == 0 )
- mPresentationFS->startElementNS( XML_p, XML_sldIdLst, FSEND );
-
- // add explicit relation of presentation to this slide
- OUString sRelId = addRelation( mPresentationFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" ),
- OUStringBuffer()
- .appendAscii( "slides/slide" )
- .append( (sal_Int32) nPageNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- mPresentationFS->singleElementNS( XML_p, XML_sldId,
- XML_id, I32S( GetNewSlideId() ),
- FSNS( XML_r, XML_id ), USS( sRelId ),
- FSEND );
-
- if( nPageNum == mnPages - 1 )
- mPresentationFS->endElementNS( XML_p, XML_sldIdLst );
-
- FSHelperPtr pFS = openFragmentStreamWithSerializer( OUStringBuffer()
- .appendAscii( "ppt/slides/slide" )
- .append( (sal_Int32) nPageNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear(),
- US( "application/vnd.openxmlformats-officedocument.presentationml.slide+xml" ) );
-
- if( mpSlidesFSArray.size() < mnPages )
- mpSlidesFSArray.resize( mnPages );
- mpSlidesFSArray[ nPageNum ] = pFS;
-
- const char* pShow = NULL;
-
- if( GETA( Visible ) ) {
- sal_Bool bShow;
- if( ( mAny >>= bShow ) && !bShow )
- pShow = "0";
- }
-
- pFS->startElementNS( XML_p, XML_sld, PNMSS,
- XML_show, pShow,
- FSEND );
-
- pFS->startElementNS( XML_p, XML_cSld, FSEND );
-
- // background
- if( bHasBackground ) {
- ImplWriteBackground( pFS, aXBackgroundPropSet );
- }
-
- WriteShapeTree( pFS, NORMAL, FALSE );
-
- pFS->endElementNS( XML_p, XML_cSld );
-
- WriteTransition( pFS );
- WriteAnimations( pFS );
-
- pFS->endElementNS( XML_p, XML_sld );
-
- // add implicit relation to slide layout
- addRelation( pFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" ),
- OUStringBuffer()
- .appendAscii( "../slideLayouts/slideLayout" )
- .append( GetLayoutFileId( GetLayoutOffset( mXPagePropSet ), nMasterNum ) )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- DBG(printf("----------------\n"));
-}
-
-void PowerPointExport::ImplWriteNotes( sal_uInt32 nPageNum )
-{
- if( !mbCreateNotes || !ContainsOtherShapeThanPlaceholders( TRUE ) )
- return;
-
- DBG(printf("write Notes %d\n----------------\n", nPageNum));
-
- FSHelperPtr pFS = openFragmentStreamWithSerializer( OUStringBuffer()
- .appendAscii( "ppt/notesSlides/notesSlide" )
- .append( (sal_Int32) nPageNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear(),
- US( "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml" ) );
-
- pFS->startElementNS( XML_p, XML_notes, PNMSS, FSEND );
-
- pFS->startElementNS( XML_p, XML_cSld, FSEND );
-
- // background
-// if( bHasBackground ) {
-// ImplWriteBackground( pFS, aXBackgroundPropSet );
-// }
-
- WriteShapeTree( pFS, NOTICE, FALSE );
-
- pFS->endElementNS( XML_p, XML_cSld );
-
- pFS->endElementNS( XML_p, XML_notes );
-
- // add implicit relation to slide
- addRelation( pFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" ),
- OUStringBuffer()
- .appendAscii( "../slides/slide" )
- .append( (sal_Int32) nPageNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- // add slide implicit relation to notes
- if( mpSlidesFSArray.size() >= nPageNum )
- addRelation( mpSlidesFSArray[ nPageNum ]->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide" ),
- OUStringBuffer()
- .appendAscii( "../notesSlides/notesSlide" )
- .append( (sal_Int32) nPageNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- // add implicit relation to notes master
- addRelation( pFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster" ),
- US( "../notesMasters/notesMaster1.xml" ) );
-
- DBG(printf("----------------\n"));
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void PowerPointExport::AddLayoutIdAndRelation( FSHelperPtr pFS, sal_Int32 nLayoutFileId )
-{
- // add implicit relation of slide master to slide layout
- OUString sRelId = addRelation( pFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" ),
- OUStringBuffer()
- .appendAscii( "../slideLayouts/slideLayout" )
- .append( nLayoutFileId )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- pFS->singleElementNS( XML_p, XML_sldLayoutId,
- XML_id, I64S( GetNewSlideMasterId() ),
- FSNS( XML_r, XML_id ), USS( sRelId ),
- FSEND );
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-sal_Int32 PowerPointExport::nStyleLevelToken[5] =
-{
- XML_lvl1pPr,
- XML_lvl2pPr,
- XML_lvl3pPr,
- XML_lvl4pPr,
- XML_lvl5pPr
-};
-
-void PowerPointExport::WriteTextStyleLevel( FSHelperPtr pFS, int nInstance, int nLevel )
-{
- OSL_ASSERT( nLevel >= 0 && nLevel < 5 );
- OSL_ASSERT( nInstance >= 0 && nInstance < 9 );
-
- PPTExCharLevel rCharLevel = mpStyleSheet->GetCharSheet( nInstance ).maCharLevel[ nLevel ];
- PPTExParaLevel rParaLevel = mpStyleSheet->GetParaSheet( nInstance ).maParaLevel[ nLevel ];
-
- pFS->startElementNS( XML_a, PowerPointExport::nStyleLevelToken[ nLevel ],
- XML_algn, DrawingML::GetAlignment( rParaLevel.mnOOAdjust ),
- FSEND );
-
- pFS->endElementNS( XML_a, PowerPointExport::nStyleLevelToken[ nLevel ] );
-}
-
-void PowerPointExport::WriteTextStyle( FSHelperPtr pFS, int nInstance, sal_Int32 xmlToken )
-{
- pFS->startElementNS( XML_p, xmlToken, FSEND );
-
- for( int nLevel = 0; nLevel < 5; nLevel ++ )
- WriteTextStyleLevel( pFS, nInstance, nLevel );
-
- pFS->endElementNS( XML_p, xmlToken );
-}
-
-void PowerPointExport::WriteTextStyles( FSHelperPtr pFS )
-{
- pFS->startElementNS( XML_p, XML_txBody, FSEND );
-
- WriteTextStyle( pFS, EPP_TEXTTYPE_Title, XML_titleStyle );
- WriteTextStyle( pFS, EPP_TEXTTYPE_Body, XML_bodyStyle );
- WriteTextStyle( pFS, EPP_TEXTTYPE_Other, XML_otherStyle );
-
- pFS->endElementNS( XML_p, XML_txBody );
-}
-
-void PowerPointExport::ImplWriteSlideMaster( sal_uInt32 nPageNum, Reference< XPropertySet > aXBackgroundPropSet )
-{
- DBG(printf("write slide master: %d\n----------------\n", nPageNum));
-
- // slides list
- if( nPageNum == 0 )
- mPresentationFS->startElementNS( XML_p, XML_sldMasterIdLst, FSEND );
-
- OUString sRelId = addRelation( mPresentationFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" ),
- OUStringBuffer()
- .appendAscii( "slideMasters/slideMaster" )
- .append( (sal_Int32) nPageNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- mPresentationFS->singleElementNS( XML_p, XML_sldMasterId,
- XML_id, OString::valueOf( (sal_Int64) GetNewSlideMasterId() ).getStr(),
- FSNS( XML_r, XML_id ), USS( sRelId ),
- FSEND );
-
- if( nPageNum == mnMasterPages - 1 )
- mPresentationFS->endElementNS( XML_p, XML_sldMasterIdLst );
-
- FSHelperPtr pFS =
- openFragmentStreamWithSerializer( OUStringBuffer()
- .appendAscii( "ppt/slideMasters/slideMaster" )
- .append( (sal_Int32) nPageNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear(),
- US( "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml" ) );
- if( mpMasterFSArray.size() < mnMasterPages )
- mpMasterFSArray.resize( mnMasterPages );
- mpMasterFSArray[ nPageNum ] = pFS;
-
- // write theme per master
- WriteTheme( nPageNum );
-
- // add implicit relation to the presentation theme
- addRelation( pFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" ),
- OUStringBuffer()
- .appendAscii( "../theme/theme" )
- .append( (sal_Int32) nPageNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- pFS->startElementNS( XML_p, XML_sldMaster, PNMSS, FSEND );
-
- pFS->startElementNS( XML_p, XML_cSld, FSEND );
-
- ImplWriteBackground( pFS, aXBackgroundPropSet );
- WriteShapeTree( pFS, MASTER, TRUE );
-
- pFS->endElementNS( XML_p, XML_cSld );
-
- // color map - now it uses colors from hardcoded theme, once we eventually generate theme, this might need update
- pFS->singleElementNS( XML_p, XML_clrMap,
- XML_bg1, "lt1",
- XML_bg2, "lt2",
- XML_tx1, "dk1",
- XML_tx2, "dk2",
- XML_accent1, "accent1",
- XML_accent2, "accent2",
- XML_accent3, "accent3",
- XML_accent4, "accent4",
- XML_accent5, "accent5",
- XML_accent6, "accent6",
- XML_hlink, "hlink",
- XML_folHlink, "folHlink",
- FSEND );
-
- // use master's id type as they have same range, mso does that as well
- pFS->startElementNS( XML_p, XML_sldLayoutIdLst, FSEND );
-
- int nCount = 0;
- for( int i = 0; i < EPP_LAYOUT_SIZE; i++) {
-
- sal_Int32 nLayoutFileId = GetLayoutFileId( i, nPageNum );
- if( nLayoutFileId > 0 ) {
- AddLayoutIdAndRelation( pFS, nLayoutFileId );
- nCount++;
- }
- }
-
- if( nCount == 0 ) {
- // add at least empty layout, so that we don't have master page
- // without layout, such master cannot be used in ppt
- ImplWriteLayout( 0, nPageNum );
- AddLayoutIdAndRelation( pFS, GetLayoutFileId( 0, nPageNum ) );
- }
-
- pFS->endElementNS( XML_p, XML_sldLayoutIdLst );
-
- // WriteTextStyles( pFS );
-
- pFS->endElementNS( XML_p, XML_sldMaster );
-
- DBG(printf("----------------\n"));
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-sal_Int32 PowerPointExport::GetLayoutFileId( sal_Int32 nOffset, sal_uInt32 nMasterNum )
-{
- if( mLayoutInfo[ nOffset ].mnFileIdArray.size() <= nMasterNum )
- return 0;
-
- return mLayoutInfo[ nOffset ].mnFileIdArray[ nMasterNum ];
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void PowerPointExport::ImplWriteLayout( sal_Int32 nOffset, sal_uInt32 nMasterNum )
-{
- if( mLayoutInfo[ nOffset ].mnFileIdArray.size() < mnMasterPages ) {
- mLayoutInfo[ nOffset ].mnFileIdArray.resize( mnMasterPages );
- }
-
- if( mLayoutInfo[ nOffset ].mnFileIdArray[ nMasterNum ] != 0 )
- return;
-
- FSHelperPtr pFS
- = openFragmentStreamWithSerializer( OUStringBuffer()
- .appendAscii( "ppt/slideLayouts/slideLayout" )
- .append( (sal_Int32) mnLayoutFileIdMax )
- .appendAscii( ".xml" )
- .makeStringAndClear(),
- US( "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" ) );
-
-// LayoutInfo& rLayoutInfo = GetLayoutInfo( mXPagePropSet );
-
- // add implicit relation of slide layout to slide master
- addRelation( pFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" ),
- OUStringBuffer()
- .appendAscii( "../slideMasters/slideMaster" )
- .append( (sal_Int32) nMasterNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- pFS->startElementNS( XML_p, XML_sldLayout,
- PNMSS,
- XML_type, "title",
- XML_preserve, "1",
- FSEND );
-
- pFS->startElementNS( XML_p, XML_cSld,
- XML_name, "Title Slide",
- FSEND );
- pFS->write( MINIMAL_SPTREE ); // TODO: write actual shape tree
- pFS->endElementNS( XML_p, XML_cSld );
-
- pFS->endElementNS( XML_p, XML_sldLayout );
-
- mLayoutInfo[ nOffset ].mnFileIdArray[ nMasterNum ] = mnLayoutFileIdMax;
-
- mnLayoutFileIdMax ++;
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void PowerPointExport::WriteShapeTree( FSHelperPtr pFS, PageType ePageType, sal_Bool bMaster )
-{
- PowerPointShapeExport aDML( pFS, &maShapeMap, this );
- aDML.SetMaster( bMaster );
- aDML.SetPageType( ePageType );
- sal_uInt32 nShapes;
-
- pFS->startElementNS( XML_p, XML_spTree, FSEND );
- pFS->write( MAIN_GROUP );
-
- ResetGroupTable( nShapes = mXShapes->getCount() );
-
- while( GetNextGroupEntry() ) {
-
- sal_uInt32 nGroups = GetGroupsClosed();
- for ( sal_uInt32 i = 0; i < nGroups; i++ ) {
- DBG(printf( "leave group\n" ));
- }
-
- if ( GetShapeByIndex( GetCurrentGroupIndex(), TRUE ) ) {
- DBG(printf( "mType: \"%s\"\n", mType.GetBuffer() ));
- aDML.WriteShape( mXShape );
- }
- }
-
- pFS->endElementNS( XML_p, XML_spTree );
-}
-
-#define BEGIN_SHAPE mpFS->startElementNS( XML_p, XML_sp, FSEND )
-#define END_SHAPE mpFS->endElementNS( XML_p, XML_sp )
-
-ShapeExport& PowerPointShapeExport::WritePageShape( Reference< XShape > xShape, PageType ePageType, sal_Bool bPresObj )
-{
- if( ePageType == NOTICE && bPresObj )
- return WritePlaceholderShape( xShape, SlideImage );
-
- return WriteTextShape( xShape );
-}
-
-sal_Bool PowerPointShapeExport::WritePlaceholder( Reference< XShape > xShape, PlaceholderType ePlaceholder, sal_Bool bMaster )
-{
- if( bMaster && ShapeExport::NonEmptyText( xShape ) ) {
- WritePlaceholderShape( xShape, ePlaceholder );
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-ShapeExport& PowerPointShapeExport::WritePlaceholderShape( Reference< XShape > xShape, PlaceholderType ePlaceholder )
-{
- BEGIN_SHAPE;
-
- // non visual shape properties
- mpFS->startElementNS( XML_p, XML_nvSpPr, FSEND );
- WriteNonVisualDrawingProperties( xShape, IDS( PlaceHolder ) );
- mpFS->startElementNS( XML_p, XML_cNvSpPr, FSEND );
- mpFS->singleElementNS( XML_a, XML_spLocks, XML_noGrp, "1", FSEND );
- mpFS->endElementNS( XML_p, XML_cNvSpPr );
- mpFS->startElementNS( XML_p, XML_nvPr, FSEND );
-
- const char* pType = NULL;
- switch( ePlaceholder ) {
- case SlideImage:
- pType = "sldImg";
- break;
- case Notes:
- pType = "body";
- break;
- case Header:
- pType = "hdr";
- break;
- case Footer:
- pType = "ftr";
- break;
- case SlideNumber:
- pType = "sldNum";
- break;
- case DateAndTime:
- pType = "dt";
- break;
- case Outliner:
- pType = "body";
- break;
- case Title:
- pType = "title";
- break;
- case Subtitle:
- pType = "subTitle";
- break;
- default:
- DBG(printf("warning: unhandled placeholder type: %d\n", ePlaceholder));
- }
- mpFS->singleElementNS( XML_p, XML_ph, XML_type, pType, FSEND );
- mpFS->endElementNS( XML_p, XML_nvPr );
- mpFS->endElementNS( XML_p, XML_nvSpPr );
-
- // visual shape properties
- mpFS->startElementNS( XML_p, XML_spPr, FSEND );
- WriteShapeTransformation( xShape );
- WritePresetShape( "rect" );
- Reference< XPropertySet > xProps( xShape, UNO_QUERY );
- if( xProps.is() )
- WriteBlipFill( xProps, S( "GraphicURL" ) );
- mpFS->endElementNS( XML_p, XML_spPr );
-
- WriteTextBox( xShape );
-
- END_SHAPE;
-
- return *this;
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-#define MINIMAL_THEME " <a:themeElements>\
- <a:clrScheme name=\"Office\">\
- <a:dk1>\
- <a:sysClr val=\"windowText\" lastClr=\"000000\"/>\
- </a:dk1>\
- <a:lt1>\
- <a:sysClr val=\"window\" lastClr=\"FFFFFF\"/>\
- </a:lt1>\
- <a:dk2>\
- <a:srgbClr val=\"1F497D\"/>\
- </a:dk2>\
- <a:lt2>\
- <a:srgbClr val=\"EEECE1\"/>\
- </a:lt2>\
- <a:accent1>\
- <a:srgbClr val=\"4F81BD\"/>\
- </a:accent1>\
- <a:accent2>\
- <a:srgbClr val=\"C0504D\"/>\
- </a:accent2>\
- <a:accent3>\
- <a:srgbClr val=\"9BBB59\"/>\
- </a:accent3>\
- <a:accent4>\
- <a:srgbClr val=\"8064A2\"/>\
- </a:accent4>\
- <a:accent5>\
- <a:srgbClr val=\"4BACC6\"/>\
- </a:accent5>\
- <a:accent6>\
- <a:srgbClr val=\"F79646\"/>\
- </a:accent6>\
- <a:hlink>\
- <a:srgbClr val=\"0000FF\"/>\
- </a:hlink>\
- <a:folHlink>\
- <a:srgbClr val=\"800080\"/>\
- </a:folHlink>\
- </a:clrScheme>\
- <a:fontScheme name=\"Office\">\
- <a:majorFont>\
- <a:latin typeface=\"Arial\"/>\
- <a:ea typeface=\"DejaVu Sans\"/>\
- <a:cs typeface=\"DejaVu Sans\"/>\
- </a:majorFont>\
- <a:minorFont>\
- <a:latin typeface=\"Arial\"/>\
- <a:ea typeface=\"DejaVu Sans\"/>\
- <a:cs typeface=\"DejaVu Sans\"/>\
- </a:minorFont>\
- </a:fontScheme>\
- <a:fmtScheme name=\"Office\">\
- <a:fillStyleLst>\
- <a:solidFill>\
- <a:schemeClr val=\"phClr\"/>\
- </a:solidFill>\
- <a:gradFill rotWithShape=\"1\">\
- <a:gsLst>\
- <a:gs pos=\"0\">\
- <a:schemeClr val=\"phClr\">\
- <a:tint val=\"50000\"/>\
- <a:satMod val=\"300000\"/>\
- </a:schemeClr>\
- </a:gs>\
- <a:gs pos=\"35000\">\
- <a:schemeClr val=\"phClr\">\
- <a:tint val=\"37000\"/>\
- <a:satMod val=\"300000\"/>\
- </a:schemeClr>\
- </a:gs>\
- <a:gs pos=\"100000\">\
- <a:schemeClr val=\"phClr\">\
- <a:tint val=\"15000\"/>\
- <a:satMod val=\"350000\"/>\
- </a:schemeClr>\
- </a:gs>\
- </a:gsLst>\
- <a:lin ang=\"16200000\" scaled=\"1\"/>\
- </a:gradFill>\
- <a:gradFill rotWithShape=\"1\">\
- <a:gsLst>\
- <a:gs pos=\"0\">\
- <a:schemeClr val=\"phClr\">\
- <a:shade val=\"51000\"/>\
- <a:satMod val=\"130000\"/>\
- </a:schemeClr>\
- </a:gs>\
- <a:gs pos=\"80000\">\
- <a:schemeClr val=\"phClr\">\
- <a:shade val=\"93000\"/>\
- <a:satMod val=\"130000\"/>\
- </a:schemeClr>\
- </a:gs>\
- <a:gs pos=\"100000\">\
- <a:schemeClr val=\"phClr\">\
- <a:shade val=\"94000\"/>\
- <a:satMod val=\"135000\"/>\
- </a:schemeClr>\
- </a:gs>\
- </a:gsLst>\
- <a:lin ang=\"16200000\" scaled=\"0\"/>\
- </a:gradFill>\
- </a:fillStyleLst>\
- <a:lnStyleLst>\
- <a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\">\
- <a:solidFill>\
- <a:schemeClr val=\"phClr\">\
- <a:shade val=\"95000\"/>\
- <a:satMod val=\"105000\"/>\
- </a:schemeClr>\
- </a:solidFill>\
- <a:prstDash val=\"solid\"/>\
- </a:ln>\
- <a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\">\
- <a:solidFill>\
- <a:schemeClr val=\"phClr\"/>\
- </a:solidFill>\
- <a:prstDash val=\"solid\"/>\
- </a:ln>\
- <a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\">\
- <a:solidFill>\
- <a:schemeClr val=\"phClr\"/>\
- </a:solidFill>\
- <a:prstDash val=\"solid\"/>\
- </a:ln>\
- </a:lnStyleLst>\
- <a:effectStyleLst>\
- <a:effectStyle>\
- <a:effectLst>\
- <a:outerShdw blurRad=\"40000\" dist=\"20000\" dir=\"5400000\" rotWithShape=\"0\">\
- <a:srgbClr val=\"000000\">\
- <a:alpha val=\"38000\"/>\
- </a:srgbClr>\
- </a:outerShdw>\
- </a:effectLst>\
- </a:effectStyle>\
- <a:effectStyle>\
- <a:effectLst>\
- <a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\">\
- <a:srgbClr val=\"000000\">\
- <a:alpha val=\"35000\"/>\
- </a:srgbClr>\
- </a:outerShdw>\
- </a:effectLst>\
- </a:effectStyle>\
- <a:effectStyle>\
- <a:effectLst>\
- <a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\">\
- <a:srgbClr val=\"000000\">\
- <a:alpha val=\"35000\"/>\
- </a:srgbClr>\
- </a:outerShdw>\
- </a:effectLst>\
- <a:scene3d>\
- <a:camera prst=\"orthographicFront\">\
- <a:rot lat=\"0\" lon=\"0\" rev=\"0\"/>\
- </a:camera>\
- <a:lightRig rig=\"threePt\" dir=\"t\">\
- <a:rot lat=\"0\" lon=\"0\" rev=\"1200000\"/>\
- </a:lightRig>\
- </a:scene3d>\
- <a:sp3d>\
- <a:bevelT w=\"63500\" h=\"25400\"/>\
- </a:sp3d>\
- </a:effectStyle>\
- </a:effectStyleLst>\
- <a:bgFillStyleLst>\
- <a:solidFill>\
- <a:schemeClr val=\"phClr\"/>\
- </a:solidFill>\
- <a:gradFill rotWithShape=\"1\">\
- <a:gsLst>\
- <a:gs pos=\"0\">\
- <a:schemeClr val=\"phClr\">\
- <a:tint val=\"40000\"/>\
- <a:satMod val=\"350000\"/>\
- </a:schemeClr>\
- </a:gs>\
- <a:gs pos=\"40000\">\
- <a:schemeClr val=\"phClr\">\
- <a:tint val=\"45000\"/>\
- <a:shade val=\"99000\"/>\
- <a:satMod val=\"350000\"/>\
- </a:schemeClr>\
- </a:gs>\
- <a:gs pos=\"100000\">\
- <a:schemeClr val=\"phClr\">\
- <a:shade val=\"20000\"/>\
- <a:satMod val=\"255000\"/>\
- </a:schemeClr>\
- </a:gs>\
- </a:gsLst>\
- <a:path path=\"circle\">\
- <a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/>\
- </a:path>\
- </a:gradFill>\
- <a:gradFill rotWithShape=\"1\">\
- <a:gsLst>\
- <a:gs pos=\"0\">\
- <a:schemeClr val=\"phClr\">\
- <a:tint val=\"80000\"/>\
- <a:satMod val=\"300000\"/>\
- </a:schemeClr>\
- </a:gs>\
- <a:gs pos=\"100000\">\
- <a:schemeClr val=\"phClr\">\
- <a:shade val=\"30000\"/>\
- <a:satMod val=\"200000\"/>\
- </a:schemeClr>\
- </a:gs>\
- </a:gsLst>\
- <a:path path=\"circle\">\
- <a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/>\
- </a:path>\
- </a:gradFill>\
- </a:bgFillStyleLst>\
- </a:fmtScheme>\
- </a:themeElements>"
-
-void PowerPointExport::WriteTheme( sal_Int32 nThemeNum )
-{
- FSHelperPtr pFS = openFragmentStreamWithSerializer( OUStringBuffer()
- .appendAscii( "ppt/theme/theme" )
- .append( (sal_Int32) nThemeNum + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear(),
- US( "application/vnd.openxmlformats-officedocument.theme+xml" ) );
-
- pFS->startElementNS( XML_a, XML_theme,
- FSNS( XML_xmlns, XML_a), "http://schemas.openxmlformats.org/drawingml/2006/main",
- XML_name, "Office Theme",
- FSEND );
-
- pFS->write( MINIMAL_THEME );
- pFS->endElementNS( XML_a, XML_theme );
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-sal_Bool PowerPointExport::ImplCreateDocument()
-{
- mbCreateNotes = FALSE;
-
- for( sal_uInt32 i = 0; i < mnPages; i++ )
- {
- if ( !GetPageByIndex( i, NOTICE ) )
- return FALSE;
-
- if( ContainsOtherShapeThanPlaceholders( TRUE ) ) {
- mbCreateNotes = TRUE;
- break;
- }
- }
-
- return TRUE;
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-sal_Bool PowerPointExport::WriteNotesMaster()
-{
- DBG(printf("write Notes master\n----------------\n"));
-
- mPresentationFS->startElementNS( XML_p, XML_notesMasterIdLst, FSEND );
-
- OUString sRelId = addRelation( mPresentationFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster" ),
- US( "notesMasters/notesMaster1.xml" ) );
-
- mPresentationFS->singleElementNS( XML_p, XML_notesMasterId,
- FSNS( XML_r, XML_id ), USS( sRelId ),
- FSEND );
-
- mPresentationFS->endElementNS( XML_p, XML_notesMasterIdLst );
-
- FSHelperPtr pFS =
- openFragmentStreamWithSerializer( US( "ppt/notesMasters/notesMaster1.xml" ),
- US( "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml" ) );
- // write theme per master
- WriteTheme( mnMasterPages );
-
- // add implicit relation to the presentation theme
- addRelation( pFS->getOutputStream(),
- US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" ),
- OUStringBuffer()
- .appendAscii( "../theme/theme" )
- .append( (sal_Int32) mnMasterPages + 1 )
- .appendAscii( ".xml" )
- .makeStringAndClear() );
-
- pFS->startElementNS( XML_p, XML_notesMaster, PNMSS, FSEND );
-
- pFS->startElementNS( XML_p, XML_cSld, FSEND );
-
- Reference< XPropertySet > aXBackgroundPropSet;
- if( ImplGetPropertyValue( mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Background" ) ) ) &&
- ( mAny >>= aXBackgroundPropSet ) )
- ImplWriteBackground( pFS, aXBackgroundPropSet );
-
- WriteShapeTree( pFS, NOTICE, TRUE );
-
- pFS->endElementNS( XML_p, XML_cSld );
-
- // color map - now it uses colors from hardcoded theme, once we eventually generate theme, this might need update
- pFS->singleElementNS( XML_p, XML_clrMap,
- XML_bg1, "lt1",
- XML_bg2, "lt2",
- XML_tx1, "dk1",
- XML_tx2, "dk2",
- XML_accent1, "accent1",
- XML_accent2, "accent2",
- XML_accent3, "accent3",
- XML_accent4, "accent4",
- XML_accent5, "accent5",
- XML_accent6, "accent6",
- XML_hlink, "hlink",
- XML_folHlink, "folHlink",
- FSEND );
-
- pFS->endElementNS( XML_p, XML_notesMaster );
-
- DBG(printf("----------------\n"));
-
- return TRUE;
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-sal_Bool PowerPointExport::ImplCreateMainNotes()
-{
- if( mbCreateNotes )
- return WriteNotesMaster();
-
- return TRUE;
-}
-
-//------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-#define IMPL_NAME "com.sun.star.comp.Impress.oox.PowerPointExport"
-
-OUString SAL_CALL PowerPointExport_getImplementationName() throw()
-{
- return CREATE_OUSTRING( IMPL_NAME );
-}
-
-uno::Sequence< OUString > SAL_CALL PowerPointExport_getSupportedServiceNames() throw()
-{
- const OUString aServiceName = CREATE_OUSTRING( "com.sun.star.comp.ooxpptx" );
- const Sequence< OUString > aSeq( &aServiceName, 1 );
- return aSeq;
-}
-
-uno::Reference< uno::XInterface > SAL_CALL PowerPointExport_createInstance(const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
-{
- return (cppu::OWeakObject*)new PowerPointExport( rSMgr );
-}
-
-OUString PowerPointExport::implGetImplementationName() const
-{
- return PowerPointExport_getImplementationName();
-}
-}
-}
-
-// UNO component
-// ------------------------------------------
-// - component_getImplementationEnvironment -
-// ------------------------------------------
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** /* ppEnv */ )
-{
- *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
-}
-
-// -----------------------
-// - component_writeInfo -
-// -----------------------
-
-SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( void* /* pServiceManager */, void* pRegistryKey )
-{
- sal_Bool bRet = sal_False;
-
- if( pRegistryKey )
- {
- try
- {
- uno::Reference< registry::XRegistryKey > xNewKey1(
- static_cast< registry::XRegistryKey* >( pRegistryKey )->createKey(
- ::rtl::OUString::createFromAscii( IMPL_NAME "/UNO/SERVICES/" ) ) );
- xNewKey1->createKey( oox::core::PowerPointExport_getSupportedServiceNames().getConstArray()[0] );
-
- bRet = sal_True;
- }
- catch( registry::InvalidRegistryException& )
- {
- OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
- }
- }
-
- return bRet;
-}
-
-// ------------------------
-// - component_getFactory -
-// ------------------------
-
-SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory( const sal_Char* pImplName, void* pServiceManager, void* /* pRegistryKey */ )
-{
- uno::Reference< lang::XSingleServiceFactory > xFactory;
- void* pRet = 0;
-
- if( rtl_str_compare( pImplName, IMPL_NAME ) == 0 )
- {
- const ::rtl::OUString aServiceName( ::rtl::OUString::createFromAscii( IMPL_NAME ) );
-
- xFactory = uno::Reference< lang::XSingleServiceFactory >( ::cppu::createSingleFactory(
- reinterpret_cast< lang::XMultiServiceFactory* >( pServiceManager ),
- oox::core::PowerPointExport_getImplementationName(),
- oox::core::PowerPointExport_createInstance,
- oox::core::PowerPointExport_getSupportedServiceNames() ) );
- }
-
- if( xFactory.is() )
- {
- xFactory->acquire();
- pRet = xFactory.get();
- }
-
- return pRet;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-DBG(
-void dump_pset(Reference< XPropertySet > rXPropSet)
-{
- Reference< XPropertySetInfo > info = rXPropSet->getPropertySetInfo ();
- Sequence< beans::Property > props = info->getProperties ();
-
- for (int i=0; i < props.getLength (); i++) {
- OString name = OUStringToOString( props [i].Name, RTL_TEXTENCODING_UTF8);
- printf ("%30s = ", name.getStr() );
-
- Any value = rXPropSet->getPropertyValue( props [i].Name );
-
- OUString strValue;
- sal_Int32 intValue;
- bool boolValue;
- RectanglePoint pointValue;
-
- if( value >>= strValue )
- printf ("\"%s\"\n", USS( strValue ) );
- else if( value >>= intValue )
- printf ("%d (hex: %x)\n", intValue, intValue);
- else if( value >>= boolValue )
- printf ("%d (bool)\n", boolValue);
- else if( value >>= pointValue )
- printf ("%d (RectanglePoint)\n", pointValue);
- else
- printf ("??? <unhandled type>\n");
- }
-}
-);
diff --git a/sd/source/filter/pptx/pptx-epptso.cxx b/sd/source/filter/pptx/pptx-epptso.cxx
deleted file mode 100644
index 47daaf1a455c..000000000000
--- a/sd/source/filter/pptx/pptx-epptso.cxx
+++ /dev/null
@@ -1,3907 +0,0 @@
-/*************************************************************************
- *
- * 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: epptso.cxx,v $
- * $Revision: 1.107.6.4 $
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-#include <osl/endian.h>
-#include <eppt.hxx>
-#include "text.hxx"
-#include "epptdef.hxx"
-#include <tools/poly.hxx>
-#include <vcl/bmpacc.hxx>
-#include <vcl/gradient.hxx>
-#include <vcl/gfxlink.hxx>
-#include <tools/stream.hxx>
-#include <sot/storage.hxx>
-#include <vcl/outdev.hxx>
-#include <vcl/virdev.hxx>
-#include <vcl/gradient.hxx>
-#include <sfx2/app.hxx>
-//#ifndef _SVX_XIT_HXX
-//#include <svx/xit.hxx>
-//#endif
-#include <editeng/svxenum.hxx>
-#include <svx/unoapi.hxx>
-#include <svx/svdoashp.hxx>
-#include <com/sun/star/style/VerticalAlignment.hpp>
-#include <com/sun/star/container/XIndexReplace.hpp>
-#include <com/sun/star/awt/XFont.hpp>
-#ifndef _COM_SUN_STAR_AWT_XFONTWEIGHT_HPP_
-#include <com/sun/star/awt/FontWeight.hpp>
-#endif
-#ifndef _COM_SUN_STAR_AWT_XFONTUNDERLINE_HPP_
-#include <com/sun/star/awt/FontUnderline.hpp>
-#endif
-#ifndef _COM_SUN_STAR_STYLE_XSTYLEFAMILIESSUPPLIER_PP_
-#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
-#endif
-#include <com/sun/star/style/XStyle.hpp>
-#include <com/sun/star/drawing/PointSequence.hpp>
-#include <com/sun/star/drawing/FlagSequence.hpp>
-#include <com/sun/star/drawing/PolygonFlags.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/drawing/XControlShape.hpp>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/i18n/XBreakIterator.hpp>
-#include <com/sun/star/i18n/XScriptTypeDetector.hpp>
-#include <com/sun/star/i18n/ScriptType.hpp>
-#include <com/sun/star/i18n/ScriptDirection.hpp>
-#include <com/sun/star/embed/Aspects.hpp>
-#include <vcl/cvtgrf.hxx>
-#include <tools/urlobj.hxx>
-#ifndef _CPPUHELPER_EXTRACT_HXX_
-#include <comphelper/extract.hxx>
-#endif
-#ifndef _CPPUHELPER_PROPTYPEHLP_HXX_
-#include <cppuhelper/proptypehlp.hxx>
-#endif
-#ifndef _UCBHELPER_CONTENT_HXX_
-#include <ucbhelper/content.hxx>
-#endif
-#ifndef _UCBHELPER_CONTENTBROKER_HXX_
-#include <ucbhelper/contentbroker.hxx>
-#endif
-#ifndef _TOOLKIT_UNOHLP_HXX
-#include <toolkit/unohlp.hxx>
-#endif
-#include <rtl/crc.h>
-#include <sot/clsids.hxx>
-#include <unotools/ucbstreamhelper.hxx>
-#include <com/sun/star/text/FontRelief.hpp>
-#include <editeng/frmdiritem.hxx>
-/*
-#include <svx/outliner.hxx>
-#include <svx/outlobj.hxx>
-#include <svx/svdmodel.hxx>
-*/
-#include <svtools/fltcall.hxx>
-#include <com/sun/star/table/XTable.hpp>
-#include <com/sun/star/table/XMergeableCell.hpp>
-#include <com/sun/star/table/BorderLine.hpp>
-#include <set>
-
-//#include <svx/xbtmpit.hxx>
-
-#include "i18npool/mslangid.hxx"
-
-#include <vos/xception.hxx>
-#ifndef _VOS_NO_NAMESPACE
-using namespace vos;
-#endif
-
-using namespace ::com::sun::star;
-
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#define ANSI_CHARSET 0
-#define DEFAULT_CHARSET 1
-#define SYMBOL_CHARSET 2
-#define SHIFTJIS_CHARSET 128
-#define HANGEUL_CHARSET 129
-#define CHINESEBIG5_CHARSET 136
-#define OEM_CHARSET 255
-
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/* Font Families */
-#define FF_DONTCARE 0x00
-#define FF_ROMAN 0x10
-#define FF_SWISS 0x20
-#define FF_MODERN 0x30
-#define FF_SCRIPT 0x40
-#define FF_DECORATIVE 0x50
-
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#define DEFAULT_PITCH 0x00
-#define FIXED_PITCH 0x01
-#define VARIABLE_PITCH 0x02
-
-// ---------------------------------------------------------------------------------------------
-
-PPTExBulletProvider::PPTExBulletProvider()
-{
- pGraphicProv = new EscherGraphicProvider( _E_GRAPH_PROV_USE_INSTANCES | _E_GRAPH_PROV_DO_NOT_ROTATE_METAFILES );
-}
-
-PPTExBulletProvider::~PPTExBulletProvider()
-{
- delete pGraphicProv;
-}
-
-sal_uInt16 PPTExBulletProvider::GetId( const ByteString& rUniqueId, Size& rGraphicSize )
-{
- sal_uInt16 nRetValue = 0xffff;
- sal_uInt32 nId = 0;
-
- if ( rUniqueId.Len() )
- {
- Rectangle aRect;
- GraphicObject aGraphicObject( rUniqueId );
- Graphic aMappedGraphic, aGraphic( aGraphicObject.GetGraphic() );
- Size aPrefSize( aGraphic.GetPrefSize() );
- BitmapEx aBmpEx( aGraphic.GetBitmapEx() );
-
- if ( rGraphicSize.Width() && rGraphicSize.Height() )
- {
- double fQ1 = ( (double)aPrefSize.Width() / (double)aPrefSize.Height() );
- double fQ2 = ( (double)rGraphicSize.Width() / (double)rGraphicSize.Height() );
- double fXScale = 1;
- double fYScale = 1;
-
- if ( fQ1 > fQ2 )
- fYScale = fQ1 / fQ2;
- else if ( fQ1 < fQ2 )
- fXScale = fQ2 / fQ1;
-
- if ( ( fXScale != 1.0 ) || ( fYScale != 1.0 ) )
- {
- aBmpEx.Scale( fXScale, fYScale );
- Size aNewSize( (sal_Int32)((double)rGraphicSize.Width() / fXScale + 0.5 ),
- (sal_Int32)((double)rGraphicSize.Height() / fYScale + 0.5 ) );
-
- rGraphicSize = aNewSize;
-
- aMappedGraphic = Graphic( aBmpEx );
- aGraphicObject = GraphicObject( aMappedGraphic );
- }
- }
-
- nId = pGraphicProv->GetBlibID( aBuExPictureStream, aGraphicObject.GetUniqueID(), aRect, NULL, NULL );
-
- if ( nId && ( nId < 0x10000 ) )
- nRetValue = (sal_uInt16)nId - 1;
- }
- return nRetValue;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplVBAInfoContainer( SvStream* pStrm )
-{
- sal_uInt32 nSize = 28;
- if ( pStrm )
- {
- *pStrm << (sal_uInt32)( 0x1f | ( EPP_VBAInfo << 16 ) )
- << (sal_uInt32)( nSize - 8 )
- << (sal_uInt32)( 2 | ( EPP_VBAInfoAtom << 16 ) )
- << (sal_uInt32)12;
- mpPptEscherEx->InsertPersistOffset( EPP_Persist_VBAInfoAtom, pStrm->Tell() );
- *pStrm << (sal_uInt32)0
- << (sal_uInt32)0
- << (sal_uInt32)1;
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplSlideViewInfoContainer( sal_uInt32 nInstance, SvStream* pStrm )
-{
- sal_uInt32 nSize = 111;
- if ( pStrm )
- {
- sal_uInt8 bShowGuides = 0;
- sal_uInt8 bSnapToGrid = 1;
- sal_uInt8 bSnapToShape = 0;
-
- sal_Int32 nScaling = 85;
- sal_Int32 nMasterCoordinate = 0xdda;
- sal_Int32 nXOrigin = -780;
- sal_Int32 nYOrigin = -84;
-
- sal_Int32 nPosition1 = 0x870;
- sal_Int32 nPosition2 = 0xb40;
-
- if ( nInstance )
- {
- bShowGuides = 1;
- nScaling = 0x3b;
- nMasterCoordinate = 0xf0c;
- nXOrigin = -1752;
- nYOrigin = -72;
- nPosition1 = 0xb40;
- nPosition2 = 0x870;
- }
- *pStrm << (sal_uInt32)( 0xf | ( EPP_SlideViewInfo << 16 ) | ( nInstance << 4 ) )
- << (sal_uInt32)( nSize - 8 )
- << (sal_uInt32)( EPP_SlideViewInfoAtom << 16 ) << (sal_uInt32)3
- << bShowGuides << bSnapToGrid << bSnapToShape
- << (sal_uInt32)( EPP_ViewInfoAtom << 16 ) << (sal_uInt32)52
- << nScaling << (sal_Int32)100 << nScaling << (sal_Int32)100 // scaling atom - Keeps the current scale
- << nScaling << (sal_Int32)100 << nScaling << (sal_Int32)100 // scaling atom - Keeps the previous scale
- << (sal_Int32)0x17ac << nMasterCoordinate// Origin - Keeps the origin in master coordinates
- << nXOrigin << nYOrigin // Origin
- << (sal_uInt8)1 // Bool1 varScale - Set if zoom to fit is set
- << (sal_uInt8)0 // bool1 draftMode - Not used
- << (sal_uInt16)0 // padword
- << (sal_uInt32)( ( 7 << 4 ) | ( EPP_GuideAtom << 16 ) ) << (sal_uInt32)8
- << (sal_uInt32)0 // Type of the guide. If the guide is horizontal this value is zero. If it's vertical, it's one.
- << nPosition1 // Position of the guide in master coordinates. X coordinate if it's vertical, and Y coordinate if it's horizontal.
- << (sal_uInt32)( ( 7 << 4 ) | ( EPP_GuideAtom << 16 ) ) << (sal_uInt32)8
- << (sal_Int32)1 // Type of the guide. If the guide is horizontal this value is zero. If it's vertical, it's one.
- << nPosition2; // Position of the guide in master coordinates. X coordinate if it's vertical, and Y coordinate if it's horizontal.
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplOutlineViewInfoContainer( SvStream* pStrm )
-{
- sal_uInt32 nSize = 68;
- if ( pStrm )
- {
- *pStrm << (sal_uInt32)( 0xf | ( EPP_OutlineViewInfo << 16 ) ) << (sal_uInt32)( nSize - 8 )
- << (sal_uInt32)( EPP_ViewInfoAtom << 16 ) << (sal_uInt32)52
- << (sal_Int32)170 << (sal_Int32)200 << (sal_Int32)170 << (sal_Int32)200 // scaling atom - Keeps the current scale
- << (sal_Int32)170 << (sal_Int32)200 << (sal_Int32)170 << (sal_Int32)200 // scaling atom - Keeps the previous scale
- << (sal_Int32)0x17ac << 0xdda // Origin - Keeps the origin in master coordinates
- << (sal_Int32)-780 << (sal_Int32)-84 // Origin
- << (sal_uInt8)1 // bool1 varScale - Set if zoom to fit is set
- << (sal_uInt8)0 // bool1 draftMode - Not used
- << (sal_uInt16)0; // padword
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplProgBinaryTag( SvStream* pStrm )
-{
- sal_uInt32 nPictureStreamSize, nOutlineStreamSize, nSize = 8;
-
- nPictureStreamSize = aBuExPictureStream.Tell();
- if ( nPictureStreamSize )
- nSize += nPictureStreamSize + 8;
-
- nOutlineStreamSize = aBuExOutlineStream.Tell();
- if ( nOutlineStreamSize )
- nSize += nOutlineStreamSize + 8;
-
- if ( pStrm )
- {
- *pStrm << (sal_uInt32)( EPP_BinaryTagData << 16 ) << (sal_uInt32)( nSize - 8 );
- if ( nPictureStreamSize )
- {
- *pStrm << (sal_uInt32)( 0xf | ( EPP_PST_ExtendedBuGraContainer << 16 ) ) << nPictureStreamSize;
- pStrm->Write( aBuExPictureStream.GetData(), nPictureStreamSize );
- }
- if ( nOutlineStreamSize )
- {
- *pStrm << (sal_uInt32)( 0xf | ( EPP_PST_ExtendedPresRuleContainer << 16 ) ) << nOutlineStreamSize;
- pStrm->Write( aBuExOutlineStream.GetData(), nOutlineStreamSize );
- }
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplProgBinaryTagContainer( SvStream* pStrm, SvMemoryStream* pBinTagStrm )
-{
- sal_uInt32 nSize = 8 + 8 + 14;
- if ( pStrm )
- {
- *pStrm << (sal_uInt32)( 0xf | ( EPP_ProgBinaryTag << 16 ) ) << (sal_uInt32)0
- << (sal_uInt32)( EPP_CString << 16 ) << (sal_uInt32)14
- << (sal_uInt32)0x5f005f << (sal_uInt32)0x50005f
- << (sal_uInt32)0x540050 << (sal_uInt16)0x39;
- }
- if ( pBinTagStrm )
- {
- sal_uInt32 nLen = pBinTagStrm->Tell();
- nSize += nLen + 8;
- *pStrm << (sal_uInt32)( EPP_BinaryTagData << 16 ) << nLen;
- pStrm->Write( pBinTagStrm->GetData(), nLen );
- }
- else
- nSize += ImplProgBinaryTag( pStrm );
-
- if ( pStrm )
- {
- pStrm->SeekRel( - ( (sal_Int32)nSize - 4 ) );
- *pStrm << (sal_uInt32)( nSize - 8 );
- pStrm->SeekRel( nSize - 8 );
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplProgTagContainer( SvStream* pStrm, SvMemoryStream* pBinTagStrm )
-{
- sal_uInt32 nSize = 0;
- if ( aBuExPictureStream.Tell() || aBuExOutlineStream.Tell() || pBinTagStrm )
- {
- nSize = 8;
- if ( pStrm )
- {
- *pStrm << (sal_uInt32)( 0xf | ( EPP_ProgTags << 16 ) ) << (sal_uInt32)0;
- }
- nSize += ImplProgBinaryTagContainer( pStrm, pBinTagStrm );
- if ( pStrm )
- {
- pStrm->SeekRel( - ( (sal_Int32)nSize - 4 ) );
- *pStrm << (sal_uInt32)( nSize - 8 );
- pStrm->SeekRel( nSize - 8 );
- }
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplDocumentListContainer( SvStream* pStrm )
-{
- sal_uInt32 nSize = 8;
- if ( pStrm )
- {
- *pStrm << (sal_uInt32)( ( EPP_List << 16 ) | 0xf ) << (sal_uInt32)0;
- }
-
- nSize += ImplVBAInfoContainer( pStrm );
- nSize += ImplSlideViewInfoContainer( 0, pStrm );
- nSize += ImplOutlineViewInfoContainer( pStrm );
- nSize += ImplSlideViewInfoContainer( 1, pStrm );
- nSize += ImplProgTagContainer( pStrm );
-
- if ( pStrm )
- {
- pStrm->SeekRel( - ( (sal_Int32)nSize - 4 ) );
- *pStrm << (sal_uInt32)( nSize - 8 );
- pStrm->SeekRel( nSize - 8 );
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplMasterSlideListContainer( SvStream* pStrm )
-{
- sal_uInt32 i, nSize = 28 * mnMasterPages + 8;
- if ( pStrm )
- {
- *pStrm << (sal_uInt32)( 0x1f | ( EPP_SlideListWithText << 16 ) ) << (sal_uInt32)( nSize - 8 );
-
- for ( i = 0; i < mnMasterPages; i++ )
- {
- *pStrm << (sal_uInt32)( EPP_SlidePersistAtom << 16 ) << (sal_uInt32)20;
- mpPptEscherEx->InsertPersistOffset( EPP_MAINMASTER_PERSIST_KEY | i, pStrm->Tell() );
- *pStrm << (sal_uInt32)0 // psrReference - logical reference to the slide persist object ( EPP_MAINMASTER_PERSIST_KEY )
- << (sal_uInt32)0 // flags - only bit 3 used, if set then slide contains shapes other than placeholders
- << (sal_Int32)0 // numberTexts - number of placeholder texts stored with the persist object. Allows to display outline view without loading the slide persist objects
- << (sal_Int32)( 0x80000000 | i ) // slideId - Unique slide identifier, used for OLE link monikers for example
- << (sal_uInt32)0; // reserved, usualy 0
- }
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PPTWriter::ImplInsertBookmarkURL( const String& rBookmarkURL, const sal_uInt32 nType,
- const String& rStringVer0, const String& rStringVer1, const String& rStringVer2, const String& rStringVer3 )
-{
- sal_uInt32 nHyperId = ++mnExEmbed;
- maHyperlink.Insert( new EPPTHyperlink( rBookmarkURL, nType ), LIST_APPEND );
-
- *mpExEmbed << (sal_uInt16)0xf
- << (sal_uInt16)EPP_ExHyperlink
- << (sal_uInt32)0;
- sal_uInt32 nHyperSize, nHyperStart = mpExEmbed->Tell();
- *mpExEmbed << (sal_uInt16)0
- << (sal_uInt16)EPP_ExHyperlinkAtom
- << (sal_uInt32)4
- << nHyperId;
-
- sal_uInt16 i, nStringLen;
- nStringLen = rStringVer0.Len();
- if ( nStringLen )
- {
- *mpExEmbed << (sal_uInt32)( EPP_CString << 16 ) << (sal_uInt32)( nStringLen * 2 );
- for ( i = 0; i < nStringLen; i++ )
- {
- *mpExEmbed << rStringVer0.GetChar( i );
- }
- }
- nStringLen = rStringVer1.Len();
- if ( nStringLen )
- {
- *mpExEmbed << (sal_uInt32)( ( EPP_CString << 16 ) | 0x10 ) << (sal_uInt32)( nStringLen * 2 );
- for ( i = 0; i < nStringLen; i++ )
- {
- *mpExEmbed << rStringVer1.GetChar( i );
- }
- }
- nStringLen = rStringVer2.Len();
- if ( nStringLen )
- {
- *mpExEmbed << (sal_uInt32)( ( EPP_CString << 16 ) | 0x20 ) << (sal_uInt32)( nStringLen * 2 );
- for ( i = 0; i < nStringLen; i++ )
- {
- *mpExEmbed << rStringVer2.GetChar( i );
- }
- }
- nStringLen = rStringVer3.Len();
- if ( nStringLen )
- {
- *mpExEmbed << (sal_uInt32)( ( EPP_CString << 16 ) | 0x30 ) << (sal_uInt32)( nStringLen * 2 );
- for ( i = 0; i < nStringLen; i++ )
- {
- *mpExEmbed << rStringVer3.GetChar( i );
- }
- }
- nHyperSize = mpExEmbed->Tell() - nHyperStart;
- mpExEmbed->SeekRel( - ( (sal_Int32)nHyperSize + 4 ) );
- *mpExEmbed << nHyperSize;
- mpExEmbed->SeekRel( nHyperSize );
- return nHyperId;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PPTWriter::ImplCloseDocument()
-{
- sal_uInt32 nOfs = mpPptEscherEx->PtGetOffsetByID( EPP_Persist_Document );
- if ( nOfs )
- {
- mpPptEscherEx->PtReplaceOrInsert( EPP_Persist_CurrentPos, mpStrm->Tell() );
- mpStrm->Seek( nOfs );
-
- // creating the TxMasterStyleAtom
- SvMemoryStream aTxMasterStyleAtomStrm( 0x200, 0x200 );
- {
- EscherExAtom aTxMasterStyleAtom( aTxMasterStyleAtomStrm, EPP_TxMasterStyleAtom, EPP_TEXTTYPE_Other );
- aTxMasterStyleAtomStrm << (sal_uInt16)5; // paragraph count
- sal_uInt16 nLev;
- sal_Bool bFirst = sal_True;
- for ( nLev = 0; nLev < 5; nLev++ )
- {
- mpStyleSheet->mpParaSheet[ EPP_TEXTTYPE_Other ]->Write( aTxMasterStyleAtomStrm, mpPptEscherEx, nLev, bFirst, sal_False, mXPagePropSet );
- mpStyleSheet->mpCharSheet[ EPP_TEXTTYPE_Other ]->Write( aTxMasterStyleAtomStrm, mpPptEscherEx, nLev, bFirst, sal_False, mXPagePropSet );
- bFirst = sal_False;
- }
- }
-
- mpExEmbed->Seek( STREAM_SEEK_TO_END );
- sal_uInt32 nExEmbedSize = mpExEmbed->Tell();
-
- // nEnviroment : Gesamtgroesse des Environment Containers
- sal_uInt32 nEnvironment = maFontCollection.GetCount() * 76 // 68 bytes pro Fontenityatom und je 8 Bytes fuer die Header
- + 8 // 1 FontCollection Container
- + 20 // SrKinsoku Container
- + 18 // 1 TxSiStyleAtom
- + aTxMasterStyleAtomStrm.Tell() // 1 TxMasterStyleAtom;
- + mpStyleSheet->SizeOfTxCFStyleAtom();
-
- sal_uInt32 nBytesToInsert = nEnvironment + 8;
-
- if ( nExEmbedSize )
- nBytesToInsert += nExEmbedSize + 8 + 12;
-
- nBytesToInsert += maSoundCollection.GetSize();
- nBytesToInsert += mpPptEscherEx->DrawingGroupContainerSize();
- nBytesToInsert += ImplMasterSlideListContainer( NULL );
- nBytesToInsert += ImplDocumentListContainer( NULL );
-
- // nBytes im Stream einfuegen, und abhaengige Container anpassen
- mpPptEscherEx->InsertAtCurrentPos( nBytesToInsert, TRUE );
-
- // CREATE HYPERLINK CONTAINER
- if ( nExEmbedSize )
- {
- *mpStrm << (sal_uInt16)0xf
- << (sal_uInt16)EPP_ExObjList
- << (sal_uInt32)( nExEmbedSize + 12 )
- << (sal_uInt16)0
- << (sal_uInt16)EPP_ExObjListAtom
- << (sal_uInt32)4
- << (sal_uInt32)mnExEmbed;
- mpPptEscherEx->InsertPersistOffset( EPP_Persist_ExObj, mpStrm->Tell() );
- mpStrm->Write( mpExEmbed->GetData(), nExEmbedSize );
- }
-
- // CREATE ENVIRONMENT
- *mpStrm << (sal_uInt16)0xf << (sal_uInt16)EPP_Environment << (sal_uInt32)nEnvironment;
-
- // Open Container ( EPP_SrKinsoku )
- *mpStrm << (sal_uInt16)0x2f << (sal_uInt16)EPP_SrKinsoku << (sal_uInt32)12;
- mpPptEscherEx->AddAtom( 4, EPP_SrKinsokuAtom, 0, 3 );
- *mpStrm << (sal_Int32)0; // SrKinsoku Level 0
-
- // Open Container ( EPP_FontCollection )
- *mpStrm << (sal_uInt16)0xf << (sal_uInt16)EPP_FontCollection << (sal_uInt32)maFontCollection.GetCount() * 76;
-
- for ( sal_uInt32 i = 0; i < maFontCollection.GetCount(); i++ )
- {
- mpPptEscherEx->AddAtom( 68, EPP_FontEnityAtom, 0, i );
- const FontCollectionEntry* pDesc = maFontCollection.GetById( i );
- sal_uInt32 nFontLen = pDesc->Name.Len();
- if ( nFontLen > 31 )
- nFontLen = 31;
- for ( sal_uInt16 n = 0; n < 32; n++ )
- {
- sal_Unicode nUniCode = 0;
- if ( n < nFontLen )
- nUniCode = pDesc->Name.GetChar( n );
- *mpStrm << nUniCode;
- }
- sal_uInt8 lfCharSet = ANSI_CHARSET;
- sal_uInt8 lfClipPrecision = 0;
- sal_uInt8 lfQuality = 6;
- sal_uInt8 lfPitchAndFamily = 0;
-
- if ( pDesc->CharSet == RTL_TEXTENCODING_SYMBOL )
- lfCharSet = SYMBOL_CHARSET;
-
- switch( pDesc->Family )
- {
- case ::com::sun::star::awt::FontFamily::ROMAN :
- lfPitchAndFamily |= FF_ROMAN;
- break;
-
- case ::com::sun::star::awt::FontFamily::SWISS :
- lfPitchAndFamily |= FF_SWISS;
- break;
-
- case ::com::sun::star::awt::FontFamily::MODERN :
- lfPitchAndFamily |= FF_MODERN;
- break;
-
- case ::com::sun::star::awt::FontFamily::SCRIPT:
- lfPitchAndFamily |= FF_SCRIPT;
- break;
-
- case ::com::sun::star::awt::FontFamily::DECORATIVE:
- lfPitchAndFamily |= FF_DECORATIVE;
- break;
-
- default:
- lfPitchAndFamily |= FAMILY_DONTKNOW;
- break;
- }
- switch( pDesc->Pitch )
- {
- case ::com::sun::star::awt::FontPitch::FIXED:
- lfPitchAndFamily |= FIXED_PITCH;
- break;
-
- default:
- lfPitchAndFamily |= DEFAULT_PITCH;
- break;
- }
- *mpStrm << lfCharSet
- << lfClipPrecision
- << lfQuality
- << lfPitchAndFamily;
- }
- mpStyleSheet->WriteTxCFStyleAtom( *mpStrm ); // create style that is used for new standard objects
- mpPptEscherEx->AddAtom( 10, EPP_TxSIStyleAtom );
- *mpStrm << (sal_uInt32)7 // ?
- << (sal_Int16)2 // ?
- << (sal_uInt8)9 // ?
- << (sal_uInt8)8 // ?
- << (sal_Int16)0; // ?
-
- mpStrm->Write( aTxMasterStyleAtomStrm.GetData(), aTxMasterStyleAtomStrm.Tell() );
- maSoundCollection.Write( *mpStrm );
- mpPptEscherEx->WriteDrawingGroupContainer( *mpStrm );
- ImplMasterSlideListContainer( mpStrm );
- ImplDocumentListContainer( mpStrm );
-
- sal_uInt32 nOldPos = mpPptEscherEx->PtGetOffsetByID( EPP_Persist_CurrentPos );
- if ( nOldPos )
- {
- mpStrm->Seek( nOldPos );
- return TRUE;
- }
- }
- return FALSE;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PropValue::GetPropertyValue(
- ::com::sun::star::uno::Any& rAny,
- const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
- const String& rString,
- sal_Bool bTestPropertyAvailability )
-{
- sal_Bool bRetValue = sal_True;
- if ( bTestPropertyAvailability )
- {
- bRetValue = sal_False;
- try
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
- aXPropSetInfo( rXPropSet->getPropertySetInfo() );
- if ( aXPropSetInfo.is() )
- bRetValue = aXPropSetInfo->hasPropertyByName( rString );
- }
- catch( ::com::sun::star::uno::Exception& )
- {
- bRetValue = sal_False;
- }
- }
- if ( bRetValue )
- {
- try
- {
- rAny = rXPropSet->getPropertyValue( rString );
- if ( !rAny.hasValue() )
- bRetValue = sal_False;
- }
- catch( ::com::sun::star::uno::Exception& )
- {
- bRetValue = sal_False;
- }
- }
- return bRetValue;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-::com::sun::star::beans::PropertyState PropValue::GetPropertyState(
- const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
- const String& rPropertyName )
-{
- ::com::sun::star::beans::PropertyState eRetValue = ::com::sun::star::beans::PropertyState_AMBIGUOUS_VALUE;
- try
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState > aXPropState
- ( rXPropSet, ::com::sun::star::uno::UNO_QUERY );
- if ( aXPropState.is() )
- eRetValue = aXPropState->getPropertyState( rPropertyName );
- }
- catch( ::com::sun::star::uno::Exception& )
- {
- //...
- }
- return eRetValue;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PropValue::ImplGetPropertyValue( const String& rString )
-{
- return GetPropertyValue( mAny, mXPropSet, rString );
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PropValue::ImplGetPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & aXPropSet, const String& rString )
-{
- return GetPropertyValue( mAny, aXPropSet, rString );
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool PropStateValue::ImplGetPropertyValue( const String& rString, sal_Bool bGetPropertyState )
-{
- ePropState = ::com::sun::star::beans::PropertyState_AMBIGUOUS_VALUE;
- sal_Bool bRetValue = TRUE;
-#ifdef UNX
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
- aXPropSetInfo( mXPropSet->getPropertySetInfo() );
- if ( !aXPropSetInfo.is() )
- return sal_False;
-#endif
- try
- {
- mAny = mXPropSet->getPropertyValue( rString );
- if ( !mAny.hasValue() )
- bRetValue = FALSE;
- else if ( bGetPropertyState )
- ePropState = mXPropState->getPropertyState( rString );
- else
- ePropState = ::com::sun::star::beans::PropertyState_DIRECT_VALUE;
- }
- catch( ::com::sun::star::uno::Exception& )
- {
- bRetValue = FALSE;
- }
- return bRetValue;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PPTWriter::ImplWriteParagraphs( SvStream& rOut, TextObj& rTextObj )
-{
- sal_Bool bFirstParagraph = TRUE;
- sal_uInt32 nCharCount;
- sal_uInt32 nPropertyFlags = 0;
- sal_uInt16 nDepth = 0;
- sal_Int16 nLineSpacing;
- int nInstance = rTextObj.GetInstance();
-
- for ( ParagraphObj* pPara = rTextObj.First() ; pPara; pPara = rTextObj.Next(), bFirstParagraph = FALSE )
- {
- PortionObj* pPortion = (PortionObj*)pPara->First();
- nCharCount = pPara->Count();
-
- nDepth = pPara->nDepth;
- if ( nDepth > 4)
- nDepth = 4;
-
- if ( ( pPara->meTextAdjust == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, ParaAttr_Adjust, pPara->mnTextAdjust ) ) )
- nPropertyFlags |= 0x00000800;
- nLineSpacing = pPara->mnLineSpacing;
-
- const FontCollectionEntry* pDesc = maFontCollection.GetById( pPortion->mnFont );
- sal_Int16 nNormalSpacing = 100;
- if ( !mbFontIndependentLineSpacing && pDesc )
- {
- double fN = 100.0;
- fN *= pDesc->Scaling;
- nNormalSpacing = (sal_Int16)( fN + 0.5 );
- }
- if ( !mbFontIndependentLineSpacing && bFirstParagraph && ( nLineSpacing > nNormalSpacing ) ) // sj: i28747, no replacement for fixed linespacing
- {
- nLineSpacing = nNormalSpacing;
- nPropertyFlags |= 0x00001000;
- }
- else
- {
- if ( nLineSpacing > 0 )
- {
- if ( !mbFontIndependentLineSpacing && pDesc )
- nLineSpacing = (sal_Int16)( (double)nLineSpacing * pDesc->Scaling + 0.5 );
- }
- else
- {
- if ( !pPara->mbFixedLineSpacing && pPortion && pPortion->mnCharHeight > (sal_uInt16)( ((double)-nLineSpacing) * 0.001 * 72.0 / 2.54 ) ) // 1/100mm to point
- nLineSpacing = nNormalSpacing;
- else
- nLineSpacing = (sal_Int16)( (double)nLineSpacing / 4.40972 );
- }
- if ( ( pPara->meLineSpacing == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, ParaAttr_LineFeed, nLineSpacing ) ) )
- nPropertyFlags |= 0x00001000;
- }
- if ( ( pPara->meLineSpacingTop == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, ParaAttr_UpperDist, pPara->mnLineSpacingTop ) ) )
- nPropertyFlags |= 0x00002000;
- if ( ( pPara->meLineSpacingBottom == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, ParaAttr_LowerDist, pPara->mnLineSpacingBottom ) ) )
- nPropertyFlags |= 0x00004000;
- if ( ( pPara->meForbiddenRules == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, ParaAttr_UpperDist, pPara->mbForbiddenRules ) ) )
- nPropertyFlags |= 0x00020000;
- if ( ( pPara->meParagraphPunctation == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, ParaAttr_UpperDist, pPara->mbParagraphPunctation ) ) )
- nPropertyFlags |= 0x00080000;
- if ( ( pPara->meBiDi == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, nDepth, ParaAttr_BiDi, pPara->mnBiDi ) ) )
- nPropertyFlags |= 0x00200000;
-
-
- sal_Int32 nBuRealSize = pPara->nBulletRealSize;
- sal_Int16 nBulletFlags = pPara->nBulletFlags;
-
- if ( pPara->bExtendedParameters )
- nPropertyFlags |= pPara->nParaFlags;
- else
- {
- nPropertyFlags |= 1; // turn off bullet explicit
- nBulletFlags = 0;
- }
- FontCollectionEntry aFontDescEntry( pPara->aFontDesc.Name, pPara->aFontDesc.Family, pPara->aFontDesc.Pitch, pPara->aFontDesc.CharSet );
- sal_uInt16 nFontId = (sal_uInt16)maFontCollection.GetId( aFontDescEntry );
-
- rOut << nCharCount
- << nDepth // Level
- << (sal_uInt32)nPropertyFlags; // Paragraph Attribut Set
-
- if ( nPropertyFlags & 0xf )
- rOut << nBulletFlags;
- if ( nPropertyFlags & 0x80 )
- rOut << (sal_uInt16)( pPara->cBulletId );
- if ( nPropertyFlags & 0x10 )
- rOut << nFontId;
- if ( nPropertyFlags & 0x40 )
- rOut << (sal_Int16)nBuRealSize;
- if ( nPropertyFlags & 0x20 )
- {
- sal_uInt32 nBulletColor = pPara->nBulletColor;
- if ( nBulletColor == COL_AUTO )
- {
- sal_Bool bIsDark = sal_False;
- ::com::sun::star::uno::Any aAny;
- if ( PropValue::GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsBackgroundDark" ) ), sal_True ) )
- aAny >>= bIsDark;
- nBulletColor = bIsDark ? 0xffffff : 0x000000;
- }
- nBulletColor &= 0xffffff;
- nBulletColor |= 0xfe000000;
- rOut << nBulletColor;
- }
- if ( nPropertyFlags & 0x00000800 )
- rOut << (sal_uInt16)( pPara->mnTextAdjust );
- if ( nPropertyFlags & 0x00001000 )
- rOut << (sal_uInt16)( nLineSpacing );
- if ( nPropertyFlags & 0x00002000 )
- rOut << (sal_uInt16)( pPara->mnLineSpacingTop );
- if ( nPropertyFlags & 0x00004000 )
- rOut << (sal_uInt16)( pPara->mnLineSpacingBottom );
- if ( nPropertyFlags & 0x000e0000 )
- {
- sal_uInt16 nAsianSettings = 0;
- if ( pPara->mbForbiddenRules )
- nAsianSettings |= 1;
- if ( pPara->mbParagraphPunctation )
- nAsianSettings |= 4;
- rOut << nAsianSettings;
- }
- if ( nPropertyFlags & 0x200000 )
- rOut << pPara->mnBiDi;
- }
-}
-
-// -----------------------------------------------------------------------
-
-void PPTWriter::ImplWritePortions( SvStream& rOut, TextObj& rTextObj )
-{
- sal_uInt32 nPropertyFlags, i = 0;
- int nInstance = rTextObj.GetInstance();
-
- for ( ParagraphObj* pPara = rTextObj.First(); pPara; pPara = rTextObj.Next(), i++ )
- {
- for ( PortionObj* pPortion = (PortionObj*)pPara->First(); pPortion; pPortion = (PortionObj*)pPara->Next() )
- {
- nPropertyFlags = 0;
- sal_uInt32 nCharAttr = pPortion->mnCharAttr;
- sal_uInt32 nCharColor = pPortion->mnCharColor;
-
- if ( nCharColor == COL_AUTO ) // nCharColor depends to the background color
- {
- sal_Bool bIsDark = sal_False;
- ::com::sun::star::uno::Any aAny;
- if ( PropValue::GetPropertyValue( aAny, mXPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsBackgroundDark" ) ), sal_True ) )
- aAny >>= bIsDark;
- nCharColor = bIsDark ? 0xffffff : 0x000000;
- }
-
- nCharColor &= 0xffffff;
-
- /* the portion is using the embossed or engraved attribute, which we want to map to the relief feature of PPT.
- Because the relief feature of PPT is dependent to the background color, such a mapping can not always be used. */
- if ( nCharAttr & 0x200 )
- {
- sal_uInt32 nBackgroundColor = 0xffffff;
-
- if ( !nCharColor ) // special threatment for
- nCharColor = 0xffffff; // black fontcolor
-
- ::com::sun::star::uno::Any aAny;
- ::com::sun::star::drawing::FillStyle aFS( ::com::sun::star::drawing::FillStyle_NONE );
- if ( PropValue::GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillStyle" ) ) ) )
- aAny >>= aFS;
- switch( aFS )
- {
- case ::com::sun::star::drawing::FillStyle_GRADIENT :
- {
- Point aEmptyPoint = Point();
- Rectangle aRect( aEmptyPoint, Size( 28000, 21000 ) );
- EscherPropertyContainer aPropOpt( mpPptEscherEx->GetGraphicProvider(), mpPicStrm, aRect );
- aPropOpt.CreateGradientProperties( mXPropSet );
- aPropOpt.GetOpt( ESCHER_Prop_fillColor, nBackgroundColor );
- }
- break;
- case ::com::sun::star::drawing::FillStyle_SOLID :
- {
- if ( PropValue::GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillColor" ) ) ) )
- nBackgroundColor = mpPptEscherEx->GetColor( *((sal_uInt32*)aAny.getValue()) );
- }
- break;
- case ::com::sun::star::drawing::FillStyle_NONE :
- {
- ::com::sun::star::uno::Any aBackAny;
- ::com::sun::star::drawing::FillStyle aBackFS( ::com::sun::star::drawing::FillStyle_NONE );
- if ( PropValue::GetPropertyValue( aBackAny, mXBackgroundPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillStyle" ) ) ) )
- aBackAny >>= aBackFS;
- switch( aBackFS )
- {
- case ::com::sun::star::drawing::FillStyle_GRADIENT :
- {
- Point aEmptyPoint = Point();
- Rectangle aRect( aEmptyPoint, Size( 28000, 21000 ) );
- EscherPropertyContainer aPropOpt( mpPptEscherEx->GetGraphicProvider(), mpPicStrm, aRect );
- aPropOpt.CreateGradientProperties( mXBackgroundPropSet );
- aPropOpt.GetOpt( ESCHER_Prop_fillColor, nBackgroundColor );
- }
- break;
- case ::com::sun::star::drawing::FillStyle_SOLID :
- {
- if ( PropValue::GetPropertyValue( aAny, mXBackgroundPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillColor" ) ) ) )
- nBackgroundColor = mpPptEscherEx->GetColor( *((sal_uInt32*)aAny.getValue()) );
- }
- break;
- default:
- break;
- }
- }
- break;
- default:
- break;
- }
-
- sal_Int32 nB = nBackgroundColor & 0xff;
- nB += (sal_uInt8)( nBackgroundColor >> 8 );
- nB += (sal_uInt8)( nBackgroundColor >> 16 );
- // if the background color is nearly black, relief can't been used, because the text would not be visible
- if ( nB < 0x60 || ( nBackgroundColor != nCharColor ) )
- {
- nCharAttr &=~ 0x200;
-
- // now check if the text is part of a group, and if the previous object has the same color than the fontcolor
- // ( and if fillcolor is not available the background color ), it is sometimes
- // not possible to export the 'embossed' flag
- if ( ( GetCurrentGroupLevel() > 0 ) && ( GetCurrentGroupIndex() >= 1 ) )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > aGroupedShape( GetCurrentGroupAccess()->getByIndex( GetCurrentGroupIndex() - 1 ), uno::UNO_QUERY );
- if( aGroupedShape.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > aPropSetOfNextShape
- ( aGroupedShape, ::com::sun::star::uno::UNO_QUERY );
- if ( aPropSetOfNextShape.is() )
- {
- if ( PropValue::GetPropertyValue( aAny, aPropSetOfNextShape,
- String( RTL_CONSTASCII_USTRINGPARAM( "FillColor" ) ), sal_True ) )
- {
- if ( nCharColor == mpPptEscherEx->GetColor( *((sal_uInt32*)aAny.getValue()) ) )
- {
- nCharAttr |= 0x200;
- }
- }
- }
- }
- }
- }
- }
- nCharColor |= 0xfe000000;
- if ( nInstance == 4 ) // special handling for normal textobjects:
- nPropertyFlags |= nCharAttr & 0x217; // not all attributes ar inherited
- else
- {
- if ( /* ( pPortion->mnCharAttrHard & 1 ) || */
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_Bold, nCharAttr ) ) )
- nPropertyFlags |= 1;
- if ( /* ( pPortion->mnCharAttrHard & 2 ) || */
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_Italic, nCharAttr ) ) )
- nPropertyFlags |= 2;
- if ( /* ( pPortion->mnCharAttrHard & 4 ) || */
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_Underline, nCharAttr ) ) )
- nPropertyFlags |= 4;
- if ( /* ( pPortion->mnCharAttrHard & 0x10 ) || */
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_Shadow, nCharAttr ) ) )
- nPropertyFlags |= 0x10;
- if ( /* ( pPortion->mnCharAttrHard & 0x200 ) || */
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_Embossed, nCharAttr ) ) )
- nPropertyFlags |= 512;
- }
- if ( rTextObj.HasExtendedBullets() )
- {
- nPropertyFlags |= ( i & 0x3f ) << 10 ;
- nCharAttr |= ( i & 0x3f ) << 10;
- }
- if ( ( pPortion->meFontName == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_Font, pPortion->mnFont ) ) )
- nPropertyFlags |= 0x00010000;
- if ( ( pPortion->meAsianOrComplexFont == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_AsianOrComplexFont, pPortion->mnAsianOrComplexFont ) ) )
- nPropertyFlags |= 0x00200000;
- if ( ( pPortion->meCharHeight == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_FontHeight, pPortion->mnCharHeight ) ) )
- nPropertyFlags |= 0x00020000;
- if ( ( pPortion->meCharColor == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_FontColor, nCharColor & 0xffffff ) ) )
- nPropertyFlags |= 0x00040000;
- if ( ( pPortion->meCharEscapement == ::com::sun::star::beans::PropertyState_DIRECT_VALUE ) ||
- ( mpStyleSheet->IsHardAttribute( nInstance, pPara->nDepth, CharAttr_Escapement, pPortion->mnCharEscapement ) ) )
- nPropertyFlags |= 0x00080000;
-
- sal_uInt32 nCharCount = pPortion->Count();
-
- rOut << nCharCount
- << nPropertyFlags; //PropertyFlags
-
- if ( nPropertyFlags & 0xffff )
- rOut << (sal_uInt16)( nCharAttr );
- if ( nPropertyFlags & 0x00010000 )
- rOut << pPortion->mnFont;
- if ( nPropertyFlags & 0x00200000 )
- rOut << pPortion->mnAsianOrComplexFont;
- if ( nPropertyFlags & 0x00020000 )
- rOut << (sal_uInt16)( pPortion->mnCharHeight );
- if ( nPropertyFlags & 0x00040000 )
- rOut << (sal_uInt32)nCharColor;
- if ( nPropertyFlags & 0x00080000 )
- rOut << pPortion->mnCharEscapement;
- }
- }
-}
-
-// ----------------------------------------------------------------------------------------
-// laedt und konvertiert text aus shape, ergebnis ist mnTextSize gespeichert;
-sal_Bool PPTWriter::ImplGetText()
-{
- mnTextSize = 0;
- mbFontIndependentLineSpacing = sal_False;
- mXText = ::com::sun::star::uno::Reference<
- ::com::sun::star::text::XSimpleText >
- ( mXShape, ::com::sun::star::uno::UNO_QUERY );
-
- if ( mXText.is() )
- {
- mnTextSize = mXText->getString().getLength();
- ::com::sun::star::uno::Any aAny;
- if ( GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FontIndependentLineSpacing" ) ) ), sal_True )
- aAny >>= mbFontIndependentLineSpacing;
- }
- return ( mnTextSize != 0 );
-}
-
-// -----------------------------------------------------------------------
-
-void PPTWriter::ImplFlipBoundingBox( EscherPropertyContainer& rPropOpt )
-{
- if ( mnAngle < 0 )
- mnAngle = ( 36000 + mnAngle ) % 36000;
- else
- mnAngle = ( 36000 - ( mnAngle % 36000 ) );
-
- double fCos = cos( (double)mnAngle * F_PI18000 );
- double fSin = sin( (double)mnAngle * F_PI18000 );
-
- double fWidthHalf = maRect.GetWidth() / 2;
- double fHeightHalf = maRect.GetHeight() / 2;
-
- double fXDiff = fCos * fWidthHalf + fSin * (-fHeightHalf);
- double fYDiff = - ( fSin * fWidthHalf - fCos * ( -fHeightHalf ) );
-
- maRect.Move( (sal_Int32)( -( fWidthHalf - fXDiff ) ), (sal_Int32)( - ( fHeightHalf + fYDiff ) ) );
- mnAngle *= 655;
- mnAngle += 0x8000;
- mnAngle &=~0xffff; // nAngle auf volle Gradzahl runden
- rPropOpt.AddOpt( ESCHER_Prop_Rotation, mnAngle );
-
- if ( ( mnAngle >= ( 45 << 16 ) && mnAngle < ( 135 << 16 ) ) ||
- ( mnAngle >= ( 225 << 16 ) && mnAngle < ( 315 << 16 ) ) )
- {
- // In diesen beiden Bereichen steht in PPT gemeinerweise die
- // BoundingBox bereits senkrecht. Daher muss diese VOR
- // DER ROTATION flachgelegt werden.
- ::com::sun::star::awt::Point
- aTopLeft( (sal_Int32)( maRect.Left() + fWidthHalf - fHeightHalf ), (sal_Int32)( maRect.Top() + fHeightHalf - fWidthHalf ) );
- Size aNewSize( maRect.GetHeight(), maRect.GetWidth() );
- maRect = Rectangle( Point( aTopLeft.X, aTopLeft.Y ), aNewSize );
- }
-}
-
-// -----------------------------------------------------------------------
-
-void PPTWriter::ImplAdjustFirstLineLineSpacing( TextObj& rTextObj, EscherPropertyContainer& rPropOpt )
-{
- if ( !mbFontIndependentLineSpacing )
- {
- ParagraphObj* pPara = rTextObj.First();
- if ( pPara )
- {
- PortionObj* pPortion = (PortionObj*)pPara->First();
- if ( pPortion )
- {
- sal_Int16 nLineSpacing = pPara->mnLineSpacing;
- const FontCollectionEntry* pDesc = maFontCollection.GetById( pPortion->mnFont );
- if ( pDesc )
- nLineSpacing = (sal_Int16)( (double)nLineSpacing * pDesc->Scaling + 0.5 );
-
- if ( ( nLineSpacing > 0 ) && ( nLineSpacing < 100 ) )
- {
- /*
- if ( rxText.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape( rxText, ::com::sun::star::uno::UNO_QUERY );
- if ( xShape.is() )
- {
- SdrObject* pObj = GetSdrObjectFromXShape( mXShape );
- if ( pObj )
- {
- const OutlinerParaObject* pParaObj = pObj->GetOutlinerParaObject();
- if ( pParaObj )
- {
- SdrModel* pModel = pObj->GetModel();
- if ( pModel )
- {
- Outliner aOutliner( &pModel->GetItemPool(), pParaObj->GetOutlinerMode() );
- aOutliner.SetText( *pParaObj );
- ULONG nTextHeight = aOutliner.GetLineHeight( 0, 0 );
- if ( nTextHeight )
- {
- }
- }
- }
- }
- }
- }
- */
- double fCharHeight = pPortion->mnCharHeight;
- fCharHeight *= 2540 / 72;
- fCharHeight *= 100 - nLineSpacing;
- fCharHeight /= 100;
-
- sal_uInt32 nUpperDistance = 0;
- rPropOpt.GetOpt( ESCHER_Prop_dyTextTop, nUpperDistance );
- nUpperDistance += static_cast< sal_uInt32 >( fCharHeight * 360.0 );
- rPropOpt.AddOpt( ESCHER_Prop_dyTextTop, nUpperDistance );
- }
- }
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-void PPTWriter::ImplWriteTextStyleAtom( SvStream& rOut, int nTextInstance, sal_uInt32 nAtomInstance,
- TextRuleEntry* pTextRule, SvStream& rExtBuStr, EscherPropertyContainer* pPropOpt )
-{
- PPTExParaSheet& rParaSheet = mpStyleSheet->GetParaSheet( nTextInstance );
-
- rOut << (sal_uInt32)( ( EPP_TextHeaderAtom << 16 ) | ( nAtomInstance << 4 ) ) << (sal_uInt32)4
- << nTextInstance;
-
- if ( mbEmptyPresObj )
- mnTextSize = 0;
- if ( !mbEmptyPresObj )
- {
- ParagraphObj* pPara;
- TextObjBinary aTextObj( mXText, nTextInstance, maFontCollection, (PPTExBulletProvider&)*this );
-
- // leaving out EPP_TextCharsAtom w/o text - still write out
- // attribute info though
- if ( mnTextSize )
- aTextObj.Write( &rOut );
-
- if ( pPropOpt )
- ImplAdjustFirstLineLineSpacing( aTextObj, *pPropOpt );
-
- sal_uInt32 nSize, nPos = rOut.Tell();
-
- rOut << (sal_uInt32)( EPP_StyleTextPropAtom << 16 ) << (sal_uInt32)0;
- ImplWriteParagraphs( rOut, aTextObj );
- ImplWritePortions( rOut, aTextObj );
- nSize = rOut.Tell() - nPos;
- rOut.SeekRel( - ( (sal_Int32)nSize - 4 ) );
- rOut << (sal_uInt32)( nSize - 8 );
- rOut.SeekRel( nSize - 8 );
-
- for ( pPara = aTextObj.First(); pPara; pPara = aTextObj.Next() )
- {
- for ( PortionObj* pPortion = (PortionObj*)pPara->First(); pPortion; pPortion = (PortionObj*)pPara->Next() )
- {
- if ( pPortion->mpFieldEntry )
- {
- const FieldEntry* pFieldEntry = pPortion->mpFieldEntry;
-
- switch ( pFieldEntry->nFieldType >> 28 )
- {
- case 1 :
- case 2 :
- {
- rOut << (sal_uInt32)( EPP_DateTimeMCAtom << 16 ) << (sal_uInt32)8
- << (sal_uInt32)( pFieldEntry->nFieldStartPos ) // TxtOffset auf TxtField;
- << (sal_uInt8)( pFieldEntry->nFieldType & 0xff ) // Type
- << (sal_uInt8)0 << (sal_uInt16)0; // PadBytes
- }
- break;
- case 3 :
- {
- rOut << (sal_uInt32)( EPP_SlideNumberMCAtom << 16 ) << (sal_uInt32 ) 4
- << (sal_uInt32)( pFieldEntry->nFieldStartPos );
- }
- break;
- case 4 :
- {
- sal_uInt32 nPageIndex = 0;
- String aPageUrl;
- String aEmpty;
- String aFile( pFieldEntry->aFieldUrl );
- String aTarget( pFieldEntry->aFieldUrl );
- INetURLObject aUrl( pFieldEntry->aFieldUrl );
- if ( INET_PROT_FILE == aUrl.GetProtocol() )
- aFile = aUrl.PathToFileName();
- else if ( INET_PROT_SMB == aUrl.GetProtocol() )
- {
- // #n382718# (and #n261623#) Convert smb notation to '\\'
- aFile = aUrl.GetMainURL( INetURLObject::NO_DECODE );
- aFile = String( aFile.GetBuffer() + 4 ); // skip the 'smb:' part
- aFile.SearchAndReplaceAll( '/', '\\' );
- aTarget = aFile;
- }
- else if ( pFieldEntry->aFieldUrl.GetChar( 0 ) == '#' )
- {
- String aPage( INetURLObject::decode( pFieldEntry->aFieldUrl, '%', INetURLObject::DECODE_WITH_CHARSET ) );
- aPage.Erase( 0, 1 );
- for ( String* pStr = (String*)maSlideNameList.First(); pStr; pStr = (String*)maSlideNameList.Next(), nPageIndex++ )
- {
- if ( *pStr == aPage )
- {
- aPageUrl = UniString::CreateFromInt32( 256 + nPageIndex );
- aPageUrl.Append( String( RTL_CONSTASCII_USTRINGPARAM( "," ) ) );
- aPageUrl.Append( String::CreateFromInt32( nPageIndex + 1 ) );
- aPageUrl.Append( String( RTL_CONSTASCII_USTRINGPARAM( ",Slide " ) ) );
- aPageUrl.Append( String::CreateFromInt32( nPageIndex + 1 ) );
- }
- }
- }
- sal_uInt32 nHyperId;
- if ( aPageUrl.Len() )
- nHyperId = ImplInsertBookmarkURL( aPageUrl, 1 | ( nPageIndex << 8 ) | ( 1 << 31 ), pFieldEntry->aRepresentation, aEmpty, aEmpty, aPageUrl );
- else
- nHyperId = ImplInsertBookmarkURL( pFieldEntry->aFieldUrl, 2 | ( nHyperId << 8 ), aFile, aTarget, aEmpty, aEmpty );
-
- rOut << (sal_uInt32)( ( EPP_InteractiveInfo << 16 ) | 0xf ) << (sal_uInt32)24
- << (sal_uInt32)( EPP_InteractiveInfoAtom << 16 ) << (sal_uInt32)16
- << (sal_uInt32)0 // soundref
- << nHyperId // hyperlink id
- << (sal_uInt8)4 // hyperlink action
- << (sal_uInt8)0 // ole verb
- << (sal_uInt8)0 // jump
- << (sal_uInt8)0 // flags
- << (sal_uInt8)8 // hyperlink type ?
- << (sal_uInt8)0 << (sal_uInt8)0 << (sal_uInt8)0
- << (sal_uInt32)( EPP_TxInteractiveInfoAtom << 16 ) << (sal_uInt32)8
- << (sal_uInt32)( pFieldEntry->nFieldStartPos )
- << (sal_uInt32)( pFieldEntry->nFieldEndPos );
- }
- break;
- case 5 :
- {
- rOut << (sal_uInt32)( EPP_GenericDateMCAtom << 16 ) << (sal_uInt32)4
- << (sal_uInt32)( pFieldEntry->nFieldStartPos );
- }
- break;
- case 6 :
- {
- rOut << (sal_uInt32)( EPP_HeaderMCAtom << 16 ) << (sal_uInt32 ) 4
- << (sal_uInt32)( pFieldEntry->nFieldStartPos );
- }
- break;
- case 7 :
- {
- rOut << (sal_uInt32)( EPP_FooterMCAtom << 16 ) << (sal_uInt32 ) 4
- << (sal_uInt32)( pFieldEntry->nFieldStartPos );
- }
- break;
- default:
- break;
- }
- }
- }
- }
-
- aTextObj.WriteTextSpecInfo( &rOut );
-
- // Star Office Default TabSizes schreiben ( wenn noetig )
- pPara = aTextObj.First();
- if ( pPara )
- {
- sal_uInt32 nParaFlags = 0x1f;
- sal_Int16 nDepth, nMask, nNumberingRule[ 10 ];
- sal_uInt32 nTextOfs = pPara->nTextOfs;
- sal_uInt32 nTabs = pPara->maTabStop.getLength();
- const ::com::sun::star::style::TabStop* pTabStop = ( const ::com::sun::star::style::TabStop* )pPara->maTabStop.getConstArray();
-
- for ( ; pPara; pPara = aTextObj.Next() )
- {
- if ( pPara->bExtendedParameters )
- {
- nDepth = pPara->nDepth;
- if ( nDepth < 5 )
- {
- nMask = 1 << nDepth;
- if ( nParaFlags & nMask )
- {
- nParaFlags &=~ nMask;
- if ( ( rParaSheet.maParaLevel[ nDepth ].mnTextOfs != pPara->nTextOfs ) ||
- ( rParaSheet.maParaLevel[ nDepth ].mnBulletOfs != pPara->nBulletOfs ) )
- {
- nParaFlags |= nMask << 16;
- nNumberingRule[ nDepth << 1 ] = pPara->nTextOfs;
- nNumberingRule[ ( nDepth << 1 ) + 1 ] = (sal_Int16)pPara->nBulletOfs;
- }
- }
- }
- }
- }
- nParaFlags >>= 16;
-
- sal_uInt32 nDefaultTabSize = MapSize( ::com::sun::star::awt::Size( 2011, 1 ) ).Width;
- sal_uInt32 nDefaultTabs = abs( maRect.GetWidth() ) / nDefaultTabSize;
- if ( nTabs )
- nDefaultTabs -= (sal_Int32)( ( ( pTabStop[ nTabs - 1 ].Position / 4.40972 ) + nTextOfs ) / nDefaultTabSize );
- if ( (sal_Int32)nDefaultTabs < 0 )
- nDefaultTabs = 0;
-
- sal_uInt32 nTabCount = nTabs + nDefaultTabs;
- sal_uInt32 i, nTextRulerAtomFlags = 0;
-
- if ( nTabCount )
- nTextRulerAtomFlags |= 4;
- if ( nParaFlags )
- nTextRulerAtomFlags |= ( ( nParaFlags << 3 ) | ( nParaFlags << 8 ) );
-
- if ( nTextRulerAtomFlags )
- {
- SvStream* pRuleOut = &rOut;
- if ( pTextRule )
- pRuleOut = pTextRule->pOut = new SvMemoryStream( 0x100, 0x100 );
-
- sal_uInt32 nRulePos = pRuleOut->Tell();
- *pRuleOut << (sal_uInt32)( EPP_TextRulerAtom << 16 ) << (sal_uInt32)0;
- *pRuleOut << nTextRulerAtomFlags;
- if ( nTextRulerAtomFlags & 4 )
- {
- *pRuleOut << (sal_uInt16)nTabCount;
- for ( i = 0; i < nTabs; i++ )
- {
- sal_uInt16 nPosition = (sal_uInt16)( ( pTabStop[ i ].Position / 4.40972 ) + nTextOfs );
- sal_uInt16 nType;
- switch ( pTabStop[ i ].Alignment )
- {
- case ::com::sun::star::style::TabAlign_DECIMAL : nType = 3; break;
- case ::com::sun::star::style::TabAlign_RIGHT : nType = 2; break;
- case ::com::sun::star::style::TabAlign_CENTER : nType = 1; break;
-
- case ::com::sun::star::style::TabAlign_LEFT :
- default: nType = 0;
- };
- *pRuleOut << nPosition
- << nType;
- }
-
- sal_uInt32 nWidth = 1;
- if ( nTabs )
- nWidth += (sal_Int32)( ( ( pTabStop[ nTabs - 1 ].Position / 4.40972 + nTextOfs ) / nDefaultTabSize ) );
- nWidth *= nDefaultTabSize;
- for ( i = 0; i < nDefaultTabs; i++, nWidth += nDefaultTabSize )
- *pRuleOut << nWidth;
- }
- for ( i = 0; i < 5; i++ )
- {
- if ( nTextRulerAtomFlags & ( 8 << i ) )
- *pRuleOut << nNumberingRule[ i << 1 ];
- if ( nTextRulerAtomFlags & ( 256 << i ) )
- *pRuleOut << nNumberingRule[ ( i << 1 ) + 1 ];
- }
- sal_uInt32 nBufSize = pRuleOut->Tell() - nRulePos;
- pRuleOut->SeekRel( - ( (sal_Int32)nBufSize - 4 ) );
- *pRuleOut << (sal_uInt32)( nBufSize - 8 );
- pRuleOut->SeekRel( nBufSize - 8 );
- }
- }
- if ( aTextObj.HasExtendedBullets() )
- {
- ParagraphObj* pBulletPara = aTextObj.First();
- if ( pBulletPara )
- {
- sal_uInt32 nBulletFlags = 0;
- sal_uInt32 nNumberingType = 0, nPos2 = rExtBuStr.Tell();
-
- rExtBuStr << (sal_uInt32)( EPP_PST_ExtendedParagraphAtom << 16 ) << (sal_uInt32)0;
-
- for ( ; pBulletPara; pBulletPara = aTextObj.Next() )
- {
- nBulletFlags = 0;
- sal_uInt16 nBulletId = pBulletPara->nBulletId;
- if ( pBulletPara->bExtendedBulletsUsed )
- {
- nBulletFlags = 0x800000;
- if ( pBulletPara->nNumberingType != SVX_NUM_BITMAP )
- nBulletFlags = 0x3000000;
- }
- rExtBuStr << (sal_uInt32)nBulletFlags;
-
- if ( nBulletFlags & 0x800000 )
- rExtBuStr << nBulletId;
- if ( nBulletFlags & 0x1000000 )
- {
- switch( pBulletPara->nNumberingType )
- {
- case SVX_NUM_NUMBER_NONE :
- case SVX_NUM_CHAR_SPECIAL :
- nNumberingType = 0;
- break;
- case SVX_NUM_CHARS_UPPER_LETTER :
- case SVX_NUM_CHARS_UPPER_LETTER_N :
- case SVX_NUM_CHARS_LOWER_LETTER :
- case SVX_NUM_CHARS_LOWER_LETTER_N :
- case SVX_NUM_ROMAN_UPPER :
- case SVX_NUM_ROMAN_LOWER :
- case SVX_NUM_ARABIC :
- nNumberingType = pBulletPara->nMappedNumType;
- break;
-
- // case SVX_NUM_PAGEDESC :
- case SVX_NUM_BITMAP :
- nNumberingType = 0;
- break;
-
- }
- rExtBuStr << (sal_uInt32)nNumberingType;
- }
- if ( nBulletFlags & 0x2000000 )
- rExtBuStr << (sal_uInt16)pBulletPara->nStartWith;
- rExtBuStr << (sal_uInt32)0 << (sal_uInt32)0;
- }
- sal_uInt32 nBulletSize = ( rExtBuStr.Tell() - nPos2 ) - 8;
- rExtBuStr.SeekRel( - ( (sal_Int32)nBulletSize + 4 ) );
- rExtBuStr << nBulletSize;
- rExtBuStr.SeekRel( nBulletSize );
- }
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-void PPTWriter::ImplWriteObjectEffect( SvStream& rSt,
- ::com::sun::star::presentation::AnimationEffect eAe,
- ::com::sun::star::presentation::AnimationEffect eTe,
- sal_uInt16 nOrder )
-{
- EscherExContainer aAnimationInfo( rSt, EPP_AnimationInfo );
- EscherExAtom aAnimationInfoAtom( rSt, EPP_AnimationInfoAtom, 0, 1 );
- sal_uInt32 nDimColor = 0x7000000; // color to use for dimming
- sal_uInt32 nFlags = 0x4400; // set of flags that determine type of build
- sal_uInt32 nSoundRef = 0; // 0 if storage is from clipboard. Otherwise index(ID) in SoundCollection list.
- sal_uInt32 nDelayTime = 0; // delay before playing object
- sal_uInt16 nSlideCount = 1; // number of slides to play object
- UINT8 nBuildType = 1; // type of build
- UINT8 nFlyMethod = 0; // animation effect( fly, zoom, appear, etc )
- UINT8 nFlyDirection = 0; // Animation direction( left, right, up, down, etc )
- UINT8 nAfterEffect = 0; // what to do after build
- UINT8 nSubEffect = 0; // build by word or letter
- UINT8 nOleVerb = 0; // Determines object's class (sound, video, other)
-
- if ( eAe == ::com::sun::star::presentation::AnimationEffect_NONE )
- {
- nBuildType = 0;
- eAe = eTe;
- }
- switch ( eAe )
- {
- case ::com::sun::star::presentation::AnimationEffect_NONE :
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_LEFT :
- {
- nFlyDirection = 2;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_TOP :
- {
- nFlyDirection = 3;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_RIGHT :
- {
- nFlyDirection = 0;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_BOTTOM :
- {
- nFlyDirection = 1;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_TO_CENTER :
- {
- nFlyDirection = 1;
- nFlyMethod = 11;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_CENTER :
- {
- nFlyDirection = 0;
- nFlyMethod = 11;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_FROM_LEFT :
- {
- nFlyDirection = 0;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_FROM_TOP :
- {
- nFlyDirection = 1;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_FROM_RIGHT :
- {
- nFlyDirection = 2;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_FROM_BOTTOM :
- {
- nFlyDirection = 3;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_VERTICAL_STRIPES :
- {
- nFlyDirection = 0;
- nFlyMethod = 2;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_HORIZONTAL_STRIPES :
- {
- nFlyDirection = 1;
- nFlyMethod = 2;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_CLOCKWISE :
- {
- nFlyDirection = 1;
- nFlyMethod = 3;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_COUNTERCLOCKWISE :
- {
- nFlyDirection = 0;
- nFlyMethod = 3;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_UPPERLEFT :
- {
- nFlyDirection = 7;
- nFlyMethod = 9;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_UPPERRIGHT :
- {
- nFlyDirection = 6;
- nFlyMethod = 9;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_LOWERLEFT :
- {
- nFlyDirection = 5;
- nFlyMethod = 9;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_FADE_FROM_LOWERRIGHT :
- {
- nFlyDirection = 4;
- nFlyMethod = 9;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_CLOSE_VERTICAL :
- {
- nFlyDirection = 1;
- nFlyMethod = 13;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_CLOSE_HORIZONTAL :
- {
- nFlyDirection = 3;
- nFlyMethod = 13;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_OPEN_VERTICAL :
- {
- nFlyDirection = 0;
- nFlyMethod = 13;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_OPEN_HORIZONTAL :
- {
- nFlyDirection = 2;
- nFlyMethod = 13;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_PATH :
- {
- nFlyDirection = 28;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_TO_LEFT :
- {
- nFlyDirection = 0;
- nFlyMethod = 1;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_TO_TOP :
- {
- nFlyDirection = 0;
- nFlyMethod = 1;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_TO_RIGHT :
- {
- nFlyDirection = 0;
- nFlyMethod = 1;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_TO_BOTTOM :
- {
- nFlyDirection = 0;
- nFlyMethod = 1;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_SPIRALIN_LEFT :
- case ::com::sun::star::presentation::AnimationEffect_SPIRALIN_RIGHT :
- case ::com::sun::star::presentation::AnimationEffect_SPIRALOUT_LEFT :
- case ::com::sun::star::presentation::AnimationEffect_SPIRALOUT_RIGHT :
- {
- nFlyDirection = 0x1c;
- nFlyMethod = 0xc;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_DISSOLVE :
- {
- nFlyDirection = 0;
- nFlyMethod = 5;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_WAVYLINE_FROM_LEFT :
- {
- nFlyDirection = 2;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_WAVYLINE_FROM_TOP :
- {
- nFlyDirection = 3;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_WAVYLINE_FROM_RIGHT :
- {
- nFlyDirection = 0;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_WAVYLINE_FROM_BOTTOM :
- {
- nFlyDirection = 1;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_RANDOM :
- {
- nFlyDirection = 0;
- nFlyMethod = 1;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_VERTICAL_LINES :
- {
- nFlyDirection = 1;
- nFlyMethod = 8;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_HORIZONTAL_LINES :
- {
- nFlyDirection = 0;
- nFlyMethod = 8;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_LASER_FROM_LEFT :
- {
- nFlyDirection = 2;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_LASER_FROM_TOP :
- {
- nFlyDirection = 3;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_LASER_FROM_RIGHT :
- {
- nFlyDirection = 0;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_LASER_FROM_BOTTOM :
- {
- nFlyDirection = 1;
- nFlyMethod = 10;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_LASER_FROM_UPPERLEFT :
- {
- nFlyDirection = 7;
- nFlyMethod = 9;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_LASER_FROM_UPPERRIGHT :
- {
- nFlyDirection = 6;
- nFlyMethod = 9;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_LASER_FROM_LOWERLEFT :
- {
- nFlyDirection = 5;
- nFlyMethod = 9;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_LASER_FROM_LOWERRIGHT :
- {
- nFlyDirection = 4;
- nFlyMethod = 9;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_APPEAR :
- break;
- case ::com::sun::star::presentation::AnimationEffect_HIDE :
- {
- nFlyDirection = 0;
- nFlyMethod = 1;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_FROM_UPPERLEFT :
- {
- nFlyDirection = 4;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_FROM_UPPERRIGHT :
- {
- nFlyDirection = 5;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_FROM_LOWERRIGHT :
- {
- nFlyDirection = 7;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_FROM_LOWERLEFT :
- {
- nFlyDirection = 6;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_TO_UPPERLEFT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_TO_UPPERRIGHT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_TO_LOWERRIGHT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_TO_LOWERLEFT :
- nAfterEffect |= 2;
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_FROM_LEFT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_FROM_UPPERLEFT :
- {
- nFlyDirection = 8;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_FROM_TOP :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_FROM_UPPERRIGHT :
- {
- nFlyDirection = 11;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_FROM_RIGHT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_FROM_LOWERRIGHT :
- {
- nFlyDirection = 10;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_FROM_BOTTOM :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_FROM_LOWERLEFT :
- {
- nFlyDirection = 9;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_TO_LEFT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_TO_UPPERLEFT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_TO_TOP :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_TO_UPPERRIGHT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_TO_RIGHT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_TO_LOWERRIGHT :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_TO_BOTTOM :
- case ::com::sun::star::presentation::AnimationEffect_MOVE_SHORT_TO_LOWERLEFT :
- nAfterEffect |= 2;
- break;
- case ::com::sun::star::presentation::AnimationEffect_VERTICAL_CHECKERBOARD :
- {
- nFlyDirection = 1;
- nFlyMethod = 3;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_HORIZONTAL_CHECKERBOARD :
- {
- nFlyDirection = 0;
- nFlyMethod = 3;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_HORIZONTAL_ROTATE :
- case ::com::sun::star::presentation::AnimationEffect_VERTICAL_ROTATE :
- {
- nFlyDirection = 27;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_HORIZONTAL_STRETCH :
- case ::com::sun::star::presentation::AnimationEffect_VERTICAL_STRETCH :
- {
- nFlyDirection = 22;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_STRETCH_FROM_LEFT :
- case ::com::sun::star::presentation::AnimationEffect_STRETCH_FROM_UPPERLEFT :
- {
- nFlyDirection = 23;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_STRETCH_FROM_TOP :
- case ::com::sun::star::presentation::AnimationEffect_STRETCH_FROM_UPPERRIGHT :
- {
- nFlyDirection = 24;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_STRETCH_FROM_RIGHT :
- case ::com::sun::star::presentation::AnimationEffect_STRETCH_FROM_LOWERRIGHT :
- {
- nFlyDirection = 25;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_STRETCH_FROM_BOTTOM :
- case ::com::sun::star::presentation::AnimationEffect_STRETCH_FROM_LOWERLEFT :
- {
- nFlyDirection = 26;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN :
- {
- nFlyDirection = 16;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_SMALL :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_SPIRAL :
- {
- nFlyDirection = 17;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT :
- {
- nFlyDirection = 18;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_SMALL :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_SPIRAL :
- {
- nFlyDirection = 19;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_LEFT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_UPPERLEFT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_TOP :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_UPPERRIGHT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_RIGHT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_LOWERRIGHT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_BOTTOM :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_LOWERLEFT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_IN_FROM_CENTER :
- {
- nFlyDirection = 16;
- nFlyMethod = 12;
- }
- break;
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_LEFT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_UPPERLEFT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_TOP :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_UPPERRIGHT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_RIGHT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_LOWERRIGHT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_BOTTOM :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_LOWERLEFT :
- case ::com::sun::star::presentation::AnimationEffect_ZOOM_OUT_FROM_CENTER :
- nAfterEffect |= 2;
- break;
- default:
- break;
- }
- if ( mnDiaMode >= 1 )
- nFlags |= 4;
- if ( eTe != ::com::sun::star::presentation::AnimationEffect_NONE )
- nBuildType = 2;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "SoundOn" ) ) ) )
- {
- sal_Bool bBool;
- mAny >>= bBool;
- if ( bBool )
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "Sound" ) ) ) )
- {
- nSoundRef = maSoundCollection.GetId( *(::rtl::OUString*)mAny.getValue() );
- if ( nSoundRef )
- nFlags |= 0x10;
- }
- }
- }
- sal_Bool bDimHide = FALSE;
- sal_Bool bDimPrevious = FALSE;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "DimHide" ) ) ) )
- mAny >>= bDimHide;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "DimPrevious" ) ) ) )
- mAny >>= bDimPrevious;
- if ( bDimPrevious )
- nAfterEffect |= 1;
- if ( bDimHide )
- nAfterEffect |= 2;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "DimColor" ) ) ) )
- nDimColor = mpPptEscherEx->GetColor( *((sal_uInt32*)mAny.getValue()) ) | 0xfe000000;
-
- rSt << nDimColor << nFlags << nSoundRef << nDelayTime
- << nOrder // order of build ( 1.. )
- << nSlideCount << nBuildType << nFlyMethod << nFlyDirection
- << nAfterEffect << nSubEffect << nOleVerb
- << (sal_uInt16)0; // PadWord
-}
-
-// -----------------------------------------------------------------------
-
-void PPTWriter::ImplWriteClickAction( SvStream& rSt, ::com::sun::star::presentation::ClickAction eCa, sal_Bool bMediaClickAction )
-{
- sal_uInt32 nSoundRef = 0; // a reference to a sound in the sound collection, or NULL.
- sal_uInt32 nHyperLinkID = 0;// a persistent unique identifier to an external hyperlink object (only valid when action == HyperlinkAction).
- sal_uInt8 nAction = 0; // Action See Action Table
- sal_uInt8 nOleVerb = 0; // OleVerb Only valid when action == OLEAction. OLE verb to use, 0 = first verb, 1 = second verb, etc.
- sal_uInt8 nJump = 0; // Jump See Jump Table
- sal_uInt8 nFlags = 0; // Bit 1: Animated. If 1, then button is animated
- // Bit 2: Stop sound. If 1, then stop current sound when button is pressed.
- // Bit 3: CustomShowReturn. If 1, and this is a jump to custom show, then return to this slide after custom show.
- sal_uInt8 nHyperLinkType = 0;// HyperlinkType a value from the LinkTo enum, such as LT_URL (only valid when action == HyperlinkAction).
-
- String aFile;
-
- /*
- Action Table: Action Value
- NoAction 0
- MacroAction 1
- RunProgramAction 2
- JumpAction 3
- HyperlinkAction 4
- OLEAction 5
- MediaAction 6
- CustomShowAction 7
-
- Jump Table: Jump Value
- NoJump 0
- NextSlide, 1
- PreviousSlide, 2
- FirstSlide, 3
- LastSlide, 4
- LastSlideViewed 5
- EndShow 6
- */
-
- if ( bMediaClickAction )
- nAction = 6;
- else switch( eCa )
- {
- case ::com::sun::star::presentation::ClickAction_STOPPRESENTATION :
- nJump += 2;
- case ::com::sun::star::presentation::ClickAction_LASTPAGE :
- nJump++;
- case ::com::sun::star::presentation::ClickAction_FIRSTPAGE :
- nJump++;
- case ::com::sun::star::presentation::ClickAction_PREVPAGE :
- nJump++;
- case ::com::sun::star::presentation::ClickAction_NEXTPAGE :
- {
- nJump++;
- nAction = 3;
- }
- break;
- case ::com::sun::star::presentation::ClickAction_SOUND :
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "Bookmark" ) ) ) )
- nSoundRef = maSoundCollection.GetId( *(::rtl::OUString*)mAny.getValue() );
- }
- break;
- case ::com::sun::star::presentation::ClickAction_PROGRAM :
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "Bookmark" ) ) ) )
- {
- INetURLObject aUrl( *(::rtl::OUString*)mAny.getValue() );
- if ( INET_PROT_FILE == aUrl.GetProtocol() )
- {
- aFile = aUrl.PathToFileName();
- nAction = 2;
- }
- }
- }
- break;
-
- case ::com::sun::star::presentation::ClickAction_BOOKMARK :
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "Bookmark" ) ) ) )
- {
- String aBookmark( *(::rtl::OUString*)mAny.getValue() );
- sal_uInt32 nIndex = 0;
- for ( String* pStr = (String*)maSlideNameList.First(); pStr; pStr = (String*)maSlideNameList.Next(), nIndex++ )
- {
- if ( *pStr == aBookmark )
- {
- // Bookmark ist ein link zu einer Dokumentseite
- nAction = 4;
- nHyperLinkType = 7;
-
- String aEmpty;
- String aHyperString = UniString::CreateFromInt32( 256 + nIndex );
- aHyperString.Append( String( RTL_CONSTASCII_USTRINGPARAM( "," ) ) );
- aHyperString.Append( String::CreateFromInt32( nIndex + 1 ) );
- aHyperString.Append( String( RTL_CONSTASCII_USTRINGPARAM( ",Slide " ) ) );
- aHyperString.Append( String::CreateFromInt32( nIndex + 1 ) );
- nHyperLinkID = ImplInsertBookmarkURL( aHyperString, 1 | ( nIndex << 8 ) | ( 1 << 31 ), aBookmark, aEmpty, aEmpty, aHyperString );
- }
- }
- }
- }
- break;
-
- case ::com::sun::star::presentation::ClickAction_DOCUMENT :
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "Bookmark" ) ) ) )
- {
- String aBookmark( *(::rtl::OUString*)mAny.getValue() );
- if ( aBookmark.Len() )
- {
- nAction = 4;
- nHyperLinkType = 8;
-
- String aEmpty;
- String aBookmarkFile( aBookmark );
- INetURLObject aUrl( aBookmark );
- if ( INET_PROT_FILE == aUrl.GetProtocol() )
- aBookmarkFile = aUrl.PathToFileName();
- nHyperLinkID = ImplInsertBookmarkURL( aBookmark, (sal_uInt32)(2 | ( 1 << 31 )), aBookmarkFile, aBookmark, aEmpty, aEmpty );
- }
- }
- }
- break;
-
- case ::com::sun::star::presentation::ClickAction_INVISIBLE :
- case ::com::sun::star::presentation::ClickAction_VERB :
- case ::com::sun::star::presentation::ClickAction_VANISH :
- case ::com::sun::star::presentation::ClickAction_MACRO :
- default :
- break;
- }
-
- sal_uInt32 nContainerSize = 24;
- if ( nAction == 2 )
- nContainerSize += ( aFile.Len() * 2 ) + 8;
- rSt << (sal_uInt32)( ( EPP_InteractiveInfo << 16 ) | 0xf ) << (sal_uInt32)nContainerSize
- << (sal_uInt32)( EPP_InteractiveInfoAtom << 16 ) << (sal_uInt32)16
- << nSoundRef
- << nHyperLinkID
- << nAction
- << nOleVerb
- << nJump
- << nFlags
- << (sal_uInt32)nHyperLinkType;
-
- if ( nAction == 2 ) // run program Action
- {
- sal_uInt16 i, nLen = aFile.Len();
- rSt << (sal_uInt32)( ( EPP_CString << 16 ) | 0x20 ) << (sal_uInt32)( nLen * 2 );
- for ( i = 0; i < nLen; i++ )
- rSt << aFile.GetChar( i );
- }
-
- rSt << (sal_uInt32)( ( EPP_InteractiveInfo << 16 ) | 0x1f ) << (sal_uInt32)24 // Mouse Over Action
- << (sal_uInt32)( EPP_InteractiveInfo << 16 ) << (sal_uInt32)16;
- for ( int i = 0; i < 4; i++, rSt << (sal_uInt32)0 ) {}
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool PPTWriter::ImplGetEffect( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPropSet,
- ::com::sun::star::presentation::AnimationEffect& eEffect,
- ::com::sun::star::presentation::AnimationEffect& eTextEffect,
- sal_Bool& bIsSound )
-{
- ::com::sun::star::uno::Any aAny;
- if ( GetPropertyValue( aAny, rPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Effect" ) ) ) )
- aAny >>= eEffect;
- else
- eEffect = ::com::sun::star::presentation::AnimationEffect_NONE;
-
- if ( GetPropertyValue( aAny, rPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "TextEffect" ) ) ) )
- aAny >>= eTextEffect;
- else
- eTextEffect = ::com::sun::star::presentation::AnimationEffect_NONE;
- if ( GetPropertyValue( aAny, rPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "SoundOn" ) ) ) )
- aAny >>= bIsSound;
- else
- bIsSound = FALSE;
-
- sal_Bool bHasEffect = ( ( eEffect != ::com::sun::star::presentation::AnimationEffect_NONE )
- || ( eTextEffect != ::com::sun::star::presentation::AnimationEffect_NONE )
- || bIsSound );
- return bHasEffect;
-};
-
-// -----------------------------------------------------------------------
-
-sal_Bool PPTWriter::ImplCreatePresentationPlaceholder( const sal_Bool bMasterPage, const PageType /* ePageType */,
- const sal_uInt32 nStyleInstance, const sal_uInt8 nPlaceHolderId )
-{
- sal_Bool bRet = ImplGetText();
- if ( bRet && bMasterPage )
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- sal_uInt32 nPresShapeID = mpPptEscherEx->GenerateShapeId();
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Rectangle, 0xa00, nPresShapeID );// Flags: HaveAnchor | HasSpt
- EscherPropertyContainer aPropOpt;
- aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x50001 );
- aPropOpt.AddOpt( ESCHER_Prop_lTxid, mnTxId += 0x60 );
- aPropOpt.AddOpt( ESCHER_Prop_AnchorText, ESCHER_AnchorMiddle );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x110001 );
- aPropOpt.AddOpt( ESCHER_Prop_lineColor, 0x8000001 );
- aPropOpt.AddOpt( ESCHER_Prop_shadowColor, 0x8000002 );
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- sal_uInt32 nLineFlags = 0x90001;
- if ( aPropOpt.GetOpt( ESCHER_Prop_fNoLineDrawDash, nLineFlags ) )
- nLineFlags |= 0x10001; // draw dashed line if no line
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, nLineFlags );
-
- SvMemoryStream aExtBu( 0x200, 0x200 );
- SvMemoryStream aClientTextBox( 0x200, 0x200 );
- ImplWriteTextStyleAtom( aClientTextBox, nStyleInstance, 0, NULL, aExtBu, &aPropOpt );
-
- aPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_True );
- aPropOpt.Commit( *mpStrm );
- mpPptEscherEx->AddAtom( 8, ESCHER_ClientAnchor );
- *mpStrm << (sal_Int16)maRect.Top() << (sal_Int16)maRect.Left() << (sal_Int16)maRect.Right() << (sal_Int16)maRect.Bottom(); // oben, links, rechts, unten ????
- mpPptEscherEx->OpenContainer( ESCHER_ClientData );
- mpPptEscherEx->AddAtom( 8, EPP_OEPlaceholderAtom );
- *mpStrm << (sal_uInt32)0 // PlacementID
- << (sal_uInt8)nPlaceHolderId // PlaceHolderID
- << (sal_uInt8)0 // Size of PlaceHolder ( 0 = FULL, 1 = HALF, 2 = QUARTER )
- << (sal_uInt16)0; // padword
- mpPptEscherEx->CloseContainer(); // ESCHER_ClientData
-/*
- if ( aExtBu.Tell() )
- {
- if ( !pClientData )
- pClientData = new SvMemoryStream( 0x200, 0x200 );
- ImplProgTagContainer( pClientData, &aExtBu );
- }
-*/
- if ( aClientTextBox.Tell() )
- {
- *mpStrm << (sal_uInt32)( ( ESCHER_ClientTextbox << 16 ) | 0xf )
- << (sal_uInt32)aClientTextBox.Tell();
-
- mpStrm->Write( aClientTextBox.GetData(), aClientTextBox.Tell() );
- }
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
- }
- else
- bRet = sal_False;
- return bRet;
-}
-
-// -----------------------------------------------------------------------
-
-void PPTWriter::ImplCreateShape( sal_uInt32 nType, sal_uInt32 nFlags, EscherSolverContainer& rSolver )
-{
- sal_uInt32 nId = mpPptEscherEx->GenerateShapeId();
- mpPptEscherEx->AddShape( nType, nFlags, nId );
- rSolver.AddShape( mXShape, nId );
-}
-
-void PPTWriter::ImplCreateTextShape( EscherPropertyContainer& rPropOpt, EscherSolverContainer& rSolver, sal_Bool bFill )
-{
- mnTextStyle = EPP_TEXTSTYLE_TEXT;
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_TextBox, 0xa00, rSolver );
- if ( bFill )
- rPropOpt.CreateFillProperties( mXPropSet, sal_True );
- if ( ImplGetText() )
- rPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_True );
-}
-
-void PPTWriter::ImplWritePage( const PHLayout& rLayout, EscherSolverContainer& aSolverContainer, PageType ePageType, sal_Bool bMasterPage, int nPageNumber )
-{
- sal_uInt32 nInstance, nGroups, nShapes, nShapeCount, nPer, nLastPer, nIndices, nGroupLevel = 0, nOlePictureId;
- sal_uInt16 nEffectCount;
- ::com::sun::star::awt::Point aTextRefPoint;
-
- ResetGroupTable( nShapes = mXShapes->getCount() );
-
- nIndices = nInstance = nLastPer = nShapeCount = nEffectCount = 0;
-
- sal_Bool bIsTitlePossible = TRUE; // bei mehr als einem title geht powerpoint in die knie
-
- sal_uInt32 nOutlinerCount = 0; // die gliederungsobjekte muessen dem layout entsprechen,
- sal_uInt32 nPrevTextStyle = 0; // es darf nicht mehr als zwei geben
-
- nOlePictureId = 0;
-
- sal_Bool bAdditionalText = FALSE;
-
- SvMemoryStream* pClientTextBox = NULL;
- SvMemoryStream* pClientData = NULL;
-
- while( GetNextGroupEntry() )
- {
- nShapeCount++;
-
- nPer = ( 5 * nShapeCount ) / nShapes;
- if ( nPer != nLastPer )
- {
- nLastPer = nPer;
- sal_uInt32 nValue = mnPagesWritten * 5 + nPer;
- if ( nValue > mnStatMaxValue )
- nValue = mnStatMaxValue;
- if ( mbStatusIndicator && ( nValue > mnLatestStatValue ) )
- {
- mXStatusIndicator->setValue( nValue );
- mnLatestStatValue = nValue;
- }
- }
- nGroups = GetGroupsClosed();
- for ( sal_uInt32 i = 0; i < nGroups; i++, mpPptEscherEx->LeaveGroup() ) {}
-
- if ( GetShapeByIndex( GetCurrentGroupIndex(), TRUE ) )
- {
- sal_Bool bIsSound;
- sal_Bool bMediaClickAction = sal_False;
- ::com::sun::star::presentation::AnimationEffect eAe;
- ::com::sun::star::presentation::AnimationEffect eTe;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "PresentationOrder" ) ) ) )
- nEffectCount = *(sal_uInt16*)mAny.getValue();
-
- sal_Bool bEffect = ImplGetEffect( mXPropSet, eAe, eTe, bIsSound );
- ::com::sun::star::presentation::ClickAction eCa = ::com::sun::star::presentation::ClickAction_NONE;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "OnClick" ) ) ) )
- mAny >>= eCa;
-
- sal_Bool bGroup = mType == "drawing.Group";
- sal_Bool bOpenBezier = mType == "drawing.OpenBezier";
- sal_Bool bClosedBezier = mType == "drawing.ClosedBezier";
- sal_Bool bPolyPolygon = mType == "drawing.PolyPolygon";
- sal_Bool bPolyLine = mType == "drawing.PolyLine";
-
- List aAdjustmentList;
- Rectangle aPolyBoundRect;
-
- const ::com::sun::star::awt::Size aSize100thmm( mXShape->getSize() );
- const ::com::sun::star::awt::Point aPoint100thmm( mXShape->getPosition() );
- Rectangle aRect100thmm( Point( aPoint100thmm.X, aPoint100thmm.Y ), Size( aSize100thmm.Width, aSize100thmm.Height ) );
- EscherPropertyContainer aPropOpt( mpPptEscherEx->GetGraphicProvider(), mpPicStrm, aRect100thmm );
-
- if ( bGroup )
- {
- SvMemoryStream* pTmp = NULL;
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >
- aXIndexAccess( mXShape, ::com::sun::star::uno::UNO_QUERY );
- if ( EnterGroup( aXIndexAccess ) )
- {
- if ( bEffect && !mbUseNewAnimations )
- {
- pTmp = new SvMemoryStream( 0x200, 0x200 );
- ImplWriteObjectEffect( *pTmp, eAe, eTe, ++nEffectCount );
- }
- if ( eCa != ::com::sun::star::presentation::ClickAction_NONE )
- {
- if ( !pTmp )
- pTmp = new SvMemoryStream( 0x200, 0x200 );
- ImplWriteClickAction( *pTmp, eCa, bMediaClickAction );
- }
- sal_uInt32 nShapeId = mpPptEscherEx->EnterGroup( &maRect, pTmp );
- aSolverContainer.AddShape( mXShape, nShapeId );
- delete pTmp;
- }
- }
- else
- {
- sal_Bool bIsFontwork = sal_False;
- sal_Bool bIsHatching = sal_False;
- ::com::sun::star::uno::Any aAny;
- ::com::sun::star::drawing::FillStyle eFS;
- if ( GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsFontwork" ) ), sal_True ) )
- aAny >>= bIsFontwork;
- if ( GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FillStyle" ) ), sal_True ) )
- {
- aAny >>= eFS;
- bIsHatching = eFS == ::com::sun::star::drawing::FillStyle_HATCH;
- }
- if ( bIsHatching || bIsFontwork || ( mType == "drawing.Measure" ) || ( mType == "drawing.Caption" ) )
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "BoundRect" ) ) ) )
- {
- ::com::sun::star::awt::Rectangle aRect( *(::com::sun::star::awt::Rectangle*)mAny.getValue() );
- maPosition = MapPoint( ::com::sun::star::awt::Point( aRect.X, aRect.Y ) );
- maSize = MapSize( ::com::sun::star::awt::Size( aRect.Width, aRect.Height ) );
- maRect = Rectangle( Point( maPosition.X, maPosition.Y ), Size( maSize.Width, maSize.Height ) );
- }
- mType = "drawing.dontknow";
- }
- }
- sal_uInt8 nPlaceHolderAtom = EPP_PLACEHOLDER_NONE;
-
- mnTextSize = 0;
- mnTextStyle = EPP_TEXTSTYLE_NORMAL;
-
- if ( mType == "drawing.Custom" )
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- sal_uInt32 nMirrorFlags;
- rtl::OUString sCustomShapeType;
- MSO_SPT eShapeType = aPropOpt.GetCustomShapeType( mXShape, nMirrorFlags, sCustomShapeType );
- if ( sCustomShapeType.equalsAscii( "col-502ad400" ) || sCustomShapeType.equalsAscii( "col-60da8460" ) )
- { // sj: creating metafile for customshapes that can't be saved to ms format properly
- ImplCreateShape( ESCHER_ShpInst_PictureFrame, 0xa00, aSolverContainer );
- if ( aPropOpt.CreateGraphicProperties( mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "MetaFile" ) ), sal_False ) )
- {
- aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
- SdrObject* pObj = GetSdrObjectFromXShape( mXShape );
- if ( pObj )
- {
- Rectangle aBound = pObj->GetCurrentBoundRect();
- maPosition = MapPoint( ::com::sun::star::awt::Point( aBound.Left(), aBound.Top() ) );
- maSize = MapSize( ::com::sun::star::awt::Size ( aBound.GetWidth(), aBound.GetHeight() ) );
- maRect = Rectangle( Point( maPosition.X, maPosition.Y ), Size( maSize.Width, maSize.Height ) );
- mnAngle = 0;
- }
- }
- }
- else
- {
- ImplCreateShape( eShapeType, nMirrorFlags | 0xa00, aSolverContainer );
- aPropOpt.CreateCustomShapeProperties( eShapeType, mXShape );
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- if ( ImplGetText() )
- {
- if ( !aPropOpt.IsFontWork() )
- aPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_True, sal_True );
- }
- }
- }
- else if ( mType == "drawing.Rectangle" )
- {
- sal_Int32 nRadius = 0;
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CornerRadius" ) ) ) )
- {
- mAny >>= nRadius;
- nRadius = MapSize( ::com::sun::star::awt::Size( nRadius, 0 ) ).Width;
- }
- if ( nRadius )
- {
- ImplCreateShape( ESCHER_ShpInst_RoundRectangle, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- sal_Int32 nLenght = maRect.GetWidth();
- if ( nLenght > maRect.GetHeight() )
- nLenght = maRect.GetHeight();
- nLenght >>= 1;
- if ( nRadius >= nLenght )
- nRadius = 0x2a30; // 0x2a30 ist PPTs maximum radius
- else
- nRadius = ( 0x2a30 * nRadius ) / nLenght;
- aPropOpt.AddOpt( ESCHER_Prop_adjustValue, nRadius );
- }
- else
- {
- ImplCreateShape( ESCHER_ShpInst_Rectangle, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- }
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- if ( ImplGetText() )
- aPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_False );
- }
- else if ( mType == "drawing.Ellipse" )
- {
- ::com::sun::star::drawing::CircleKind eCircleKind( ::com::sun::star::drawing::CircleKind_FULL );
- PolyStyle ePolyKind = POLY_CHORD;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CircleKind" ) ) ) )
- {
- mAny >>= eCircleKind;
- switch ( eCircleKind )
- {
- case ::com::sun::star::drawing::CircleKind_SECTION :
- {
- ePolyKind = POLY_PIE;
- }
- break;
- case ::com::sun::star::drawing::CircleKind_ARC :
- {
- ePolyKind = POLY_ARC;
- }
- break;
-
- case ::com::sun::star::drawing::CircleKind_CUT :
- {
- ePolyKind = POLY_CHORD;
- }
- break;
-
- default:
- eCircleKind = ::com::sun::star::drawing::CircleKind_FULL;
- }
- }
- if ( eCircleKind == ::com::sun::star::drawing::CircleKind_FULL )
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_Ellipse, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- if ( ImplGetText() )
- aPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_False );
- }
- else
- {
- sal_Int32 nStartAngle, nEndAngle;
- if ( !ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CircleStartAngle" ) ) ) )
- continue;
- nStartAngle = *( (sal_Int32*)mAny.getValue() );
- if( !ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CircleEndAngle" ) ) ) )
- continue;
- nEndAngle = *( (sal_Int32*)mAny.getValue() );
- ::com::sun::star::awt::Point aPoint( mXShape->getPosition() );
- ::com::sun::star::awt::Size aSize( mXShape->getSize() );
- ::com::sun::star::awt::Point aStart, aEnd, aCenter;
- Rectangle aRect( Point( aPoint.X, aPoint.Y ), Size( aSize.Width, aSize.Height ) );
- aStart.X = (sal_Int32)( ( cos( (double)( nStartAngle * F_PI18000 ) ) * 100.0 ) );
- aStart.Y = - (sal_Int32)( ( sin( (double)( nStartAngle * F_PI18000 ) ) * 100.0 ) );
- aEnd.X = (sal_Int32)( ( cos( (double)( nEndAngle * F_PI18000 ) ) * 100.0 ) );
- aEnd.Y = - (sal_Int32)( ( sin( (double)( nEndAngle * F_PI18000 ) ) * 100.0 ) );
- aCenter.X = aPoint.X + ( aSize.Width / 2 );
- aCenter.Y = aPoint.Y + ( aSize.Height / 2 );
- aStart.X += aCenter.X;
- aStart.Y += aCenter.Y;
- aEnd.X += aCenter.X;
- aEnd.Y += aCenter.Y;
- Polygon aPolygon( aRect, Point( aStart.X, aStart.Y ), Point( aEnd.X, aEnd.Y ), ePolyKind );
- sal_Bool bNeedText = sal_True;
- if ( mnAngle )
- {
- aPolygon.Rotate( aRect.TopLeft(), (sal_uInt16)( mnAngle / 10 ) );
- if ( ImplGetText() )
- {
- mpPptEscherEx->EnterGroup( 0,0 );
- nGroupLevel = mpPptEscherEx->GetGroupLevel();
- bNeedText = sal_False;
- bAdditionalText = TRUE;
- mnTextSize = 0;
- }
- mnAngle = 0;
- }
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_NotPrimitive, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- ::com::sun::star::awt::Rectangle aNewRect;
- switch ( ePolyKind )
- {
- case POLY_PIE :
- case POLY_CHORD :
- {
- if ( aPropOpt.CreatePolygonProperties( mXPropSet, ESCHER_CREATEPOLYGON_POLYPOLYGON, sal_False, aNewRect, &aPolygon ) )
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- }
- break;
-
- case POLY_ARC :
- {
- if ( aPropOpt.CreatePolygonProperties( mXPropSet, ESCHER_CREATEPOLYGON_POLYLINE, sal_False, aNewRect, &aPolygon ) )
- aPropOpt.CreateLineProperties( mXPropSet, sal_False );
- }
- break;
- }
- maRect = MapRectangle( aNewRect );
- maPosition = ::com::sun::star::awt::Point( maRect.Left(), maRect.Top() );
- maSize = ::com::sun::star::awt::Size( maRect.GetWidth(), maRect.GetHeight() );
- if ( bNeedText && ImplGetText() )
- aPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_False );
- }
- }
- else if ( mType == "drawing.Control" )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XControlShape >
- aXControlShape( mXShape, ::com::sun::star::uno::UNO_QUERY );
- if ( !aXControlShape.is() )
- continue;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >
- aXControlModel( aXControlShape->getControl() );
- if ( !aXControlModel.is() )
- continue;
-
- sal_Int64 nAspect = ::com::sun::star::embed::Aspects::MSOLE_CONTENT;
- try
- {
- // try to get the aspect when available
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
- xShapeProps( mXShape, ::com::sun::star::uno::UNO_QUERY_THROW );
- xShapeProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Aspect" ) ) ) >>= nAspect;
- }
- catch( ::com::sun::star::uno::Exception& )
- {}
-
- *mpExEmbed << (sal_uInt32)( 0xf | ( EPP_ExControl << 16 ) )
- << (sal_uInt32)0; // Size of this container
-
- sal_uInt32 nSize, nOldPos = mpExEmbed->Tell();
-
- sal_uInt32 nPageId = nPageNumber;
- if ( ePageType == MASTER )
- nPageId |= 0x80000000;
- else
- nPageId += 0x100;
- *mpExEmbed << (sal_uInt32)( EPP_ExControlAtom << 16 )
- << (sal_uInt32)4
- << nPageId;
- PPTExOleObjEntry* pEntry = new PPTExOleObjEntry( OCX_CONTROL, mpExEmbed->Tell() );
- pEntry->xControlModel = aXControlModel;
- maExOleObj.Insert( pEntry );
-
- mnExEmbed++;
-
- *mpExEmbed << (sal_uInt32)( 1 | ( EPP_ExOleObjAtom << 16 ) )
- << (sal_uInt32)24
- << (sal_uInt32)nAspect
- << (sal_uInt32)2
- << (sal_uInt32)mnExEmbed
- << (sal_uInt32)0
- << (sal_uInt32)4 // index to the persist table
- << (sal_uInt32)0x0012de00;
-
-
- ::com::sun::star::awt::Size aSize;
- String aControlName;
- SvStorageRef xTemp( new SvStorage( new SvMemoryStream(), TRUE ) );
- if ( SvxMSConvertOCXControls::WriteOCXStream( xTemp, aXControlModel, aSize, aControlName ) )
- {
- String aUserName( xTemp->GetUserName() );
- String aOleIdentifier;
- if ( aUserName.Len() )
- {
- SvStorageStreamRef xCompObj = xTemp->OpenSotStream(
- String( RTL_CONSTASCII_USTRINGPARAM( "\1CompObj" ) ),
- STREAM_READ | STREAM_NOCREATE | STREAM_SHARE_DENYALL );
- xCompObj->Seek( STREAM_SEEK_TO_END );
- sal_uInt32 nStreamLen = xCompObj->Tell();
- xCompObj->Seek( 0 );
- sal_Int16 nVersion, nByteOrder;
- sal_Int32 nWinVersion, nVal, nStringLen;
- *xCompObj >> nVersion
- >> nByteOrder
- >> nWinVersion
- >> nVal;
- xCompObj->SeekRel( 16 ); // skipping clsid
- *xCompObj >> nStringLen;
- if ( ( xCompObj->Tell() + nStringLen ) < nStreamLen )
- {
- xCompObj->SeekRel( nStringLen ); // now skipping the UserName;
- *xCompObj >> nStringLen;
- if ( ( xCompObj->Tell() + nStringLen ) < nStreamLen )
- {
- xCompObj->SeekRel( nStringLen ); // now skipping the clipboard formatname
- *xCompObj >> nStringLen;
- if ( ( nStringLen > 1 ) && ( ( xCompObj->Tell() + nStringLen ) < nStreamLen ) )
- { // i think that the OleIdentifier will follow
- ByteString aTemp;
- sal_Char* p = aTemp.AllocBuffer( (USHORT)(nStringLen - 1) );
- xCompObj->Read( p, nStringLen - 1 );
- aOleIdentifier = String( aTemp, gsl_getSystemTextEncoding() );
- }
- }
- }
- }
- if ( aControlName.Len() )
- ImplWriteCString( *mpExEmbed, aControlName, 1 );
- if ( aOleIdentifier.Len() )
- ImplWriteCString( *mpExEmbed, aOleIdentifier, 2 );
- if ( aUserName.Len() )
- ImplWriteCString( *mpExEmbed, aUserName, 3 );
- }
- nSize = mpExEmbed->Tell() - nOldPos;
- mpExEmbed->Seek( nOldPos - 4 );
- *mpExEmbed << nSize;
- mpExEmbed->Seek( STREAM_SEEK_TO_END );
- nOlePictureId = mnExEmbed;
-
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- sal_uInt32 nSpFlags = SHAPEFLAG_HAVESPT | SHAPEFLAG_HAVEANCHOR | SHAPEFLAG_OLESHAPE;
- ImplCreateShape( ESCHER_ShpInst_HostControl, nSpFlags, aSolverContainer );
- if ( aPropOpt.CreateGraphicProperties( mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "MetaFile" ) ), sal_False ) )
- aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
- aPropOpt.AddOpt( ESCHER_Prop_pictureId, mnExEmbed );
- aPropOpt.AddOpt( ESCHER_Prop_pictureActive, 0x10000 );
-
- if ( aControlName.Len() )
- {
- sal_uInt16 i, nBufSize;
- nBufSize = ( aControlName.Len() + 1 ) << 1;
- sal_uInt8* pBuf = new sal_uInt8[ nBufSize ];
- sal_uInt8* pTmp = pBuf;
- for ( i = 0; i < aControlName.Len(); i++ )
- {
- sal_Unicode nUnicode = aControlName.GetChar( i );
- *pTmp++ = (sal_uInt8)nUnicode;
- *pTmp++ = (sal_uInt8)( nUnicode >> 8 );
- }
- *pTmp++ = 0;
- *pTmp = 0;
- aPropOpt.AddOpt( ESCHER_Prop_wzName, TRUE, nBufSize, pBuf, nBufSize );
- }
- }
- else if ( mType == "drawing.Connector" )
- {
- sal_uInt16 nSpType, nSpFlags;
- ::com::sun::star::awt::Rectangle aNewRect;
- if ( aPropOpt.CreateConnectorProperties( mXShape, aSolverContainer, aNewRect, nSpType, nSpFlags ) == sal_False )
- continue;
-
- maRect = MapRectangle( aNewRect );
- maPosition = ::com::sun::star::awt::Point( maRect.Left(), maRect.Top() );
- maSize = ::com::sun::star::awt::Size( maRect.GetWidth(), maRect.GetHeight() );
-
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( nSpType, nSpFlags, aSolverContainer );
- }
- else if ( mType == "drawing.Measure" )
- {
- continue;
- }
- else if ( mType == "drawing.Line" )
- {
- ::com::sun::star::awt::Rectangle aNewRect;
- aPropOpt.CreatePolygonProperties( mXPropSet, ESCHER_CREATEPOLYGON_LINE, sal_False, aNewRect, NULL );
- maRect = MapRectangle( aNewRect );
- maPosition = ::com::sun::star::awt::Point( maRect.Left(), maRect.Top() );
- maSize = ::com::sun::star::awt::Size( maRect.GetWidth(), maRect.GetHeight() );
- if ( ImplGetText() )
- {
- aTextRefPoint = ::com::sun::star::awt::Point( maRect.Left(), maRect.Top() );
- mnTextSize = 0;
- bAdditionalText = TRUE;
- mpPptEscherEx->EnterGroup( &maRect,0 );
- }
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- sal_uInt32 nFlags = 0xa00; // Flags: Connector | HasSpt
- if ( maRect.Top() > maRect.Bottom() )
- nFlags |= 0x80; // Flags: VertMirror
- if ( maRect.Left() > maRect.Right() )
- nFlags |= 0x40; // Flags: HorzMirror
-
- ImplCreateShape( ESCHER_ShpInst_Line, nFlags, aSolverContainer );
- aPropOpt.AddOpt( ESCHER_Prop_shapePath, ESCHER_ShapeComplex );
- aPropOpt.CreateLineProperties( mXPropSet, sal_False );
- mnAngle = 0;
- }
- else if ( bPolyPolygon )
- {
- if ( ImplGetText() )
- {
- mpPptEscherEx->EnterGroup( 0,0 );
- nGroupLevel = mpPptEscherEx->GetGroupLevel();
- bAdditionalText = TRUE;
- mnTextSize = 0;
- }
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_NotPrimitive, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- ::com::sun::star::awt::Rectangle aNewRect;
- aPropOpt.CreatePolygonProperties( mXPropSet, ESCHER_CREATEPOLYGON_POLYPOLYGON, sal_False, aNewRect, NULL );
- maRect = MapRectangle( aNewRect );
- maPosition = ::com::sun::star::awt::Point( maRect.Left(), maRect.Top() );
- maSize = ::com::sun::star::awt::Size( maRect.GetWidth(), maRect.GetHeight() );
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- mnAngle = 0;
- }
- else if ( bPolyLine )
- {
- if ( ImplGetText() )
- {
- mpPptEscherEx->EnterGroup( 0,0 );
- nGroupLevel = mpPptEscherEx->GetGroupLevel();
- bAdditionalText = TRUE;
- mnTextSize = 0;
- }
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_NotPrimitive, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- ::com::sun::star::awt::Rectangle aNewRect;
- aPropOpt.CreatePolygonProperties( mXPropSet, ESCHER_CREATEPOLYGON_POLYLINE, sal_False, aNewRect, NULL );
- maRect = MapRectangle( aNewRect );
- maPosition = ::com::sun::star::awt::Point( maRect.Left(), maRect.Top() );
- maSize = ::com::sun::star::awt::Size( maRect.GetWidth(), maRect.GetHeight() );
- aPropOpt.CreateLineProperties( mXPropSet, sal_False );
- mnAngle = 0;
- }
- else if ( bOpenBezier )
- {
- if ( ImplGetText() )
- {
- mpPptEscherEx->EnterGroup( 0,0 );
- nGroupLevel = mpPptEscherEx->GetGroupLevel();
- bAdditionalText = TRUE;
- mnTextSize = 0;
- }
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_NotPrimitive, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- ::com::sun::star::awt::Rectangle aNewRect;
- aPropOpt.CreatePolygonProperties( mXPropSet, ESCHER_CREATEPOLYGON_POLYLINE, sal_True, aNewRect, NULL );
- maRect = MapRectangle( aNewRect );
- maPosition = ::com::sun::star::awt::Point( maRect.Left(), maRect.Top() );
- maSize = ::com::sun::star::awt::Size( maRect.GetWidth(), maRect.GetHeight() );
- aPropOpt.CreateLineProperties( mXPropSet, sal_False );
- mnAngle = 0;
- }
- else if ( bClosedBezier )
- {
- if ( ImplGetText() )
- {
- mpPptEscherEx->EnterGroup( 0,0 );
- nGroupLevel = mpPptEscherEx->GetGroupLevel();
- bAdditionalText = TRUE;
- mnTextSize = 0;
- }
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_NotPrimitive, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- ::com::sun::star::awt::Rectangle aNewRect;
- aPropOpt.CreatePolygonProperties( mXPropSet, ESCHER_CREATEPOLYGON_POLYPOLYGON, sal_True, aNewRect, NULL );
- maRect = MapRectangle( aNewRect );
- maPosition = ::com::sun::star::awt::Point( maRect.Left(), maRect.Top() );
- maSize = ::com::sun::star::awt::Size( maRect.GetWidth(), maRect.GetHeight() );
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- mnAngle = 0;
- }
- else if ( ( mType == "drawing.GraphicObject" ) || ( mType == "presentation.GraphicObject" ) )
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
-
- // ein GraphicObject kann auch ein ClickMe Element sein
- if ( mbEmptyPresObj && ( ePageType == NORMAL ) )
- {
- nPlaceHolderAtom = rLayout.nUsedObjectPlaceHolder;
- ImplCreateShape( ESCHER_ShpInst_Rectangle, 0x220, aSolverContainer ); // Flags: HaveAnchor | HaveMaster
- aPropOpt.AddOpt( ESCHER_Prop_lTxid, mnTxId += 0x60 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x10001 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x10001 );
- aPropOpt.AddOpt( ESCHER_Prop_hspMaster, mnShapeMasterBody );
- }
- else
- {
- mXText = ::com::sun::star::uno::Reference<
- ::com::sun::star::text::XSimpleText >
- ( mXShape, ::com::sun::star::uno::UNO_QUERY );
-
- if ( mXText.is() )
- mnTextSize = mXText->getString().getLength();
-
- if ( mnTextSize ) // graphic object oder Flachenfuellung
- {
- /* SJ #i34951#: because M. documents are not allowing GraphicObjects containing text, we
- have to create a simpe Rectangle with fill bitmap instead (while not allowing BitmapMode_Repeat).
- */
- ImplCreateShape( ESCHER_ShpInst_Rectangle, 0xa00, aSolverContainer ); // Flags: Connector | HasSpt
- if ( aPropOpt.CreateGraphicProperties( mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "GraphicURL" ) ), sal_True, sal_True, sal_False ) )
- {
- aPropOpt.AddOpt( ESCHER_Prop_WrapText, ESCHER_WrapNone );
- aPropOpt.AddOpt( ESCHER_Prop_AnchorText, ESCHER_AnchorMiddle );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x140014 );
- aPropOpt.AddOpt( ESCHER_Prop_fillBackColor, 0x8000000 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x80000 );
- if ( ImplGetText() )
- aPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_False );
- }
- }
- else
- {
- ImplCreateShape( ESCHER_ShpInst_PictureFrame, 0xa00, aSolverContainer );
- if ( aPropOpt.CreateGraphicProperties( mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "GraphicURL" ) ), sal_False, sal_True ) )
- aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
- }
- }
- }
- else if ( ( mType == "drawing.Text" ) || ( mType == "presentation.Notes" ) )
- {
- if ( ( ePageType == NOTICE ) && mbPresObj )
- {
- if ( ImplCreatePresentationPlaceholder( bMasterPage, ePageType, EPP_TEXTTYPE_Notes, EPP_PLACEHOLDER_MASTERNOTESBODYIMAGE ) )
- continue;
- else
- nPlaceHolderAtom = EPP_PLACEHOLDER_NOTESBODY;
- }
- ImplCreateTextShape( aPropOpt, aSolverContainer, TRUE );
- }
- else if ( mType == "presentation.TitleText" )
- {
- if ( mbPresObj )
- {
- if ( ( ePageType == NOTICE ) && mbEmptyPresObj )
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- nPlaceHolderAtom = EPP_PLACEHOLDER_MASTERNOTESBODYIMAGE;
- ImplCreateShape( ESCHER_ShpInst_Rectangle, 0x200, aSolverContainer );
- aPropOpt.CreateLineProperties( mXPropSet, sal_False );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x10001 );
- }
- else if ( rLayout.bTitlePossible && bIsTitlePossible )
- {
- bIsTitlePossible = FALSE;
-
- ImplGetText();
- TextObjBinary aTextObj( mXText, EPP_TEXTTYPE_Title, maFontCollection, (PPTExBulletProvider&)*this );
- if ( ePageType == MASTER )
- {
- if ( mnTextSize )
- {
- ::rtl::OUString aUString( mXText->getString() );
- sal_uInt16 nChar;
-
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- mnShapeMasterTitle = mpPptEscherEx->GenerateShapeId();
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Rectangle, 0xa00, mnShapeMasterTitle );// Flags: HaveAnchor | HasSpt
- EscherPropertyContainer aPropertyOptions;
- aPropertyOptions.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x50001 );
- aPropertyOptions.AddOpt( ESCHER_Prop_lTxid, mnTxId += 0x60 );
- aPropertyOptions.AddOpt( ESCHER_Prop_AnchorText, ESCHER_AnchorMiddle );
-// aPropertyOptions.AddOpt( ESCHER_Prop_fillColor, nFillColor );
-// aPropertyOptions.AddOpt( ESCHER_Prop_fillBackColor, nFillBackColor );
- aPropertyOptions.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x110001 );
- aPropertyOptions.AddOpt( ESCHER_Prop_lineColor, 0x8000001 );
- aPropertyOptions.AddOpt( ESCHER_Prop_shadowColor, 0x8000002 );
- aPropertyOptions.CreateFillProperties( mXPropSet, sal_True );
- sal_uInt32 nLineFlags = 0x90001;
- if ( aPropertyOptions.GetOpt( ESCHER_Prop_fNoLineDrawDash, nLineFlags ) )
- nLineFlags |= 0x10001; // draw dashed line if no line
- aPropertyOptions.AddOpt( ESCHER_Prop_fNoLineDrawDash, nLineFlags );
- aPropertyOptions.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_True );
- ImplAdjustFirstLineLineSpacing( aTextObj, aPropOpt );
- aPropertyOptions.Commit( *mpStrm );
- mpPptEscherEx->AddAtom( 8, ESCHER_ClientAnchor );
- *mpStrm << (sal_Int16)maRect.Top() << (sal_Int16)maRect.Left() << (sal_Int16)maRect.Right() << (sal_Int16)maRect.Bottom(); // oben, links, rechts, unten ????
- mpPptEscherEx->OpenContainer( ESCHER_ClientData );
- mpPptEscherEx->AddAtom( 8, EPP_OEPlaceholderAtom );
- *mpStrm << (sal_uInt32)0 // PlacementID
- << (sal_uInt8)EPP_PLACEHOLDER_MASTERTITLE // PlaceHolderID
- << (sal_uInt8)0 // Size of PlaceHolder ( 0 = FULL, 1 = HALF, 2 = QUARTER )
- << (sal_uInt16)0; // padword
- mpPptEscherEx->CloseContainer(); // ESCHER_ClientData
- mpPptEscherEx->OpenContainer( ESCHER_ClientTextbox );
- mpPptEscherEx->AddAtom( 4, EPP_TextHeaderAtom );
- *mpStrm << (sal_uInt32)EPP_TEXTTYPE_Title;
- mpPptEscherEx->AddAtom( mnTextSize << 1, EPP_TextCharsAtom );
- const sal_Unicode* pString = aUString;
- for ( sal_uInt32 i = 0; i < mnTextSize; i++ )
- {
- nChar = pString[ i ]; // 0xa -> 0xb weicher Zeilenumbruch
- if ( nChar == 0xa )
- nChar++; // 0xd -> 0xd harter Zeilenumbruch
- *mpStrm << nChar;
- }
- mpPptEscherEx->AddAtom( 6, EPP_BaseTextPropAtom );
- *mpStrm << (sal_uInt32)( mnTextSize + 1 ) << (sal_uInt16)0;
- mpPptEscherEx->AddAtom( 10, EPP_TextSpecInfoAtom );
- *mpStrm << (sal_uInt32)( mnTextSize + 1 ) << (sal_uInt32)1 << (sal_uInt16)0;
- mpPptEscherEx->CloseContainer(); // ESCHER_ClientTextBox
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
- continue;
- }
- }
- else
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- mnTextStyle = EPP_TEXTSTYLE_TITLE;
- nPlaceHolderAtom = rLayout.nTypeOfTitle;
- ImplCreateShape( ESCHER_ShpInst_Rectangle, 0x220, aSolverContainer ); // Flags: HaveAnchor | HaveMaster
- aPropOpt.AddOpt( ESCHER_Prop_hspMaster, mnShapeMasterTitle );
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- aPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_True );
- ImplAdjustFirstLineLineSpacing( aTextObj, aPropOpt );
- if ( mbEmptyPresObj )
- {
- sal_uInt32 nNoLineDrawDash = 0;
- aPropOpt.GetOpt( ESCHER_Prop_fNoLineDrawDash, nNoLineDrawDash );
- nNoLineDrawDash |= 0x10001;
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, nNoLineDrawDash );
- }
- }
- }
- else
- mbPresObj = FALSE;
- }
- if ( !mbPresObj )
- {
- mType = "drawing.Text";
- ImplCreateTextShape( aPropOpt, aSolverContainer, TRUE );
- }
- }
- else if ( ( mType == "presentation.Outliner" ) || ( mType == "presentation.Subtitle" ) )
- {
- if ( mbPresObj )
- {
- nOutlinerCount++;
- if ( ( rLayout.bOutlinerPossible && ( nOutlinerCount == 1 ) ) ||
- ( ( rLayout.bSecOutlinerPossible && ( nOutlinerCount == 2 ) )
- && ( nPrevTextStyle == EPP_TEXTSTYLE_BODY ) ) )
- {
- ImplGetText();
- TextObjBinary aTextObj( mXText, EPP_TEXTTYPE_Body, maFontCollection, (PPTExBulletProvider&)*this );
- if ( ePageType == MASTER )
- {
- nPrevTextStyle = EPP_TEXTSTYLE_TITLE;
- if ( mnTextSize )
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- mnShapeMasterBody = mpPptEscherEx->GenerateShapeId();
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Rectangle, 0xa00, mnShapeMasterBody ); // Flags: HaveAnchor | HasSpt
- EscherPropertyContainer aPropOpt2;
- aPropOpt2.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x50001 );
- aPropOpt2.AddOpt( ESCHER_Prop_lTxid, mnTxId += 0x60 );
-// aPropOpt2.AddOpt( ESCHER_Prop_fillColor, nFillColor );
-// aPropOpt2.AddOpt( ESCHER_Prop_fillBackColor, nFillBackColor );
- aPropOpt2.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x110001 );
- aPropOpt2.AddOpt( ESCHER_Prop_lineColor, 0x8000001 );
- aPropOpt2.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x90001 );
- aPropOpt2.AddOpt( ESCHER_Prop_shadowColor, 0x8000002 );
- aPropOpt2.CreateFillProperties( mXPropSet, sal_True );
- sal_uInt32 nLineFlags = 0x90001;
- if ( aPropOpt2.GetOpt( ESCHER_Prop_fNoLineDrawDash, nLineFlags ) )
- nLineFlags |= 0x10001; // draw dashed line if no line
- aPropOpt2.AddOpt( ESCHER_Prop_fNoLineDrawDash, nLineFlags );
- aPropOpt2.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_True );
- ImplAdjustFirstLineLineSpacing( aTextObj, aPropOpt2 );
- aPropOpt2.Commit( *mpStrm );
- mpPptEscherEx->AddAtom( 8, ESCHER_ClientAnchor );
- *mpStrm << (sal_Int16)maRect.Top() << (sal_Int16)maRect.Left() << (sal_Int16)maRect.Right() << (sal_Int16)maRect.Bottom(); // oben, links, rechts, unten ????
- mpPptEscherEx->OpenContainer( ESCHER_ClientData );
- mpPptEscherEx->AddAtom( 8, EPP_OEPlaceholderAtom );
- *mpStrm << (sal_uInt32)1 // PlacementID
- << (sal_uInt8)EPP_PLACEHOLDER_MASTERBODY // PlaceHolderID
- << (sal_uInt8)0 // Size of PlaceHolder ( 0 = FULL, 1 = HALF, 2 = QUARTER )
- << (sal_uInt16)0; // padword
- mpPptEscherEx->CloseContainer(); // ESCHER_ClientData
- mpPptEscherEx->OpenContainer( ESCHER_ClientTextbox ); // printf
- mpPptEscherEx->AddAtom( 4, EPP_TextHeaderAtom );
- *mpStrm << (sal_uInt32)EPP_TEXTTYPE_Body;
- mnTextSize = aTextObj.Count();
- aTextObj.Write( mpStrm );
- mpPptEscherEx->BeginAtom();
- for ( ParagraphObj* pPara = aTextObj.First() ; pPara; pPara = aTextObj.Next() )
- {
- sal_uInt32 nCharCount = pPara->Count();
- sal_uInt16 nDepth = pPara->nDepth;
- if ( nDepth > 4)
- nDepth = 4;
-
- *mpStrm << nCharCount
- << nDepth;
- }
- mpPptEscherEx->EndAtom( EPP_BaseTextPropAtom );
- mpPptEscherEx->AddAtom( 10, EPP_TextSpecInfoAtom );
- *mpStrm << (sal_uInt32)( mnTextSize ) << (sal_uInt32)1 << (sal_uInt16)0;
-
- mpPptEscherEx->CloseContainer(); // ESCHER_ClientTextBox
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
- }
- continue;
- }
- else
- {
- mnTextStyle = EPP_TEXTSTYLE_BODY;
- nPlaceHolderAtom = rLayout.nTypeOfOutliner;
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_Rectangle, 0x220, aSolverContainer ); // Flags: HaveAnchor | HaveMaster
- aPropOpt.AddOpt( ESCHER_Prop_hspMaster, mnShapeMasterBody );
- aPropOpt.CreateFillProperties( mXPropSet, sal_True );
- aPropOpt.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_True );
- ImplAdjustFirstLineLineSpacing( aTextObj, aPropOpt );
- if ( mbEmptyPresObj )
- {
- sal_uInt32 nNoLineDrawDash = 0;
- aPropOpt.GetOpt( ESCHER_Prop_fNoLineDrawDash, nNoLineDrawDash );
- nNoLineDrawDash |= 0x10001;
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, nNoLineDrawDash );
- }
- }
- }
- else
- mbPresObj = FALSE;
- }
- if ( !mbPresObj )
- {
- mType = "drawing.Text";
- ImplCreateTextShape( aPropOpt, aSolverContainer, TRUE );
- }
- }
- else if ( ( mType == "drawing.Page" ) || ( mType == "presentation.Page" ) )
- {
- if ( ( ePageType == NOTICE ) && mbPresObj )
- {
- if ( ImplCreatePresentationPlaceholder( bMasterPage, ePageType, EPP_TEXTTYPE_Notes, EPP_PLACEHOLDER_MASTERNOTESSLIDEIMAGE ) )
- continue;
- else
- nPlaceHolderAtom = EPP_PLACEHOLDER_NOTESSLIDEIMAGE;
- }
- ImplCreateTextShape( aPropOpt, aSolverContainer, TRUE );
- }
- else if ( mType == "drawing.Frame" )
- {
- continue;
- }
- else if ( ( mType == "drawing.OLE2" ) || ( mType == "presentation.OLE2" )
- || ( mType == "presentation.Chart" ) || ( mType == "presentation.Table" )
- || ( mType == "presentation.OrgChart" ) )
- {
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- if ( mbEmptyPresObj && ( ePageType == NORMAL ) )
- {
- nPlaceHolderAtom = rLayout.nUsedObjectPlaceHolder;
- ImplCreateShape( ESCHER_ShpInst_Rectangle, 0x220, aSolverContainer ); // Flags: HaveAnchor | HaveMaster
- aPropOpt.AddOpt( ESCHER_Prop_lTxid, mnTxId += 0x60 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x10001 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x10001 );
- aPropOpt.AddOpt( ESCHER_Prop_hspMaster, mnShapeMasterBody );
- }
- else
- {
- *mpExEmbed << (sal_uInt32)( 0xf | ( EPP_ExEmbed << 16 ) )
- << (sal_uInt32)0; // Size of this container
-
- sal_uInt32 nSize, nOldPos = mpExEmbed->Tell();
-
- *mpExEmbed << (sal_uInt32)( EPP_ExEmbedAtom << 16 )
- << (sal_uInt32)8
- << (sal_uInt32)0 // follow colorscheme : 0->do not follow
- // 1->follow collorscheme
- // 2->follow text and background scheme
- << (sal_uInt8)1 // (bool)set if embedded server can not be locked
- << (sal_uInt8)0 // (bool)do not need to send dimension
- << (sal_uInt8)0 // (bool)is object a world table
- << (sal_uInt8)0; // pad byte
-
- PPTExOleObjEntry* pE = new PPTExOleObjEntry( NORMAL_OLE_OBJECT, mpExEmbed->Tell() );
- pE->xShape = mXShape;
- maExOleObj.Insert( pE );
-
- mnExEmbed++;
-
- sal_Int64 nAspect = ::com::sun::star::embed::Aspects::MSOLE_CONTENT;
- try
- {
- // try to get the aspect when available
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
- xShapeProps( mXShape, ::com::sun::star::uno::UNO_QUERY_THROW );
- xShapeProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Aspect" ) ) ) >>= nAspect;
- }
- catch( ::com::sun::star::uno::Exception& )
- {}
-
- *mpExEmbed << (sal_uInt32)( 1 | ( EPP_ExOleObjAtom << 16 ) )
- << (sal_uInt32)24
- << (sal_uInt32)nAspect // Aspect
- << (sal_uInt32)0
- << (sal_uInt32)mnExEmbed // index to the persist table
- << (sal_uInt32)0 // subtype
- << (sal_uInt32)0
- << (sal_uInt32)0x0012b600;
-
-// ImplWriteCString( *mpExEmbed, "Photo Editor Photo", 1 );
-// ImplWriteCString( *mpExEmbed, "MSPhotoEd.3", 2 );
-// ImplWriteCString( *mpExEmbed, "Microsoft Photo Editor 3.0 Photo", 3 );
-
- nSize = mpExEmbed->Tell() - nOldPos;
- mpExEmbed->Seek( nOldPos - 4 );
- *mpExEmbed << nSize;
- mpExEmbed->Seek( STREAM_SEEK_TO_END );
- nOlePictureId = mnExEmbed;
-
- sal_uInt32 nSpFlags = 0xa00;
- if ( nOlePictureId )
- nSpFlags |= 0x10;
- ImplCreateShape( ESCHER_ShpInst_PictureFrame, nSpFlags, aSolverContainer );
- if ( aPropOpt.CreateOLEGraphicProperties( mXShape ) )
- aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
- if ( nOlePictureId )
- aPropOpt.AddOpt( ESCHER_Prop_pictureId, nOlePictureId );
- }
- }
- else if ( mType == "presentation.Header" )
- {
- if ( ImplCreatePresentationPlaceholder( bMasterPage, ePageType, EPP_TEXTTYPE_Other, EPP_PLACEHOLDER_MASTERHEADER ) )
- continue;
- else
- {
- mbPresObj = sal_False;
- mType = "drawing.Text";
- ImplCreateTextShape( aPropOpt, aSolverContainer, TRUE );
- }
- }
- else if ( mType == "presentation.Footer" )
- {
- if ( ImplCreatePresentationPlaceholder( bMasterPage, ePageType, EPP_TEXTTYPE_Other, EPP_PLACEHOLDER_MASTERFOOTER ) )
- continue;
- else
- {
- mbPresObj = sal_False;
- mType = "drawing.Text";
- ImplCreateTextShape( aPropOpt, aSolverContainer, TRUE );
- }
- }
- else if ( mType == "presentation.DateTime" )
- {
- if ( ImplCreatePresentationPlaceholder( bMasterPage, ePageType, EPP_TEXTTYPE_Other, EPP_PLACEHOLDER_MASTERDATE ) )
- continue;
- else
- {
- mbPresObj = sal_False;
- mType = "drawing.Text";
- ImplCreateTextShape( aPropOpt, aSolverContainer, TRUE );
- }
- }
- else if ( mType == "presentation.SlideNumber" )
- {
- if ( ImplCreatePresentationPlaceholder( bMasterPage, ePageType, EPP_TEXTTYPE_Other, EPP_PLACEHOLDER_MASTERSLIDENUMBER ) )
- continue;
- else
- {
- mbPresObj = sal_False;
- mType = "drawing.Text";
- ImplCreateTextShape( aPropOpt, aSolverContainer, TRUE );
- }
- }
- else if ( ( (sal_Char)'3' == mType.GetChar( 8 ) ) && ( (char)'D' == mType.GetChar( 9 ) ) ) // drawing.3D
- {
- // SceneObject, CubeObject, SphereObject, LatheObject, ExtrudeObject, PolygonObject
- if ( !ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "Bitmap" ) ) ) )
- continue;
-
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_PictureFrame, 0xa00, aSolverContainer );
-
- if ( aPropOpt.CreateGraphicProperties( mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Bitmap" ) ), sal_False ) )
- aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
- }
- else if ( mType == "drawing.Media" )
- {
- mnAngle = 0;
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_PictureFrame, 0xa00, aSolverContainer );
-
- ::com::sun::star::uno::Any aAny;
- if ( PropValue::GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "MediaURL" ) ), sal_True ) )
- {
- rtl::OUString aMediaURL;
- if ( (aAny >>= aMediaURL ) && aMediaURL.getLength() )
- {
- // SJ: creating the Media RefObj
- sal_uInt32 nRefId = ++mnExEmbed;
-
- *mpExEmbed << (sal_uInt16)0xf
- << (sal_uInt16)EPP_ExMCIMovie // PPT_PST_ExAviMovie
- << (sal_uInt32)0;
- sal_uInt32 nSize, nStart = mpExEmbed->Tell();
- *mpExEmbed << (sal_uInt16)0
- << (sal_uInt16)EPP_ExObjRefAtom
- << (sal_uInt32)4
- << nRefId;
- *mpExEmbed << (sal_uInt16)0xf
- << (sal_uInt16)EPP_ExVideo
- << (sal_uInt32)0;
-
- *mpExEmbed << (sal_uInt16)0
- << (sal_uInt16)EPP_ExMediaAtom
- << (sal_uInt32)8
- << nRefId
- << (sal_uInt16)0
- << (sal_uInt16)0x435;
-
-
- sal_uInt16 i, nStringLen = (sal_uInt16)aMediaURL.getLength();
- *mpExEmbed << (sal_uInt32)( EPP_CString << 16 ) << (sal_uInt32)( nStringLen * 2 );
- for ( i = 0; i < nStringLen; i++ )
- {
- sal_Unicode nChar = aMediaURL[ i ];
- *mpExEmbed << nChar;
- }
- nSize = mpExEmbed->Tell() - nStart;
- mpExEmbed->SeekRel( - ( (sal_Int32)nSize + 4 ) );
- *mpExEmbed << nSize; // size of PPT_PST_ExMCIMovie
- mpExEmbed->SeekRel( 0x10 );
- nSize -= 20;
- *mpExEmbed << nSize; // PPT_PST_ExMediaAtom
- mpExEmbed->SeekRel( nSize );
-
- if ( !pClientData )
- pClientData = new SvMemoryStream( 0x200, 0x200 );
- *pClientData << (sal_uInt16)0
- << (sal_uInt16)EPP_ExObjRefAtom
- << (sal_uInt32)4
- << nRefId;
- }
- }
- }
- else if ( mType == "drawing.Table" )
- {
- SvMemoryStream* pTmp = NULL;
- if ( bEffect && !mbUseNewAnimations )
- {
- pTmp = new SvMemoryStream( 0x200, 0x200 );
- ImplWriteObjectEffect( *pTmp, eAe, eTe, ++nEffectCount );
- }
- if ( eCa != ::com::sun::star::presentation::ClickAction_NONE )
- {
- if ( !pTmp )
- pTmp = new SvMemoryStream( 0x200, 0x200 );
- ImplWriteClickAction( *pTmp, eCa, bMediaClickAction );
- }
- ImplCreateTable( mXShape, aSolverContainer, aPropOpt );
- continue;
- }
- else if ( mType == "drawing.dontknow" )
- {
- mnAngle = 0;
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_PictureFrame, 0xa00, aSolverContainer );
- if ( aPropOpt.CreateGraphicProperties( mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "MetaFile" ) ), sal_False ) )
- aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
- }
- else
- {
- continue;
- }
- sal_Int32 nPlacementID = -1;
-
- sal_Bool bClientData = ( bEffect || ( eCa != ::com::sun::star::presentation::ClickAction_NONE ) ||
- nPlaceHolderAtom || nOlePictureId );
- if ( bClientData )
- {
- if ( nPlaceHolderAtom )
- {
- if ( ( mnTextStyle == EPP_TEXTSTYLE_TITLE ) || ( mnTextStyle == EPP_TEXTSTYLE_BODY ) )
- nPlacementID = nIndices++;
- else
- {
- switch ( nPlaceHolderAtom )
- {
- default :
- {
- if ( nPlaceHolderAtom < 19 )
- break;
- }
- case EPP_PLACEHOLDER_NOTESBODY :
- case EPP_PLACEHOLDER_MASTERDATE :
- case EPP_PLACEHOLDER_NOTESSLIDEIMAGE :
- case EPP_PLACEHOLDER_MASTERNOTESBODYIMAGE :
- nPlacementID = nIndices++;
- }
- }
- if ( !pClientData )
- pClientData = new SvMemoryStream( 0x200, 0x200 );
-
- *pClientData << (sal_uInt32)( EPP_OEPlaceholderAtom << 16 ) << (sal_uInt32)8
- << nPlacementID // PlacementID
- << (sal_uInt8)nPlaceHolderAtom // PlaceHolderID
- << (sal_uInt8)0 // Size of PlaceHolder ( 0 = FULL, 1 = HALF, 2 = QUARTER )
- << (sal_uInt16)0; // padword
- }
- if ( nOlePictureId )
- {
- if ( !pClientData )
- pClientData = new SvMemoryStream( 0x200, 0x200 );
-
- *pClientData << (sal_uInt32)( EPP_ExObjRefAtom << 16 ) << (sal_uInt32)4
- << nOlePictureId;
- nOlePictureId = 0;
- }
- if ( bEffect )
- {
- if ( !pClientData )
- pClientData = new SvMemoryStream( 0x200, 0x200 );
-
- // check if it is sensible to replace the object effect with text effect,
- // because in Impress there is the possibility to use a compound effect,
- // e.g. the object effect is an AnimationEffect_FADE_FROM_LEFT and the
- // text effect is a AnimationEffect_FADE_FROM_TOP, in PowerPoint there
- // can be used only one effect
- if ( mnTextSize && ( eTe != ::com::sun::star::presentation::AnimationEffect_NONE )
- && ( eAe != ::com::sun::star::presentation::AnimationEffect_NONE )
- && ( eTe != eAe ) )
- {
- sal_uInt32 nFillStyleFlags, nLineStyleFlags;
- if ( aPropOpt.GetOpt( ESCHER_Prop_fNoFillHitTest, nFillStyleFlags )
- && aPropOpt.GetOpt( ESCHER_Prop_fNoLineDrawDash, nLineStyleFlags ) )
- {
- // there is no fillstyle and also no linestyle
- if ( ! ( ( nFillStyleFlags & 0x10 ) + ( nLineStyleFlags & 9 ) ) )
- eAe = eTe;
- }
- }
- if ( !mbUseNewAnimations )
- ImplWriteObjectEffect( *pClientData, eAe, eTe, ++nEffectCount );
- }
-
- if ( eCa != ::com::sun::star::presentation::ClickAction_NONE )
- {
- if ( !pClientData )
- pClientData = new SvMemoryStream( 0x200, 0x200 );
- ImplWriteClickAction( *pClientData, eCa, bMediaClickAction );
- }
- }
- if ( ( mnTextStyle == EPP_TEXTSTYLE_TITLE ) || ( mnTextStyle == EPP_TEXTSTYLE_BODY ) )
- {
- if ( !pClientTextBox )
- pClientTextBox = new SvMemoryStream( 0x200, 0x200 );
-
- *pClientTextBox << (sal_uInt32)( EPP_OutlineTextRefAtom << 16 ) << (sal_uInt32)4
- << nPlacementID;
-
- if ( mbEmptyPresObj == FALSE )
- {
- if ( ( ePageType == NORMAL ) && ( bMasterPage == FALSE ) )
- { // try to allocate the textruleratom
- TextRuleEntry* pTextRule = (TextRuleEntry*)maTextRuleList.GetCurObject();
- while ( pTextRule )
- {
- int nRulePage = pTextRule->nPageNumber;
- if ( nRulePage > nPageNumber )
- break;
- else if ( nRulePage < nPageNumber )
- pTextRule = (TextRuleEntry*)maTextRuleList.Next();
- else
- {
- SvMemoryStream* pOut = pTextRule->pOut;
- if ( pOut )
- {
- pClientTextBox->Write( pOut->GetData(), pOut->Tell() );
- delete pOut, pTextRule->pOut = NULL;
- }
- maTextRuleList.Next();
- break;
- }
- }
- }
- }
- }
- else
- {
- if ( !aPropOpt.IsFontWork() )
- {
- if ( mnTextSize || ( nPlaceHolderAtom == EPP_PLACEHOLDER_MASTERDATE ) || ( nPlaceHolderAtom == EPP_PLACEHOLDER_NOTESBODY ) )
- {
- int nInstance2;
- if ( ( nPlaceHolderAtom == EPP_PLACEHOLDER_MASTERDATE ) || ( nPlaceHolderAtom == EPP_PLACEHOLDER_NOTESBODY ) )
- nInstance2 = 2;
- else
- nInstance2 = EPP_TEXTTYPE_Other; // Text in a Shape
-
- if ( !pClientTextBox )
- pClientTextBox = new SvMemoryStream( 0x200, 0x200 );
-
- SvMemoryStream aExtBu( 0x200, 0x200 );
- ImplWriteTextStyleAtom( *pClientTextBox, nInstance2, 0, NULL, aExtBu, &aPropOpt );
- if ( aExtBu.Tell() )
- {
- if ( !pClientData )
- pClientData = new SvMemoryStream( 0x200, 0x200 );
- ImplProgTagContainer( pClientData, &aExtBu );
- }
- }
- else if ( nPlaceHolderAtom >= 19 )
- {
- if ( !pClientTextBox )
- pClientTextBox = new SvMemoryStream( 12 );
-
- *pClientTextBox << (sal_uInt32)( EPP_TextHeaderAtom << 16 ) << (sal_uInt32)4
- << (sal_uInt32)7;
- }
- }
- }
-
- aPropOpt.CreateShadowProperties( mXPropSet );
- maRect.Justify();
- if ( mnAngle )
- ImplFlipBoundingBox( aPropOpt );
- aPropOpt.Commit( *mpStrm );
- mpPptEscherEx->AddClientAnchor( maRect );
-
- if ( pClientData )
- {
- *mpStrm << (sal_uInt32)( ( ESCHER_ClientData << 16 ) | 0xf )
- << (sal_uInt32)pClientData->Tell();
-
- mpStrm->Write( pClientData->GetData(), pClientData->Tell() );
- delete pClientData, pClientData = NULL;
- }
- if ( pClientTextBox )
- {
- *mpStrm << (sal_uInt32)( ( ESCHER_ClientTextbox << 16 ) | 0xf )
- << (sal_uInt32)pClientTextBox->Tell();
-
- mpStrm->Write( pClientTextBox->GetData(), pClientTextBox->Tell() );
- delete pClientTextBox, pClientTextBox = NULL;
- }
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
- }
- nPrevTextStyle = mnTextStyle;
-
- if ( bAdditionalText )
- {
- bAdditionalText = FALSE;
-
- ::com::sun::star::uno::Any aAny;
- EscherPropertyContainer aPropOpt;
- mnAngle = ( PropValue::GetPropertyValue( aAny,
- mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "RotateAngle" ) ), sal_True ) )
- ? *((sal_Int32*)aAny.getValue() )
- : 0;
-
- aPropOpt.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x90000 );
- aPropOpt.AddOpt( ESCHER_Prop_fNoFillHitTest, 0x100000 );
- if ( mType == "drawing.Line" )
- {
- double fDist = hypot( maRect.GetWidth(), maRect.GetHeight() );
- maRect = Rectangle( Point( aTextRefPoint.X, aTextRefPoint.Y ),
- Point( (sal_Int32)( aTextRefPoint.X + fDist ), aTextRefPoint.Y - 1 ) );
- ImplCreateTextShape( aPropOpt, aSolverContainer, FALSE );
- aPropOpt.AddOpt( ESCHER_Prop_FitTextToShape, 0x60006 ); // Size Shape To Fit Text
- if ( mnAngle < 0 )
- mnAngle = ( 36000 + mnAngle ) % 36000;
- if ( mnAngle )
- ImplFlipBoundingBox( aPropOpt );
- }
- else
- {
- ImplCreateTextShape( aPropOpt, aSolverContainer, FALSE );
- if ( mnAngle < 0 )
- mnAngle = ( 36000 + mnAngle ) % 36000;
- else
- mnAngle = ( 36000 - ( mnAngle % 36000 ) );
-
- mnAngle *= 655;
- mnAngle += 0x8000;
- mnAngle &=~0xffff; // nAngle auf volle Gradzahl runden
- aPropOpt.AddOpt( ESCHER_Prop_Rotation, mnAngle );
- mpPptEscherEx->SetGroupSnapRect( nGroupLevel, maRect );
- mpPptEscherEx->SetGroupLogicRect( nGroupLevel, maRect );
- }
- if ( !pClientTextBox )
- pClientTextBox = new SvMemoryStream( 0x200, 0x200 );
-
- SvMemoryStream aExtBu( 0x200, 0x200 );
- ImplWriteTextStyleAtom( *pClientTextBox, EPP_TEXTTYPE_Other, 0, NULL, aExtBu, &aPropOpt );
-
- aPropOpt.Commit( *mpStrm );
- mpPptEscherEx->AddClientAnchor( maRect );
-
- *mpStrm << (sal_uInt32)( ( ESCHER_ClientTextbox << 16 ) | 0xf )
- << (sal_uInt32)pClientTextBox->Tell();
-
- mpStrm->Write( pClientTextBox->GetData(), pClientTextBox->Tell() );
- delete pClientTextBox, pClientTextBox = NULL;
-
- mpPptEscherEx->CloseContainer(); // ESCHER_SpContainer
- mpPptEscherEx->LeaveGroup();
- }
- }
- ClearGroupTable(); // gruppierungen wegschreiben, sofern noch irgendwelche offen sind, was eigendlich nicht sein sollte
- nGroups = GetGroupsClosed();
- for ( sal_uInt32 i = 0; i < nGroups; i++, mpPptEscherEx->LeaveGroup() ) {}
- mnPagesWritten++;
-}
-
-// -----------------------------------------------------------------------
-
-struct CellBorder
-{
- sal_Int32 mnPos; // specifies the distance to the top/left position of the table
- sal_Int32 mnLength;
- table::BorderLine maCellBorder;
-
- CellBorder() : mnPos ( 0 ), mnLength( 0 ){};
-};
-
-void PPTWriter::ImplCreateCellBorder( const CellBorder* pCellBorder, sal_Int32 nX1, sal_Int32 nY1, sal_Int32 nX2, sal_Int32 nY2 )
-{
- sal_Int32 nLineWidth = pCellBorder->maCellBorder.OuterLineWidth + pCellBorder->maCellBorder.InnerLineWidth;
- if ( nLineWidth )
- {
- mnAngle = 0;
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- EscherPropertyContainer aPropOptSp;
-
- sal_uInt32 nId = mpPptEscherEx->GenerateShapeId();
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Line, 0xa02, nId );
- aPropOptSp.AddOpt( ESCHER_Prop_shapePath, ESCHER_ShapeComplex );
- aPropOptSp.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0xa0008 );
- aPropOptSp.AddOpt( ESCHER_Prop_fshadowObscured, 0x20000 );
-
- sal_uInt32 nBorderColor = pCellBorder->maCellBorder.Color & 0xff00; // green
- nBorderColor |= static_cast< sal_uInt8 >( pCellBorder->maCellBorder.Color ) << 16; // red
- nBorderColor |= static_cast< sal_uInt8 >( pCellBorder->maCellBorder.Color >> 16 ); // blue
- aPropOptSp.AddOpt( ESCHER_Prop_lineColor, nBorderColor );
-
- aPropOptSp.AddOpt( ESCHER_Prop_lineWidth, nLineWidth * 360 );
- aPropOptSp.AddOpt( ESCHER_Prop_fc3DLightFace, 0x80000 );
- aPropOptSp.Commit( *mpStrm );
- mpPptEscherEx->AddAtom( 16, ESCHER_ChildAnchor );
- *mpStrm << nX1
- << nY1
- << nX2
- << nY2;
- mpPptEscherEx->CloseContainer();
- }
-}
-
-void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, EscherSolverContainer& aSolverContainer,
- EscherPropertyContainer& aPropOpt )
-{
- mpPptEscherEx->OpenContainer( ESCHER_SpgrContainer );
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- mpPptEscherEx->AddAtom( 16, ESCHER_Spgr, 1 );
- *mpStrm << (INT32)maRect.Left() // Bounding box fuer die Gruppierten shapes an die sie attached werden
- << (INT32)maRect.Top()
- << (INT32)maRect.Right()
- << (INT32)maRect.Bottom();
-
- sal_uInt32 nShapeId = mpPptEscherEx->GenerateShapeId();
- mpPptEscherEx->AddShape( ESCHER_ShpInst_Min, 0x201, nShapeId ); // Flags: Group | Patriarch
- aSolverContainer.AddShape( rXShape, nShapeId );
- EscherPropertyContainer aPropOpt2;
- try
- {
- static const rtl::OUString sModel( RTL_CONSTASCII_USTRINGPARAM ( "Model" ) );
- static const rtl::OUString sWidth( RTL_CONSTASCII_USTRINGPARAM ( "Width" ) );
- static const rtl::OUString sHeight( RTL_CONSTASCII_USTRINGPARAM ( "Height" ) );
-
- uno::Reference< table::XTable > xTable;
- if ( mXPropSet->getPropertyValue( sModel ) >>= xTable )
- {
- uno::Reference< table::XColumnRowRange > xColumnRowRange( xTable, uno::UNO_QUERY_THROW );
- uno::Reference< container::XIndexAccess > xColumns( xColumnRowRange->getColumns(), uno::UNO_QUERY_THROW );
- uno::Reference< container::XIndexAccess > xRows( xColumnRowRange->getRows(), uno::UNO_QUERY_THROW );
- sal_uInt16 nRowCount = static_cast< sal_uInt16 >( xRows->getCount() );
- sal_uInt16 nColumnCount = static_cast< sal_uInt16 >( xColumns->getCount() );
-
- std::vector< std::pair< sal_Int32, sal_Int32 > > aColumns;
- std::vector< std::pair< sal_Int32, sal_Int32 > > aRows;
-
- awt::Point aPosition( MapPoint( rXShape->getPosition() ) );
- sal_uInt32 nPosition = aPosition.X;
- for ( sal_Int32 x = 0; x < nColumnCount; x++ )
- {
- uno::Reference< beans::XPropertySet > xPropSet( xColumns->getByIndex( x ), uno::UNO_QUERY_THROW );
- awt::Size aS( 0, 0 );
- xPropSet->getPropertyValue( sWidth ) >>= aS.Width;
- awt::Size aM( MapSize( aS ) );
- aColumns.push_back( std::pair< sal_Int32, sal_Int32 >( nPosition, aM.Width ) );
- nPosition += aM.Width;
- }
-
- nPosition = aPosition.Y;
- for ( sal_Int32 y = 0; y < nRowCount; y++ )
- {
- uno::Reference< beans::XPropertySet > xPropSet( xRows->getByIndex( y ), uno::UNO_QUERY_THROW );
- awt::Size aS( 0, 0 );
- xPropSet->getPropertyValue( sHeight ) >>= aS.Height;
- awt::Size aM( MapSize( aS ) );
- aRows.push_back( std::pair< sal_Int32, sal_Int32 >( nPosition, aM.Height ) );
- nPosition += aM.Height;
- }
-
- if ( nRowCount )
- {
- SvMemoryStream aMemStrm;
- aMemStrm.ObjectOwnsMemory( FALSE );
- aMemStrm << nRowCount
- << nRowCount
- << (sal_uInt16)4;
-
- std::vector< std::pair< sal_Int32, sal_Int32 > >::const_iterator aIter( aRows.begin() );
- while( aIter != aRows.end() )
- aMemStrm << (*aIter++).second;
-
- aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x1000100 );
- aPropOpt2.AddOpt( ESCHER_Prop_tableProperties, 1 );
- aPropOpt2.AddOpt( ESCHER_Prop_tableRowProperties, sal_True, aMemStrm.Tell(), static_cast< sal_uInt8* >( const_cast< void* >( aMemStrm.GetData() ) ), aMemStrm.Tell() );
- aPropOpt.Commit( *mpStrm );
- aPropOpt2.Commit( *mpStrm, 3, ESCHER_UDefProp );
- mpPptEscherEx->AddAtom( 8, ESCHER_ClientAnchor );
- *mpStrm << (sal_Int16)maRect.Top()
- << (sal_Int16)maRect.Left()
- << (sal_Int16)( maRect.GetWidth() + maRect.Left() )
- << (sal_Int16)( maRect.GetHeight() + maRect.Top() );
- mpPptEscherEx->CloseContainer();
-
-
- uno::Reference< table::XCellRange > xCellRange( xTable, uno::UNO_QUERY_THROW );
- for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ )
- {
- for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ )
- {
- uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow ), uno::UNO_QUERY_THROW );
- if ( !xCell->isMerged() )
- {
- sal_Int32 nLeft = aColumns[ nColumn ].first;
- sal_Int32 nTop = aRows[ nRow ].first;
- sal_Int32 nRight = nLeft + aColumns[ nColumn ].second;
- sal_Int32 nBottom = nTop + aRows[ nRow ].second;
-
- for ( sal_Int32 nColumnSpan = 1; nColumnSpan < xCell->getColumnSpan(); nColumnSpan++ )
- {
- sal_uInt32 nC = nColumnSpan + nColumn;
- if ( nC < aColumns.size() )
- nRight += aColumns[ nC ].second;
- else
- nRight = maRect.Right();
- }
- for ( sal_Int32 nRowSpan = 1; nRowSpan < xCell->getRowSpan(); nRowSpan++ )
- {
- sal_uInt32 nR = nRowSpan + nRow;
- if ( nR < aColumns.size() )
- nBottom += aRows[ nR ].second;
- else
- nBottom = maRect.Bottom();
- }
-
- mbFontIndependentLineSpacing = sal_False;
- mXPropSet = uno::Reference< beans::XPropertySet >( xCell, uno::UNO_QUERY_THROW );
- mXText = uno::Reference< text::XSimpleText >( xCell, uno::UNO_QUERY_THROW );
- mnTextSize = mXText->getString().getLength();
-
- ::com::sun::star::uno::Any aAny;
- if ( GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "FontIndependentLineSpacing" ) ) ), sal_True )
- aAny >>= mbFontIndependentLineSpacing;
-
- EscherPropertyContainer aPropOptSp;
- mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
- ImplCreateShape( ESCHER_ShpInst_Rectangle, 0xa02, aSolverContainer ); // Flags: Connector | HasSpt | Child
- aPropOptSp.CreateFillProperties( mXPropSet, sal_True );
- aPropOptSp.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x90000 );
- aPropOptSp.CreateTextProperties( mXPropSet, mnTxId += 0x60, sal_False, sal_True );
- aPropOptSp.AddOpt( ESCHER_Prop_WrapText, ESCHER_WrapSquare );
-
- SvMemoryStream aClientTextBox( 0x200, 0x200 );
- SvMemoryStream aExtBu( 0x200, 0x200 );
-
- ImplWriteTextStyleAtom( aClientTextBox, EPP_TEXTTYPE_Other, 0, NULL, aExtBu, &aPropOptSp );
-
- aPropOptSp.Commit( *mpStrm );
- mpPptEscherEx->AddAtom( 16, ESCHER_ChildAnchor );
- *mpStrm << nLeft
- << nTop
- << nRight
- << nBottom;
-
- *mpStrm << (sal_uInt32)( ( ESCHER_ClientTextbox << 16 ) | 0xf )
- << (sal_uInt32)aClientTextBox.Tell();
-
- mpStrm->Write( aClientTextBox.GetData(), aClientTextBox.Tell() );
- mpPptEscherEx->CloseContainer();
- }
- }
- }
-
- static const rtl::OUString sTopBorder( String( RTL_CONSTASCII_USTRINGPARAM( "TopBorder" ) ) );
- static const rtl::OUString sBottomBorder( String( RTL_CONSTASCII_USTRINGPARAM( "BottomBorder" ) ) );
- static const rtl::OUString sLeftBorder( String( RTL_CONSTASCII_USTRINGPARAM( "LeftBorder" ) ) );
- static const rtl::OUString sRightBorder( String( RTL_CONSTASCII_USTRINGPARAM( "RightBorder" ) ) );
- static const rtl::OUString sDiagonalTLBR( RTL_CONSTASCII_USTRINGPARAM ( "DiagonalTLBR" ) );
- static const rtl::OUString sDiagonalBLTR( RTL_CONSTASCII_USTRINGPARAM ( "DiagonalBLTR" ) );
-
- // creating horz lines
- sal_Int32 nYPos = MapPoint( rXShape->getPosition() ).Y;
- for( sal_Int32 nLine = 0; nLine < ( xRows->getCount() + 1 ); nLine++ )
- {
- sal_Int32 nXPos = MapPoint( rXShape->getPosition() ).X;
- std::vector< CellBorder > vCellBorders;
- for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ )
- {
- uno::Reference< beans::XPropertySet > xPropSet( xColumns->getByIndex( nColumn ), uno::UNO_QUERY_THROW );
- awt::Size aS( 0, 0 );
- xPropSet->getPropertyValue( sWidth ) >>= aS.Width;
- awt::Size aM( MapSize( aS ) );
-
- CellBorder aCellBorder;
- aCellBorder.mnPos = nXPos;
- aCellBorder.mnLength = aM.Width;
- if ( nLine < xRows->getCount() )
- { // top border
- uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nLine ), uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xPropSet2( xCell, uno::UNO_QUERY_THROW );
- table::BorderLine aBorderLine;
- if ( xPropSet2->getPropertyValue( sTopBorder ) >>= aBorderLine )
- aCellBorder.maCellBorder = aBorderLine;
- }
- if ( nLine )
- { // bottom border
- uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nLine - 1 ), uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xPropSet2( xCell, uno::UNO_QUERY_THROW );
- table::BorderLine aBorderLine;
- if ( xPropSet2->getPropertyValue( sBottomBorder ) >>= aBorderLine )
- aCellBorder.maCellBorder = aBorderLine;
- }
- vCellBorders.push_back( aCellBorder );
- nXPos += aM.Width;
- }
- std::vector< CellBorder >::const_iterator aCellBorderIter( vCellBorders.begin() );
- while( aCellBorderIter != vCellBorders.end() )
- {
- ImplCreateCellBorder( &*aCellBorderIter, aCellBorderIter->mnPos, nYPos,
- static_cast< sal_Int32 >( aCellBorderIter->mnPos + aCellBorderIter->mnLength ), nYPos );
- aCellBorderIter++;
- }
- if ( nLine < xRows->getCount() )
- {
- uno::Reference< beans::XPropertySet > xPropSet( xRows->getByIndex( nLine ), uno::UNO_QUERY_THROW );
- awt::Size aS( 0, 0 );
- xPropSet->getPropertyValue( sHeight ) >>= aS.Height;
- awt::Size aM( MapSize( aS ) );
- nYPos += aM.Height;
- }
- }
-
- // creating vertical lines
- sal_Int32 nXPos = MapPoint( rXShape->getPosition() ).X;
- for( sal_Int32 nLine = 0; nLine < ( xColumns->getCount() + 1 ); nLine++ )
- {
- nYPos = MapPoint( rXShape->getPosition() ).Y;
- std::vector< CellBorder > vCellBorders;
- for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ )
- {
- uno::Reference< beans::XPropertySet > xPropSet( xRows->getByIndex( nRow ), uno::UNO_QUERY_THROW );
- awt::Size aS( 0, 0 );
- xPropSet->getPropertyValue( sHeight ) >>= aS.Height;
- awt::Size aM( MapSize( aS ) );
-
- CellBorder aCellBorder;
- aCellBorder.mnPos = nYPos;
- aCellBorder.mnLength = aM.Height;
- if ( nLine < xColumns->getCount() )
- { // left border
- uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nLine, nRow ), uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xCellSet( xCell, uno::UNO_QUERY_THROW );
- table::BorderLine aBorderLine;
- if ( xCellSet->getPropertyValue( sLeftBorder ) >>= aBorderLine )
- aCellBorder.maCellBorder = aBorderLine;
- }
- if ( nLine )
- { // right border
- uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nLine - 1, nRow ), uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xCellSet( xCell, uno::UNO_QUERY_THROW );
- table::BorderLine aBorderLine;
- if ( xCellSet->getPropertyValue( sRightBorder ) >>= aBorderLine )
- aCellBorder.maCellBorder = aBorderLine;
- }
- vCellBorders.push_back( aCellBorder );
- nYPos += aM.Height;
- }
- std::vector< CellBorder >::const_iterator aCellBorderIter( vCellBorders.begin() );
- while( aCellBorderIter != vCellBorders.end() )
- {
- ImplCreateCellBorder( &*aCellBorderIter, nXPos, aCellBorderIter->mnPos,
- nXPos, static_cast< sal_Int32 >( aCellBorderIter->mnPos + aCellBorderIter->mnLength ) );
- aCellBorderIter++;
- }
- if ( nLine < xColumns->getCount() )
- {
- uno::Reference< beans::XPropertySet > xPropSet( xColumns->getByIndex( nLine ), uno::UNO_QUERY_THROW );
- awt::Size aS( 0, 0 );
- xPropSet->getPropertyValue( sWidth ) >>= aS.Width;
- awt::Size aM( MapSize( aS ) );
- nXPos += aM.Width;
- }
- }
- }
- }
- }
- catch( uno::Exception& )
- {
- }
- mpPptEscherEx->CloseContainer();
-}
-
-//----------------------------------------------------------------------------------------------------------
-
-void TextObjBinary::Write( SvStream* pStrm )
-{
- sal_uInt32 nSize, nPos = pStrm->Tell();
- *pStrm << (sal_uInt32)( EPP_TextCharsAtom << 16 ) << (sal_uInt32)0;
- for ( void* pPtr = First(); pPtr; pPtr = Next() )
- ((ParagraphObj*)pPtr)->Write( pStrm );
- nSize = pStrm->Tell() - nPos;
- pStrm->SeekRel( - ( (sal_Int32)nSize - 4 ) );
- *pStrm << (sal_uInt32)( nSize - 8 );
- pStrm->SeekRel( nSize - 8 );
-}
-
-void TextObjBinary::WriteTextSpecInfo( SvStream* pStrm )
-{
- sal_uInt32 nCharactersLeft( Count() );
- if ( nCharactersLeft >= 1 )
- {
- EscherExAtom aAnimationInfoAtom( *pStrm, EPP_TextSpecInfoAtom, 0, 0 );
- for ( ParagraphObj* pPtr = static_cast < ParagraphObj * >( First() ); nCharactersLeft && pPtr; pPtr = static_cast< ParagraphObj* >( Next() ) )
- {
- for ( PortionObj* pPortion = static_cast< PortionObj* >( pPtr->First() ); nCharactersLeft && pPortion; pPortion = static_cast< PortionObj* >( pPtr->Next() ) )
- {
- sal_Int32 nPortionSize = pPortion->mnTextSize >= nCharactersLeft ? nCharactersLeft : pPortion->mnTextSize;
- sal_Int32 nFlags = 7;
- nCharactersLeft -= nPortionSize;
- *pStrm << static_cast< sal_uInt32 >( nPortionSize )
- << nFlags
- << static_cast< sal_Int16 >( 1 ) // spellinfo -> needs rechecking
- << static_cast< sal_Int16 >( MsLangId::convertLocaleToLanguageWithFallback( pPortion->meCharLocale ) )
- << static_cast< sal_Int16 >( 0 ); // alt language
- }
- }
- if ( nCharactersLeft )
- *pStrm << nCharactersLeft << static_cast< sal_Int32 >( 1 ) << static_cast< sal_Int16 >( 1 );
-
- }
-}
diff --git a/sd/source/filter/pptx/pptx-escherex.cxx b/sd/source/filter/pptx/pptx-escherex.cxx
deleted file mode 100644
index fbb94de67ae7..000000000000
--- a/sd/source/filter/pptx/pptx-escherex.cxx
+++ /dev/null
@@ -1,294 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-
-#ifndef _PptEscherEx_HXX
-#include "escherex.hxx"
-#endif
-
-// ---------------------------------------------------------------------------------------------
-// ---------------------------------------------------------------------------------------------
-// ---------------------------------------------------------------------------------------------
-
-PptEscherEx::PptEscherEx( SvStream& rOutStrm ) :
- EscherEx( EscherExGlobalRef( new EscherExGlobal ), rOutStrm )
-{
- mnCurrentDg = 0;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PptEscherEx::DrawingGroupContainerSize()
-{
- return ImplDggContainerSize() + 8;
-}
-
-void PptEscherEx::WriteDrawingGroupContainer( SvStream& rSt )
-{
- UINT32 nSize = DrawingGroupContainerSize();
- rSt << (sal_uInt32)( 0xf | ( 1035 << 16 ) ) // EPP_PPDrawingGroup
- << (sal_uInt32)( nSize - 8 );
-
- ImplWriteDggContainer( rSt );
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PptEscherEx::ImplDggContainerSize()
-{
- UINT32 nSize;
-
- nSize = mxGlobal->GetDggAtomSize();
- nSize += mxGlobal->GetBlibStoreContainerSize();
- nSize += ImplOptAtomSize();
- nSize += ImplSplitMenuColorsAtomSize();
-
- return nSize + 8;
-}
-
-void PptEscherEx::ImplWriteDggContainer( SvStream& rSt )
-{
- sal_uInt32 nSize = ImplDggContainerSize();
- if ( nSize )
- {
- rSt << (sal_uInt32)( 0xf | ( ESCHER_DggContainer << 16 ) )
- << (sal_uInt32)( nSize - 8 );
-
- mxGlobal->SetDggContainer();
- mxGlobal->WriteDggAtom( rSt );
- mxGlobal->WriteBlibStoreContainer( rSt );
- ImplWriteOptAtom( rSt );
- ImplWriteSplitMenuColorsAtom( rSt );
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-#define ESCHER_OPT_COUNT 6
-
-sal_uInt32 PptEscherEx::ImplOptAtomSize()
-{
- sal_uInt32 nSize = 0;
- if ( ESCHER_OPT_COUNT )
- nSize = ( ESCHER_OPT_COUNT * 6 ) + 8;
- return nSize;
-}
-
-void PptEscherEx::ImplWriteOptAtom( SvStream& rSt )
-{
- sal_uInt32 nSize = ImplOptAtomSize();
- if ( nSize )
- {
- rSt << (sal_uInt32)( ( ESCHER_OPT << 16 ) | ( ESCHER_OPT_COUNT << 4 ) | 0x3 )
- << (sal_uInt32)( nSize - 8 )
- << (sal_uInt16)ESCHER_Prop_fillColor << (sal_uInt32)0xffb800
- << (sal_uInt16)ESCHER_Prop_fillBackColor << (sal_uInt32)0
- << (sal_uInt16)ESCHER_Prop_fNoFillHitTest << (sal_uInt32)0x00100010
- << (sal_uInt16)ESCHER_Prop_lineColor << (sal_uInt32)0x8000001
- << (sal_uInt16)ESCHER_Prop_fNoLineDrawDash << (sal_uInt32)0x00080008
- << (sal_uInt16)ESCHER_Prop_shadowColor << (sal_uInt32)0x8000002;
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-#define ESCHER_SPLIT_MENU_COLORS_COUNT 4
-
-sal_uInt32 PptEscherEx::ImplSplitMenuColorsAtomSize()
-{
- sal_uInt32 nSize = 0;
- if ( ESCHER_SPLIT_MENU_COLORS_COUNT )
- nSize = ( ESCHER_SPLIT_MENU_COLORS_COUNT << 2 ) + 8;
- return nSize;
-}
-
-void PptEscherEx::ImplWriteSplitMenuColorsAtom( SvStream& rSt )
-{
- UINT32 nSize = ImplSplitMenuColorsAtomSize();
- if ( nSize )
- {
- rSt << (sal_uInt32)( ( ESCHER_SplitMenuColors << 16 ) | ( ESCHER_SPLIT_MENU_COLORS_COUNT << 4 ) )
- << (sal_uInt32)( nSize - 8 )
- << (sal_uInt32)0x08000004
- << (sal_uInt32)0x08000001
- << (sal_uInt32)0x08000002
- << (sal_uInt32)0x100000f7;
- }
-
-}
-
-// ---------------------------------------------------------------------------------------------
-
-PptEscherEx::~PptEscherEx()
-{
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PptEscherEx::OpenContainer( UINT16 n_EscherContainer, int nRecInstance )
-{
- *mpOutStrm << (UINT16)( ( nRecInstance << 4 ) | 0xf ) << n_EscherContainer << (UINT32)0;
- mOffsets.push_back( mpOutStrm->Tell() - 4 );
- mRecTypes.push_back( n_EscherContainer );
-
- switch( n_EscherContainer )
- {
- case ESCHER_DgContainer :
- {
- if ( !mbEscherDg )
- {
- mbEscherDg = TRUE;
- mnCurrentDg = mxGlobal->GenerateDrawingId();
- AddAtom( 8, ESCHER_Dg, 0, mnCurrentDg );
- PtReplaceOrInsert( ESCHER_Persist_Dg | mnCurrentDg, mpOutStrm->Tell() );
- *mpOutStrm << (UINT32)0 // The number of shapes in this drawing
- << (UINT32)0; // The last MSOSPID given to an SP in this DG
- }
- }
- break;
-
- case ESCHER_SpgrContainer :
- {
- if ( mbEscherDg )
- {
- mbEscherSpgr = TRUE;
- }
- }
- break;
-
- case ESCHER_SpContainer :
- {
- }
- break;
-
- default:
- break;
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void PptEscherEx::CloseContainer()
-{
- /* SJ: #Issue 26747#
- not creating group objects with a depth higher than 16, because then
- PPT is having a big performance problem when starting a slide show
- */
- if ( ( mRecTypes.back() != ESCHER_SpgrContainer ) || ( mnGroupLevel < 12 ) )
- {
- UINT32 nSize, nPos = mpOutStrm->Tell();
- nSize = ( nPos - mOffsets.back() ) - 4;
- mpOutStrm->Seek( mOffsets.back() );
- *mpOutStrm << nSize;
-
- switch( mRecTypes.back() )
- {
- case ESCHER_DgContainer :
- {
- if ( mbEscherDg )
- {
- mbEscherDg = FALSE;
- if ( DoSeek( ESCHER_Persist_Dg | mnCurrentDg ) )
- *mpOutStrm << mxGlobal->GetDrawingShapeCount( mnCurrentDg ) << mxGlobal->GetLastShapeId( mnCurrentDg );
- }
- }
- break;
-
- case ESCHER_SpgrContainer :
- {
- if ( mbEscherSpgr )
- {
- mbEscherSpgr = FALSE;
-
- }
- }
- break;
-
- default:
- break;
- }
- mOffsets.pop_back();
- mRecTypes.pop_back();
- mpOutStrm->Seek( nPos );
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 PptEscherEx::EnterGroup( Rectangle* pBoundRect, SvMemoryStream* pClientData )
-{
- sal_uInt32 nShapeId = 0;
- /* SJ: #Issue 26747#
- not creating group objects with a depth higher than 16, because then
- PPT is having a big performance problem when starting a slide show
- */
- if ( mnGroupLevel < 12 )
- {
- Rectangle aRect;
- if ( pBoundRect )
- aRect = *pBoundRect;
-
- OpenContainer( ESCHER_SpgrContainer );
- OpenContainer( ESCHER_SpContainer );
- AddAtom( 16, ESCHER_Spgr, 1 );
- PtReplaceOrInsert( ESCHER_Persist_Grouping_Snap | mnGroupLevel, mpOutStrm->Tell() );
- *mpOutStrm << (INT32)aRect.Left() // Bounding box fuer die Gruppierten shapes an die sie attached werden
- << (INT32)aRect.Top()
- << (INT32)aRect.Right()
- << (INT32)aRect.Bottom();
-
- nShapeId = GenerateShapeId();
- if ( !mnGroupLevel )
- AddShape( ESCHER_ShpInst_Min, 5, nShapeId ); // Flags: Group | Patriarch
- else
- {
- AddShape( ESCHER_ShpInst_Min, 0x201, nShapeId ); // Flags: Group | HaveAnchor
- AddAtom( 8, ESCHER_ClientAnchor );
- PtReplaceOrInsert( ESCHER_Persist_Grouping_Logic | mnGroupLevel, mpOutStrm->Tell() );
- *mpOutStrm << (INT16)aRect.Top() << (INT16)aRect.Left() << (INT16)aRect.Right() << (INT16)aRect.Bottom();
- }
- if ( pClientData )
- {
- pClientData->Seek( STREAM_SEEK_TO_END );
- sal_uInt32 nSize = pClientData->Tell();
- if ( nSize )
- {
- *mpOutStrm << (sal_uInt32)( ( ESCHER_ClientData << 16 ) | 0xf )
- << nSize;
- mpOutStrm->Write( pClientData->GetData(), nSize );
- }
- }
- CloseContainer(); // ESCHER_SpContainer
- }
- mnGroupLevel++;
- return nShapeId;
-}
-
-// ---------------------------------------------------------------------------------------------
diff --git a/sd/source/filter/pptx/pptx-grouptable.cxx b/sd/source/filter/pptx/pptx-grouptable.cxx
deleted file mode 100644
index 1ed031c50214..000000000000
--- a/sd/source/filter/pptx/pptx-grouptable.cxx
+++ /dev/null
@@ -1,114 +0,0 @@
-#include "grouptable.hxx"
-
-#include <tools/gen.hxx>
-
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::container::XIndexAccess;
-
-// ---------------------------------------------------------------------------------------------
-
-GroupTable::GroupTable() :
- mnCurrentGroupEntry ( 0 ),
- mnMaxGroupEntry ( 0 ),
- mnGroupsClosed ( 0 ),
- mpGroupEntry ( NULL )
-{
- ImplResizeGroupTable( 32 );
-}
-
-// ---------------------------------------------------------------------------------------------
-
-GroupTable::~GroupTable()
-{
- for ( sal_uInt32 i = 0; i < mnCurrentGroupEntry; delete mpGroupEntry[ i++ ] ) {}
- delete[] mpGroupEntry;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void GroupTable::ImplResizeGroupTable( sal_uInt32 nEntrys )
-{
- if ( nEntrys > mnMaxGroupEntry )
- {
- mnMaxGroupEntry = nEntrys;
- GroupEntry** pTemp = new GroupEntry*[ nEntrys ];
- for ( sal_uInt32 i = 0; i < mnCurrentGroupEntry; i++ )
- pTemp[ i ] = mpGroupEntry[ i ];
- if ( mpGroupEntry )
- delete[] mpGroupEntry;
- mpGroupEntry = pTemp;
- }
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool GroupTable::EnterGroup( Reference< XIndexAccess >& rXIndexAccessRef )
-{
- sal_Bool bRet = sal_False;
- if ( rXIndexAccessRef.is() )
- {
- GroupEntry* pNewGroup = new GroupEntry( rXIndexAccessRef );
- if ( pNewGroup->mnCount )
- {
- if ( mnMaxGroupEntry == mnCurrentGroupEntry )
- ImplResizeGroupTable( mnMaxGroupEntry + 8 );
- mpGroupEntry[ mnCurrentGroupEntry++ ] = pNewGroup;
- bRet = sal_True;
- }
- else
- delete pNewGroup;
- }
- return bRet;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_uInt32 GroupTable::GetGroupsClosed()
-{
- sal_uInt32 nRet = mnGroupsClosed;
- mnGroupsClosed = 0;
- return nRet;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void GroupTable::ClearGroupTable()
-{
- for ( sal_uInt32 i = 0; i < mnCurrentGroupEntry; i++, delete mpGroupEntry[ i ] ) {}
- mnCurrentGroupEntry = 0;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void GroupTable::ResetGroupTable( sal_uInt32 nCount )
-{
- ClearGroupTable();
- mpGroupEntry[ mnCurrentGroupEntry++ ] = new GroupEntry( nCount );
-}
-
-// ---------------------------------------------------------------------------------------------
-
-sal_Bool GroupTable::GetNextGroupEntry()
-{
- while ( mnCurrentGroupEntry )
- {
- mnIndex = mpGroupEntry[ mnCurrentGroupEntry - 1 ]->mnCurrentPos++;
-
- if ( mpGroupEntry[ mnCurrentGroupEntry - 1 ]->mnCount > mnIndex )
- return TRUE;
-
- delete ( mpGroupEntry[ --mnCurrentGroupEntry ] );
-
- if ( mnCurrentGroupEntry )
- mnGroupsClosed++;
- }
- return FALSE;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void GroupTable::SkipCurrentGroup()
-{
- if ( mnCurrentGroupEntry )
- delete ( mpGroupEntry[ --mnCurrentGroupEntry ] );
-}
diff --git a/sd/source/filter/pptx/pptx-pptexanimations.cxx b/sd/source/filter/pptx/pptx-pptexanimations.cxx
deleted file mode 100644
index defe99fafba5..000000000000
--- a/sd/source/filter/pptx/pptx-pptexanimations.cxx
+++ /dev/null
@@ -1,2229 +0,0 @@
-/*************************************************************************
- *
- * 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: pptexanimations.cxx,v $
- * $Revision: 1.15.108.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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-#include <com/sun/star/animations/XAnimationNodeSupplier.hpp>
-#include <com/sun/star/animations/AnimationFill.hpp>
-#include <com/sun/star/animations/AnimationRestart.hpp>
-#include <com/sun/star/animations/Timing.hpp>
-#include <com/sun/star/animations/Event.hpp>
-#include <com/sun/star/animations/AnimationEndSync.hpp>
-#include <com/sun/star/animations/EventTrigger.hpp>
-#include <com/sun/star/presentation/EffectNodeType.hpp>
-#include <com/sun/star/presentation/EffectPresetClass.hpp>
-#include <com/sun/star/animations/AnimationNodeType.hpp>
-#include <com/sun/star/animations/AnimationTransformType.hpp>
-#include <com/sun/star/animations/AnimationCalcMode.hpp>
-#include <com/sun/star/animations/AnimationValueType.hpp>
-#include <com/sun/star/util/XCloneable.hpp>
-#include <com/sun/star/animations/AnimationAdditiveMode.hpp>
-#include <com/sun/star/animations/XAnimateSet.hpp>
-#include <com/sun/star/animations/XAudio.hpp>
-#include <com/sun/star/animations/XTransitionFilter.hpp>
-#include <com/sun/star/animations/XAnimateColor.hpp>
-#include <com/sun/star/animations/XAnimateMotion.hpp>
-#include <com/sun/star/animations/XAnimateTransform.hpp>
-#include <com/sun/star/animations/TransitionType.hpp>
-#include <com/sun/star/animations/TransitionSubType.hpp>
-#include <com/sun/star/animations/ValuePair.hpp>
-#include <com/sun/star/animations/AnimationColorSpace.hpp>
-#include <com/sun/star/drawing/FillStyle.hpp>
-#include <com/sun/star/drawing/LineStyle.hpp>
-#include <com/sun/star/awt/FontWeight.hpp>
-#include <com/sun/star/awt/FontUnderline.hpp>
-#include <com/sun/star/awt/FontSlant.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/presentation/ParagraphTarget.hpp>
-#include <com/sun/star/text/XSimpleText.hpp>
-#include <com/sun/star/animations/XIterateContainer.hpp>
-#include <com/sun/star/presentation/TextAnimationType.hpp>
-#include <com/sun/star/container/XChild.hpp>
-#include <comphelper/processfactory.hxx>
-#include <rtl/ustrbuf.hxx>
-#ifndef _RTL_MEMORY_H_
-#include <rtl/memory.hxx>
-#endif
-
-#include <vcl/vclenum.hxx>
-#include <svx/svdotext.hxx>
-#include <editeng/outlobj.hxx>
-#include <editeng/editobj.hxx>
-#include <pptexanimations.hxx>
-#include <osl/endian.h>
-
-#include <algorithm>
-
-using ::std::map;
-using ::rtl::OUString;
-using ::rtl::OUStringBuffer;
-using ::com::sun::star::uno::Any;
-using ::com::sun::star::container::XChild;
-using ::com::sun::star::util::XCloneable;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::UNO_QUERY;
-using ::com::sun::star::uno::UNO_QUERY_THROW;
-using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::uno::makeAny;
-using ::com::sun::star::uno::Exception;
-using ::com::sun::star::uno::XInterface;
-using ::com::sun::star::beans::NamedValue;
-using ::com::sun::star::container::XEnumerationAccess;
-using ::com::sun::star::container::XEnumeration;
-using ::com::sun::star::lang::XMultiServiceFactory;
-
-using namespace ::com::sun::star::text;
-using namespace ::com::sun::star::drawing;
-using namespace ::com::sun::star::animations;
-using namespace ::com::sun::star::presentation;
-
-namespace ppt
-{
-
-void ImplTranslateAttribute( rtl::OUString& rString, const TranslateMode eTranslateMode )
-{
- if ( eTranslateMode != TRANSLATE_NONE )
- {
- if ( ( eTranslateMode & TRANSLATE_VALUE ) || ( eTranslateMode & TRANSLATE_ATTRIBUTE ) )
- {
- const ImplAttributeNameConversion* p = gImplConversionList;
- while( p->mpAPIName )
- {
- if( rString.compareToAscii( p->mpAPIName ) == 0 )
- break;
- p++;
- }
- if( p->mpMSName )
- {
- if ( eTranslateMode & TRANSLATE_VALUE )
- {
- rString = rtl::OUString( (sal_Unicode)'#' );
- rString += OUString::createFromAscii( p->mpMSName );
- }
- else
- rString = OUString::createFromAscii( p->mpMSName );
- }
- }
- else if ( eTranslateMode & TRANSLATE_MEASURE )
- {
- const sal_Char* pDest[] = { "#ppt_x", "#ppt_y", "#ppt_w", "#ppt_h", NULL };
- const sal_Char* pSource[] = { "x", "y", "width", "height", NULL };
- sal_Int32 nIndex = 0;
-
- const sal_Char** ps = pSource;
- const sal_Char** pd = pDest;
-
- while( *ps )
- {
- const OUString aSearch( OUString::createFromAscii( *ps ) );
- while( (nIndex = rString.indexOf( aSearch, nIndex )) != -1 )
- {
- sal_Int32 nLength = aSearch.getLength();
- if( nIndex && (rString.getStr()[nIndex-1] == '#' ) )
- {
- nIndex--;
- nLength++;
- }
-
- const OUString aNew( OUString::createFromAscii( *pd ) );
- rString = rString.replaceAt( nIndex, nLength, aNew );
- nIndex += aNew.getLength();
- }
- ps++;
- pd++;
- }
- }
- }
-}
-
-sal_uInt32 AnimationExporter::TranslatePresetSubType( const sal_uInt32 nPresetClass, const sal_uInt32 nPresetId, const rtl::OUString& rPresetSubType )
-{
- sal_uInt32 nPresetSubType = 0;
- sal_Bool bTranslated = sal_False;
-
- if ( ( nPresetClass == (sal_uInt32)EffectPresetClass::ENTRANCE ) || ( nPresetClass == (sal_uInt32)EffectPresetClass::EXIT ) )
- {
- if ( nPresetId != 21 )
- {
- switch( nPresetId )
- {
- case 5 :
- {
- if ( rPresetSubType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "downward" ) ) )
- {
- nPresetSubType = 5;
- bTranslated = sal_True;
- }
- else if ( rPresetSubType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "across" ) ) )
- {
- nPresetSubType = 10;
- bTranslated = sal_True;
- }
- }
- break;
- case 17 :
- {
- if ( rPresetSubType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "across" ) ) )
- {
- nPresetSubType = 10;
- bTranslated = sal_True;
- }
- }
- break;
- case 18 :
- {
- if ( rPresetSubType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "right-to-top" ) ) )
- {
- nPresetSubType = 3;
- bTranslated = sal_True;
- }
- else if ( rPresetSubType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "right-to-bottom" ) ) )
- {
- nPresetSubType = 6;
- bTranslated = sal_True;
- }
- else if ( rPresetSubType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "left-to-top" ) ) )
- {
- nPresetSubType = 9;
- bTranslated = sal_True;
- }
- else if ( rPresetSubType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "left-to-bottom" ) ) )
- {
- nPresetSubType = 12;
- bTranslated = sal_True;
- }
- }
- break;
- }
- }
- if ( !bTranslated )
- {
- const convert_subtype* p = gConvertArray;
- while( p->mpStrSubType )
- {
- if ( rPresetSubType.equalsAscii( p->mpStrSubType ) )
- {
- nPresetSubType = p->mnID;
- bTranslated = sal_True;
- break;
- }
- p++;
- }
- }
- }
- if ( !bTranslated )
- nPresetSubType = (sal_uInt32)rPresetSubType.toInt32();
- return nPresetSubType;
-}
-
-const sal_Char* AnimationExporter::FindTransitionName( const sal_Int16 nType, const sal_Int16 nSubType, const sal_Bool bDirection )
-{
- const sal_Char* pRet = NULL;
- int nFit = 0;
-
- const transition* p = gTransitions;
- while( p->mpName )
- {
- int nF = 0;
- if ( nType == p->mnType )
- nF += 4;
- if ( nSubType == p->mnSubType )
- nF += 2;
- if ( bDirection == p->mbDirection )
- nF += 1;
- if ( nF > nFit )
- {
- pRet = p->mpName;
- nFit = nF;
- }
- if ( nFit == 7 ) // maximum
- break;
- p++;
- }
- return pRet;
-}
-
-SvStream& operator<<(SvStream& rOut, AnimationNode& rNode )
-{
- rOut << rNode.mnU1;
- rOut << rNode.mnRestart;
- rOut << rNode.mnGroupType;
- rOut << rNode.mnFill;
- rOut << rNode.mnU3;
- rOut << rNode.mnU4;
- rOut << rNode.mnDuration;
- rOut << rNode.mnNodeType;
-
- return rOut;
-}
-
-AnimationExporter::AnimationExporter( const EscherSolverContainer& rSolverContainer, ppt::ExSoundCollection& rExSoundCollection ) :
- mrSolverContainer ( rSolverContainer ),
- mrExSoundCollection ( rExSoundCollection ),
- mnCurrentGroup(0)
-{
-}
-
-// --------------------------------------------------------------------
-
-sal_Int16 AnimationExporter::GetFillMode( const Reference< XAnimationNode >& xNode, const sal_Int16 nFillDefault )
-{
- sal_Int16 nFill = xNode->getFill();
- if ( ( nFill == AnimationFill::DEFAULT ) ||
- ( nFill == AnimationFill::INHERIT ) )
- {
- if ( nFill != AnimationFill::AUTO )
- nFill = nFillDefault;
- }
- if( nFill == AnimationFill::AUTO )
- {
- nFill = AnimationFill::REMOVE;
- sal_Bool bIsIndefiniteTiming = sal_True;
- Any aAny = xNode->getDuration();
- if( aAny.hasValue() )
- {
- Timing eTiming;
- if( aAny >>= eTiming )
- bIsIndefiniteTiming = eTiming == Timing_INDEFINITE;
- }
- if ( bIsIndefiniteTiming )
- {
- aAny = xNode->getEnd();
- if( aAny.hasValue() )
- {
- Timing eTiming;
- if( aAny >>= eTiming )
- bIsIndefiniteTiming = eTiming == Timing_INDEFINITE;
- }
- if ( bIsIndefiniteTiming )
- {
- if ( !xNode->getRepeatCount().hasValue() )
- {
- aAny = xNode->getRepeatDuration();
- if( aAny.hasValue() )
- {
- Timing eTiming;
- if( aAny >>= eTiming )
- bIsIndefiniteTiming = eTiming == Timing_INDEFINITE;
- }
- if ( bIsIndefiniteTiming )
- nFill = AnimationFill::FREEZE;
- }
- }
- }
- }
- return nFill;
-}
-
-void AnimationExporter::doexport( const Reference< XDrawPage >& xPage, SvStream& rStrm )
-{
- Reference< XAnimationNodeSupplier > xNodeSupplier( xPage, UNO_QUERY );
- if( xNodeSupplier.is() )
- {
- const Reference< XAnimationNode > xRootNode( xNodeSupplier->getAnimationNode() );
- if( xRootNode.is() )
- {
- processAfterEffectNodes( xRootNode );
- exportNode( rStrm, xRootNode, NULL, DFF_msofbtAnimGroup, 1, 0, sal_False, AnimationFill::AUTO );
- }
- }
-}
-
-void AnimationExporter::processAfterEffectNodes( const Reference< XAnimationNode >& xRootNode )
-{
- try
- {
- Reference< XEnumerationAccess > xEnumerationAccess( xRootNode, UNO_QUERY_THROW );
- Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY_THROW );
- while( xEnumeration->hasMoreElements() )
- {
- Reference< XAnimationNode > xNode( xEnumeration->nextElement(), UNO_QUERY_THROW );
-
- Reference< XEnumerationAccess > xEnumerationAccess2( xNode, UNO_QUERY );
- if ( xEnumerationAccess2.is() )
- {
- Reference< XEnumeration > xEnumeration2( xEnumerationAccess2->createEnumeration(), UNO_QUERY_THROW );
- while( xEnumeration2->hasMoreElements() )
- {
- Reference< XAnimationNode > xChildNode( xEnumeration2->nextElement(), UNO_QUERY_THROW );
-
- Reference< XEnumerationAccess > xEnumerationAccess3( xChildNode, UNO_QUERY_THROW );
- Reference< XEnumeration > xEnumeration3( xEnumerationAccess3->createEnumeration(), UNO_QUERY_THROW );
- while( xEnumeration3->hasMoreElements() )
- {
- Reference< XAnimationNode > xChildNode2( xEnumeration3->nextElement(), UNO_QUERY_THROW );
-
- Reference< XEnumerationAccess > xEnumerationAccess4( xChildNode2, UNO_QUERY_THROW );
- Reference< XEnumeration > xEnumeration4( xEnumerationAccess4->createEnumeration(), UNO_QUERY_THROW );
- while( xEnumeration4->hasMoreElements() )
- {
- Reference< XAnimationNode > xChildNode3( xEnumeration4->nextElement(), UNO_QUERY_THROW );
-
- switch( xChildNode3->getType() )
- {
- // found an after effect
- case AnimationNodeType::SET:
- case AnimationNodeType::ANIMATECOLOR:
- {
- Reference< XAnimationNode > xMaster;
-
- Sequence< NamedValue > aUserData( xChildNode3->getUserData() );
- sal_Int32 nLength = aUserData.getLength();
- const NamedValue* p = aUserData.getConstArray();
-
- while( nLength-- )
- {
- if( p->Name.equalsAscii( "master-element" ) )
- {
- p->Value >>= xMaster;
- break;
- }
- p++;
- }
-
- AfterEffectNodePtr pAfterEffectNode( new AfterEffectNode( xChildNode3, xMaster ) );
- maAfterEffectNodes.push_back( pAfterEffectNode );
- }
- break;
- }
- }
- }
- }
- }
- }
- }
- catch( Exception& e )
- {
- (void)e;
- DBG_ERROR( "(@CL)AnimationExporter::processAfterEffectNodes(), exception cought!" );
- }
-}
-
-bool AnimationExporter::isAfterEffectNode( const Reference< XAnimationNode >& xNode ) const
-{
- std::list< AfterEffectNodePtr >::const_iterator aIter( maAfterEffectNodes.begin() );
- const std::list< AfterEffectNodePtr >::const_iterator aEnd( maAfterEffectNodes.end() );
- while( aIter != aEnd )
- {
- if( (*aIter)->mxNode == xNode )
- return true;
- aIter++;
- }
-
- return false;
-}
-
-bool AnimationExporter::hasAfterEffectNode( const Reference< XAnimationNode >& xNode, Reference< XAnimationNode >& xAfterEffectNode ) const
-{
- std::list< AfterEffectNodePtr >::const_iterator aIter( maAfterEffectNodes.begin() );
- const std::list< AfterEffectNodePtr >::const_iterator aEnd( maAfterEffectNodes.end() );
- while( aIter != aEnd )
- {
- if( (*aIter)->mxMaster == xNode )
- {
- xAfterEffectNode = (*aIter)->mxNode;
- return true;
- }
- aIter++;
- }
-
- return false;
-}
-
-// check if this group only contain empty groups. this may happen when
-// after effect nodes are not exported at theire original position
-bool AnimationExporter::isEmptyNode( const Reference< XAnimationNode >& xNode ) const
-{
- if( xNode.is() ) switch( xNode->getType() )
- {
- case AnimationNodeType::PAR :
- case AnimationNodeType::SEQ :
- case AnimationNodeType::ITERATE :
- {
- Reference< XEnumerationAccess > xEnumerationAccess( xNode, UNO_QUERY );
- if( xEnumerationAccess.is() )
- {
- Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY );
- if( xEnumeration.is() )
- {
- while( xEnumeration->hasMoreElements() )
- {
- Reference< XAnimationNode > xChildNode( xEnumeration->nextElement(), UNO_QUERY );
- if( xChildNode.is() && !isEmptyNode( xChildNode ) )
- return false;
- }
- }
- }
- }
- break;
-
- case AnimationNodeType::SET :
- case AnimationNodeType::ANIMATECOLOR :
- return isAfterEffectNode( xNode );
- default:
- return false;
- }
-
- return true;
-}
-
-void AnimationExporter::exportNode( SvStream& rStrm, Reference< XAnimationNode > xNode, const Reference< XAnimationNode >* pParent, const sal_uInt16 nContainerRecType,
- const sal_uInt16 nInstance, const sal_Int32 nGroupLevel, const sal_Bool bTakeBackInteractiveSequenceTiming, const sal_Int16 nFDef )
-{
- if( (nGroupLevel == 4) && isEmptyNode( xNode ) )
- return;
-
- if ( ( nContainerRecType == DFF_msofbtAnimGroup ) && ( nGroupLevel == 2 ) && isEmptyNode( xNode ) )
- return;
-
- if( nContainerRecType == DFF_msofbtAnimGroup )
- mnCurrentGroup++;
-
- sal_Bool bTakeBackInteractiveSequenceTimingForChild = sal_False;
- sal_Int16 nFillDefault = GetFillMode( xNode, nFDef );
-
- bool bSkipChildren = false;
-
- Reference< XAnimationNode > xAudioNode;
- static sal_uInt32 nAudioGroup;
-
- {
- EscherExContainer aContainer( rStrm, nContainerRecType, nInstance );
- switch( xNode->getType() )
- {
- case AnimationNodeType::CUSTOM :
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
- }
- break;
-
- case AnimationNodeType::PAR :
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- sal_Int32 nFlags = nGroupLevel == 2 ? 0x10 : 0;
- if ( bTakeBackInteractiveSequenceTiming )
- nFlags |= 0x40;
- exportAnimEvent( rStrm, xNode, nFlags );
- exportAnimValue( rStrm, xNode, nGroupLevel == 4 );
- }
- break;
-
- case AnimationNodeType::SEQ :
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- sal_Int16 nNodeType = exportAnimPropertySet( rStrm, xNode );
- sal_Int32 nFlags = 12;
- if ( ( nGroupLevel == 1 ) && ( nNodeType == ::com::sun::star::presentation::EffectNodeType::INTERACTIVE_SEQUENCE ) )
- {
- nFlags |= 0x20;
- bTakeBackInteractiveSequenceTimingForChild = sal_True;
- }
- exportAnimAction( rStrm, xNode );
- exportAnimEvent( rStrm, xNode, nFlags );
- exportAnimValue( rStrm, xNode, sal_False );
- }
- break;
-
- case AnimationNodeType::ITERATE :
- {
- {
- EscherExAtom aAnimNodeExAtom( rStrm, DFF_msofbtAnimNode );
- AnimationNode aAnim;
- rtl_zeroMemory( &aAnim, sizeof( aAnim ) );
- aAnim.mnGroupType = mso_Anim_GroupType_PAR;
- aAnim.mnNodeType = 1;
- // attribute Restart
- switch( xNode->getRestart() )
- {
- default:
- case AnimationRestart::DEFAULT : aAnim.mnRestart = 0; break;
- case AnimationRestart::ALWAYS : aAnim.mnRestart = 1; break;
- case AnimationRestart::WHEN_NOT_ACTIVE : aAnim.mnRestart = 2; break;
- case AnimationRestart::NEVER : aAnim.mnRestart = 3; break;
- }
- // attribute Fill
- switch( xNode->getFill() )
- {
- default:
- case AnimationFill::DEFAULT : aAnim.mnFill = 0; break;
- case AnimationFill::REMOVE : aAnim.mnFill = 1; break;
- case AnimationFill::FREEZE : aAnim.mnFill = 2; break;
- case AnimationFill::HOLD : aAnim.mnFill = 3; break;
- case AnimationFill::TRANSITION : aAnim.mnFill = 4; break;
- }
- rStrm << aAnim;
- }
- exportIterate( rStrm, xNode );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
-
- /*
- EscherExContainer aContainer( rStrm, DFF_msofbtAnimGroup, 1 );
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel + 1, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
- */
- }
- break;
-
- case AnimationNodeType::ANIMATE :
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
- exportAnimate( rStrm, xNode );
- }
- break;
-
- case AnimationNodeType::SET :
- {
- bool bIsAfterEffectNode( isAfterEffectNode( xNode ) );
- if( (nGroupLevel != 4) || !bIsAfterEffectNode )
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimateSet( rStrm, xNode, bIsAfterEffectNode ? AFTEREFFECT_SET : AFTEREFFECT_NONE );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
- }
- else
- {
- bSkipChildren = true;
- }
- }
- break;
-
- case AnimationNodeType::ANIMATEMOTION :
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimateMotion( rStrm, xNode );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
- }
- break;
-
- case AnimationNodeType::ANIMATECOLOR :
- {
- bool bIsAfterEffectNode( isAfterEffectNode( xNode ) );
- if( (nGroupLevel != 4) || !bIsAfterEffectNode )
- {
- if( bIsAfterEffectNode )
- xNode = createAfterEffectNodeClone( xNode );
-
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimateColor( rStrm, xNode, bIsAfterEffectNode ? AFTEREFFECT_COLOR : AFTEREFFECT_NONE );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
- }
- else
- {
- bSkipChildren = true;
- }
- }
- break;
-
- case AnimationNodeType::ANIMATETRANSFORM :
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimateTransform( rStrm, xNode );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
- }
- break;
-
- case AnimationNodeType::TRANSITIONFILTER :
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
- exportAnimEvent( rStrm, xNode, 0 );
- exportAnimValue( rStrm, xNode, sal_False );
- exportTransitionFilter( rStrm, xNode );
- }
- break;
-
- case AnimationNodeType::AUDIO : // #i58428#
- {
- exportAnimNode( rStrm, xNode, pParent, nGroupLevel, nFillDefault );
- exportAnimPropertySet( rStrm, xNode );
-
- Reference< XAudio > xAudio( xNode, UNO_QUERY );
- if( xAudio.is() )
- {
- Any aAny( xAudio->getSource() );
- rtl::OUString aURL;
-
- if ( ( aAny >>= aURL ) && ( aURL.getLength() ) )
- {
- sal_Int32 nU1 = 2;
- sal_Int32 nTrigger = 3;
- sal_Int32 nU3 = nAudioGroup;
- sal_Int32 nBegin = 0;
- {
- EscherExContainer aAnimEvent( rStrm, DFF_msofbtAnimEvent, 1 );
- {
- EscherExAtom aAnimTrigger( rStrm, DFF_msofbtAnimTrigger );
- rStrm << nU1 << nTrigger << nU3 << nBegin;
- }
- }
- nU1 = 1;
- nTrigger = 0xb;
- nU3 = 0;
- {
- EscherExContainer aAnimEvent( rStrm, DFF_msofbtAnimEvent, 2 );
- {
- EscherExAtom aAnimTrigger( rStrm, DFF_msofbtAnimTrigger );
- rStrm << nU1 << nTrigger << nU3 << nBegin;
- }
- }
- EscherExContainer aAnimateTargetElement( rStrm, DFF_msofbtAnimateTargetElement );
- {
- sal_uInt32 nRefMode = 3;
- sal_uInt32 nRefType = 2;
- sal_uInt32 nRefId = mrExSoundCollection.GetId( aURL );
- sal_Int32 begin = -1;
- sal_Int32 end = -1;
-
- EscherExAtom aAnimReference( rStrm, DFF_msofbtAnimReference );
- rStrm << nRefMode << nRefType << nRefId << begin << end;
- }
- }
- }
- exportAnimValue( rStrm, xNode, sal_False );
- }
- break;
- }
- if( !bSkipChildren )
- {
- // export after effect node if one exists for this node
- Reference< XAnimationNode > xAfterEffectNode;
- if( hasAfterEffectNode( xNode, xAfterEffectNode ) )
- {
- exportNode( rStrm, xAfterEffectNode, &xNode, DFF_msofbtAnimSubGoup, 1, nGroupLevel + 1, bTakeBackInteractiveSequenceTimingForChild, nFillDefault );
- }
-
- Reference< XEnumerationAccess > xEnumerationAccess( xNode, UNO_QUERY );
- if( xEnumerationAccess.is() )
- {
- Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY );
- if( xEnumeration.is() )
- {
- while( xEnumeration->hasMoreElements() )
- {
- Reference< XAnimationNode > xChildNode( xEnumeration->nextElement(), UNO_QUERY );
- if( xChildNode.is() )
- {
- if ( xChildNode->getType() == AnimationNodeType::AUDIO )
- {
- xAudioNode = xChildNode;
- nAudioGroup = mnCurrentGroup;
- }
- else
- exportNode( rStrm, xChildNode, &xNode, DFF_msofbtAnimGroup, 1, nGroupLevel + 1, bTakeBackInteractiveSequenceTimingForChild, nFillDefault );
- }
- }
- }
- }
- }
- }
- if ( xAudioNode.is() )
- exportNode( rStrm, xAudioNode, &xNode, DFF_msofbtAnimGroup, 1, nGroupLevel, bTakeBackInteractiveSequenceTimingForChild, nFillDefault );
-
- if( xNode->getType() == AnimationNodeType::ITERATE )
- aTarget = Any();
-}
-
-Reference< XAnimationNode > AnimationExporter::createAfterEffectNodeClone( const Reference< XAnimationNode >& xNode ) const
-{
- try
- {
- Reference< ::com::sun::star::util::XCloneable > xClonable( xNode, UNO_QUERY_THROW );
- Reference< XAnimationNode > xCloneNode( xClonable->createClone(), UNO_QUERY_THROW );
-
- Any aEmpty;
- xCloneNode->setBegin( aEmpty );
-
-
- return xCloneNode;
- }
- catch( Exception& e )
- {
- (void)e;
- DBG_ERROR("(@CL)sd::ppt::AnimationExporter::createAfterEffectNodeClone(), could not create clone!" );
- }
- return xNode;
-}
-
-sal_Bool AnimationExporter::GetNodeType( const Reference< XAnimationNode >& xNode, sal_Int16& nType )
-{
- // trying to get the nodetype
- Sequence< NamedValue > aUserData = xNode->getUserData();
- if ( aUserData.getLength() )
- {
- const NamedValue* p = aUserData.getConstArray();
- sal_Int32 nLength = aUserData.getLength();
- while( nLength-- )
- {
- if( p->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "node-type" ) ) )
- {
- if ( p->Value >>= nType )
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
-
-void AnimationExporter::exportAnimNode( SvStream& rStrm, const Reference< XAnimationNode >& xNode,
- const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >*, const sal_Int32, const sal_Int16 nFillDefault )
-{
- EscherExAtom aAnimNodeExAtom( rStrm, DFF_msofbtAnimNode );
- AnimationNode aAnim;
- rtl_zeroMemory( &aAnim, sizeof( aAnim ) );
-
- // attribute Restart
- switch( xNode->getRestart() )
- {
- default:
- case AnimationRestart::DEFAULT : aAnim.mnRestart = 0; break;
- case AnimationRestart::ALWAYS : aAnim.mnRestart = 1; break;
- case AnimationRestart::WHEN_NOT_ACTIVE : aAnim.mnRestart = 2; break;
- case AnimationRestart::NEVER : aAnim.mnRestart = 3; break;
- }
-
- // attribute Fill
-// aAnim.mnFill = GetFillMode( xNode, pParent );
- switch( nFillDefault )
- {
- default:
- case AnimationFill::DEFAULT : aAnim.mnFill = 0; break;
- case AnimationFill::REMOVE : aAnim.mnFill = 1; break;
- case AnimationFill::FREEZE : // aAnim.mnFill = 2; break;
- case AnimationFill::HOLD : aAnim.mnFill = 3; break;
- case AnimationFill::TRANSITION : aAnim.mnFill = 4; break;
- }
- // attribute Duration
- double fDuration = 0.0;
- com::sun::star::animations::Timing eTiming;
- if ( xNode->getDuration() >>= eTiming )
- {
- if ( eTiming == Timing_INDEFINITE )
- aAnim.mnDuration = -1;
- }
- else if ( xNode->getDuration() >>= fDuration )
- {
- aAnim.mnDuration = (sal_Int32)( fDuration * 1000.0 );
- }
- else
- aAnim.mnDuration = -1;
-
- // NodeType, NodeGroup
- aAnim.mnNodeType = 1;
- aAnim.mnGroupType = mso_Anim_GroupType_SEQ;
- switch( xNode->getType() )
- {
- case AnimationNodeType::PAR : // PASSTROUGH!!! (as it was intended)
- aAnim.mnGroupType = mso_Anim_GroupType_PAR;
- case AnimationNodeType::SEQ :
- {
- sal_Int16 nType = 0;
- if( GetNodeType( xNode, nType ) )
- switch( nType )
- {
- case ::com::sun::star::presentation::EffectNodeType::TIMING_ROOT : aAnim.mnNodeType = 0x12; break;
- case ::com::sun::star::presentation::EffectNodeType::MAIN_SEQUENCE : aAnim.mnNodeType = 0x18; break;
- /*
- case ::com::sun::star::presentation::EffectNodeType::ON_CLICK :
- case ::com::sun::star::presentation::EffectNodeType::WITH_PREVIOUS :
- case ::com::sun::star::presentation::EffectNodeType::AFTER_PREVIOUS :
- case ::com::sun::star::presentation::EffectNodeType::INTERACTIVE_SEQUENCE :
- default:
- */
- }
- }
- break;
-
- case AnimationNodeType::ANIMATE :
- case AnimationNodeType::SET :
-
- case AnimationNodeType::CUSTOM :
- case AnimationNodeType::ITERATE :
- case AnimationNodeType::ANIMATEMOTION :
- case AnimationNodeType::ANIMATECOLOR :
- case AnimationNodeType::ANIMATETRANSFORM :
- {
- aAnim.mnGroupType = mso_Anim_GroupType_NODE;
- aAnim.mnNodeType = mso_Anim_Behaviour_ANIMATION;
- }
- break;
-
- case AnimationNodeType::AUDIO :
- {
- aAnim.mnGroupType = mso_Anim_GroupType_MEDIA;
- aAnim.mnNodeType = mso_Anim_Behaviour_ANIMATION;
- }
- break;
-
- case AnimationNodeType::TRANSITIONFILTER :
- {
- aAnim.mnGroupType = mso_Anim_GroupType_NODE;
- aAnim.mnNodeType = mso_Anim_Behaviour_FILTER;
- }
- break;
- }
-
- rStrm << aAnim;
-}
-
-void AnimationExporter::GetUserData( const Sequence< NamedValue >& rUserData, const Any ** pAny, sal_Size nLen )
-{
- // storing user data into pAny, to allow direct access later
- rtl_zeroMemory( pAny, nLen );
- if ( rUserData.getLength() )
- {
- const NamedValue* p = rUserData.getConstArray();
- sal_Int32 nLength = rUserData.getLength();
- while( nLength-- )
- {
- if( p->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "node-type" ) ) )
- {
- pAny[ DFF_ANIM_NODE_TYPE ] = &(p->Value);
- }
- else if ( p->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "preset-class" ) ) )
- {
- pAny[ DFF_ANIM_PRESET_CLASS ] = &(p->Value);
- }
- else if ( p->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "preset-id" ) ) )
- {
- pAny[ DFF_ANIM_PRESET_ID ] = &(p->Value);
- }
- else if ( p->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "preset-sub-type" ) ) )
- {
- pAny[ DFF_ANIM_PRESET_SUB_TYPE ] = &(p->Value);
- }
- else if ( p->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "master-element" ) ) )
- {
- pAny[ DFF_ANIM_AFTEREFFECT ] = &(p->Value);;
- }
- p++;
- }
- }
-}
-
-sal_uInt32 AnimationExporter::GetPresetID( const rtl::OUString& rPreset, sal_uInt32 nAPIPresetClass, sal_Bool& bPresetId )
-{
- sal_uInt32 nPresetId = 0;
- bPresetId = sal_False;
-
- if ( rPreset.match( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ppt_" ) ), 0 ) )
- {
- sal_Int32 nLast = rPreset.lastIndexOf( '_' );
- if ( ( nLast != -1 ) && ( ( nLast + 1 ) < rPreset.getLength() ) )
- {
- rtl::OUString aNumber( rPreset.copy( nLast + 1 ) );
- nPresetId = aNumber.toInt32();
- bPresetId = sal_True;
- }
- }
- else
- {
- const preset_maping* p = gPresetMaping;
- while( p->mpStrPresetId && ((p->mnPresetClass != (sal_Int32)nAPIPresetClass) || !rPreset.equalsAscii( p->mpStrPresetId )) )
- p++;
-
- if( p->mpStrPresetId )
- {
- nPresetId = p->mnPresetId;
- bPresetId = sal_True;
- }
- }
-
- return nPresetId;
-}
-
-sal_Int16 AnimationExporter::exportAnimPropertySet( SvStream& rStrm, const Reference< XAnimationNode >& xNode )
-{
- sal_Int16 nNodeType = ::com::sun::star::presentation::EffectNodeType::DEFAULT;
-
- EscherExContainer aAnimPropertySet( rStrm, DFF_msofbtAnimPropertySet );
-
- Reference< XAnimationNode > xMaster;
-
- //const Any aTrue( makeAny( (sal_Bool)sal_True ) );
- Any aMasterRel, aOverride, aRunTimeContext;
-
- // storing user data into pAny, to allow direct access later
- const Sequence< NamedValue > aUserData = xNode->getUserData();
- const ::com::sun::star::uno::Any* pAny[ DFF_ANIM_PROPERTY_ID_COUNT ];
- GetUserData( aUserData, pAny, sizeof( pAny ) );
-
- if( pAny[ DFF_ANIM_AFTEREFFECT ] )
- ( *pAny[ DFF_ANIM_AFTEREFFECT ] ) >>= xMaster;
-
- // calculate master-rel
- if( xMaster.is() )
- {
- sal_Int32 nMasterRel = 2;
- Reference< XChild > xNodeChild( xNode, UNO_QUERY );
- Reference< XChild > xMasterChild( xMaster, UNO_QUERY );
- if( xNodeChild.is() && xMasterChild.is() && (xNodeChild->getParent() == xMasterChild->getParent() ) )
- nMasterRel = 0;
-
- aMasterRel <<= nMasterRel;
-
- pAny[ DFF_ANIM_MASTERREL ] = &aMasterRel;
-
- aOverride <<= (sal_Int32)1;
- pAny[ DFF_ANIM_OVERRIDE ] = &aOverride;
-
- aRunTimeContext <<= (sal_Int32)1;
- pAny[ DFF_ANIM_RUNTIMECONTEXT ] = &aRunTimeContext;
- }
-
- // the order is important
- if ( pAny[ DFF_ANIM_NODE_TYPE ] )
- {
- if ( *pAny[ DFF_ANIM_NODE_TYPE ] >>= nNodeType )
- {
- sal_uInt32 nPPTNodeType = DFF_ANIM_NODE_TYPE_ON_CLICK;
- switch( nNodeType )
- {
- case ::com::sun::star::presentation::EffectNodeType::ON_CLICK : nPPTNodeType = DFF_ANIM_NODE_TYPE_ON_CLICK; break;
- case ::com::sun::star::presentation::EffectNodeType::WITH_PREVIOUS : nPPTNodeType = DFF_ANIM_NODE_TYPE_WITH_PREVIOUS; break;
- case ::com::sun::star::presentation::EffectNodeType::AFTER_PREVIOUS : nPPTNodeType = DFF_ANIM_NODE_TYPE_AFTER_PREVIOUS; break;
- case ::com::sun::star::presentation::EffectNodeType::MAIN_SEQUENCE : nPPTNodeType = DFF_ANIM_NODE_TYPE_MAIN_SEQUENCE; break;
- case ::com::sun::star::presentation::EffectNodeType::TIMING_ROOT : nPPTNodeType = DFF_ANIM_NODE_TYPE_TIMING_ROOT; break;
- case ::com::sun::star::presentation::EffectNodeType::INTERACTIVE_SEQUENCE: nPPTNodeType = DFF_ANIM_NODE_TYPE_INTERACTIVE_SEQ; break;
- }
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_NODE_TYPE, nPPTNodeType, TRANSLATE_NONE );
- }
- }
- sal_uInt32 nPresetId = 0;
- sal_uInt32 nPresetSubType = 0;
- sal_uInt32 nAPIPresetClass = EffectPresetClass::CUSTOM;
- sal_uInt32 nPresetClass = DFF_ANIM_PRESS_CLASS_USER_DEFINED;
- sal_Bool bPresetClass, bPresetId, bPresetSubType;
- bPresetId = bPresetClass = bPresetSubType = sal_False;
-
- if ( pAny[ DFF_ANIM_PRESET_CLASS ] )
- {
- if ( *pAny[ DFF_ANIM_PRESET_CLASS ] >>= nAPIPresetClass )
- {
- sal_uInt8 nPPTPresetClass;
- switch( nAPIPresetClass )
- {
- case EffectPresetClass::ENTRANCE : nPPTPresetClass = DFF_ANIM_PRESS_CLASS_ENTRANCE; break;
- case EffectPresetClass::EXIT : nPPTPresetClass = DFF_ANIM_PRESS_CLASS_EXIT; break;
- case EffectPresetClass::EMPHASIS : nPPTPresetClass = DFF_ANIM_PRESS_CLASS_EMPHASIS; break;
- case EffectPresetClass::MOTIONPATH : nPPTPresetClass = DFF_ANIM_PRESS_CLASS_MOTIONPATH; break;
- case EffectPresetClass::OLEACTION : nPPTPresetClass = DFF_ANIM_PRESS_CLASS_OLE_ACTION; break;
- case EffectPresetClass::MEDIACALL : nPPTPresetClass = DFF_ANIM_PRESS_CLASS_MEDIACALL; break;
- default :
- nPPTPresetClass = DFF_ANIM_PRESS_CLASS_USER_DEFINED;
- }
- nPresetClass = nPPTPresetClass;
- bPresetClass = sal_True;
- }
- }
- if ( pAny[ DFF_ANIM_PRESET_ID ] )
- {
- rtl::OUString sPreset;
- if ( *pAny[ DFF_ANIM_PRESET_ID ] >>= sPreset )
- nPresetId = GetPresetID( sPreset, nAPIPresetClass, bPresetId );
- }
-
- if ( pAny[ DFF_ANIM_PRESET_SUB_TYPE ] )
- {
- rtl::OUString sPresetSubType;
- if ( *pAny[ DFF_ANIM_PRESET_SUB_TYPE ] >>= sPresetSubType )
- {
- nPresetSubType = TranslatePresetSubType( nPresetClass, nPresetId, sPresetSubType );
- bPresetSubType = sal_True;
- }
- }
- if ( bPresetId )
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_PRESET_ID, nPresetId, TRANSLATE_NONE );
- if ( bPresetSubType )
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_PRESET_SUB_TYPE, nPresetSubType, TRANSLATE_NONE );
- if ( bPresetClass )
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_PRESET_CLASS, nPresetClass, TRANSLATE_NONE );
-
- if ( pAny[ DFF_ANIM_ID ] )
- {
- // TODO DFF_ANIM_ID
- }
-
- if ( pAny[ DFF_ANIM_AFTEREFFECT ] )
- {
- sal_Bool bAfterEffect = sal_False;
- if ( *pAny[ DFF_ANIM_AFTEREFFECT ] >>= bAfterEffect )
- exportAnimPropertyByte( rStrm, DFF_ANIM_AFTEREFFECT, bAfterEffect, TRANSLATE_NONE );
- }
-
- if ( pAny[ DFF_ANIM_RUNTIMECONTEXT ] )
- {
- sal_Int32 nRunTimeContext = 0;
- if ( *pAny[ DFF_ANIM_RUNTIMECONTEXT ] >>= nRunTimeContext )
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_RUNTIMECONTEXT, nRunTimeContext, TRANSLATE_NONE );
- }
- if ( pAny[ DFF_ANIM_PATH_EDIT_MODE ] )
- {
- // TODO DFF_ANIM_ID
- }
-
- if( !xMaster.is() )
- {
- Reference< XAnimateColor > xColor( xNode, UNO_QUERY );
- if( xColor.is() )
- {
-// sal_uInt32 nColorSpace = xColor->getColorSpace() == AnimationColorSpace::RGB ? 0 : 1;
-// exportAnimPropertyuInt32( rStrm, DFF_ANIM_COLORSPACE, nColorSpace, TRANSLATE_NONE );
-
- sal_Bool bDirection = !xColor->getDirection();
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_DIRECTION, bDirection, TRANSLATE_NONE );
- }
- }
-
- if ( pAny[ DFF_ANIM_OVERRIDE ] )
- {
- sal_Int32 nOverride = 0;
- if ( *pAny[ DFF_ANIM_OVERRIDE ] >>= nOverride )
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_OVERRIDE, nOverride, TRANSLATE_NONE );
- }
-
- if ( pAny[ DFF_ANIM_MASTERREL ] )
- {
- sal_Int32 nMasterRel = 0;
- if ( *pAny[ DFF_ANIM_MASTERREL ] >>= nMasterRel )
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_MASTERREL, nMasterRel, TRANSLATE_NONE );
- }
-
-/* todo
- Reference< XAudio > xAudio( xNode, UNO_QUERY );
- if( xAudio.is() )
- {
- sal_Int16 nEndAfterSlide = 0;
- nEndAfterSlide = xAudio->getEndAfterSlide();
- exportAnimPropertyuInt32( rStrm, DFF_ANIM_ENDAFTERSLIDE, nEndAfterSlide, TRANSLATE_NONE );
- }
-*/
- Reference< XAnimate > xAnim( xNode, UNO_QUERY );
- if( xAnim.is() )
- {
- // TODO: DFF_ANIM_TIMEFILTER
- }
- if ( pAny[ DFF_ANIM_EVENT_FILTER ] )
- {
- // TODO DFF_ANIM_EVENT_FILTER
- }
- if ( pAny[ DFF_ANIM_VOLUME ] )
- {
- // TODO DFF_ANIM_VOLUME
- }
- return nNodeType;
-}
-
-sal_Bool AnimationExporter::exportAnimProperty( SvStream& rStrm, const sal_uInt16 nPropertyId, const ::com::sun::star::uno::Any& rAny, const TranslateMode eTranslateMode )
-{
- sal_Bool bRet = sal_False;
- if ( rAny.hasValue() )
- {
- switch( rAny.getValueType().getTypeClass() )
- {
- case ::com::sun::star::uno::TypeClass_UNSIGNED_SHORT :
- case ::com::sun::star::uno::TypeClass_SHORT :
- case ::com::sun::star::uno::TypeClass_UNSIGNED_LONG :
- case ::com::sun::star::uno::TypeClass_LONG :
- {
- sal_Int32 nVal = 0;
- if ( rAny >>= nVal )
- {
- exportAnimPropertyuInt32( rStrm, nPropertyId, nVal, eTranslateMode );
- bRet = sal_True;
- }
- }
- break;
-
- case ::com::sun::star::uno::TypeClass_DOUBLE :
- {
- double fVal = 0.0;
- if ( rAny >>= fVal )
- {
- exportAnimPropertyFloat( rStrm, nPropertyId, fVal, eTranslateMode );
- bRet = sal_True;
- }
- }
- break;
- case ::com::sun::star::uno::TypeClass_FLOAT :
- {
- float fVal = 0.0;
- if ( rAny >>= fVal )
- {
- if ( eTranslateMode & TRANSLATE_NUMBER_TO_STRING )
- {
- Any aAny;
- rtl::OUString aNumber( rtl::OUString::valueOf( fVal ) );
- aAny <<= aNumber;
- exportAnimPropertyString( rStrm, nPropertyId, aNumber, eTranslateMode );
- }
- else
- {
- exportAnimPropertyFloat( rStrm, nPropertyId, fVal, eTranslateMode );
- bRet = sal_True;
- }
- }
- }
- break;
- case ::com::sun::star::uno::TypeClass_STRING :
- {
- rtl::OUString aStr;
- if ( rAny >>= aStr )
- {
- exportAnimPropertyString( rStrm, nPropertyId, aStr, eTranslateMode );
- bRet = sal_True;
- }
- }
- break;
- default:
- break;
- }
- }
- return bRet;
-}
-void AnimationExporter::exportAnimPropertyString( SvStream& rStrm, const sal_uInt16 nPropertyId, const rtl::OUString& rVal, const TranslateMode eTranslateMode )
-{
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimAttributeValue, nPropertyId );
- sal_uInt8 nType = DFF_ANIM_PROP_TYPE_UNISTRING;
- rStrm << nType;
- rtl::OUString aStr( rVal );
- if ( eTranslateMode != TRANSLATE_NONE )
- ImplTranslateAttribute( aStr, eTranslateMode );
- writeZString( rStrm, aStr );
-}
-
-void AnimationExporter::exportAnimPropertyFloat( SvStream& rStrm, const sal_uInt16 nPropertyId, const double& rVal, const TranslateMode )
-{
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimAttributeValue, nPropertyId );
- sal_uInt8 nType = DFF_ANIM_PROP_TYPE_FLOAT;
- float fFloat = (float)rVal;
- rStrm << nType
- << fFloat;
-}
-
-void AnimationExporter::exportAnimPropertyuInt32( SvStream& rStrm, const sal_uInt16 nPropertyId, const sal_uInt32 nVal, const TranslateMode )
-{
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimAttributeValue, nPropertyId );
- sal_uInt8 nType = DFF_ANIM_PROP_TYPE_INT32 ;
- rStrm << nType
- << nVal;
-}
-
-void AnimationExporter::exportAnimPropertyByte( SvStream& rStrm, const sal_uInt16 nPropertyId, const sal_uInt8 nVal, const TranslateMode )
-{
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimAttributeValue, nPropertyId );
- sal_uInt8 nType = DFF_ANIM_PROP_TYPE_BYTE;
- rStrm << nType
- << nVal;
-}
-
-void AnimationExporter::writeZString( SvStream& rStrm, const rtl::OUString& rVal )
-{
- sal_Int32 i;
- for ( i = 0; i < rVal.getLength(); i++ )
- rStrm << rVal[ i ];
- rStrm << (sal_Unicode)0;
-}
-
-void AnimationExporter::exportAnimAction( SvStream& rStrm, const Reference< XAnimationNode >& xNode )
-{
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimAction );
-
- sal_Int32 nConcurrent = 1;
- sal_Int32 nNextAction = 1;
- sal_Int32 nEndSync = 0;
- sal_Int32 nU4 = 0;
- sal_Int32 nU5 = 3;
-
- sal_Int16 nAnimationEndSync = 0;
- if ( xNode->getEndSync() >>= nAnimationEndSync )
- {
- if ( nAnimationEndSync == AnimationEndSync::ALL )
- nEndSync = 1;
- }
- rStrm << nConcurrent
- << nNextAction
- << nEndSync
- << nU4
- << nU5;
-
-}
-
-// nFlags Bit 6 = fixInteractiveSequenceTiming (for child)
-// nFlags Bit 5 = fixInteractiveSequenceTiming (for root)
-// nFlags Bit 4 = first node of main sequence -> begin event next has to be replaced to indefinite
-void AnimationExporter::exportAnimEvent( SvStream& rStrm, const Reference< XAnimationNode >& xNode, const sal_Int32 nFlags )
-{
- sal_uInt16 i;
- for ( i = 0; i < 4; i++ )
- {
- sal_Int32 nU1 = 0;
- sal_Int32 nTrigger = 0;
- sal_Int32 nU3 = 0;
- sal_Int32 nBegin = 0;
-
- sal_Bool bCreateEvent = sal_False;
- Any aSource;
-
- switch( i )
- {
- case 0 :
- case 1 :
- {
- Any aAny;
- Event aEvent;
- com::sun::star::animations::Timing eTiming;
- if ( i == 0 )
- {
- if ( nFlags & 0x20 )
- {
- // taking the first child
- Reference< XEnumerationAccess > xEA( xNode, UNO_QUERY_THROW );
- Reference< XEnumeration > xE( xEA->createEnumeration(), UNO_QUERY_THROW );
- if ( xE.is() && xE->hasMoreElements() )
- {
-// while( xE->hasMoreElements() )
- {
- Reference< XAnimationNode > xClickNode( xE->nextElement(), UNO_QUERY );
- aAny = xClickNode->getBegin();
- }
- }
- }
- else if ( nFlags & 0x40 )
- {
- // begin has to be replaced with void, so don't do anything
- }
- else
- {
- aAny = xNode->getBegin();
- if ( nFlags & 0x10 ) // replace ON_NEXT with IDEFINITE
- {
- if ( ( aAny >>= aEvent ) && ( aEvent.Trigger == EventTrigger::ON_NEXT ) )
- {
- eTiming = Timing_INDEFINITE;
- aAny <<= eTiming;
- }
- }
- }
- }
- else
- aAny = xNode->getEnd();
-
- double fTiming = 0.0;
- if ( aAny >>= aEvent )
- {
- bCreateEvent = sal_True;
- switch( aEvent.Trigger )
- {
- case EventTrigger::NONE : nTrigger = 0; break;
- case EventTrigger::ON_BEGIN : nTrigger = 1; break;
- case EventTrigger::ON_END : nTrigger = 2; break;
- case EventTrigger::BEGIN_EVENT : nTrigger = 3; break;
- case EventTrigger::END_EVENT : nTrigger = 4; nU1 = 2; nU3 = mnCurrentGroup; break;
- case EventTrigger::ON_CLICK : nTrigger = 5; break;
- case EventTrigger::ON_DBL_CLICK : nTrigger = 6; break;
- case EventTrigger::ON_MOUSE_ENTER : nTrigger = 7; break;
- case EventTrigger::ON_MOUSE_LEAVE : nTrigger = 8; break;
- case EventTrigger::ON_NEXT : nTrigger = 9; break;
- case EventTrigger::ON_PREV : nTrigger = 10; break;
- case EventTrigger::ON_STOP_AUDIO : nTrigger = 11; break;
- }
- if ( aEvent.Offset.hasValue() )
- {
- if ( aEvent.Offset >>= eTiming )
- {
- if ( eTiming == Timing_INDEFINITE )
- nBegin = -1;
- }
- else if ( aEvent.Offset >>= fTiming )
- nBegin = (sal_Int32)( fTiming * 1000.0 );
- }
- aSource = aEvent.Source;
- }
- else if ( aAny >>= eTiming )
- {
- bCreateEvent = sal_True;
- if ( eTiming == Timing_INDEFINITE )
- nBegin = -1;
- }
- else if ( aAny >>= fTiming )
- {
- bCreateEvent = sal_True;
- if ( eTiming == Timing_INDEFINITE )
- nBegin = (sal_Int32)( fTiming * 1000.0 );
- }
- }
- break;
-
- case 2 :
- {
- if ( nFlags & ( 1 << i ) )
- {
- bCreateEvent = sal_True;
- nU1 = 1;
- nTrigger = 9;
- }
- }
- break;
- case 3 :
- {
- if ( nFlags & ( 1 << i ) )
- {
- bCreateEvent = sal_True;
- nU1 = 1;
- nTrigger = 10;
- }
- }
- break;
- };
- if ( bCreateEvent )
- {
- EscherExContainer aAnimEvent( rStrm, DFF_msofbtAnimEvent, i + 1 );
- {
- EscherExAtom aAnimTrigger( rStrm, DFF_msofbtAnimTrigger );
- rStrm << nU1
- << nTrigger
- << nU3
- << nBegin;
- }
- exportAnimateTargetElement( rStrm, aSource, ( nFlags & ( 1 << i ) ) != 0 );
- }
- }
-}
-
-Any AnimationExporter::convertAnimateValue( const Any& rSourceValue, const rtl::OUString& rAttributeName )
-{
- rtl::OUString aDest;
- if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "X" ) )
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Y" ) )
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Width" ) )
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Height" ) )
- )
- {
- rtl::OUString aStr;
- if ( rSourceValue >>= aStr )
- {
- ImplTranslateAttribute( aStr, TRANSLATE_MEASURE );
- aDest += aStr;
- }
- }
- else if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Rotate" ) ) // "r" or "style.rotation" ?
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "SkewX" ) )
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Opacity" ) )
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CharHeight" ) )
- )
- {
- double fNumber = 0.0;
- if ( rSourceValue >>= fNumber )
- aDest += rtl::OUString::valueOf( fNumber );
- }
- else if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Color" ) )
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "FillColor" ) ) // "Fillcolor" or "FillColor" ?
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "LineColor" ) )
- || rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CharColor" ) )
- )
- {
- sal_Int32 nColor = 0;
- Sequence< double > aHSL( 3 );
- rtl::OUString aP( RTL_CONSTASCII_USTRINGPARAM( "," ) );
- if ( rSourceValue >>= aHSL )
- {
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "hsl(" ) );
- aDest += rtl::OUString::valueOf( (sal_Int32)( aHSL[ 0 ] / ( 360.0 / 255 ) ) );
- aDest += aP;
- aDest += rtl::OUString::valueOf( (sal_Int32)( aHSL[ 1 ] * 255.0 ) );
- aDest += aP;
- aDest += rtl::OUString::valueOf( (sal_Int32)( aHSL[ 2 ] * 255.0 ) );
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ")" ) );
- }
- else if ( rSourceValue >>= nColor )
- {
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "rgb(" ) );
- aDest += rtl::OUString::valueOf( (sal_Int32)( (sal_Int8)nColor ) );
- aDest += aP;
- aDest += rtl::OUString::valueOf( (sal_Int32)( (sal_Int8)( nColor >> 8 ) ) );
- aDest += aP;
- aDest += rtl::OUString::valueOf( (sal_Int32)( (sal_Int8)( nColor >> 16 ) ) );
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ")" ) );
- }
- }
- else if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "FillStyle" ) ) )
- {
- ::com::sun::star::drawing::FillStyle eFillStyle;
- if ( rSourceValue >>= eFillStyle )
- {
- if ( eFillStyle == ::com::sun::star::drawing::FillStyle_NONE )
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "none" ) ); // ?
- else
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "solid" ) );
- }
- }
- else if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "LineStyle" ) ) )
- {
- ::com::sun::star::drawing::LineStyle eLineStyle;
- if ( rSourceValue >>= eLineStyle )
- {
- if ( eLineStyle == ::com::sun::star::drawing::LineStyle_NONE )
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) );
- else
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) );
- }
- }
- else if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CharWeight" ) ) )
- {
- float fFontWeight = 0.0;
- if ( rSourceValue >>= fFontWeight )
- {
- if ( fFontWeight == com::sun::star::awt::FontWeight::BOLD )
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "bold" ) );
- else
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "normal" ) );
- }
- }
- else if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CharUnderline" ) ) )
- {
- sal_Int16 nFontUnderline = 0;
- if ( rSourceValue >>= nFontUnderline )
- {
- if ( nFontUnderline == com::sun::star::awt::FontUnderline::NONE )
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) );
- else
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) );
- }
- }
- else if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CharPosture" ) ) )
- {
- ::com::sun::star::awt::FontSlant eFontSlant;
- if ( rSourceValue >>= eFontSlant )
- {
- if ( eFontSlant == com::sun::star::awt::FontSlant_ITALIC )
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "italic" ) );
- else
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "normal" ) ); // ?
- }
- }
- else if ( rAttributeName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Visibility" ) ) )
- {
- sal_Bool bVisible = sal_True;
- if ( rSourceValue >>= bVisible )
- {
- if ( bVisible )
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "visible" ) );
- else
- aDest += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "hidden" ) );
- }
- }
- Any aRet;
- if ( aDest.getLength() )
- aRet <<= aDest;
- else
- aRet = rSourceValue;
- return aRet;
-}
-
-void AnimationExporter::exportAnimateSet( SvStream& rStrm, const Reference< XAnimationNode >& xNode, int nAfterEffectType )
-{
- Reference< XAnimateSet > xSet( xNode, UNO_QUERY );
- if( xSet.is() )
- {
- EscherExContainer aAnimateSet( rStrm, DFF_msofbtAnimateSet, 0 );
- {
- EscherExAtom aAnimateSetData( rStrm, DFF_msofbtAnimateSetData );
- sal_uInt32 nId1 = 1; // ??
- sal_uInt32 nId2 = 1; // ??
- rStrm << nId1 << nId2;
- }
- Any aConvertedValue( convertAnimateValue( xSet->getTo(), xSet->getAttributeName() ) );
- if ( aConvertedValue.hasValue() )
- exportAnimProperty( rStrm, 1, aConvertedValue, TRANSLATE_NONE );
- exportAnimateTarget( rStrm, xNode, 0, nAfterEffectType );
- }
-}
-
-sal_uInt32 AnimationExporter::GetValueTypeForAttributeName( const rtl::OUString& rAttributeName )
-{
- sal_uInt32 nValueType = 0;
-
-/*
- AnimationValueType::STRING == 0;
- AnimationValueType::NUMBER == 1;
- AnimationValueType::COLOR == 2;
-*/
-
- struct Entry
- {
- const sal_Char* pName;
- sal_uInt8 nType;
- };
- static const Entry lcl_attributeMap[] =
- {
- { "charcolor", 2 },
- { "charfontname", 0 },
- { "charheight", 1 },
- { "charposture", 0 },
- // TODO(Q1): This should prolly be changed in PPT import
- // { "charrotation", ATTRIBUTE_CHAR_ROTATION },
- { "charrotation", 1 },
- { "charunderline", 0 },
- { "charweight", 0 },
- { "color", 2 },
- { "dimcolor", 2 },
- { "fillcolor", 2 },
- { "fillstyle", 0 },
- { "height", 1 },
- { "linecolor", 2 },
- { "linestyle", 0 },
- { "opacity", 0 },
- { "rotate", 1 },
- { "skewx", 1 },
- { "skewy", 1 },
- { "visibility", 1 },
- { "width", 1 },
- { "x", 1 },
- { "y", 1 },
- { NULL, 0 }
- };
- const Entry* pPtr = &lcl_attributeMap[ 0 ];
- while( pPtr->pName )
- {
- if ( rAttributeName.equalsIgnoreAsciiCaseAscii( pPtr->pName ) )
- {
- nValueType = pPtr->nType;
- break;
- }
- pPtr++;
- }
- DBG_ASSERT( pPtr->pName, "GetValueTypeForAttributeName, unknown property value!" );
- return nValueType;
-}
-
-void AnimationExporter::exportAnimate( SvStream& rStrm, const Reference< XAnimationNode >& xNode )
-{
- Reference< XAnimate > xAnimate( xNode, UNO_QUERY );
- if ( xAnimate.is() )
- {
- Any aBy ( xAnimate->getBy() );
- Any aFrom( xAnimate->getFrom() );
- Any aTo ( xAnimate->getTo() );
-
- EscherExContainer aContainer( rStrm, DFF_msofbtAnimate, 0 );
- {
- EscherExAtom aAnimateData( rStrm, DFF_msofbtAnimateData );
- sal_uInt32 nBits = 0x38;
- sal_Int16 nTmp = xAnimate->getCalcMode();
- sal_uInt32 nCalcMode = /* (nTmp == AnimationCalcMode::FORMULA) ? 2 : */ (nTmp == AnimationCalcMode::LINEAR) ? 1 : 0;
- nTmp = xAnimate->getValueType();
- sal_uInt32 nValueType = GetValueTypeForAttributeName( xAnimate->getAttributeName() );
-
- if ( aBy.hasValue() )
- nBits |= 1;
- if ( aFrom.hasValue() )
- nBits |= 2;
- if ( aTo.hasValue() )
- nBits |= 4;
-
- rStrm << nCalcMode
- << nBits
- << nValueType;
- }
- if ( aBy.hasValue() )
- exportAnimProperty( rStrm, 1, aBy, TRANSLATE_NUMBER_TO_STRING | TRANSLATE_MEASURE );
- if ( aFrom.hasValue() )
- exportAnimProperty( rStrm, 2, aFrom, TRANSLATE_NUMBER_TO_STRING | TRANSLATE_MEASURE );
- if ( aTo.hasValue() )
- exportAnimProperty( rStrm, 3, aTo, TRANSLATE_NUMBER_TO_STRING | TRANSLATE_MEASURE );
-
- exportAnimateKeyPoints( rStrm, xAnimate );
- exportAnimateTarget( rStrm, xNode );
- }
-}
-
-void AnimationExporter::exportAnimateTarget( SvStream& rStrm, const Reference< XAnimationNode >& xNode, const sal_uInt32 nForceAttributeNames, int nAfterEffectType )
-{
- EscherExContainer aAnimateTarget( rStrm, DFF_msofbtAnimateTarget, 0 );
- Reference< XAnimate > xAnimate( xNode, UNO_QUERY );
- if ( xAnimate.is() )
- {
- {
- EscherExAtom aAnimateTargetSettings( rStrm, DFF_msofbtAnimateTargetSettings, 0 );
- // nBits %0001: additive, %0010: accumulate, %0100: attributeName, %1000: transformtype
- // nAdditive 0 = base, 1 = sum, 2 = replace, 3 = multiply, 4 = none
- // nAccumulate 0 = none, 1 = always
- // nTransformType 0: "property" else "image"
- sal_uInt32 nBits = 0;
- sal_uInt32 nAdditive = 0;
- sal_uInt32 nAccumulate = 0;
- sal_uInt32 nTransformType = 0;
- if ( xAnimate.is() )
- {
- if ( xAnimate->getAttributeName().getLength() )
- nBits |= 4; // what is attributeName ?, maybe this is set if a DFF_msofbtAnimateAttributeNames is written
- sal_Int16 nAdditiveMode = xAnimate->getAdditive();
- if ( nAdditiveMode != AnimationAdditiveMode::BASE )
- {
- nBits |= 1;
- switch( nAdditiveMode )
- {
- case AnimationAdditiveMode::SUM : nAdditive = 1; break;
- case AnimationAdditiveMode::REPLACE : nAdditive = 2; break;
- case AnimationAdditiveMode::MULTIPLY : nAdditive = 3; break;
- case AnimationAdditiveMode::NONE : nAdditive = 4; break;
- }
- }
- if ( xAnimate->getAccumulate() )
- {
- nBits |= 2;
- nAccumulate = 1;
- }
- }
- rStrm << nBits
- << nAdditive
- << nAccumulate
- << nTransformType;
- }
- if ( xAnimate->getAttributeName().getLength() || nForceAttributeNames )
- {
- EscherExContainer aAnimateAttributeNames( rStrm, DFF_msofbtAnimateAttributeNames, 1 );
- rtl::OUString aAttributeName( xAnimate->getAttributeName() );
- if ( nForceAttributeNames )
- {
- switch( nForceAttributeNames )
- {
- case 1 : aAttributeName = rtl::OUString::createFromAscii( "r" ); break;
- }
- }
- sal_Int32 nIndex = 0;
- do
- {
- OUString aToken( aAttributeName.getToken( 0, ';', nIndex ) );
- exportAnimPropertyString( rStrm, 0, aToken, TRANSLATE_ATTRIBUTE );
- }
- while ( nIndex >= 0 );
- }
-
- if( nAfterEffectType != AFTEREFFECT_NONE )
- {
- EscherExContainer aAnimPropertySet( rStrm, DFF_msofbtAnimPropertySet );
- exportAnimPropertyuInt32( rStrm, 6, 1, TRANSLATE_NONE );
- if( nAfterEffectType == AFTEREFFECT_COLOR )
- {
- exportAnimPropertyuInt32( rStrm, 4, 0, TRANSLATE_NONE );
- exportAnimPropertyuInt32( rStrm, 5, 0, TRANSLATE_NONE );
- }
- }
- exportAnimateTargetElement( rStrm, aTarget.hasValue() ? aTarget : xAnimate->getTarget(), sal_False );
- }
-}
-
-Reference< XShape > AnimationExporter::getTargetElementShape( const Any& rAny, sal_Int32& rBegin, sal_Int32& rEnd, sal_Bool& rParagraphTarget )
-{
- Reference< XShape > xShape;
- rAny >>= xShape;
-
- rParagraphTarget = sal_False;
-
- if( !xShape.is() )
- {
- ParagraphTarget aParaTarget;
- if( rAny >>= aParaTarget )
- xShape = aParaTarget.Shape;
- if ( xShape.is() )
- {
- // now calculating the character range for the paragraph
- sal_Int16 nParagraph = aParaTarget.Paragraph;
- Reference< XSimpleText > xText( xShape, UNO_QUERY );
- if ( xText.is() )
- {
- rParagraphTarget = sal_True;
- Reference< XEnumerationAccess > xTextParagraphEnumerationAccess( xText, UNO_QUERY );
- if ( xTextParagraphEnumerationAccess.is() )
- {
- Reference< XEnumeration > xTextParagraphEnumeration( xTextParagraphEnumerationAccess->createEnumeration() );
- if ( xTextParagraphEnumeration.is() )
- {
- sal_Int16 nCurrentParagraph;
- rBegin = rEnd = nCurrentParagraph = 0;
- while ( xTextParagraphEnumeration->hasMoreElements() )
- {
- Reference< XTextRange > xTextRange( xTextParagraphEnumeration->nextElement(), UNO_QUERY );
- if ( xTextRange.is() )
- {
- rtl::OUString aParaText( xTextRange->getString() );
- sal_Int32 nLength = aParaText.getLength() + 1;
- rEnd += nLength;
- if ( nCurrentParagraph == nParagraph )
- break;
- nCurrentParagraph++;
- rBegin += nLength;
- }
- }
- }
- }
- }
- }
- }
-
- return xShape;
-}
-
-void AnimationExporter::exportAnimateTargetElement( SvStream& rStrm, const Any aAny, const sal_Bool bCreate2b01Atom )
-{
- sal_uInt32 nRefMode = 0; // nRefMode == 2 -> Paragraph
- sal_Int32 begin = -1;
- sal_Int32 end = -1;
- sal_Bool bParagraphTarget;
-
- Reference< XShape > xShape = getTargetElementShape( aAny, begin, end, bParagraphTarget );
-
- if( bParagraphTarget )
- nRefMode = 2;
-
- if ( xShape.is() || bCreate2b01Atom )
- {
- EscherExContainer aAnimateTargetElement( rStrm, DFF_msofbtAnimateTargetElement );
- if ( xShape.is() )
- {
- EscherExAtom aAnimReference( rStrm, DFF_msofbtAnimReference );
-
- sal_uInt32 nRefType = 1; // TODO: nRefType == 2 -> Sound;
- sal_uInt32 nRefId = ((EscherSolverContainer&)mrSolverContainer).GetShapeId( xShape );
-
- rStrm << nRefMode
- << nRefType
- << nRefId
- << begin
- << end;
- }
- if ( bCreate2b01Atom )
- {
- EscherExAtom a2b01Atom( rStrm, 0x2b01 );
- rStrm << (sal_uInt32)1; // ?
- }
- }
-}
-
-void AnimationExporter::exportAnimateKeyPoints( SvStream& rStrm, const Reference< XAnimate >& xAnimate )
-{
- Sequence< double > aKeyTimes( xAnimate->getKeyTimes() );
- Sequence< Any > aValues( xAnimate->getValues() );
- OUString aFormula( xAnimate->getFormula() );
- if ( aKeyTimes.getLength() )
- {
- EscherExContainer aAnimKeyPoints( rStrm, DFF_msofbtAnimKeyPoints );
- sal_Int32 i;
- for ( i = 0; i < aKeyTimes.getLength(); i++ )
- {
- {
- EscherExAtom aAnimKeyTime( rStrm, DFF_msofbtAnimKeyTime );
- sal_Int32 nKeyTime = (sal_Int32)( aKeyTimes[ i ] * 1000.0 );
- rStrm << nKeyTime;
- }
- Any aAny[ 2 ];
- if ( aValues[ i ].hasValue() )
- {
- ValuePair aPair;
- if ( aValues[ i ] >>= aPair )
- {
- aAny[ 0 ] = convertAnimateValue( aPair.First, xAnimate->getAttributeName() );
- aAny[ 1 ] = convertAnimateValue( aPair.Second, xAnimate->getAttributeName() );
- }
- else
- {
- aAny[ 0 ] = convertAnimateValue( aValues[ i ], xAnimate->getAttributeName() );
- }
- if ( !i && aFormula.getLength() )
- {
- ImplTranslateAttribute( aFormula, TRANSLATE_MEASURE );
- aAny[ 1 ] <<= aFormula;
- }
- exportAnimProperty( rStrm, 0, aAny[ 0 ], TRANSLATE_NONE );
- exportAnimProperty( rStrm, 1, aAny[ 1 ], TRANSLATE_NONE );
- }
- }
- }
-}
-
-void AnimationExporter::exportAnimValue( SvStream& rStrm, const Reference< XAnimationNode >& xNode, const sal_Bool bExportAlways )
-{
- Any aAny;
- // repeat count (0)
- double fRepeat = 0.0;
- float fRepeatCount = 0.0;
- com::sun::star::animations::Timing eTiming;
- aAny = xNode->getRepeatCount();
- if ( aAny >>= eTiming )
- {
- if ( eTiming == Timing_INDEFINITE )
- fRepeatCount = ((float)3.40282346638528860e+38);
- }
- else if ( aAny >>= fRepeat )
- fRepeatCount = (float)fRepeat;
- if ( fRepeatCount != 0.0 )
- {
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimValue );
- sal_uInt32 nType = 0;
- rStrm << nType
- << fRepeatCount;
- }
- // accelerate (3)
- float fAccelerate = (float)xNode->getAcceleration();
- if ( bExportAlways || ( fAccelerate != 0.0 ) )
- {
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimValue );
- sal_uInt32 nType = 3;
- rStrm << nType
- << fAccelerate;
- }
-
- // decelerate (4)
- float fDecelerate = (float)xNode->getDecelerate();
- if ( bExportAlways || ( fDecelerate != 0.0 ) )
- {
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimValue );
- sal_uInt32 nType = 4;
- rStrm << nType
- << fDecelerate;
- }
-
- // autoreverse (5)
- sal_Bool bAutoReverse = xNode->getAutoReverse();
- if ( bExportAlways || bAutoReverse )
- {
- EscherExAtom aExAtom( rStrm, DFF_msofbtAnimValue );
- sal_uInt32 nType = 5;
- sal_uInt32 nVal = bAutoReverse ? 1 : 0;
- rStrm << nType
- << nVal;
- }
-}
-
-void AnimationExporter::exportTransitionFilter( SvStream& rStrm, const Reference< XAnimationNode >& xNode )
-{
- Reference< XTransitionFilter > xFilter( xNode, UNO_QUERY );
- if ( xFilter.is() )
- {
- EscherExContainer aAnimateFilter( rStrm, DFF_msofbtAnimateFilter );
- {
- EscherExAtom aAnimateFilterData( rStrm, DFF_msofbtAnimateFilterData );
- sal_uInt32 nBits = 3; // bit 0 -> use AnimAttributeValue
- // bit 1 -> use nTransition
-
- sal_uInt32 nTransition = xFilter->getMode() ? 0 : 1;
- rStrm << nBits
- << nTransition;
- }
- const sal_Char* pFilter = FindTransitionName( xFilter->getTransition(), xFilter->getSubtype(), xFilter->getDirection() );
- if ( pFilter )
- {
- const OUString aStr( OUString::createFromAscii( pFilter ) );
- exportAnimPropertyString( rStrm, 1, aStr, TRANSLATE_NONE );
- }
- exportAnimateTarget( rStrm, xNode );
- }
-}
-
-void AnimationExporter::exportAnimateMotion( SvStream& rStrm, const Reference< XAnimationNode >& xNode )
-{
- Reference< XAnimateMotion > xMotion( xNode, UNO_QUERY );
- if ( xMotion.is() )
- {
- EscherExContainer aAnimateMotion( rStrm, DFF_msofbtAnimateMotion );
- {
- { //SJ: Ignored from import filter
- EscherExAtom aAnimateMotionData( rStrm, DFF_msofbtAnimateMotionData );
- sal_uInt32 nBits = 0x98;
- sal_uInt32 nOrigin = 0x2;
- float fByX = 100.0; // nBits&1
- float fByY = 100.0; // nBits&1
- float fFromX = 0.0; // nBits&2
- float fFromY = 0.0; // nBits&2
- float fToX = 100.0; // nBits&4
- float fToY = 100.0; // nBits&4
- rStrm << nBits << fByX << fByY << fFromX << fFromY << fToX << fToY << nOrigin;
- }
-/* ?
- {
- EscherExAtom aF137( rStrm, 0xf137 );
- }
-*/
- OUString aStr;
- if ( xMotion->getPath() >>= aStr )
- {
- if ( aStr.getLength() )
- exportAnimPropertyString( rStrm, 1, aStr, TRANSLATE_NONE );
- }
- exportAnimateTarget( rStrm, xNode );
- }
- }
-}
-
-void AnimationExporter::exportAnimateTransform( SvStream& rStrm, const Reference< XAnimationNode >& xNode )
-{
- Reference< XAnimateTransform > xTransform( xNode, UNO_QUERY );
- if ( xTransform.is() )
- {
- if ( xTransform->getTransformType() == AnimationTransformType::SCALE )
- {
- EscherExContainer aAnimateScale( rStrm, DFF_msofbtAnimateScale );
- {
- EscherExAtom aAnimateScaleData( rStrm, DFF_msofbtAnimateScaleData );
- sal_uInt32 nBits = 0;
- sal_uInt32 nZoomContents = 1;
- float fByX = 100.0;
- float fByY = 100.0;
- float fFromX = 0.0;
- float fFromY = 0.0;
- float fToX = 100.0;
- float fToY = 100.0;
-
- double fX = 0.0, fY = 0.0;
- ValuePair aPair;
- if ( xTransform->getBy() >>= aPair )
- {
- if ( ( aPair.First >>= fX ) && ( aPair.Second >>= fY ) )
- {
- nBits |= 1;
- fByX = (float)( fX * 100 );
- fByY = (float)( fY * 100 );
- }
- }
- if ( xTransform->getFrom() >>= aPair )
- {
- if ( ( aPair.First >>= fX ) && ( aPair.Second >>= fY ) )
- {
- nBits |= 2;
- fFromX = (float)( fX * 100 );
- fFromY = (float)( fY * 100 );
- }
- }
- if( xTransform->getTo() >>= aPair )
- {
- if ( ( aPair.First >>= fX ) && ( aPair.Second >>= fY ) )
- {
- nBits |= 4;
- fToX = (float)( fX * 100 );
- fToY = (float)( fY * 100 );
- }
- }
-
- // TODO: ZoomContents:
- //if( nBits & 8 )
- //( fprintf( mpFile, " zoomContents=\"%s\"", nZoomContents ? "true" : "false" );
-
- rStrm << nBits << fByX << fByY << fFromX << fFromY << fToX << fToY << nZoomContents;
- }
- exportAnimateTarget( rStrm, xNode );
- }
- else if ( xTransform->getTransformType() == AnimationTransformType::ROTATE )
- {
- EscherExContainer aAnimateRotation( rStrm, DFF_msofbtAnimateRotation );
- {
- EscherExAtom aAnimateRotationData( rStrm, DFF_msofbtAnimateRotationData );
- sal_uInt32 nBits = 0;
- sal_uInt32 nU1 = 0;
- float fBy = 360.0;
- float fFrom = 0.0;
- float fTo = 360.0;
-
- double fVal = 0.0;
- if ( xTransform->getBy() >>= fVal )
- {
- nBits |= 1;
- fBy = (float)fVal;
- }
- if ( xTransform->getFrom() >>= fVal )
- {
- nBits |= 2;
- fFrom = (float)fVal;
- }
- if ( xTransform->getTo() >>= fVal )
- {
- nBits |= 4;
- fTo = (float)fVal;
- }
- rStrm << nBits << fBy << fFrom << fTo << nU1;
- }
- exportAnimateTarget( rStrm, xNode, 1 );
- }
- }
-}
-
-sal_Bool AnimationExporter::getColorAny( const Any& rAny, const sal_Int16 nColorSpace, sal_Int32& rMode, sal_Int32& rA, sal_Int32& rB, sal_Int32& rC ) const
-{
- sal_Bool bIsColor = sal_True;
-
- rMode = 0;
- if ( nColorSpace == AnimationColorSpace::HSL )
- rMode = 1;
-
- sal_Int32 nColor = 0;
- Sequence< double > aHSL( 3 );
- if ( rAny >>= nColor ) // RGB color
- {
- rA = (sal_uInt8)( nColor >> 24 );
- rB = (sal_uInt8)( nColor >> 8 );
- rC = (sal_uInt8)( nColor );
- }
- else if ( rAny >>= aHSL ) // HSL
- {
- rA = (sal_Int32) ( aHSL[ 0 ] * 255.0 / 360.0 );
- rB = (sal_Int32) ( aHSL[ 1 ] * 255.0 );
- rC = (sal_Int32) ( aHSL[ 2 ] * 255.0 );
- }
- else
- bIsColor = sal_False;
- return bIsColor;
-}
-
-void AnimationExporter::exportAnimateColor( SvStream& rStrm, const Reference< XAnimationNode >& xNode, int nAfterEffectType )
-{
- Reference< XAnimateColor > xColor( xNode, UNO_QUERY );
- if ( xColor.is() )
- {
- EscherExContainer aAnimateColor( rStrm, DFF_msofbtAnimateColor );
- {
- EscherExAtom aAnimateColorData( rStrm, DFF_msofbtAnimateColorData );
- sal_uInt32 nBits = 8;
-
- sal_Int32 nByMode, nByA, nByB, nByC;
- nByMode = nByA = nByB = nByC = 0;
-
- sal_Int32 nFromMode, nFromA, nFromB, nFromC;
- nFromMode = nFromA = nFromB = nFromC = 0;
-
- sal_Int32 nToMode, nToA, nToB, nToC;
- nToMode = nToA = nToB = nToC = 0;
-
- sal_Int16 nColorSpace = xColor->getColorInterpolation();
-
- Any aAny( xColor->getBy() );
- if ( aAny.hasValue() )
- {
- if ( getColorAny( aAny, nColorSpace, nByMode, nByA, nByB, nByC ) )
- nBits |= 0x11;
- }
- aAny = xColor->getFrom();
- if ( aAny.hasValue() )
- {
- if ( getColorAny( aAny, nColorSpace, nFromMode, nFromA, nFromB, nFromC ) )
- nBits |= 0x12;
- }
- aAny = xColor->getTo();
- if ( aAny.hasValue() )
- {
- if ( getColorAny( aAny, nColorSpace, nToMode, nToA, nToB, nToC ) )
- nBits |= 0x14;
- }
- rStrm << nBits
- << nByMode << nByA << nByB << nByC
- << nFromMode << nFromA << nFromB << nFromC
- << nToMode << nToA << nToB << nToC;
- }
- exportAnimateTarget( rStrm, xNode, 0, nAfterEffectType );
- }
-}
-
-void AnimationExporter::exportIterate( SvStream& rStrm, const Reference< XAnimationNode >& xNode )
-{
- Reference< XIterateContainer > xIterate( xNode, UNO_QUERY );
- if ( xIterate.is() )
- {
- EscherExAtom aAnimIteration( rStrm, DFF_msofbtAnimIteration );
-
- float fInterval = 10.0;
- sal_Int32 nTextUnitEffect = 0;
- sal_Int32 nU1 = 1;
- sal_Int32 nU2 = 1;
- sal_Int32 nU3 = 0xe;
-
- sal_Int16 nIterateType = xIterate->getIterateType();
- switch( nIterateType )
- {
- case TextAnimationType::BY_WORD : nTextUnitEffect = 1; break;
- case TextAnimationType::BY_LETTER : nTextUnitEffect = 2; break;
- }
-
- fInterval = (float)xIterate->getIterateInterval();
-
- // convert interval from absolute to percentage
- double fDuration = 0.0;
-
- Reference< XEnumerationAccess > xEnumerationAccess( xNode, UNO_QUERY );
- if( xEnumerationAccess.is() )
- {
- Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY );
- if( xEnumeration.is() )
- {
- while( xEnumeration->hasMoreElements() )
- {
- Reference< XAnimate > xChildNode( xEnumeration->nextElement(), UNO_QUERY );
- if( xChildNode.is() )
- {
- double fChildBegin = 0.0;
- double fChildDuration = 0.0;
- xChildNode->getBegin() >>= fChildBegin;
- xChildNode->getDuration() >>= fChildDuration;
-
- fChildDuration += fChildBegin;
- if( fChildDuration > fDuration )
- fDuration = fChildDuration;
- }
- }
- }
- }
-
- if( fDuration )
- fInterval = (float)(100.0 * fInterval / fDuration);
-
- rStrm << fInterval << nTextUnitEffect << nU1 << nU2 << nU3;
- aTarget = xIterate->getTarget();
- }
-}
-
-} // namespace ppt;
diff --git a/sd/source/filter/pptx/pptx-pptexsoundcollection.cxx b/sd/source/filter/pptx/pptx-pptexsoundcollection.cxx
deleted file mode 100644
index a13a10633083..000000000000
--- a/sd/source/filter/pptx/pptx-pptexsoundcollection.cxx
+++ /dev/null
@@ -1,231 +0,0 @@
-/*************************************************************************
- *
- * 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: pptexsoundcollection.cxx,v $
- * $Revision: 1.7 $
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-#include <pptexsoundcollection.hxx>
-#include "epptdef.hxx"
-#include <tools/urlobj.hxx>
-#ifndef _UCBHELPER_CONTENT_HXX_
-#include <ucbhelper/content.hxx>
-#endif
-#ifndef _UCBHELPER_CONTENTBROKER_HXX_
-#include <ucbhelper/contentbroker.hxx>
-#endif
-#ifndef _CPPUHELPER_PROPTYPEHLP_HXX_
-#include <cppuhelper/proptypehlp.hxx>
-#endif
-#include <unotools/ucbstreamhelper.hxx>
-
-namespace ppt
-{
-
-ExSoundEntry::ExSoundEntry( const String& rString )
-: nFileSize( 0 )
-, aSoundURL( rString )
-{
- try
- {
- ::ucbhelper::Content aCnt( aSoundURL,
- ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >() );
- sal_Int64 nVal = 0;
- ::cppu::convertPropertyValue( nVal, aCnt.getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Size" ) ) ) );
- nFileSize = (sal_uInt32)nVal;
- }
- catch( ::com::sun::star::uno::Exception& )
- {
-
- }
-};
-
-String ExSoundEntry::ImplGetName() const
-{
- INetURLObject aTmp( aSoundURL );
- return aTmp.GetName();
-}
-
-String ExSoundEntry::ImplGetExtension() const
-{
- INetURLObject aTmp( aSoundURL );
- String aExtension( aTmp.GetExtension() );
- if ( aExtension.Len() )
- aExtension.Insert( (sal_Unicode)'.', 0 );
- return aExtension;
-}
-
-sal_Bool ExSoundEntry::IsSameURL( const String& rURL ) const
-{
- return ( rURL == aSoundURL );
-}
-
-sal_uInt32 ExSoundEntry::GetSize( sal_uInt32 nId ) const
-{
- String aName( ImplGetName() );
- String aExtension( ImplGetExtension() );
-
- sal_uInt32 nSize = 8; // SoundContainer Header
- if ( aName.Len() ) // String Atom ( instance 0 - name of sound )
- nSize += aName.Len() * 2 + 8;
- if ( aExtension.Len() ) // String Atom ( instance 1 - extension of sound )
- nSize += aExtension.Len() * 2 + 8;
-
- String aId( String::CreateFromInt32( nId ) ); // String Atom ( instance 2 - reference id )
- nSize += 2 * aId.Len() + 8;
-
- nSize += nFileSize + 8; // SoundData Atom
-
- return nSize;
-}
-
-void ExSoundEntry::Write( SvStream& rSt, sal_uInt32 nId )
-{
- try
- {
- ::ucbhelper::Content aCnt( aSoundURL,
- ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >() );
-
- // create SoundContainer
- rSt << (sal_uInt32)( ( EPP_Sound << 16 ) | 0xf ) << (sal_uInt32)( GetSize( nId ) - 8 );
-
- String aSoundName( ImplGetName() );
- sal_uInt16 i, nSoundNameLen = aSoundName.Len();
- if ( nSoundNameLen )
- {
- // name of sound ( instance 0 )
- rSt << (sal_uInt32)( EPP_CString << 16 ) << (sal_uInt32)( nSoundNameLen * 2 );
- for ( i = 0; i < nSoundNameLen; i++ )
- rSt << aSoundName.GetChar( i );
- }
- String aExtension( ImplGetExtension() );
- sal_uInt32 nExtensionLen = aExtension.Len();
- if ( nExtensionLen )
- {
- // extension of sound ( instance 1 )
- rSt << (sal_uInt32)( ( EPP_CString << 16 ) | 16 ) << (sal_uInt32)( nExtensionLen * 2 );
- for ( i = 0; i < nExtensionLen; i++ )
- rSt << aExtension.GetChar( i );
- }
- // id of sound ( instance 2 )
- String aId( String::CreateFromInt32( nId ) );
- sal_uInt32 nIdLen = aId.Len();
- rSt << (sal_uInt32)( ( EPP_CString << 16 ) | 32 ) << (sal_uInt32)( nIdLen * 2 );
- for ( i = 0; i < nIdLen; i++ )
- rSt << aId.GetChar( i );
-
- rSt << (sal_uInt32)( EPP_SoundData << 16 ) << (sal_uInt32)( nFileSize );
- sal_uInt32 nBytesLeft = nFileSize;
- SvStream* pSourceFile = ::utl::UcbStreamHelper::CreateStream( aSoundURL, STREAM_READ );
- if ( pSourceFile )
- {
- sal_uInt8* pBuf = new sal_uInt8[ 0x10000 ]; // 64 kB Buffer
- while ( nBytesLeft )
- {
- sal_uInt32 nToDo = ( nBytesLeft > 0x10000 ) ? 0x10000 : nBytesLeft;
- pSourceFile->Read( pBuf, nToDo );
- rSt.Write( pBuf, nToDo );
- nBytesLeft -= nToDo;
- }
- delete pSourceFile;
- delete[] pBuf;
- }
- }
- catch( ::com::sun::star::uno::Exception& )
- {
-
- }
-}
-
-ExSoundCollection::~ExSoundCollection()
-{
- for( void* pPtr = List::First(); pPtr; pPtr = List::Next() )
- delete (ExSoundEntry*)pPtr;
-}
-
-sal_uInt32 ExSoundCollection::GetId( const String& rString )
-{
- sal_uInt32 nSoundId = 0;
- if( rString.Len() )
- {
- const sal_uInt32 nSoundCount = Count();
-
- for( ; nSoundId < nSoundCount; nSoundId++ )
- if( ImplGetByIndex( nSoundId )->IsSameURL( rString ) )
- break;
- if ( nSoundId++ == nSoundCount )
- {
- ExSoundEntry* pEntry = new ExSoundEntry( rString );
- if ( pEntry->GetFileSize() )
- List::Insert( pEntry, LIST_APPEND );
- else
- {
- nSoundId = 0; // only insert sounds that are accessible
- delete pEntry;
- }
- }
- }
- return nSoundId;
-}
-
-const ExSoundEntry* ExSoundCollection::ImplGetByIndex( sal_uInt32 nIndex ) const
-{
- return (ExSoundEntry*)List::GetObject( nIndex );
-}
-
-sal_uInt32 ExSoundCollection::GetSize() const
-{
- sal_uInt32 nSize = 0;
- sal_uInt32 i, nSoundCount = Count();
- if ( nSoundCount )
- {
- nSize += 8 + 12; // size of SoundCollectionContainerHeader + SoundCollAtom
- for ( i = 0; i < nSoundCount; i++ )
- nSize += ImplGetByIndex( i )->GetSize( i + 1 );
- }
- return nSize;
-}
-
-void ExSoundCollection::Write( SvStream& rSt )
-{
- sal_uInt32 i, nSoundCount = Count();
- if ( nSoundCount )
- {
- // create SoundCollection Container
- rSt << (sal_uInt16)0xf << (sal_uInt16)EPP_SoundCollection << (sal_uInt32)( GetSize() - 8 );
-
- // create SoundCollAtom ( reference to the next free SoundId );
- rSt << (sal_uInt32)( EPP_SoundCollAtom << 16 ) << (sal_uInt32)4 << nSoundCount;
-
- for ( i = 0; i < nSoundCount; i++ )
- ((ExSoundEntry*)List::GetObject( i ))->Write( rSt, i + 1 );
- }
-}
-
-
-} // namespace ppt;
diff --git a/sd/source/filter/pptx/pptx-stylesheet.cxx b/sd/source/filter/pptx/pptx-stylesheet.cxx
deleted file mode 100644
index dd9545c80a87..000000000000
--- a/sd/source/filter/pptx/pptx-stylesheet.cxx
+++ /dev/null
@@ -1,485 +0,0 @@
-#include <epptbase.hxx>
-#include <epptdef.hxx>
-#include <text.hxx>
-#include <tools/color.hxx>
-#include <editeng/svxenum.hxx>
-
-using namespace ::com::sun::star;
-
-PPTExCharSheet::PPTExCharSheet( int nInstance )
-{
- sal_uInt16 nFontHeight = 24;
-
- for ( int nDepth = 0; nDepth < 5; nDepth++ )
- {
- PPTExCharLevel& rLev = maCharLevel[ nDepth ];
- switch ( nInstance )
- {
- case EPP_TEXTTYPE_Title :
- case EPP_TEXTTYPE_CenterTitle :
- nFontHeight = 44;
- break;
- case EPP_TEXTTYPE_Body :
- case EPP_TEXTTYPE_CenterBody :
- case EPP_TEXTTYPE_HalfBody :
- case EPP_TEXTTYPE_QuarterBody :
- {
- switch ( nDepth )
- {
- case 0 : nFontHeight = 32; break;
- case 1 : nFontHeight = 28; break;
- case 2 : nFontHeight = 24; break;
- default :nFontHeight = 20; break;
- }
- }
- break;
- case EPP_TEXTTYPE_Notes :
- nFontHeight = 12;
- break;
- case EPP_TEXTTYPE_notUsed :
- case EPP_TEXTTYPE_Other :
- nFontHeight = 24;
- break;
- }
- rLev.mnFlags = 0;
- rLev.mnFont = 0;
- rLev.mnAsianOrComplexFont = 0xffff;
- rLev.mnFontHeight = nFontHeight;
- rLev.mnFontColor = 0;
- rLev.mnEscapement = 0;
- }
-}
-
-
-void PPTExCharSheet::SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
- FontCollection& rFontCollection, int nLevel )
-{
- PortionObj aPortionObj( rXPropSet, rFontCollection );
-
- PPTExCharLevel& rLev = maCharLevel[ nLevel ];
-
- if ( aPortionObj.meCharColor == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnFontColor = aPortionObj.mnCharColor;
- if ( aPortionObj.meCharEscapement == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnEscapement = aPortionObj.mnCharEscapement;
- if ( aPortionObj.meCharHeight == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnFontHeight = aPortionObj.mnCharHeight;
- if ( aPortionObj.meFontName == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnFont = aPortionObj.mnFont;
- if ( aPortionObj.meAsianOrComplexFont == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnAsianOrComplexFont = aPortionObj.mnAsianOrComplexFont;
- rLev.mnFlags = aPortionObj.mnCharAttr;
-}
-
-void PPTExCharSheet::Write( SvStream& rSt, PptEscherEx*, sal_uInt16 nLev, sal_Bool, sal_Bool bSimpleText,
- const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPagePropSet )
-{
- const PPTExCharLevel& rLev = maCharLevel[ nLev ];
-
- sal_uInt32 nCharFlags = 0xefffff;
- if ( bSimpleText )
- nCharFlags = 0x7ffff;
-
- rSt << nCharFlags
- << rLev.mnFlags
- << rLev.mnFont;
-
- sal_uInt32 nFontColor = rLev.mnFontColor;
- if ( nFontColor == COL_AUTO )
- {
- sal_Bool bIsDark = sal_False;
- ::com::sun::star::uno::Any aAny;
- if ( PropValue::GetPropertyValue( aAny, rPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsBackgroundDark" ) ), sal_True ) )
- aAny >>= bIsDark;
- nFontColor = bIsDark ? 0xffffff : 0x000000;
- }
- nFontColor &= 0xffffff;
- nFontColor |= 0xfe000000;
- if ( bSimpleText )
- {
- rSt << rLev.mnFontHeight
- << nFontColor;
- }
- else
- {
- rSt << rLev.mnAsianOrComplexFont
- << (sal_uInt16)0xffff // unbekannt
- << (sal_uInt16)0xffff // unbekannt
- << rLev.mnFontHeight
- << nFontColor
- << rLev.mnEscapement;
- }
-}
-
-PPTExParaSheet::PPTExParaSheet( int nInstance, sal_uInt16 nDefaultTab, PPTExBulletProvider& rProv ) :
- rBuProv ( rProv ),
- mnInstance ( nInstance )
-{
- sal_Bool bHasBullet = FALSE;
-
- sal_uInt16 nUpperDist = 0;
- sal_uInt16 nBulletChar = 0x2022;
- sal_uInt16 nBulletOfs = 0;
- sal_uInt16 nTextOfs = 0;
-
- for ( int nDepth = 0; nDepth < 5; nDepth++ )
- {
- PPTExParaLevel& rLev = maParaLevel[ nDepth ];
- switch ( nInstance )
- {
- case EPP_TEXTTYPE_Title :
- case EPP_TEXTTYPE_CenterTitle :
- break;
- case EPP_TEXTTYPE_Body :
- case EPP_TEXTTYPE_CenterBody :
- case EPP_TEXTTYPE_HalfBody :
- case EPP_TEXTTYPE_QuarterBody :
- {
- bHasBullet = TRUE;
- nUpperDist = 0x14;
- }
- break;
- case EPP_TEXTTYPE_Notes :
- nUpperDist = 0x1e;
- break;
-
-// default :
-// case EPP_TEXTTYPE_notUsed :
-// case EPP_TEXTTYPE_Other :
-// break;
- }
- switch ( nDepth )
- {
- case 0 :
- {
- nBulletChar = 0x2022;
- nBulletOfs = 0;
- nTextOfs = ( bHasBullet ) ? 0xd8 : 0;
- }
- break;
- case 1 :
- {
- nBulletChar = 0x2013;
- nBulletOfs = 0x120;
- nTextOfs = 0x1d4;
- }
- break;
- case 2 :
- {
- nBulletChar = 0x2022;
- nBulletOfs = 0x240;
- nTextOfs = 0x2d0;
- }
- break;
- case 3 :
- {
- nBulletChar = 0x2013;
- nBulletOfs = 0x360;
- nTextOfs = 0x3f0;
- }
- break;
- case 4 :
- {
- nBulletChar = 0xbb;
- nBulletOfs = 0x480;
- nTextOfs = 0x510;
- }
- break;
- }
- rLev.mbIsBullet = bHasBullet;
- rLev.mnBulletChar = nBulletChar;
- rLev.mnBulletFont = 0;
- rLev.mnBulletHeight = 100;
- rLev.mnBulletColor = 0;
- rLev.mnAdjust = 0;
- rLev.mnLineFeed = 100;
- rLev.mnLowerDist = 0;
- rLev.mnUpperDist = nUpperDist;
- rLev.mnTextOfs = nTextOfs;
- rLev.mnBulletOfs = nBulletOfs;
- rLev.mnDefaultTab = nDefaultTab;
- rLev.mnAsianSettings = 2;
- rLev.mnBiDi = 0;
-
- rLev.mbExtendedBulletsUsed = FALSE;
- rLev.mnBulletId = 0xffff;
- rLev.mnBulletStart = 0;
- rLev.mnMappedNumType = 0;
- rLev.mnNumberingType = 0;
- }
-}
-
-void PPTExParaSheet::SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
- FontCollection& rFontCollection, int nLevel, const PPTExCharLevel& rCharLevel )
-{
- ParagraphObj aParagraphObj( rXPropSet, rBuProv );
- aParagraphObj.CalculateGraphicBulletSize( rCharLevel.mnFontHeight );
- PPTExParaLevel& rLev = maParaLevel[ nLevel ];
-
- if ( aParagraphObj.meTextAdjust == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnAdjust = aParagraphObj.mnTextAdjust;
- rLev.mnOOAdjust = aParagraphObj.mnOOTextAdjust;
- if ( aParagraphObj.meLineSpacing == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- {
- sal_Int16 nLineSpacing = aParagraphObj.mnLineSpacing;
- if ( nLineSpacing > 0 ) // if nLinespacing is < 0 the linespacing is an absolute spacing
- {
- sal_Bool bFixedLineSpacing = sal_False;
- uno::Any aAny = rXPropSet->getPropertyValue( ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "FontIndependentLineSpacing" ) ) );
- if( !(aAny >>= bFixedLineSpacing) || !bFixedLineSpacing )
- {
- const FontCollectionEntry* pDesc = rFontCollection.GetById( rCharLevel.mnFont );
- if ( pDesc )
- nLineSpacing = (sal_Int16)( (double)nLineSpacing * pDesc->Scaling + 0.5 );
- }
- }
- else
- {
- if ( rCharLevel.mnFontHeight > (sal_uInt16)( ((double)-nLineSpacing) * 0.001 * 72.0 / 2.54 ) ) // 1/100mm to point
- {
- const FontCollectionEntry* pDesc = rFontCollection.GetById( rCharLevel.mnFont );
- if ( pDesc )
- nLineSpacing = (sal_Int16)( (double)100.0 * pDesc->Scaling + 0.5 );
- else
- nLineSpacing = 100;
- }
- else
- nLineSpacing = (sal_Int16)( (double)nLineSpacing / 4.40972 );
- }
- rLev.mnLineFeed = nLineSpacing;
- }
- if ( aParagraphObj.meLineSpacingBottom == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnLowerDist = aParagraphObj.mnLineSpacingBottom;
- if ( aParagraphObj.meLineSpacingTop == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnUpperDist = aParagraphObj.mnLineSpacingTop;
- if ( aParagraphObj.meForbiddenRules == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- {
- rLev.mnAsianSettings &=~1;
- if ( aParagraphObj.mbForbiddenRules )
- rLev.mnAsianSettings |= 1;
- }
- if ( aParagraphObj.meParagraphPunctation == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- {
- rLev.mnAsianSettings &=~4;
- if ( aParagraphObj.mbParagraphPunctation )
- rLev.mnAsianSettings |= 4;
- }
-
- if ( aParagraphObj.meBiDi == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- rLev.mnBiDi = aParagraphObj.mnBiDi;
-
- rLev.mbIsBullet = aParagraphObj.mbIsBullet; //( ( aParagraphObj.nBulletFlags & 1 ) != 0 );
-
- if ( !nLevel )
- {
- if ( ( aParagraphObj.meBullet == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- && aParagraphObj.bExtendedParameters )
- {
- for ( sal_Int16 i = 0; i < 5; i++ )
- {
- PPTExParaLevel& rLevel = maParaLevel[ i ];
- if ( i )
- aParagraphObj.ImplGetNumberingLevel( rBuProv, i, FALSE );
-// rLevel.mbIsBullet = ( ( aParagraphObj.nBulletFlags & 1 ) != 0 );
- rLevel.mnTextOfs = aParagraphObj.nTextOfs;
- rLevel.mnBulletOfs = (sal_uInt16)aParagraphObj.nBulletOfs;
- rLevel.mnBulletChar = aParagraphObj.cBulletId;
- FontCollectionEntry aFontDescEntry( aParagraphObj.aFontDesc.Name, aParagraphObj.aFontDesc.Family,
- aParagraphObj.aFontDesc.Pitch, aParagraphObj.aFontDesc.CharSet );
- rLevel.mnBulletFont = (sal_uInt16)rFontCollection.GetId( aFontDescEntry );
- rLevel.mnBulletHeight = aParagraphObj.nBulletRealSize;
- rLevel.mnBulletColor = aParagraphObj.nBulletColor;
-
- rLevel.mbExtendedBulletsUsed = aParagraphObj.bExtendedBulletsUsed;
- rLevel.mnBulletId = aParagraphObj.nBulletId;
- rLevel.mnNumberingType = aParagraphObj.nNumberingType;
- rLevel.mnBulletStart = aParagraphObj.nStartWith;
- rLevel.mnMappedNumType = aParagraphObj.nMappedNumType;
- }
- }
- }
-}
-
-void PPTExParaSheet::Write( SvStream& rSt, PptEscherEx*, sal_uInt16 nLev, sal_Bool, sal_Bool bSimpleText,
- const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPagePropSet )
-{
- const PPTExParaLevel& rLev = maParaLevel[ nLev ];
-
- if ( maParaLevel[ 0 ].mbExtendedBulletsUsed || maParaLevel[ 1 ].mbExtendedBulletsUsed ||
- maParaLevel[ 2 ].mbExtendedBulletsUsed || maParaLevel[ 3 ].mbExtendedBulletsUsed ||
- maParaLevel[ 4 ].mbExtendedBulletsUsed )
- {
- SvStream& rOut = rBuProv.aBuExMasterStream;
- if ( !nLev )
- {
- rOut << (sal_uInt32)( ( EPP_PST_ExtendedParagraphMasterAtom << 16 ) | ( mnInstance << 4 ) )
- << (sal_uInt32)( 5 * 16 + 2 )
- << (sal_uInt16)5; // depth
- }
- sal_uInt16 nBulletId = rLev.mnBulletId;
- if ( rLev.mnNumberingType != SVX_NUM_BITMAP )
- nBulletId = 0xffff;
- rOut << (sal_uInt32)0x03800000
- << (sal_uInt16)nBulletId
- << (sal_uInt32)rLev.mnMappedNumType
- << (sal_uInt16)rLev.mnBulletStart
- << (sal_uInt32)0;
- }
-
- sal_uInt32 nParaFlags = 0x3ffdff;
- sal_uInt16 nBulletFlags = ( rLev.mbIsBullet ) ? 0xf : 0xe;
-
- if ( nLev )
- nParaFlags &= 0x207fff;
- if ( bSimpleText )
- nParaFlags &= 0x7fff;
- sal_uInt32 nBulletColor = rLev.mnBulletColor;
- if ( nBulletColor == COL_AUTO )
- {
- sal_Bool bIsDark = sal_False;
- ::com::sun::star::uno::Any aAny;
- if ( PropValue::GetPropertyValue( aAny, rPagePropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsBackgroundDark" ) ), sal_True ) )
- aAny >>= bIsDark;
- nBulletColor = bIsDark ? 0xffffff : 0x000000;
- }
- nBulletColor &= 0xffffff;
- nBulletColor |= 0xfe000000;
- rSt << nParaFlags
- << nBulletFlags
- << rLev.mnBulletChar
- << rLev.mnBulletFont
- << rLev.mnBulletHeight
- << nBulletColor
- << rLev.mnAdjust
- << rLev.mnLineFeed
- << rLev.mnUpperDist
- << rLev.mnLowerDist
- << rLev.mnTextOfs
- << rLev.mnBulletOfs;
-
- if ( bSimpleText || nLev )
- {
- if ( nParaFlags & 0x200000 )
- rSt << rLev.mnBiDi;
- }
- else
- {
- rSt << rLev.mnDefaultTab
- << (sal_uInt16)0
- << (sal_uInt16)0
- << rLev.mnAsianSettings
- << rLev.mnBiDi;
- }
-}
-
-
-PPTExStyleSheet::PPTExStyleSheet( sal_uInt16 nDefaultTab, PPTExBulletProvider& rBuProv )
-{
- for ( int nInstance = EPP_TEXTTYPE_Title; nInstance <= EPP_TEXTTYPE_QuarterBody; nInstance++ )
- {
- mpParaSheet[ nInstance ] = ( nInstance == EPP_TEXTTYPE_notUsed ) ? NULL : new PPTExParaSheet( nInstance, nDefaultTab, rBuProv );
- mpCharSheet[ nInstance ] = ( nInstance == EPP_TEXTTYPE_notUsed ) ? NULL : new PPTExCharSheet( nInstance );
- }
-}
-
-PPTExStyleSheet::~PPTExStyleSheet()
-{
- for ( int nInstance = EPP_TEXTTYPE_Title; nInstance <= EPP_TEXTTYPE_QuarterBody; nInstance++ )
- {
- if ( nInstance == EPP_TEXTTYPE_notUsed )
- continue;
-
- delete mpParaSheet[ nInstance ];
- delete mpCharSheet[ nInstance ];
- }
-}
-
-void PPTExStyleSheet::SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
- FontCollection& rFontCollection, int nInstance, int nLevel )
-{
- if ( nInstance == EPP_TEXTTYPE_notUsed )
- return;
- mpCharSheet[ nInstance ]->SetStyleSheet( rXPropSet, rFontCollection, nLevel );
- mpParaSheet[ nInstance ]->SetStyleSheet( rXPropSet, rFontCollection, nLevel, mpCharSheet[ nInstance ]->maCharLevel[ nLevel ] );
-}
-
-sal_Bool PPTExStyleSheet::IsHardAttribute( sal_uInt32 nInstance, sal_uInt32 nLevel, PPTExTextAttr eAttr, sal_uInt32 nValue )
-{
- const PPTExParaLevel& rPara = mpParaSheet[ nInstance ]->maParaLevel[ nLevel ];
- const PPTExCharLevel& rChar = mpCharSheet[ nInstance ]->maCharLevel[ nLevel ];
-
- sal_uInt32 nFlag = 0;
-
- switch ( eAttr )
- {
- case ParaAttr_BulletOn : return ( rPara.mbIsBullet ) ? ( nValue ) ? FALSE : TRUE : ( nValue ) ? TRUE : FALSE;
- case ParaAttr_BuHardFont :
- case ParaAttr_BulletFont : return ( rPara.mnBulletFont != nValue );
- case ParaAttr_BuHardColor :
- case ParaAttr_BulletColor : return ( rPara.mnBulletColor != nValue );
- case ParaAttr_BuHardHeight :
- case ParaAttr_BulletHeight : return ( rPara.mnBulletHeight != nValue );
- case ParaAttr_BulletChar : return ( rPara.mnBulletChar != nValue );
- case ParaAttr_Adjust : return ( rPara.mnAdjust != nValue );
- case ParaAttr_LineFeed : return ( rPara.mnLineFeed != nValue );
- case ParaAttr_UpperDist : return ( rPara.mnUpperDist != nValue );
- case ParaAttr_LowerDist : return ( rPara.mnLowerDist != nValue );
- case ParaAttr_TextOfs : return ( rPara.mnTextOfs != nValue );
- case ParaAttr_BulletOfs : return ( rPara.mnBulletOfs != nValue );
- case ParaAttr_DefaultTab : return ( rPara.mnDefaultTab != nValue );
- case ParaAttr_BiDi : return ( rPara.mnBiDi != nValue );
- case CharAttr_Bold : nFlag = 1; break;
- case CharAttr_Italic : nFlag = 2; break;
- case CharAttr_Underline : nFlag = 4; break;
- case CharAttr_Shadow : nFlag = 16; break;
- case CharAttr_Strikeout : nFlag = 256; break;
- case CharAttr_Embossed : nFlag = 512; break;
- case CharAttr_Font : return ( rChar.mnFont != nValue );
- case CharAttr_AsianOrComplexFont : return ( rChar.mnAsianOrComplexFont != nValue );
- case CharAttr_Symbol : return TRUE;
- case CharAttr_FontHeight : return ( rChar.mnFontHeight != nValue );
- case CharAttr_FontColor : return ( rChar.mnFontColor != nValue );
- case CharAttr_Escapement : return ( rChar.mnEscapement != nValue );
- default:
- break;
- };
- if ( nFlag )
- {
- if ( rChar.mnFlags & nFlag )
- return ( ( nValue & nFlag ) == 0 );
- else
- return ( ( nValue & nFlag ) != 0 );
- }
- return TRUE;
-}
-
-sal_uInt32 PPTExStyleSheet::SizeOfTxCFStyleAtom() const
-{
- return 24;
-}
-
-// the TxCFStyleAtom stores the text properties that are used
-// when creating new objects in PowerPoint.
-
-void PPTExStyleSheet::WriteTxCFStyleAtom( SvStream& rSt )
-{
- const PPTExCharLevel& rCharStyle = mpCharSheet[ EPP_TEXTTYPE_Other ]->maCharLevel[ 0 ];
-
- sal_uInt16 nFlags = 0x60 // ??
- | 0x02 // fontsize;
- | 0x04; // fontcolor
-
- sal_uInt32 nCharFlags = rCharStyle.mnFlags;
- nCharFlags &= CharAttr_Italic | CharAttr_Bold | CharAttr_Underline | CharAttr_Shadow;
-
- rSt << (sal_uInt32)( EPP_TxCFStyleAtom << 16 ) // recordheader
- << SizeOfTxCFStyleAtom() - 8
- << (sal_uInt16)( 0x80 | nCharFlags )
- << (sal_uInt16)nFlags
- << (sal_uInt16)nCharFlags
- << (sal_Int32)-1 // ?
- << rCharStyle.mnFontHeight
- << rCharStyle.mnFontColor;
-}
diff --git a/sd/source/filter/pptx/pptx-text.cxx b/sd/source/filter/pptx/pptx-text.cxx
deleted file mode 100644
index a18283780620..000000000000
--- a/sd/source/filter/pptx/pptx-text.cxx
+++ /dev/null
@@ -1,1410 +0,0 @@
-#include "text.hxx"
-
-#include <com/sun/star/awt/CharSet.hpp>
-#include <com/sun/star/awt/FontWeight.hpp>
-#include <com/sun/star/awt/FontUnderline.hpp>
-#include <com/sun/star/beans/XPropertyState.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/container/XIndexReplace.hpp>
-#include <com/sun/star/i18n/XBreakIterator.hpp>
-#include <com/sun/star/i18n/ScriptDirection.hpp>
-#include <com/sun/star/i18n/ScriptType.hpp>
-#include <com/sun/star/i18n/XScriptTypeDetector.hpp>
-#include <com/sun/star/text/FontRelief.hpp>
-#include <com/sun/star/text/XTextField.hpp>
-#include <com/sun/star/text/XTextRange.hpp>
-#include <com/sun/star/style/LineSpacing.hpp>
-#include <com/sun/star/style/LineSpacingMode.hpp>
-#include <com/sun/star/style/ParagraphAdjust.hpp>
-#include <com/sun/star/style/TabStop.hpp>
-
-#include <svl/languageoptions.hxx>
-#include <sfx2/app.hxx>
-#include <editeng/svxenum.hxx>
-#include <editeng/frmdir.hxx>
-#include <unotools/fontcvt.hxx>
-#include <vcl/metric.hxx>
-#include <vcl/outdev.hxx>
-#include <vcl/virdev.hxx>
-#include <comphelper/processfactory.hxx>
-#include <oox/export/drawingml.hxx> // for SubstituteBullet
-
-com::sun::star::uno::Reference< com::sun::star::i18n::XBreakIterator > xPPTBreakIter;
-com::sun::star::uno::Reference< com::sun::star::i18n::XScriptTypeDetector > xScriptTypeDetector;
-
-// -----------------------------------------------------------------------
-
-PortionObj::PortionObj( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
- FontCollection& rFontCollection ) :
- mnCharAttrHard ( 0 ),
- mnCharAttr ( 0 ),
- mnFont ( 0 ),
- mnAsianOrComplexFont( 0xffff ),
- mnTextSize ( 0 ),
- mbLastPortion ( TRUE ),
- mpText ( NULL ),
- mpFieldEntry ( NULL )
-{
- mXPropSet = rXPropSet;
-
- ImplGetPortionValues( rFontCollection, FALSE );
-}
-
-PortionObj::PortionObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & rXTextRange,
- sal_Bool bLast, FontCollection& rFontCollection ) :
- mnCharAttrHard ( 0 ),
- mnCharAttr ( 0 ),
- mnFont ( 0 ),
- mnAsianOrComplexFont ( 0xffff ),
- mbLastPortion ( bLast ),
- mpText ( NULL ),
- mpFieldEntry ( NULL )
-{
- String aString( rXTextRange->getString() );
- String aURL;
- BOOL bRTL_endingParen = FALSE;
-
- mnTextSize = aString.Len();
- if ( bLast )
- mnTextSize++;
-
- if ( mnTextSize )
- {
- mpFieldEntry = NULL;
- sal_uInt32 nFieldType = 0;
-
- mXPropSet = ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XPropertySet >
- ( rXTextRange, ::com::sun::star::uno::UNO_QUERY );
- mXPropState = ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XPropertyState >
- ( rXTextRange, ::com::sun::star::uno::UNO_QUERY );
-
- sal_Bool bPropSetsValid = ( mXPropSet.is() && mXPropState.is() );
- if ( bPropSetsValid )
- nFieldType = ImplGetTextField( rXTextRange, mXPropSet, aURL );
- if ( nFieldType )
- {
- mpFieldEntry = new FieldEntry( nFieldType, 0, mnTextSize );
- if ( ( nFieldType >> 28 == 4 ) )
- {
- mpFieldEntry->aRepresentation = aString;
- mpFieldEntry->aFieldUrl = aURL;
- }
- }
- sal_Bool bSymbol = FALSE;
-
- if ( bPropSetsValid && ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontCharSet" ) ), FALSE ) )
- {
- sal_Int16 nCharset = 0;
- mAny >>= nCharset;
- if ( nCharset == ::com::sun::star::awt::CharSet::SYMBOL )
- bSymbol = TRUE;
- }
- if ( mpFieldEntry && ( nFieldType & 0x800000 ) ) // placeholder ?
- {
- mnTextSize = 1;
- if ( bLast )
- mnTextSize++;
- mpText = new sal_uInt16[ mnTextSize ];
- mpText[ 0 ] = 0x2a;
- }
- else
- {
- const sal_Unicode* pText = aString.GetBuffer();
- // For i39516 - a closing parenthesis that ends an RTL string is displayed backwards by PPT
- // Solution: add a Unicode Right-to-Left Mark, following the method described in i18024
- if ( bLast && pText[ aString.Len() - 1 ] == sal_Unicode(')') && rFontCollection.GetScriptDirection( aString ) == com::sun::star::i18n::ScriptDirection::RIGHT_TO_LEFT )
- {
- mnTextSize++;
- bRTL_endingParen = TRUE;
- }
- mpText = new sal_uInt16[ mnTextSize ];
- sal_uInt16 nChar;
- for ( int i = 0; i < aString.Len(); i++ )
- {
- nChar = (sal_uInt16)pText[ i ];
- if ( nChar == 0xa )
- nChar++;
- else if ( !bSymbol )
- {
- switch ( nChar )
- {
- // Currency
- case 128: nChar = 0x20AC; break;
- // Punctuation and other
- case 130: nChar = 0x201A; break;// SINGLE LOW-9 QUOTATION MARK
- case 131: nChar = 0x0192; break;// LATIN SMALL LETTER F WITH HOOK
- case 132: nChar = 0x201E; break;// DOUBLE LOW-9 QUOTATION MARK
- // LOW DOUBLE PRIME QUOTATION MARK
- case 133: nChar = 0x2026; break;// HORIZONTAL ELLIPSES
- case 134: nChar = 0x2020; break;// DAGGER
- case 135: nChar = 0x2021; break;// DOUBLE DAGGER
- case 136: nChar = 0x02C6; break;// MODIFIER LETTER CIRCUMFLEX ACCENT
- case 137: nChar = 0x2030; break;// PER MILLE SIGN
- case 138: nChar = 0x0160; break;// LATIN CAPITAL LETTER S WITH CARON
- case 139: nChar = 0x2039; break;// SINGLE LEFT-POINTING ANGLE QUOTATION MARK
- case 140: nChar = 0x0152; break;// LATIN CAPITAL LIGATURE OE
- case 142: nChar = 0x017D; break;// LATIN CAPITAL LETTER Z WITH CARON
- case 145: nChar = 0x2018; break;// LEFT SINGLE QUOTATION MARK
- // MODIFIER LETTER TURNED COMMA
- case 146: nChar = 0x2019; break;// RIGHT SINGLE QUOTATION MARK
- // MODIFIER LETTER APOSTROPHE
- case 147: nChar = 0x201C; break;// LEFT DOUBLE QUOTATION MARK
- // REVERSED DOUBLE PRIME QUOTATION MARK
- case 148: nChar = 0x201D; break;// RIGHT DOUBLE QUOTATION MARK
- // REVERSED DOUBLE PRIME QUOTATION MARK
- case 149: nChar = 0x2022; break;// BULLET
- case 150: nChar = 0x2013; break;// EN DASH
- case 151: nChar = 0x2014; break;// EM DASH
- case 152: nChar = 0x02DC; break;// SMALL TILDE
- case 153: nChar = 0x2122; break;// TRADE MARK SIGN
- case 154: nChar = 0x0161; break;// LATIN SMALL LETTER S WITH CARON
- case 155: nChar = 0x203A; break;// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
- case 156: nChar = 0x0153; break;// LATIN SMALL LIGATURE OE
- case 158: nChar = 0x017E; break;// LATIN SMALL LETTER Z WITH CARON
- case 159: nChar = 0x0178; break;// LATIN CAPITAL LETTER Y WITH DIAERESIS
-// case 222: nChar = 0x00B6; break;// PILCROW SIGN / PARAGRAPH SIGN
- }
- }
- mpText[ i ] = nChar;
- }
- }
- if ( bRTL_endingParen )
- mpText[ mnTextSize - 2 ] = 0x200F; // Unicode Right-to-Left mark
-
- if ( bLast )
- mpText[ mnTextSize - 1 ] = 0xd;
-
- if ( bPropSetsValid )
- ImplGetPortionValues( rFontCollection, TRUE );
- }
-}
-
-PortionObj::PortionObj( PortionObj& rPortionObj )
-: PropStateValue( rPortionObj )
-{
- ImplConstruct( rPortionObj );
-}
-
-PortionObj::~PortionObj()
-{
- ImplClear();
-}
-
-void PortionObj::Write( SvStream* pStrm, sal_Bool bLast )
-{
- sal_uInt32 nCount = mnTextSize;
- if ( bLast && mbLastPortion )
- nCount--;
- for ( sal_uInt32 i = 0; i < nCount; i++ )
- *pStrm << (sal_uInt16)mpText[ i ];
-}
-
-void PortionObj::ImplGetPortionValues( FontCollection& rFontCollection, sal_Bool bGetPropStateValue )
-{
-
- sal_Bool bOk = ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontName" ) ), bGetPropStateValue );
- meFontName = ePropState;
- if ( bOk )
- {
- FontCollectionEntry aFontDesc( *(::rtl::OUString*)mAny.getValue() );
- sal_uInt32 nCount = rFontCollection.GetCount();
- mnFont = (sal_uInt16)rFontCollection.GetId( aFontDesc );
- if ( mnFont == nCount )
- {
- FontCollectionEntry& rFontDesc = rFontCollection.GetLast();
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontCharSet" ) ), sal_False ) )
- mAny >>= rFontDesc.CharSet;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontFamily" ) ), sal_False ) )
- mAny >>= rFontDesc.Family;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontPitch" ) ), sal_False ) )
- mAny >>= rFontDesc.Pitch;
- }
- }
-
- sal_Int16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( Application::GetSettings().GetLanguage() );
- if ( mpText && mnTextSize && xPPTBreakIter.is() )
- {
- rtl::OUString sT( mpText, mnTextSize );
- nScriptType = xPPTBreakIter->getScriptType( sT, 0 );
- }
- if ( nScriptType != com::sun::star::i18n::ScriptType::COMPLEX )
- {
- bOk = ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontNameAsian" ) ), bGetPropStateValue );
- meAsianOrComplexFont = ePropState;
- if ( bOk )
- {
- FontCollectionEntry aFontDesc( *(::rtl::OUString*)mAny.getValue() );
- sal_uInt32 nCount = rFontCollection.GetCount();
- mnAsianOrComplexFont = (sal_uInt16)rFontCollection.GetId( aFontDesc );
- if ( mnAsianOrComplexFont == nCount )
- {
- FontCollectionEntry& rFontDesc = rFontCollection.GetLast();
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontCharSetAsian" ) ), sal_False ) )
- mAny >>= rFontDesc.CharSet;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontFamilyAsian" ) ), sal_False ) )
- mAny >>= rFontDesc.Family;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontPitchAsian" ) ), sal_False ) )
- mAny >>= rFontDesc.Pitch;
- }
- }
- }
- else
- {
- bOk = ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontNameComplex" ) ), bGetPropStateValue );
- meAsianOrComplexFont = ePropState;
- if ( bOk )
- {
- FontCollectionEntry aFontDesc( *(::rtl::OUString*)mAny.getValue() );
- sal_uInt32 nCount = rFontCollection.GetCount();
- mnAsianOrComplexFont = (sal_uInt16)rFontCollection.GetId( aFontDesc );
- if ( mnAsianOrComplexFont == nCount )
- {
- FontCollectionEntry& rFontDesc = rFontCollection.GetLast();
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontCharSetComplex" ) ), sal_False ) )
- mAny >>= rFontDesc.CharSet;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontFamilyComplex" ) ), sal_False ) )
- mAny >>= rFontDesc.Family;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharFontPitchComplex" ) ), sal_False ) )
- mAny >>= rFontDesc.Pitch;
- }
- }
- }
-
- if ( nScriptType != com::sun::star::i18n::ScriptType::COMPLEX )
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharWeight" ) ), bGetPropStateValue ) )
- {
- float fFloat = 0;
- mAny >>= fFloat;
- if ( fFloat >= ::com::sun::star::awt::FontWeight::SEMIBOLD )
- mnCharAttr |= 1;
- }
- }
- else
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharWeightComplex" ) ), bGetPropStateValue ) )
- {
- float fFloat = 0;
- mAny >>= fFloat;
- if ( fFloat >= ::com::sun::star::awt::FontWeight::SEMIBOLD )
- mnCharAttr |= 1;
- }
- }
-
- if ( ePropState == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- mnCharAttrHard |= 1;
-
- if ( nScriptType != com::sun::star::i18n::ScriptType::COMPLEX )
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharPosture" ) ), bGetPropStateValue ) )
- {
- ::com::sun::star::awt::FontSlant aFS;
- mAny >>= aFS;
- switch ( aFS )
- {
- case ::com::sun::star::awt::FontSlant_OBLIQUE :
- case ::com::sun::star::awt::FontSlant_ITALIC :
- mnCharAttr |= 2;
- break;
- default:
- break;
- }
- }
- }
- else
- {
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharPostureComplex" ) ), bGetPropStateValue ) )
- {
- ::com::sun::star::awt::FontSlant aFS;
- mAny >>= aFS;
- switch ( aFS )
- {
- case ::com::sun::star::awt::FontSlant_OBLIQUE :
- case ::com::sun::star::awt::FontSlant_ITALIC :
- mnCharAttr |= 2;
- break;
- default:
- break;
- }
- }
- }
-
- if ( ePropState == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- mnCharAttrHard |= 2;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharUnderline" ) ), bGetPropStateValue ) )
- {
- sal_Int16 nVal = 0;
- mAny >>= nVal;
- switch ( nVal )
- {
- case ::com::sun::star::awt::FontUnderline::SINGLE :
- case ::com::sun::star::awt::FontUnderline::DOUBLE :
- case ::com::sun::star::awt::FontUnderline::DOTTED :
- mnCharAttr |= 4;
- }
- }
- if ( ePropState == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- mnCharAttrHard |= 4;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharShadowed" ) ), bGetPropStateValue ) )
- {
- sal_Bool bBool = false;
- mAny >>= bBool;
- if ( bBool )
- mnCharAttr |= 0x10;
- }
- if ( ePropState == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- mnCharAttrHard |= 16;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharLocale" ) ), bGetPropStateValue ) )
- {
- com::sun::star::lang::Locale eLocale;
- if ( mAny >>= eLocale )
- meCharLocale = eLocale;
- }
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharRelief" ) ), bGetPropStateValue ) )
- {
- sal_Int16 nVal = ::com::sun::star::text::FontRelief::NONE;
- mAny >>= nVal;
- if ( nVal != ::com::sun::star::text::FontRelief::NONE )
- mnCharAttr |= 512;
- }
- if ( ePropState == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
- mnCharAttrHard |= 512;
-
- mnCharHeight = 24;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharHeight" ) ), bGetPropStateValue ) )
- {
- float fVal = 0;
- mAny >>= fVal;
- mnCharHeight = (sal_uInt16)( fVal + 0.5 );
- }
- meCharHeight = ePropState;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharColor" ) ), bGetPropStateValue ) )
- {
- sal_uInt32 nSOColor = *( (sal_uInt32*)mAny.getValue() );
- mnCharColor = nSOColor & 0xff00ff00; // green and hibyte
- mnCharColor |= (sal_uInt8)( nSOColor ) << 16; // red and blue is switched
- mnCharColor |= (sal_uInt8)( nSOColor >> 16 );
- }
- meCharColor = ePropState;
-
- mnCharEscapement = 0;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ), bGetPropStateValue ) )
- {
- mAny >>= mnCharEscapement;
- if ( mnCharEscapement > 100 )
- mnCharEscapement = 33;
- else if ( mnCharEscapement < -100 )
- mnCharEscapement = -33;
- }
- meCharEscapement = ePropState;
-}
-
-void PortionObj::ImplClear()
-{
- delete (FieldEntry*)mpFieldEntry;
- delete[] mpText;
-}
-
-void PortionObj::ImplConstruct( PortionObj& rPortionObj )
-{
- mbLastPortion = rPortionObj.mbLastPortion;
- mnTextSize = rPortionObj.mnTextSize;
- mnCharColor = rPortionObj.mnCharColor;
- mnCharEscapement = rPortionObj.mnCharEscapement;
- mnCharAttr = rPortionObj.mnCharAttr;
- mnCharHeight = rPortionObj.mnCharHeight;
- mnFont = rPortionObj.mnFont;
- mnAsianOrComplexFont = rPortionObj.mnAsianOrComplexFont;
-
- if ( rPortionObj.mpText )
- {
- mpText = new sal_uInt16[ mnTextSize ];
- memcpy( mpText, rPortionObj.mpText, mnTextSize << 1 );
- }
- else
- mpText = NULL;
-
- if ( rPortionObj.mpFieldEntry )
- mpFieldEntry = new FieldEntry( *( rPortionObj.mpFieldEntry ) );
- else
- mpFieldEntry = NULL;
-}
-
-sal_uInt32 PortionObj::ImplCalculateTextPositions( sal_uInt32 nCurrentTextPosition )
-{
- if ( mpFieldEntry && ( !mpFieldEntry->nFieldStartPos ) )
- {
- mpFieldEntry->nFieldStartPos += nCurrentTextPosition;
- mpFieldEntry->nFieldEndPos += nCurrentTextPosition;
- }
- return mnTextSize;
-}
-
-// -----------------------------------------------------------------------
-// Rueckgabe: 0 = kein TextField
-// bit28->31 text field type :
-// 1 = Date
-// 2 = Time
-// 3 = SlideNumber
-// 4 = Url
-// 5 = DateTime
-// 6 = header
-// 7 = footer
-// bit24->27 text field sub type (optional)
-// 23-> PPT Textfield needs a placeholder
-
-sal_uInt32 PortionObj::ImplGetTextField( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & ,
- const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet, String& rURL )
-{
- sal_uInt32 nRetValue = 0;
- sal_Int32 nFormat;
- ::com::sun::star::uno::Any aAny;
- if ( GetPropertyValue( aAny, rXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "TextPortionType" ) ), sal_True ) )
- {
- String aTextFieldType( *(::rtl::OUString*)aAny.getValue() );
- if ( aTextFieldType == String( RTL_CONSTASCII_USTRINGPARAM( "TextField" ) ) )
- {
- if ( GetPropertyValue( aAny, rXPropSet, aTextFieldType, sal_True ) )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > aXTextField;
- if ( aAny >>= aXTextField )
- {
- if ( aXTextField.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
- xFieldPropSet( aXTextField, ::com::sun::star::uno::UNO_QUERY );
- if ( xFieldPropSet.is() )
- {
- String aFieldKind( aXTextField->getPresentation( TRUE ) );
- if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "Date" ) ) )
- {
- if ( GetPropertyValue( aAny, xFieldPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsFix" ) ) ), sal_True )
- {
- sal_Bool bBool = true;
- aAny >>= bBool;
- if ( !bBool ) // Fixed DateFields gibt es in PPT nicht
- {
- if ( GetPropertyValue( aAny, xFieldPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Format" ) ) ), sal_True )
- {
- nFormat = *(sal_Int32*)aAny.getValue();
- switch ( nFormat )
- {
- default:
- case 5 :
- case 4 :
- case 2 : nFormat = 0; break;
- case 8 :
- case 9 :
- case 3 : nFormat = 1; break;
- case 7 :
- case 6 : nFormat = 2; break;
- }
- nRetValue |= ( ( ( 1 << 4 ) | nFormat ) << 24 ) | 0x800000;
- }
- }
- }
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ) )
- {
- if ( GetPropertyValue( aAny, xFieldPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ) ), sal_True )
- rURL = String( *(::rtl::OUString*)aAny.getValue() );
- nRetValue = 4 << 28;
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "Page" ) ) )
- {
- nRetValue = 3 << 28 | 0x800000;
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "Pages" ) ) )
- {
-
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "Time" ) ) )
- {
- if ( GetPropertyValue( aAny, xFieldPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsFix" ) ) ), sal_True )
- {
- sal_Bool bBool = true;
- aAny >>= bBool;
- if ( !bBool )
- {
- if ( GetPropertyValue( aAny, xFieldPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsFix" ) ) ), sal_True )
- {
- nFormat = *(sal_Int32*)aAny.getValue();
- nRetValue |= ( ( ( 2 << 4 ) | nFormat ) << 24 ) | 0x800000;
- }
- }
- }
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "File" ) ) )
- {
-
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "Table" ) ) )
- {
-
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "ExtTime" ) ) )
- {
- if ( GetPropertyValue( aAny, xFieldPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "IsFix" ) ) ), sal_True )
- {
- sal_Bool bBool = true;
- aAny >>= bBool;
- if ( !bBool )
- {
- if ( GetPropertyValue( aAny, xFieldPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "Format" ) ) ), sal_True )
- {
- nFormat = *(sal_Int32*)aAny.getValue();
- switch ( nFormat )
- {
- default:
- case 6 :
- case 7 :
- case 8 :
- case 2 : nFormat = 12; break;
- case 3 : nFormat = 9; break;
- case 5 :
- case 4 : nFormat = 10; break;
-
- }
- nRetValue |= ( ( ( 2 << 4 ) | nFormat ) << 24 ) | 0x800000;
- }
- }
- }
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "ExtFile" ) ) )
- {
-
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "Author" ) ) )
- {
-
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "DateTime" ) ) )
- {
- nRetValue = 5 << 28 | 0x800000;
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "Header" ) ) )
- {
- nRetValue = 6 << 28 | 0x800000;
- }
- else if ( aFieldKind == String( RTL_CONSTASCII_USTRINGPARAM( "Footer" ) ) )
- {
- nRetValue = 7 << 28 | 0x800000;
- }
- }
- }
- }
- }
- }
- }
- return nRetValue;
-}
-
-PortionObj& PortionObj::operator=( PortionObj& rPortionObj )
-{
- if ( this != &rPortionObj )
- {
- ImplClear();
- ImplConstruct( rPortionObj );
- }
- return *this;
-}
-
-// -----------------------------------------------------------------------
-
-ParagraphObj::ParagraphObj( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
- PPTExBulletProvider& rProv ) :
- maMapModeSrc ( MAP_100TH_MM ),
- maMapModeDest ( MAP_INCH, Point(), Fraction( 1, 576 ), Fraction( 1, 576 ) )
-{
- mXPropSet = rXPropSet;
-
- bExtendedParameters = FALSE;
-
- nDepth = 0;
- nBulletFlags = 0;
- nParaFlags = 0;
-
- ImplGetParagraphValues( rProv, FALSE );
-}
-
- ParagraphObj::ParagraphObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > & rXTextContent,
- ParaFlags aParaFlags, FontCollection& rFontCollection, PPTExBulletProvider& rProv ) :
- maMapModeSrc ( MAP_100TH_MM ),
- maMapModeDest ( MAP_INCH, Point(), Fraction( 1, 576 ), Fraction( 1, 576 ) ),
- mbFirstParagraph ( aParaFlags.bFirstParagraph ),
- mbLastParagraph ( aParaFlags.bLastParagraph )
-{
- bExtendedParameters = FALSE;
-
- nDepth = 0;
- nBulletFlags = 0;
- nParaFlags = 0;
-
- mXPropSet = ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XPropertySet >
- ( rXTextContent, ::com::sun::star::uno::UNO_QUERY );
-
- mXPropState = ::com::sun::star::uno::Reference<
- ::com::sun::star::beans::XPropertyState >
- ( rXTextContent, ::com::sun::star::uno::UNO_QUERY );
-
- if ( mXPropSet.is() && mXPropState.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumerationAccess >
- aXTextPortionEA( rXTextContent, ::com::sun::star::uno::UNO_QUERY );
- if ( aXTextPortionEA.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration >
- aXTextPortionE( aXTextPortionEA->createEnumeration() );
- if ( aXTextPortionE.is() )
- {
- while ( aXTextPortionE->hasMoreElements() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > aXCursorText;
- ::com::sun::star::uno::Any aAny( aXTextPortionE->nextElement() );
- if ( aAny >>= aXCursorText )
- {
- PortionObj* pPortionObj = new PortionObj( aXCursorText, !aXTextPortionE->hasMoreElements(), rFontCollection );
- if ( pPortionObj->Count() )
- Insert( pPortionObj, LIST_APPEND );
- else
- delete pPortionObj;
- }
- }
- }
- }
- ImplGetParagraphValues( rProv, TRUE );//
- }
-}
-
-ParagraphObj::ParagraphObj( ParagraphObj& rObj )
-: List()
-, PropStateValue()
-, SOParagraph()
-{
- ImplConstruct( rObj );
-}
-
-ParagraphObj::~ParagraphObj()
-{
- ImplClear();
-}
-
-void ParagraphObj::Write( SvStream* pStrm )
-{
- for ( void* pPtr = First(); pPtr; pPtr = Next() )
- ((PortionObj*)pPtr)->Write( pStrm, mbLastParagraph );
-}
-
-void ParagraphObj::ImplClear()
-{
- for ( void* pPtr = First(); pPtr; pPtr = Next() )
- delete (PortionObj*)pPtr;
-}
-
-void ParagraphObj::CalculateGraphicBulletSize( sal_uInt16 nFontHeight )
-{
- if ( ( (SvxExtNumType)nNumberingType == SVX_NUM_BITMAP ) && ( nBulletId != 0xffff ) )
- {
- // calculate the bulletrealsize for this grafik
- if ( aBuGraSize.Width() && aBuGraSize.Height() )
- {
- double fCharHeight = nFontHeight;
- double fLen = aBuGraSize.Height();
- fCharHeight = fCharHeight * 0.2540;
- double fQuo = fLen / fCharHeight;
- nBulletRealSize = (sal_Int16)( fQuo + 0.5 );
- if ( (sal_uInt16)nBulletRealSize > 400 )
- nBulletRealSize = 400;
- }
- }
-}
-
-void ParagraphObj::ImplGetNumberingLevel( PPTExBulletProvider& rBuProv, sal_Int16 nNumberingDepth, sal_Bool bIsBullet, sal_Bool bGetPropStateValue )
-{
- ::com::sun::star::uno::Any aAny;
- if ( GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "ParaLeftMargin" ) ) ) )
- {
- sal_Int32 nVal;
- if ( aAny >>= nVal )
- nTextOfs = static_cast< sal_Int16 >( nVal / ( 2540.0 / 576 ) + 0.5 ) ;
- }
- if ( GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "ParaFirstLineIndent" ) ) ) )
- {
- if ( aAny >>= nBulletOfs )
- nBulletOfs = static_cast< sal_Int32 >( nBulletOfs / ( 2540.0 / 576 ) + 0.5 );
- }
- if ( GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "NumberingIsNumber" ) ) ) )
- aAny >>= bNumberingIsNumber;
-
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexReplace > aXIndexReplace;
-
- if ( bIsBullet && ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "NumberingRules" ) ), bGetPropStateValue ) )
- {
- if ( ( mAny >>= aXIndexReplace ) && nNumberingDepth < aXIndexReplace->getCount() )
- {
- mAny <<= aXIndexReplace->getByIndex( nNumberingDepth );
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>
- aPropertySequence( *( ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>*)mAny.getValue() );
-
- const ::com::sun::star::beans::PropertyValue* pPropValue = aPropertySequence.getArray();
-
- sal_Int32 nPropertyCount = aPropertySequence.getLength();
- if ( nPropertyCount )
- {
- bExtendedParameters = TRUE;
- nBulletRealSize = 100;
- nMappedNumType = 0;
-
- String aGraphicURL;
- for ( sal_Int32 i = 0; i < nPropertyCount; i++ )
- {
- const void* pValue = pPropValue[ i ].Value.getValue();
- if ( pValue )
- {
- ::rtl::OUString aPropName( pPropValue[ i ].Name );
- if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "NumberingType" ) ) )
- nNumberingType = *( (sal_Int16*)pValue );
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Adjust" ) ) )
- nHorzAdjust = *( (sal_Int16*)pValue );
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "BulletChar" ) ) )
- {
- String aString( *( (String*)pValue ) );
- if ( aString.Len() )
- cBulletId = aString.GetChar( 0 );
- }
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "BulletFont" ) ) )
- {
- aFontDesc = *( (::com::sun::star::awt::FontDescriptor*)pValue );
-
- // Our numbullet dialog has set the wrong textencoding for our "StarSymbol" font,
- // instead of a Unicode encoding the encoding RTL_TEXTENCODING_SYMBOL was used.
- // Because there might exist a lot of damaged documemts I added this two lines
- // which fixes the bullet problem for the export.
- if ( aFontDesc.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "StarSymbol" ) ) )
- aFontDesc.CharSet = RTL_TEXTENCODING_MS_1252;
-
- }
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "GraphicURL" ) ) )
- aGraphicURL = ( *(::rtl::OUString*)pValue );
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "GraphicSize" ) ) )
- {
- if ( pPropValue[ i ].Value.getValueType() == ::getCppuType( (::com::sun::star::awt::Size*)0) )
- {
- // don't cast awt::Size to Size as on 64-bits they are not the same.
- ::com::sun::star::awt::Size aSize;
- pPropValue[ i ].Value >>= aSize;
- aBuGraSize.nA = aSize.Width;
- aBuGraSize.nB = aSize.Height;
- }
- }
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "StartWith" ) ) )
- nStartWith = *( (sal_Int16*)pValue );
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "LeftMargin" ) ) )
- nTextOfs = nTextOfs + static_cast< sal_Int16 >( *( (sal_Int32*)pValue ) / ( 2540.0 / 576 ) );
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "FirstLineOffset" ) ) )
- nBulletOfs += (sal_Int16)( *( (sal_Int32*)pValue ) / ( 2540.0 / 576 ) );
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "BulletColor" ) ) )
- {
- sal_uInt32 nSOColor = *( (sal_uInt32*)pValue );
- nBulletColor = nSOColor & 0xff00ff00; // green and hibyte
- nBulletColor |= (sal_uInt8)( nSOColor ) << 16; // red
- nBulletColor |= (sal_uInt8)( nSOColor >> 16 ) | 0xfe000000; // blue
- }
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "BulletRelSize" ) ) )
- {
- nBulletRealSize = *( (sal_Int16*)pValue );
- nParaFlags |= 0x40;
- nBulletFlags |= 8;
- }
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Prefix" ) ) )
- sPrefix = ( *(::rtl::OUString*)pValue );
- else if ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Suffix" ) ) )
- sSuffix = ( *(::rtl::OUString*)pValue );
-#ifdef DBG_UTIL
- else if ( ! (
- ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "SymbolTextDistance" ) ) )
- || ( aPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Graphic" ) ) ) ) )
- {
- DBG_ERROR( "Unbekanntes Property" );
- }
-#endif
- }
- }
-
- if ( aGraphicURL.Len() )
- {
- if ( aBuGraSize.Width() && aBuGraSize.Height() )
- {
- xub_StrLen nIndex = aGraphicURL.Search( (sal_Unicode)':', 0 );
- if ( nIndex != STRING_NOTFOUND )
- {
- nIndex++;
- if ( aGraphicURL.Len() > nIndex )
- {
- ByteString aUniqueId( aGraphicURL, nIndex, aGraphicURL.Len() - nIndex, RTL_TEXTENCODING_UTF8 );
- if ( aUniqueId.Len() )
- {
- nBulletId = rBuProv.GetId( aUniqueId, aBuGraSize );
- if ( nBulletId != 0xffff )
- bExtendedBulletsUsed = TRUE;
- }
- }
- }
- }
- else
- {
- nNumberingType = SVX_NUM_NUMBER_NONE;
- }
- }
-
- PortionObj* pPortion = (PortionObj*)First();
- CalculateGraphicBulletSize( ( pPortion ) ? pPortion->mnCharHeight : 24 );
-
- switch( (SvxExtNumType)nNumberingType )
- {
- case SVX_NUM_NUMBER_NONE : nParaFlags |= 0xf; break;
-
- case SVX_NUM_CHAR_SPECIAL : // Bullet
- {
- cBulletId = oox::drawingml::DrawingML::SubstituteBullet( cBulletId, aFontDesc );
-
- if ( aFontDesc.Name.getLength() )
- {
-/*
- if ( aFontDesc.CharSet != ::com::sun::star::awt::CharSet::SYMBOL )
- {
- switch ( cBulletId )
- {
- // Currency
- case 128: cBulletId = 0x20AC; break;
- // Punctuation and other
- case 130: cBulletId = 0x201A; break;// SINGLE LOW-9 QUOTATION MARK
- case 131: cBulletId = 0x0192; break;// LATIN SMALL LETTER F WITH HOOK
- case 132: cBulletId = 0x201E; break;// DOUBLE LOW-9 QUOTATION MARK
- // LOW DOUBLE PRIME QUOTATION MARK
- case 133: cBulletId = 0x2026; break;// HORIZONTAL ELLIPSES
- case 134: cBulletId = 0x2020; break;// DAGGER
- case 135: cBulletId = 0x2021; break;// DOUBLE DAGGER
- case 136: cBulletId = 0x02C6; break;// MODIFIER LETTER CIRCUMFLEX ACCENT
- case 137: cBulletId = 0x2030; break;// PER MILLE SIGN
- case 138: cBulletId = 0x0160; break;// LATIN CAPITAL LETTER S WITH CARON
- case 139: cBulletId = 0x2039; break;// SINGLE LEFT-POINTING ANGLE QUOTATION MARK
- case 140: cBulletId = 0x0152; break;// LATIN CAPITAL LIGATURE OE
- case 142: cBulletId = 0x017D; break;// LATIN CAPITAL LETTER Z WITH CARON
- case 145: cBulletId = 0x2018; break;// LEFT SINGLE QUOTATION MARK
- // MODIFIER LETTER TURNED COMMA
- case 146: cBulletId = 0x2019; break;// RIGHT SINGLE QUOTATION MARK
- // MODIFIER LETTER APOSTROPHE
- case 147: cBulletId = 0x201C; break;// LEFT DOUBLE QUOTATION MARK
- // REVERSED DOUBLE PRIME QUOTATION MARK
- case 148: cBulletId = 0x201D; break;// RIGHT DOUBLE QUOTATION MARK
- // REVERSED DOUBLE PRIME QUOTATION MARK
- case 149: cBulletId = 0x2022; break;// BULLET
- case 150: cBulletId = 0x2013; break;// EN DASH
- case 151: cBulletId = 0x2014; break;// EM DASH
- case 152: cBulletId = 0x02DC; break;// SMALL TILDE
- case 153: cBulletId = 0x2122; break;// TRADE MARK SIGN
- case 154: cBulletId = 0x0161; break;// LATIN SMALL LETTER S WITH CARON
- case 155: cBulletId = 0x203A; break;// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
- case 156: cBulletId = 0x0153; break;// LATIN SMALL LIGATURE OE
- case 158: cBulletId = 0x017E; break;// LATIN SMALL LETTER Z WITH CARON
- case 159: cBulletId = 0x0178; break;// LATIN CAPITAL LETTER Y WITH DIAERESIS
-// case 222: cBulletId = 0x00B6; break;// PILCROW SIGN / PARAGRAPH SIGN
- }
- }
-*/
- nParaFlags |= 0x90; // wir geben den Font und den Charset vor
- }
- }
- case SVX_NUM_CHARS_UPPER_LETTER : // zaehlt von a-z, aa - az, ba - bz, ...
- case SVX_NUM_CHARS_LOWER_LETTER :
- case SVX_NUM_ROMAN_UPPER :
- case SVX_NUM_ROMAN_LOWER :
- case SVX_NUM_ARABIC :
- case SVX_NUM_PAGEDESC : // Numerierung aus der Seitenvorlage
- case SVX_NUM_BITMAP :
- case SVX_NUM_CHARS_UPPER_LETTER_N : // zaehlt von a-z, aa-zz, aaa-zzz
- case SVX_NUM_CHARS_LOWER_LETTER_N :
- {
- if ( nNumberingType != SVX_NUM_CHAR_SPECIAL )
- {
- bExtendedBulletsUsed = TRUE;
- if ( nNumberingDepth & 1 )
- cBulletId = 0x2013; // defaulting bullet characters for ppt97
- else if ( nNumberingDepth == 4 )
- cBulletId = 0xbb;
- else
- cBulletId = 0x2022;
-
- switch( (SvxExtNumType)nNumberingType )
- {
- case SVX_NUM_CHARS_UPPER_LETTER :
- case SVX_NUM_CHARS_UPPER_LETTER_N :
- {
- if ( sSuffix == String( RTL_CONSTASCII_USTRINGPARAM( ")" ) ) )
- {
- if ( sPrefix == String( RTL_CONSTASCII_USTRINGPARAM( "(" ) ) )
- nMappedNumType = 0xa0001; // (A)
- else
- nMappedNumType = 0xb0001; // A)
- }
- else
- nMappedNumType = 0x10001; // A.
- }
- break;
- case SVX_NUM_CHARS_LOWER_LETTER :
- case SVX_NUM_CHARS_LOWER_LETTER_N :
- {
- if ( sSuffix == String( RTL_CONSTASCII_USTRINGPARAM( ")" ) ) )
- {
- if ( sPrefix == String( RTL_CONSTASCII_USTRINGPARAM( "(" ) ) )
- nMappedNumType = 0x80001; // (a)
- else
- nMappedNumType = 0x90001; // a)
- }
- else
- nMappedNumType = 0x00001; // a.
- }
- break;
- case SVX_NUM_ROMAN_UPPER :
- {
- if ( sSuffix == String( RTL_CONSTASCII_USTRINGPARAM( ")" ) ) )
- {
- if ( sPrefix == String( RTL_CONSTASCII_USTRINGPARAM( "(" ) ) )
- nMappedNumType = 0xe0001; // (I)
- else
- nMappedNumType = 0xf0001; // I)
- }
- else
- nMappedNumType = 0x70001; // I.
- }
- break;
- case SVX_NUM_ROMAN_LOWER :
- {
- if ( sSuffix == String( RTL_CONSTASCII_USTRINGPARAM( ")" ) ) )
- {
- if ( sPrefix == String( RTL_CONSTASCII_USTRINGPARAM( "(" ) ) )
- nMappedNumType = 0x40001; // (i)
- else
- nMappedNumType = 0x50001; // i)
- }
- else
- nMappedNumType = 0x60001; // i.
- }
- break;
- case SVX_NUM_ARABIC :
- {
- if ( sSuffix == String( RTL_CONSTASCII_USTRINGPARAM( ")" ) ) )
- {
- if ( sPrefix == String( RTL_CONSTASCII_USTRINGPARAM( "(" ) ) )
- nMappedNumType = 0xc0001; // (1)
- else
- nMappedNumType = 0x20001; // 1)
- }
- else
- {
- if ( ! ( sSuffix.Len() + sPrefix.Len() ) )
- nMappedNumType = 0xd0001; // 1
- else
- nMappedNumType = 0x30001; // 1.
- }
- }
- break;
- default:
- break;
- }
- }
- nParaFlags |= 0x2f;
- nBulletFlags |= 6;
- if ( mbIsBullet && bNumberingIsNumber )
- nBulletFlags |= 1;
- }
- }
- }
- }
- }
- nBulletOfs = nTextOfs + nBulletOfs;
- if ( nBulletOfs < 0 )
- nBulletOfs = 0;
-}
-
-void ParagraphObj::ImplGetParagraphValues( PPTExBulletProvider& rBuProv, sal_Bool bGetPropStateValue )
-{
- static String sNumberingLevel ( RTL_CONSTASCII_USTRINGPARAM( "NumberingLevel" ) );
-
- ::com::sun::star::uno::Any aAny;
- if ( GetPropertyValue( aAny, mXPropSet, sNumberingLevel, sal_True ) )
- {
- if ( bGetPropStateValue )
- meBullet = GetPropertyState( mXPropSet, sNumberingLevel );
- nDepth = *( (sal_Int16*)aAny.getValue() );
-
- if ( nDepth < 0 )
- {
- mbIsBullet = sal_False;
- nDepth = 0;
- }
- else
- {
- if ( nDepth > 4 )
- nDepth = 4;
- mbIsBullet = sal_True;
- }
- }
- else
- {
- nDepth = 0;
- mbIsBullet = sal_False;
- }
- ImplGetNumberingLevel( rBuProv, nDepth, mbIsBullet, bGetPropStateValue );
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "ParaTabStops" ) ), bGetPropStateValue ) )
- maTabStop = *( ::com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop>*)mAny.getValue();
- mnOOTextAdjust = ::com::sun::star::style::ParagraphAdjust_LEFT;
- if ( GetPropertyValue( aAny, mXPropSet, String( RTL_CONSTASCII_USTRINGPARAM( "ParaAdjust" ) ), bGetPropStateValue ) )
- aAny >>= mnOOTextAdjust;
- switch ( (::com::sun::star::style::ParagraphAdjust)mnOOTextAdjust )
- {
- case ::com::sun::star::style::ParagraphAdjust_CENTER :
- mnTextAdjust = 1;
- break;
- case ::com::sun::star::style::ParagraphAdjust_RIGHT :
- mnTextAdjust = 2;
- break;
- case ::com::sun::star::style::ParagraphAdjust_BLOCK :
- mnTextAdjust = 3;
- break;
- default :
- case ::com::sun::star::style::ParagraphAdjust_LEFT :
- mnTextAdjust = 0;
- break;
- }
- meTextAdjust = ePropState;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "ParaLineSpacing" ) ), bGetPropStateValue ) )
- {
- ::com::sun::star::style::LineSpacing aLineSpacing
- = *( (::com::sun::star::style::LineSpacing*)mAny.getValue() );
- switch ( aLineSpacing.Mode )
- {
- case ::com::sun::star::style::LineSpacingMode::FIX :
- mnLineSpacing = (sal_Int16)(-( aLineSpacing.Height ) );
- mbFixedLineSpacing = TRUE;
- break;
- case ::com::sun::star::style::LineSpacingMode::MINIMUM :
- case ::com::sun::star::style::LineSpacingMode::LEADING :
- mnLineSpacing = (sal_Int16)(-( aLineSpacing.Height ) );
- mbFixedLineSpacing = FALSE;
- break;
-
- case ::com::sun::star::style::LineSpacingMode::PROP :
- default:
- mnLineSpacing = (sal_Int16)( aLineSpacing.Height );
- break;
- }
- }
- meLineSpacing = ePropState;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "ParaBottomMargin" ) ), bGetPropStateValue ) )
- {
- double fSpacing = *( (sal_uInt32*)mAny.getValue() ) + ( 2540.0 / 576.0 ) - 1;
- mnLineSpacingBottom = (sal_Int16)(-( fSpacing * 576.0 / 2540.0 ) );
- }
- meLineSpacingBottom = ePropState;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "ParaTopMargin" ) ), bGetPropStateValue ) )
- {
- double fSpacing = *( (sal_uInt32*)mAny.getValue() ) + ( 2540.0 / 576.0 ) - 1;
- mnLineSpacingTop = (sal_Int16)(-( fSpacing * 576.0 / 2540.0 ) );
- }
- meLineSpacingTop = ePropState;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "ParaIsForbiddenRules" ) ), bGetPropStateValue ) )
- mAny >>= mbForbiddenRules;
- meForbiddenRules = ePropState;
-
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "ParaIsHangingPunctuation" ) ), bGetPropStateValue ) )
- mAny >>= mbParagraphPunctation;
- meParagraphPunctation = ePropState;
-
- mnBiDi = 0;
- if ( ImplGetPropertyValue( String( RTL_CONSTASCII_USTRINGPARAM( "WritingMode" ) ), bGetPropStateValue ) )
- {
- sal_Int16 nWritingMode = 0;
- mAny >>= nWritingMode;
-
- SvxFrameDirection eWritingMode( (SvxFrameDirection)nWritingMode );
- if ( ( eWritingMode == FRMDIR_HORI_RIGHT_TOP )
- || ( eWritingMode == FRMDIR_VERT_TOP_RIGHT ) )
- {
- mnBiDi = 1;
- }
- }
- meBiDi = ePropState;
-}
-
-void ParagraphObj::ImplConstruct( ParagraphObj& rParagraphObj )
-{
- mnTextSize = rParagraphObj.mnTextSize;
- mnTextAdjust = rParagraphObj.mnTextAdjust;
- mnLineSpacing = rParagraphObj.mnLineSpacing;
- mnLineSpacingTop = rParagraphObj.mnLineSpacingTop;
- mnLineSpacingBottom = rParagraphObj.mnLineSpacingBottom;
- mbFirstParagraph = rParagraphObj.mbFirstParagraph;
- mbLastParagraph = rParagraphObj.mbLastParagraph;
- mbParagraphPunctation = rParagraphObj.mbParagraphPunctation;
- mbForbiddenRules = rParagraphObj.mbForbiddenRules;
- mnBiDi = rParagraphObj.mnBiDi;
-
- for ( void* pPtr = rParagraphObj.First(); pPtr; pPtr = rParagraphObj.Next() )
- Insert( new PortionObj( *(PortionObj*)pPtr ), LIST_APPEND );
-
- maTabStop = rParagraphObj.maTabStop;
- bExtendedParameters = rParagraphObj.bExtendedParameters;
- nParaFlags = rParagraphObj.nParaFlags;
- nBulletFlags = rParagraphObj.nBulletFlags;
- sPrefix = rParagraphObj.sPrefix;
- sSuffix = rParagraphObj.sSuffix;
- sGraphicUrl = rParagraphObj.sGraphicUrl; // String auf eine Graphic
- aBuGraSize = rParagraphObj.aBuGraSize;
- nNumberingType = rParagraphObj.nNumberingType; // in wirlichkeit ist dies ein SvxEnum
- nHorzAdjust = rParagraphObj.nHorzAdjust;
- nBulletColor = rParagraphObj.nBulletColor;
- nBulletOfs = rParagraphObj.nBulletOfs;
- nStartWith = rParagraphObj.nStartWith; // Start der nummerierung
- nTextOfs = rParagraphObj.nTextOfs;
- nBulletRealSize = rParagraphObj.nBulletRealSize; // GroessenVerhaeltnis in Proz
- nDepth = rParagraphObj.nDepth; // aktuelle tiefe
- cBulletId = rParagraphObj.cBulletId; // wenn Numbering Type == CharSpecial
- aFontDesc = rParagraphObj.aFontDesc;
-
- bExtendedBulletsUsed = rParagraphObj.bExtendedBulletsUsed;
- nBulletId = rParagraphObj.nBulletId;
-}
-
-::com::sun::star::awt::Size ParagraphObj::ImplMapSize( const ::com::sun::star::awt::Size& rSize )
-{
- Size aSize( OutputDevice::LogicToLogic( Size( rSize.Width, rSize.Height ), maMapModeSrc, maMapModeDest ) );
- if ( !aSize.Width() )
- aSize.Width()++;
- if ( !aSize.Height() )
- aSize.Height()++;
- return ::com::sun::star::awt::Size( aSize.Width(), aSize.Height() );
-}
-
-sal_uInt32 ParagraphObj::ImplCalculateTextPositions( sal_uInt32 nCurrentTextPosition )
-{
- mnTextSize = 0;
- for ( void* pPtr = First(); pPtr; pPtr = Next() )
- mnTextSize += ((PortionObj*)pPtr)->ImplCalculateTextPositions( nCurrentTextPosition + mnTextSize );
- return mnTextSize;
-}
-
-ParagraphObj& ParagraphObj::operator=( ParagraphObj& rParagraphObj )
-{
- if ( this != &rParagraphObj )
- {
- ImplClear();
- ImplConstruct( rParagraphObj );
- }
- return *this;
-}
-
-// -----------------------------------------------------------------------
-
-ImplTextObj::ImplTextObj( int nInstance )
-{
- mnRefCount = 1;
- mnTextSize = 0;
- mnInstance = nInstance;
- mpList = new List;
- mbHasExtendedBullets = FALSE;
- mbFixedCellHeightUsed = FALSE;
-}
-
-ImplTextObj::~ImplTextObj()
-{
- for ( ParagraphObj* pPtr = (ParagraphObj*)mpList->First(); pPtr; pPtr = (ParagraphObj*)mpList->Next() )
- delete pPtr;
- delete mpList;
-}
-
-TextObj::TextObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XSimpleText > & rXTextRef,
- int nInstance, FontCollection& rFontCollection, PPTExBulletProvider& rProv )
-{
- mpImplTextObj = new ImplTextObj( nInstance );
-
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumerationAccess >
- aXTextParagraphEA( rXTextRef, ::com::sun::star::uno::UNO_QUERY );
-
- if ( aXTextParagraphEA.is() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration >
- aXTextParagraphE( aXTextParagraphEA->createEnumeration() );
- if ( aXTextParagraphE.is() )
- {
- ParaFlags aParaFlags;
- while ( aXTextParagraphE->hasMoreElements() )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > aXParagraph;
- ::com::sun::star::uno::Any aAny( aXTextParagraphE->nextElement() );
- if ( aAny >>= aXParagraph )
- {
- if ( !aXTextParagraphE->hasMoreElements() )
- aParaFlags.bLastParagraph = TRUE;
- ParagraphObj* pPara = new ParagraphObj( aXParagraph, aParaFlags, rFontCollection, rProv );
- mpImplTextObj->mbHasExtendedBullets |= pPara->bExtendedBulletsUsed;
- mpImplTextObj->mpList->Insert( pPara, LIST_APPEND );
- aParaFlags.bFirstParagraph = FALSE;
- }
- }
- }
- }
- ImplCalculateTextPositions();
-}
-
-TextObj::TextObj( TextObj& rTextObj )
-{
- mpImplTextObj = rTextObj.mpImplTextObj;
- mpImplTextObj->mnRefCount++;
-}
-
-TextObj::~TextObj()
-{
- if ( ! ( --mpImplTextObj->mnRefCount ) )
- delete mpImplTextObj;
-}
-
-void TextObj::ImplCalculateTextPositions()
-{
- mpImplTextObj->mnTextSize = 0;
- for ( void* pPtr = First(); pPtr; pPtr = Next() )
- mpImplTextObj->mnTextSize += ((ParagraphObj*)pPtr)->ImplCalculateTextPositions( mpImplTextObj->mnTextSize );
-}
-
-TextObj& TextObj::operator=( TextObj& rTextObj )
-{
- if ( this != &rTextObj )
- {
- if ( ! ( --mpImplTextObj->mnRefCount ) )
- delete mpImplTextObj;
- mpImplTextObj = rTextObj.mpImplTextObj;
- mpImplTextObj->mnRefCount++;
- }
- return *this;
-}
-
-// ---------------------------------------------------------------------------------------------
-
-FontCollectionEntry::~FontCollectionEntry()
-{
-}
-
-// ---------------------------------------------------------------------------------------------
-
-void FontCollectionEntry::ImplInit( const String& rName )
-{
- String aSubstName( GetSubsFontName( rName, SUBSFONT_ONLYONE | SUBSFONT_MS ) );
- if ( aSubstName.Len() )
- {
- Name = aSubstName;
- bIsConverted = sal_True;
- }
- else
- {
- Name = rName;
- bIsConverted = sal_False;
- }
-}
-
-FontCollection::~FontCollection()
-{
- for( void* pStr = List::First(); pStr; pStr = List::Next() )
- delete (FontCollectionEntry*)pStr;
- delete pVDev;
- xPPTBreakIter = NULL;
- xScriptTypeDetector = NULL;
-}
-
-FontCollection::FontCollection() :
- pVDev ( NULL )
-{
- com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
- xMSF = ::comphelper::getProcessServiceFactory();
- com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
- xInterface = xMSF->createInstance( rtl::OUString::createFromAscii( "com.sun.star.i18n.BreakIterator" ) );
- if ( xInterface.is() )
- xPPTBreakIter = com::sun::star::uno::Reference< com::sun::star::i18n::XBreakIterator >
- ( xInterface, com::sun::star::uno::UNO_QUERY );
-
- xInterface = xMSF->createInstance( rtl::OUString::createFromAscii( "com.sun.star.i18n.ScriptTypeDetector" ) );
- if ( xInterface.is() )
- xScriptTypeDetector = com::sun::star::uno::Reference< com::sun::star::i18n::XScriptTypeDetector >
- ( xInterface, com::sun::star::uno::UNO_QUERY );
-}
-
-short FontCollection::GetScriptDirection( const String& rString ) const
-{
- short nRet = com::sun::star::i18n::ScriptDirection::NEUTRAL;
- if ( xScriptTypeDetector.is() )
- {
- const rtl::OUString sT( rString );
- nRet = xScriptTypeDetector->getScriptDirection( sT, 0, com::sun::star::i18n::ScriptDirection::NEUTRAL );
- }
- return nRet;
-}
-
-sal_uInt32 FontCollection::GetId( FontCollectionEntry& rEntry )
-{
- if( rEntry.Name.Len() )
- {
- const sal_uInt32 nFonts = GetCount();
-
- for( sal_uInt32 i = 0; i < nFonts; i++ )
- {
- const FontCollectionEntry* pEntry = GetById( i );
- if( pEntry->Name == rEntry.Name )
- return i;
- }
- Font aFont;
- aFont.SetCharSet( rEntry.CharSet );
- aFont.SetName( rEntry.Original );
-// aFont.SetFamily( rEntry.Family );
-// aFont.SetPitch( rEntry.Pitch );
- aFont.SetHeight( 100 );
-
- if ( !pVDev )
- pVDev = new VirtualDevice;
-
- pVDev->SetFont( aFont );
- FontMetric aMetric( pVDev->GetFontMetric() );
-
- sal_uInt16 nTxtHeight = (sal_uInt16)aMetric.GetAscent() + (sal_uInt16)aMetric.GetDescent();
-
- if ( nTxtHeight )
- {
- double fScaling = (double)nTxtHeight / 120.0;
- if ( ( fScaling > 0.50 ) && ( fScaling < 1.5 ) )
- rEntry.Scaling = fScaling;
- }
-
- List::Insert( new FontCollectionEntry( rEntry ), LIST_APPEND );
- return nFonts;
- }
- return 0;
-}
-
-const FontCollectionEntry* FontCollection::GetById( sal_uInt32 nId )
-{
- return (FontCollectionEntry*)List::GetObject( nId );
-}
-
-// ---------------------------------------------------------------------------------------------
diff --git a/sd/source/filter/pptx/text.hxx b/sd/source/filter/pptx/text.hxx
deleted file mode 100644
index 13a775532e96..000000000000
--- a/sd/source/filter/pptx/text.hxx
+++ /dev/null
@@ -1,246 +0,0 @@
-#ifndef EPPT_TEXT_HXX
-#define EPPT_TEXT_HXX
-
-#include "epptbase.hxx"
-#include <rtl/textenc.h>
-#include <com/sun/star/awt/FontDescriptor.hpp>
-#include <com/sun/star/lang/Locale.hpp>
-
-namespace com { namespace sun { namespace star {
-namespace awt { class FontDescriptor; }
-namespace beans { class XPropertyState; }
-namespace text { class XTextRange; class XTextContent; class XSimpleText; }
-namespace style { class TabStop; }
-}}}
-
-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 = FALSE;
- nParaFlags = 0;
- nBulletFlags = 0;
- nBulletOfs = 0;
- nTextOfs = 0;
- bExtendedBulletsUsed = FALSE;
- nBulletId = 0xffff;
- bNumberingIsNumber = sal_True;
- };
-};
-
-class PropStateValue : public PropValue
-{
- public:
-
- PropStateValue() {}
-
- PropStateValue( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet,
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState > rXPropState )
- : PropValue( rXPropSet ),
- mXPropState( rXPropState )
- {}
-
- 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 = TRUE );
-
-};
-
-struct FieldEntry
-{
- sal_uInt32 nFieldType;
- sal_uInt32 nFieldStartPos;
- sal_uInt32 nFieldEndPos;
- String aRepresentation;
- String aFieldUrl;
-
- FieldEntry( sal_uInt32 nType, sal_uInt32 nStart, sal_uInt32 nEnd )
- {
- nFieldType = nType;
- nFieldStartPos = nStart;
- nFieldEndPos = nEnd;
- }
-};
-
-class PortionObj : public PropStateValue
-{
-
- friend class ParagraphObj;
-
- protected :
-
- void ImplClear();
- void ImplConstruct( 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 = 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( PortionObj& rPortionObj );
- ~PortionObj();
-
- void Write( SvStream* pStrm, sal_Bool bLast );
- sal_uInt32 Count() const { return mnTextSize; };
-
- PortionObj& operator=( PortionObj& rPortionObj );
-};
-
-struct ParaFlags
-{
- sal_Bool bFirstParagraph : 1;
- sal_Bool bLastParagraph : 1;
-
- ParaFlags() { bFirstParagraph = TRUE; bLastParagraph = FALSE; };
-};
-
-class ParagraphObj : public List, public PropStateValue, public SOParagraph
-{
- friend class TextObj;
- friend struct PPTExParaSheet;
-
- MapMode maMapModeSrc;
- MapMode maMapModeDest;
-
- protected :
-
- void ImplConstruct( ParagraphObj& rParagraphObj );
- void ImplClear();
- sal_uInt32 ImplCalculateTextPositions( sal_uInt32 nCurrentTextPosition );
- ::com::sun::star::awt::Size ImplMapSize( const ::com::sun::star::awt::Size& rSize );
- void ImplGetParagraphValues( PPTExBulletProvider& rBuProv, sal_Bool bGetPropStateValue = FALSE );
- void ImplGetNumberingLevel( PPTExBulletProvider& rBuProv, sal_Int16 nDepth, sal_Bool bIsBullet, sal_Bool bGetPropStateValue = 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 mnOOTextAdjust;
- sal_Int16 mnLineSpacing;
- sal_Bool mbFixedLineSpacing;
- 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( 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=( 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
-{
- ImplTextObj* mpImplTextObj;
- void ImplCalculateTextPositions();
-
- public :
- TextObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XSimpleText > &
- rXText, int nInstance, FontCollection& rFontCollection, PPTExBulletProvider& rBuProv );
- TextObj( TextObj& rTextObj );
- ~TextObj();
-
- 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; };
-
- TextObj& operator=( TextObj& rTextObj );
-};
-
-#endif
diff --git a/sd/util/makefile.mk b/sd/util/makefile.mk
index b24befb0e4f3..088057e90ce0 100755
--- a/sd/util/makefile.mk
+++ b/sd/util/makefile.mk
@@ -266,37 +266,6 @@ SHL5STDLIBS = $(ISDLIB) \
$(COMPHELPERLIB) \
$(I18NISOLANGLIB)
-# pptx export library
-SHL6TARGET = pptx$(DLLPOSTFIX)
-SHL6IMPLIB = pptxi
-SHL6VERSIONMAP= pptx.map
-SHL6DEF = $(MISC)$/$(SHL6TARGET).def
-SHL6LIBS = $(SLB)$/pptx.lib
-SHL6DEPN = $(SHL1TARGETN)
-DEF6NAME = $(SHL6TARGET)
-
-SHL6STDLIBS = $(ISDLIB) \
- $(SVXCORELIB) \
- $(SVXMSFILTERLIB) \
- $(SFX2LIB) \
- $(SVTOOLLIB) \
- $(SOTLIB) \
- $(GOODIESLIB) \
- $(VCLLIB) \
- $(MSFILTERLIB) \
- $(SVLLIB) \
- $(SOTLIB) \
- $(UNOTOOLSLIB) \
- $(TOOLSLIB) \
- $(UCBHELPERLIB) \
- $(CPPUHELPERLIB) \
- $(CPPULIB) \
- $(SALLIB) \
- $(COMPHELPERLIB) \
- $(I18NISOLANGLIB) \
- $(OOXLIB) \
- $(SAXLIB)
-
# --- Targets -------------------------------------------------------------
.INCLUDE : target.mk
diff --git a/sd/util/pptx.map b/sd/util/pptx.map
deleted file mode 100644
index f9d596074f4e..000000000000
--- a/sd/util/pptx.map
+++ /dev/null
@@ -1,9 +0,0 @@
-UDK_3_0_0 {
- global:
- component_getImplementationEnvironment;
- component_writeInfo;
- component_getFactory;
-
- local:
- *;
-};