diff options
author | Tor Lillqvist <tlillqvist@novell.com> | 2010-11-01 14:47:36 +0200 |
---|---|---|
committer | Tor Lillqvist <tml@hemulen.(none)> | 2010-11-05 23:52:14 +0200 |
commit | a76f993702df0164af9e2366142e9a6c379ae34d (patch) | |
tree | b5103a43bd61ad1d2ea3dc7aea67d4d01d6ff04d /sd/source/filter/eppt/epptbase.hxx | |
parent | 134fa007942b86b2dc50b7aeb63b465ab28568cc (diff) |
From hg changeset 0d3461509c7b601f0084eb3560fde9b6941c42ab in ooxml11
ooxml11: add added files
Diffstat (limited to 'sd/source/filter/eppt/epptbase.hxx')
-rw-r--r-- | sd/source/filter/eppt/epptbase.hxx | 443 |
1 files changed, 443 insertions, 0 deletions
diff --git a/sd/source/filter/eppt/epptbase.hxx b/sd/source/filter/eppt/epptbase.hxx new file mode 100644 index 000000000000..b0576eeeee6c --- /dev/null +++ b/sd/source/filter/eppt/epptbase.hxx @@ -0,0 +1,443 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * 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 EPPT_EPPTBASE_HXX +#define EPPT_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 Polygon; +class PptEscherEx; +class XStatusIndicatorRef; + +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 + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |