xref: /trunk/main/sd/source/filter/eppt/eppt.hxx (revision 70446171)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _EPPT_HXX_
25 #define _EPPT_HXX_
26 #include <vector>
27 #ifndef _PptEscherEx_HXX
28 #include "escherex.hxx"
29 #endif
30 #include <tools/solar.h>
31 #include <sot/storage.hxx>
32 #include <tools/gen.hxx>
33 #include <vcl/graph.hxx>
34 #include <unotools/fontcvt.hxx>
35 #include <tools/string.hxx>
36 #include "pptexanimations.hxx"
37 #include <pptexsoundcollection.hxx>
38 
39 // ------------------------------------------------------------------------
40 
41 #include <vcl/mapmod.hxx>
42 #include <com/sun/star/uno/Any.hxx>
43 #include <com/sun/star/frame/XModel.hpp>
44 #include <com/sun/star/drawing/FillStyle.hpp>
45 #include <com/sun/star/drawing/LineStyle.hpp>
46 #include <com/sun/star/drawing/DashStyle.hpp>
47 #include <com/sun/star/drawing/HatchStyle.hpp>
48 #include <com/sun/star/drawing/LineEndType.hpp>
49 #include <com/sun/star/drawing/Alignment.hpp>
50 #include <com/sun/star/drawing/TextAdjust.hpp>
51 #include <com/sun/star/drawing/CircleKind.hpp>
52 #include <com/sun/star/drawing/PolygonKind.hpp>
53 #include <com/sun/star/drawing/PolygonFlags.hpp>
54 #include <com/sun/star/drawing/XUniversalShapeDescriptor.hpp>
55 #include <com/sun/star/drawing/XShapeGrouper.hpp>
56 #include <com/sun/star/text/XSimpleText.hpp>
57 #include <com/sun/star/drawing/XConnectorShape.hpp>
58 #include <com/sun/star/drawing/BezierPoint.hpp>
59 #include <com/sun/star/drawing/Hatch.hpp>
60 #include <com/sun/star/drawing/LineDash.hpp>
61 #include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
62 #include <com/sun/star/presentation/XPresentationSupplier.hpp>
63 #include <com/sun/star/presentation/XCustomPresentationSupplier.hpp>
64 #include <com/sun/star/drawing/XMasterPageTarget.hpp>
65 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
66 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
67 #include <com/sun/star/awt/XGraphics.hpp>
68 #include <com/sun/star/task/XStatusIndicatorSupplier.hpp>
69 #include <com/sun/star/presentation/AnimationEffect.hpp>
70 #include <com/sun/star/presentation/FadeEffect.hpp>
71 #include <com/sun/star/presentation/ClickAction.hpp>
72 #include <com/sun/star/presentation/AnimationSpeed.hpp>
73 #include <com/sun/star/presentation/PresentationRange.hpp>
74 #include <com/sun/star/text/XTextFieldsSupplier.hpp>
75 #include <com/sun/star/text/XTextField.hpp>
76 #include <com/sun/star/container/XNamed.hpp>
77 #include <com/sun/star/awt/FontDescriptor.hpp>
78 #include <com/sun/star/container/XIndexContainer.hpp>
79 #include <com/sun/star/awt/XControlModel.hpp>
80 #include <com/sun/star/style/TabStop.hpp>
81 #include <filter/msfilter/msocximex.hxx>
82 #include <com/sun/star/beans/XPropertySet.hpp>
83 #include <com/sun/star/beans/XPropertyState.hpp>
84 #include <com/sun/star/beans/XPropertySetInfo.hpp>
85 #include <com/sun/star/awt/FontFamily.hpp>
86 #include <com/sun/star/awt/FontPitch.hpp>
87 #include <com/sun/star/awt/CharSet.hpp>
88 #include <com/sun/star/text/WritingMode.hpp>
89 #include <com/sun/star/lang/Locale.hpp>
90 
91 enum PageType { NORMAL = 0, MASTER = 1, NOTICE = 2, UNDEFINED = 3 };
92 
93 #define EPP_MAINMASTER_PERSIST_KEY		0x80010000
94 #define EPP_MAINNOTESMASTER_PERSIST_KEY	0x80020000
95 #define EPP_MAINSLIDE_PERSIST_KEY		0x80030000
96 #define EPP_MAINNOTES_PERSIST_KEY		0x80040000
97 
98 #define EPP_Persist_Document			0x80080000
99 #define EPP_Persist_MainMaster			0x80100000
100 #define EPP_Persist_MainNotes			0x80200000
101 #define EPP_Persist_Slide				0x80400000
102 #define EPP_Persist_Notes				0x80800000
103 #define EPP_Persist_CurrentPos			0x81000000
104 #define EPP_Persist_VBAInfoAtom			0x84000000
105 #define EPP_Persist_ExObj				0x88000000
106 
107 #define EPP_TEXTSTYLE_NORMAL			0x00000001
108 #define EPP_TEXTSTYLE_TITLE				0x00000010
109 #define EPP_TEXTSTYLE_BODY				0x00000100
110 #define EPP_TEXTSTYLE_TEXT				0x00001000
111 
112 // PLACEMENT_ID
113 #define EPP_LAYOUT_TITLESLIDE             0 /* The slide is a title slide                                                             */
114 #define EPP_LAYOUT_TITLEANDBODYSLIDE      1 /* Title and body slide                                                                   */
115 #define EPP_LAYOUT_TITLEMASTERSLIDE       2 /* Title master slide                                                                     */
116 #define	EPP_LAYOUT_MASTERSLIDE            3 /* Master slide layout                                                                    */
117 #define EPP_LAYOUT_MASTERNOTES            4 /* Master notes layout                                                                    */
118 #define EPP_LAYOUT_NOTESTITLEBODY         5 /* Notes title/body layout                                                                */
119 #define EPP_LAYOUT_HANDOUTLAYOUT          6 /* Handout layout, therefore it doesn't have placeholders except header, footer, and date */
120 #define EPP_LAYOUT_ONLYTITLE              7 /* Only title placeholder                                                                 */
121 #define EPP_LAYOUT_2COLUMNSANDTITLE       8 /* Body of the slide has 2 columns and a title                                            */
122 #define EPP_LAYOUT_2ROWSANDTITLE          9 /* Slide's body has 2 rows and a title                                                    */
123 #define EPP_LAYOUT_RIGHTCOLUMN2ROWS      10 /* Body contains 2 columns, right column has 2 rows                                       */
124 #define EPP_LAYOUT_LEFTCOLUMN2ROWS       11 /* Body contains 2 columns, left column has 2 rows                                        */
125 #define EPP_LAYOUT_BOTTOMROW2COLUMNS     12 /* Body contains 2 rows, bottom row has 2 columns                                         */
126 #define EPP_LAYOUT_TOPROW2COLUMN         13 /* Body contains 2 rows, top row has 2 columns                                            */
127 #define EPP_LAYOUT_4OBJECTS              14 /* 4 objects                                                                              */
128 #define EPP_LAYOUT_BIGOBJECT             15 /* Big object                                                                             */
129 #define EPP_LAYOUT_BLANCSLIDE            16 /* Blank slide                                                                            */
130 #define EPP_LAYOUT_TITLERIGHTBODYLEFT    17 /* Vertical title on the right, body on the left                                          */
131 #define EPP_LAYOUT_TITLERIGHT2BODIESLEFT 18 /* Vertical title on the right, body on the left split into 2 rows                        */
132 
133 class Polygon;
134 class PptEscherEx;
135 class XStatusIndicatorRef;
136 
137 struct PHLayout
138 {
139 	sal_Int32	nLayout;
140 	sal_uInt8	nPlaceHolder[ 8 ];
141 
142 	sal_uInt8	nUsedObjectPlaceHolder;
143 	sal_uInt8	nTypeOfTitle;
144 	sal_uInt8	nTypeOfOutliner;
145 
146 	sal_Bool	bTitlePossible;
147 	sal_Bool	bOutlinerPossible;
148 	sal_Bool	bSecOutlinerPossible;
149 };
150 
151 struct SOParagraph
152 {
153 	sal_Bool				bExtendedParameters;
154 	sal_uInt32				nParaFlags;
155 	sal_Int16				nBulletFlags;
156 	String					sPrefix;
157 	String					sSuffix;
158 	String					sGraphicUrl;			// String auf eine Graphic
159 	Size					aBuGraSize;
160 	sal_uInt32				nNumberingType;			// in wirlichkeit ist dies ein SvxEnum
161 	sal_uInt32				nHorzAdjust;
162 	sal_uInt32				nBulletColor;
163 	sal_Int32				nBulletOfs;
164 	sal_Int16				nStartWith;				// Start der nummerierung
165 	sal_Int16				nTextOfs;
166 	sal_Int16				nBulletRealSize;		// GroessenVerhaeltnis in Proz
167 	sal_Int16				nDepth;					// aktuelle tiefe
168 	sal_Unicode				cBulletId;				// wenn Numbering Type == CharSpecial
169 	::com::sun::star::awt::FontDescriptor		aFontDesc;
170 
171 	sal_Bool				bExtendedBulletsUsed;
172 	sal_uInt16				nBulletId;
173 	sal_uInt32				nMappedNumType;
174 	sal_Bool				bNumberingIsNumber;
175 
SOParagraphSOParagraph176 	SOParagraph()
177 	{
178 		nDepth = 0;
179 		bExtendedParameters = sal_False;
180 		nParaFlags = 0;
181 		nBulletFlags = 0;
182 		nBulletOfs = 0;
183 		nTextOfs = 0;
184 		bExtendedBulletsUsed = sal_False;
185 		nBulletId = 0xffff;
186 		bNumberingIsNumber = sal_True;
187 	};
188 };
189 
190 // ------------------------------------------------------------------------
191 
192 class EscherGraphicProvider;
193 class PPTExBulletProvider
194 {
195 	friend struct PPTExParaSheet;
196 
197 	protected :
198 
199 		SvMemoryStream			aBuExPictureStream;
200 		SvMemoryStream			aBuExOutlineStream;
201 		SvMemoryStream			aBuExMasterStream;
202 
203 		EscherGraphicProvider*	pGraphicProv;
204 
205 	public :
206 
207 		sal_uInt16				GetId( const ByteString& rUniqueId, Size& rGraphicSize );
208 
209 								PPTExBulletProvider();
210 								~PPTExBulletProvider();
211 };
212 
213 struct FontCollectionEntry
214 {
215 		String					Name;
216         double                  Scaling;
217 		sal_Int16				Family;
218 		sal_Int16				Pitch;
219 		sal_Int16				CharSet;
220 
221         String                  Original;
222         sal_Bool                bIsConverted;
223 
FontCollectionEntryFontCollectionEntry224 		FontCollectionEntry( const String& rName, sal_Int16 nFamily, sal_Int16 nPitch, sal_Int16 nCharSet ) :
225                             Scaling ( 1.0 ),
226 							Family	( nFamily ),
227 							Pitch	( nPitch ),
228 							CharSet	( nCharSet ),
229                             Original( rName )
230                             {
231                                 ImplInit( rName );
232                             };
233 
FontCollectionEntryFontCollectionEntry234 		FontCollectionEntry( const String& rName ) :
235 							Scaling ( 1.0 ),
236                             Original( rName )
237                             {
238                                 ImplInit( rName );
239                             };
240         ~FontCollectionEntry();
241 
242     private :
243 
FontCollectionEntryFontCollectionEntry244         FontCollectionEntry() {};
245 
246         void ImplInit( const String& rName );
247 };
248 
249 class VirtualDevice;
250 class FontCollection : private List
251 {
252         VirtualDevice* pVDev;
253 	public :
254 					FontCollection();
255 					~FontCollection();
256 
257 		short		GetScriptDirection( const String& rText ) const;
258 		sal_uInt32	GetId( FontCollectionEntry& rFontDescriptor );
GetCount() const259 		sal_uInt32	GetCount() const { return List::Count(); };
260 		const FontCollectionEntry*						GetById( sal_uInt32 nId );
GetLast()261 		FontCollectionEntry&	GetLast() { return *(FontCollectionEntry*)List::Last(); };
262 };
263 
264 // ------------------------------------------------------------------------
265 
266 #define PPTEX_STYLESHEETENTRYS	9
267 
268 enum PPTExTextAttr
269 {
270 	ParaAttr_BulletOn,
271 	ParaAttr_BuHardFont,
272 	ParaAttr_BuHardColor,
273 	ParaAttr_BuHardHeight,
274 	ParaAttr_BulletChar,
275 	ParaAttr_BulletFont,
276 	ParaAttr_BulletHeight,
277 	ParaAttr_BulletColor,
278 	ParaAttr_Adjust,
279 	ParaAttr_LineFeed,
280 	ParaAttr_UpperDist,
281 	ParaAttr_LowerDist,
282 	ParaAttr_TextOfs,
283 	ParaAttr_BulletOfs,
284 	ParaAttr_DefaultTab,
285     ParaAttr_AsianLB_1,
286     ParaAttr_AsianLB_2,
287     ParaAttr_AsianLB_3,
288 	ParaAttr_BiDi,
289 	CharAttr_Bold,
290 	CharAttr_Italic,
291 	CharAttr_Underline,
292 	CharAttr_Shadow,
293 	CharAttr_Strikeout,
294 	CharAttr_Embossed,
295 	CharAttr_Font,
296 	CharAttr_AsianOrComplexFont,
297 	CharAttr_Symbol,
298 	CharAttr_FontHeight,
299 	CharAttr_FontColor,
300 	CharAttr_Escapement
301 };
302 
303 struct PPTExCharLevel
304 {
305 	sal_uInt16		mnFlags;
306 	sal_uInt16		mnFont;
307 	sal_uInt16		mnAsianOrComplexFont;
308 	sal_uInt16		mnFontHeight;
309 	sal_uInt16		mnEscapement;
310 	sal_uInt32		mnFontColor;
311 };
312 
313 struct PPTExCharSheet
314 {
315 				PPTExCharLevel	maCharLevel[ 5 ];
316 
317 				PPTExCharSheet( int nInstance );
318 
319 				void	SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
320 										FontCollection& rFontCollection, int nLevel );
321 				void	Write( SvStream& rSt, PptEscherEx* pEx, sal_uInt16 nLev, sal_Bool bFirst, sal_Bool bSimpleText,
322                             const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPagePropSet );
323 
324 };
325 
326 struct PPTExParaLevel
327 {
328 	sal_Bool	    mbIsBullet;
329 	sal_uInt16		mnBulletChar;
330 	sal_uInt16		mnBulletFont;
331 	sal_uInt16		mnBulletHeight;
332 	sal_uInt32		mnBulletColor;
333 
334 	sal_uInt16		mnAdjust;
335 	sal_uInt16		mnLineFeed;
336 	sal_uInt16		mnUpperDist;
337 	sal_uInt16		mnLowerDist;
338 	sal_uInt16		mnTextOfs;
339 	sal_uInt16		mnBulletOfs;
340 	sal_uInt16		mnDefaultTab;
341 
342 	sal_Bool		mbExtendedBulletsUsed;
343 	sal_uInt16		mnBulletId;
344 	sal_uInt16		mnBulletStart;
345 	sal_uInt32		mnMappedNumType;
346 	sal_uInt32		mnNumberingType;
347     sal_uInt16      mnAsianSettings;
348 	sal_uInt16		mnBiDi;
349 };
350 
351 struct PPTExParaSheet
352 {
353 				PPTExBulletProvider& rBuProv;
354 
355 				sal_uInt32	mnInstance;
356 
357 				PPTExParaLevel	maParaLevel[ 5 ];
358 				PPTExParaSheet( int nInstance, sal_uInt16 nDefaultTab, PPTExBulletProvider& rProv );
359 
360 				void	SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
361 										FontCollection& rFontCollection, int nLevel, const PPTExCharLevel& rCharLevel );
362 				void	Write( SvStream& rSt, PptEscherEx* pEx, sal_uInt16 nLev, sal_Bool bFirst, sal_Bool bSimpleText,
363                     const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPagePropSet );
364 };
365 
366 class PPTExStyleSheet
367 {
368 
369 	public :
370 
371         	    PPTExCharSheet*		mpCharSheet[ PPTEX_STYLESHEETENTRYS ];
372 	            PPTExParaSheet*		mpParaSheet[ PPTEX_STYLESHEETENTRYS ];
373 
374 				PPTExStyleSheet( sal_uInt16 nDefaultTab, PPTExBulletProvider& rBuProv );
375 				~PPTExStyleSheet();
376 
GetParaSheet(int nInstance)377 				PPTExParaSheet& GetParaSheet( int nInstance ) { return *mpParaSheet[ nInstance ]; };
GetCharSheet(int nInstance)378 				PPTExCharSheet& GetCharSheet( int nInstance ) { return *mpCharSheet[ nInstance ]; };
379 
380 				void			SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
381 												FontCollection& rFontCollection, int nInstance, int nLevel );
382 				sal_Bool		IsHardAttribute( sal_uInt32 nInstance, sal_uInt32 nLevel, PPTExTextAttr eAttr, sal_uInt32 nValue );
383 
384 				sal_uInt32		SizeOfTxCFStyleAtom() const;
385 				void			WriteTxCFStyleAtom( SvStream& rSt );
386 };
387 
388 
389 struct EPPTHyperlink
390 {
391 	String		aURL;
392 	sal_uInt32	nType;		// bit 0-7 : type		( 1: click action to a slide )
393 							//						( 2: hyperlink url )
394 							// bit 8-23: index
395 							// bit 31  : hyperlink is attached to a shape
396 
EPPTHyperlinkEPPTHyperlink397 	EPPTHyperlink( const String rURL, sal_uInt32 nT ) :
398 		aURL		( rURL ),
399 		nType		( nT ){};
400 };
401 
402 enum PPTExOleObjEntryType
403 {
404 	NORMAL_OLE_OBJECT, OCX_CONTROL
405 };
406 
407 struct PPTExOleObjEntry
408 {
409 	PPTExOleObjEntryType	eType;
410 	sal_uInt32				nOfsA;			// offset to the EPP_ExOleObjAtom in mpExEmbed (set at creation)
411 	sal_uInt32				nOfsB;			// offset to the EPP_ExOleObjStg
412 
413 	::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >	xControlModel;
414 	::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >  		xShape;
415 
PPTExOleObjEntryPPTExOleObjEntry416 	PPTExOleObjEntry( PPTExOleObjEntryType eT, sal_uInt32 nOfs ) :
417 		eType	( eT ),
418 		nOfsA	( nOfs ) {};
419 };
420 
421 struct TextRuleEntry
422 {
423 	int					nPageNumber;
424 	SvMemoryStream*		pOut;
425 
TextRuleEntryTextRuleEntry426 	TextRuleEntry( int nPg ) :
427 		nPageNumber( nPg ),
428 		pOut ( NULL ){};
429 
~TextRuleEntryTextRuleEntry430 	~TextRuleEntry() { delete pOut; };
431 };
432 
433 // ------------------------------------------------------------------------
434 
435 struct GroupEntry
436 {
437 		sal_uInt32					mnCurrentPos;
438 		sal_uInt32					mnCount;
439 		::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >			mXIndexAccess;
GroupEntryGroupEntry440 								GroupEntry( ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & rIndex )
441 								{
442 									mXIndexAccess = rIndex;
443 									mnCount =mXIndexAccess->getCount();
444 									mnCurrentPos = 0;
445 								};
GroupEntryGroupEntry446 								GroupEntry( sal_uInt32 nCount )
447 								{
448 									mnCount = nCount;
449 									mnCurrentPos = 0;
450 								};
~GroupEntryGroupEntry451 								~GroupEntry(){};
452 };
453 
454 // ------------------------------------------------------------------------
455 
456 class GroupTable
457 {
458 	protected:
459 
460 		sal_uInt32				mnIndex;
461 		sal_uInt32				mnCurrentGroupEntry;
462 		sal_uInt32				mnMaxGroupEntry;
463 		sal_uInt32				mnGroupsClosed;
464 		GroupEntry**			mpGroupEntry;
465 
466 		void					ImplResizeGroupTable( sal_uInt32 nEntrys );
467 
468 	public:
469 
GetCurrentGroupIndex() const470 		sal_uInt32				GetCurrentGroupIndex() const { return mnIndex; };
GetCurrentGroupLevel() const471 		sal_Int32				GetCurrentGroupLevel() const { return mnCurrentGroupEntry - 1; };
472 		::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > &
GetCurrentGroupAccess() const473 								GetCurrentGroupAccess() const { return mpGroupEntry[  mnCurrentGroupEntry - 1 ]->mXIndexAccess; };
474 		sal_uInt32				GetGroupsClosed();
475 		void					ResetGroupTable( sal_uInt32 nCount );
476 		void					ClearGroupTable();
477 		sal_Bool                EnterGroup( ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & rIndex );
478 		sal_Bool				GetNextGroupEntry();
479 								GroupTable();
480 								~GroupTable();
481 };
482 
483 class PropValue
484 {
485 	protected :
486 
487 		::com::sun::star::uno::Any								mAny;
488 
489 		::com::sun::star::uno::Reference
490 			< ::com::sun::star::beans::XPropertySet	>			mXPropSet;
491 
492 		sal_Bool	ImplGetPropertyValue( const String& rString );
493 		sal_Bool	ImplGetPropertyValue( const ::com::sun::star::uno::Reference
494 						< ::com::sun::star::beans::XPropertySet > &, const String& );
495 
496 	public :
497 
498 		static sal_Bool GetPropertyValue(
499 				::com::sun::star::uno::Any& rAny,
500 					const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
501 						const String& rPropertyName,
502 							sal_Bool bTestPropertyAvailability = sal_False );
503 
504 		static ::com::sun::star::beans::PropertyState GetPropertyState(
505 					const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > &,
506 						const String& rPropertyName );
507 };
508 
509 class PropStateValue : public PropValue
510 {
511 	protected :
512 
513 		::com::sun::star::beans::PropertyState					ePropState;
514 		::com::sun::star::uno::Reference
515 			< ::com::sun::star::beans::XPropertyState >			mXPropState;
516 
517 		sal_Bool	ImplGetPropertyValue( const String& rString, sal_Bool bGetPropertyState = sal_True );
518 
519 };
520 
521 // ------------------------------------------------------------------------
522 
523 struct FieldEntry;
524 class PortionObj : public PropStateValue
525 {
526 
527 	friend class ParagraphObj;
528 
529 	protected :
530 
531 		void			ImplClear();
532 		void			ImplConstruct( const PortionObj& rPortionObj );
533 		sal_uInt32		ImplGetTextField( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & rXTextRangeRef,
534 							const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSetRef, String& rURL );
535 		sal_uInt32		ImplCalculateTextPositions( sal_uInt32 nCurrentTextPosition );
536 		void			ImplGetPortionValues( FontCollection& rFontCollection, sal_Bool bGetPropStateValue = sal_False );
537 
538 	public :
539 
540 		::com::sun::star::beans::PropertyState	meCharColor;
541 		::com::sun::star::beans::PropertyState	meCharHeight;
542 		::com::sun::star::beans::PropertyState	meFontName;
543 		::com::sun::star::beans::PropertyState	meAsianOrComplexFont;
544 		::com::sun::star::beans::PropertyState	meCharEscapement;
545 		::com::sun::star::lang::Locale			meCharLocale;
546 		sal_uInt16		mnCharAttrHard;
547 
548 		sal_uInt32		mnCharColor;
549 		sal_uInt16		mnCharAttr;
550 		sal_uInt16		mnCharHeight;
551 		sal_uInt16		mnFont;
552 		sal_uInt16		mnAsianOrComplexFont;
553 		sal_Int16		mnCharEscapement;
554 
555 		sal_uInt32		mnTextSize;
556 		sal_Bool		mbLastPortion;
557 
558 		sal_uInt16*		mpText;
559 		FieldEntry*		mpFieldEntry;
560 
561 						PortionObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & rXTextRangeRef,
562 										sal_Bool bLast, FontCollection& rFontCollection );
563 						PortionObj( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSetRef,
564 										FontCollection& rFontCollection );
565 						PortionObj( const PortionObj& rPortionObj );
566 						~PortionObj();
567 
568 		void			Write( SvStream* pStrm, sal_Bool bLast );
Count() const569 		sal_uInt32		Count() const { return mnTextSize; };
570 
571 		PortionObj&		operator=( const PortionObj& rPortionObj );
572 };
573 
574 struct ParaFlags
575 {
576 	sal_Bool	bFirstParagraph : 1;
577 	sal_Bool	bLastParagraph	: 1;
578 
ParaFlagsParaFlags579 					ParaFlags() { bFirstParagraph = sal_True; bLastParagraph = sal_False; };
580 };
581 
582 class ParagraphObj : public List, public PropStateValue, public SOParagraph
583 {
584 	friend class TextObj;
585 	friend struct PPTExParaSheet;
586 
587 		MapMode			maMapModeSrc;
588 		MapMode			maMapModeDest;
589 
590 	protected :
591 
592 		void			ImplConstruct( const ParagraphObj& rParagraphObj );
593 		void			ImplClear();
594 		sal_uInt32		ImplCalculateTextPositions( sal_uInt32 nCurrentTextPosition );
595 		void			ImplGetParagraphValues( PPTExBulletProvider& rBuProv, sal_Bool bGetPropStateValue = sal_False );
596 		void			ImplGetNumberingLevel( PPTExBulletProvider& rBuProv, sal_Int16 nDepth, sal_Bool bIsBullet, sal_Bool bGetPropStateValue = sal_False );
597 
598 	public :
599 
600 		::com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop > maTabStop;
601 
602 		sal_uInt32			mnTextSize;
603 
604 		sal_Bool			mbIsBullet;
605 		sal_Bool			mbFirstParagraph;
606 		sal_Bool			mbLastParagraph;
607 
608 		::com::sun::star::beans::PropertyState	meBullet;
609 		::com::sun::star::beans::PropertyState	meTextAdjust;
610 		::com::sun::star::beans::PropertyState	meLineSpacing;
611 		::com::sun::star::beans::PropertyState	meLineSpacingTop;
612 		::com::sun::star::beans::PropertyState	meLineSpacingBottom;
613 		::com::sun::star::beans::PropertyState	meForbiddenRules;
614 		::com::sun::star::beans::PropertyState	meParagraphPunctation;
615 		::com::sun::star::beans::PropertyState	meBiDi;
616 
617 		sal_uInt16								mnTextAdjust;
618 		sal_Int16								mnLineSpacing;
619 		sal_Int16								mnLineSpacingTop;
620 		sal_Int16								mnLineSpacingBottom;
621         sal_Bool								mbForbiddenRules;
622         sal_Bool								mbParagraphPunctation;
623 		sal_uInt16								mnBiDi;
624 
625 						ParagraphObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > & rXTextContentRef,
626 							ParaFlags, FontCollection& rFontCollection,
627 								PPTExBulletProvider& rBuProv );
628 						ParagraphObj( const ParagraphObj& rParargraphObj );
629 						ParagraphObj( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSetRef,
630 										PPTExBulletProvider& rBuProv );
631 
632 		void			CalculateGraphicBulletSize( sal_uInt16 nFontHeight );
633 						~ParagraphObj();
634 
635 		void			Write( SvStream* pStrm );
Count() const636 		sal_uInt32			Count() const { return mnTextSize; };
637 
638 		ParagraphObj&	operator=( const ParagraphObj& rParagraphObj );
639 };
640 
641 struct ImplTextObj
642 {
643 	sal_uInt32		mnRefCount;
644 	sal_uInt32		mnTextSize;
645 	int				mnInstance;
646 	List*			mpList;
647 	sal_Bool		mbHasExtendedBullets;
648 	sal_Bool		mbFixedCellHeightUsed;
649 
650 					ImplTextObj( int nInstance );
651 					~ImplTextObj();
652 };
653 
654 class TextObj
655 {
656 		mutable ImplTextObj*	mpImplTextObj;
657 		void			ImplCalculateTextPositions();
658 
659 	public :
660 						TextObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XSimpleText > &
661 									rXText, int nInstance, FontCollection& rFontCollection, PPTExBulletProvider& rBuProv );
662 						TextObj( const TextObj& rTextObj );
663 						~TextObj();
664 
665 		void			Write( SvStream* pStrm );
666 
First()667 		ParagraphObj*	First(){ return (ParagraphObj*)mpImplTextObj->mpList->First(); };
Next()668 		ParagraphObj*	Next(){ return(ParagraphObj*)mpImplTextObj->mpList->Next(); };
Count() const669 		sal_uInt32		Count() const { return mpImplTextObj->mnTextSize; };
GetInstance() const670 		int				GetInstance() const { return mpImplTextObj->mnInstance; };
HasExtendedBullets()671 		sal_Bool		HasExtendedBullets(){ return mpImplTextObj->mbHasExtendedBullets; };
672 		void			WriteTextSpecInfo( SvStream* pStrm );
673 
674 		TextObj&		operator=( TextObj& rTextObj );
675 };
676 
677 // ------------------------------------------------------------------------
678 struct CellBorder;
679 class PPTWriter : public GroupTable, public PropValue, public PPTExBulletProvider
680 {
681 		sal_Bool						mbStatus;
682 		sal_Bool						mbUseNewAnimations;
683 		sal_uInt32						mnStatMaxValue;
684 		sal_uInt32						mnLatestStatValue;
685 		std::vector< PPTExStyleSheet* >	maStyleSheetList;
686 		PPTExStyleSheet*				mpStyleSheet;
687 
688 		Fraction						maFraction;
689 		MapMode							maMapModeSrc;
690 		MapMode							maMapModeDest;
691 		::com::sun::star::awt::Size		maDestPageSize;
692         Size                            maPageSize; // #121183# Keep size in logic coordinates (100th mm)
693 		::com::sun::star::awt::Size		maNotesPageSize;
694 		PageType						meLatestPageType;
695 		List							maSlideNameList;
696 		rtl::OUString					maBaseURI;
697 
698 		::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >					mXModel;
699 		::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator >		mXStatusIndicator;
700 		::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPagesSupplier >	mXDrawPagesSupplier;
701 		::com::sun::star::uno::Reference< ::com::sun::star::drawing::XMasterPagesSupplier >	mXMasterPagesSupplier;
702 		::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPages	>			mXDrawPages;
703 		::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >			mXDrawPage;
704 		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >			mXPagePropSet;
705 	    ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >			mXBackgroundPropSet;
706 		::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >  			mXShapes;
707 		::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape	>				mXShape;
708 		::com::sun::star::uno::Reference< ::com::sun::star::text::XSimpleText >				mXText;				// TextRef des globalen Text
709 		::com::sun::star::uno::Reference< ::com::sun::star::text::XTextCursor >				mXCursor;
710 		::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >				mXCursorText;		// TextRef des Teilstuecks des Cursors
711 		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet	>			mXCursorPropSet;	// die Properties des Teilstueckes
712 		::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField >				mXTextField;
713 		::com::sun::star::awt::Size			maSize;
714 		::com::sun::star::awt::Point		maPosition;
715 		Rectangle			maRect;
716 		ByteString			mType;
717 		sal_Bool			mbPresObj;
718 		sal_Bool			mbEmptyPresObj;
719 		sal_Bool			mbStatusIndicator;
720 		sal_Int32			mnAngle;
721 		sal_uInt32			mnTextStyle;
722 
723 		sal_Bool			mbFontIndependentLineSpacing;
724 		sal_uInt32			mnTextSize;
725 
726 		SvStorageRef		mrStg;
727 		SvStream*			mpCurUserStrm;
728 		SvStream*			mpStrm;
729 		SvStream*			mpPicStrm;
730 		PptEscherEx*		mpPptEscherEx;
731 
732 		List				maExOleObj;
733 		sal_uInt32			mnVBAOleOfs;
734 		SvMemoryStream*		mpVBA;
735 		sal_uInt32			mnExEmbed;
736 		SvMemoryStream*		mpExEmbed;
737 
738 		sal_uInt32			mnPages;			// anzahl einzelner Slides ( ohne masterpages & notes & handout )
739 		sal_uInt32			mnMasterPages;		//
740 		sal_uInt32			mnDrawings;			// anzahl Slides +  masterpages + notes +  handout
741 		sal_uInt32			mnPagesWritten;
742 		sal_uInt32			mnUniqueSlideIdentifier;
743 		sal_uInt32			mnTxId;				// Identifier determined by the HOST (PP) ????
744 		sal_uInt32			mnDiaMode;			// 0 -> manuell
745 												// 1 -> halbautomatisch
746 												// 2 -> automatisch
747 
748 		sal_uInt32			mnShapeMasterTitle;
749 		sal_uInt32			mnShapeMasterBody;
750 
751 		List				maHyperlink;
752 
753 		FontCollection			maFontCollection;
754 		ppt::ExSoundCollection	maSoundCollection;
755 
756 		PHLayout&			ImplGetLayout( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPropSet ) const;
757 		void				ImplWriteExtParaHeader( SvMemoryStream& rSt, sal_uInt32 nRef, sal_uInt32 nInstance, sal_uInt32 nSlideId );
758 
759 
760 		sal_uInt32			ImplProgBinaryTag( SvStream* pOutStrm = NULL );
761 		sal_uInt32			ImplProgBinaryTagContainer( SvStream* pOutStrm = NULL, SvMemoryStream* pBinTag = NULL );
762 		sal_uInt32			ImplProgTagContainer( SvStream* pOutStrm = NULL, SvMemoryStream* pBinTag = NULL );
763 		sal_uInt32			ImplOutlineViewInfoContainer( SvStream* pOutStrm = NULL );
764 		sal_uInt32			ImplSlideViewInfoContainer( sal_uInt32 nInstance, SvStream* pOutStrm = NULL );
765 		sal_uInt32			ImplVBAInfoContainer( SvStream* pOutStrm = NULL );
766 		sal_uInt32			ImplDocumentListContainer( SvStream* pOutStrm = NULL );
767 		sal_uInt32			ImplMasterSlideListContainer( SvStream* pOutStrm = NULL );
768 
769 	public:
770 		static void			WriteCString( SvStream&, const String&, sal_uInt32 nInstance = 0 );
771 
772 	protected:
773 
774 		sal_Bool			ImplCreateDocumentSummaryInformation( sal_uInt32 nCnvrtFlags );
775 		sal_Bool			ImplCreateCurrentUserStream();
776 		void				ImplCreateHeaderFooterStrings( SvStream& rOut,
777 								::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPagePropSet );
778 		void				ImplCreateHeaderFooters( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rXPagePropSet );
779 		sal_Bool			ImplCreateDocument();
780 		sal_Bool			ImplCreateHyperBlob( SvMemoryStream& rStream );
781 		sal_uInt32			ImplInsertBookmarkURL( const String& rBookmark, const sal_uInt32 nType,
782 			const String& rStringVer0, const String& rStringVer1, const String& rStringVer2, const String& rStringVer3 );
783 		sal_Bool			ImplCreateMaster( sal_uInt32 nPageNum );
784 		sal_Bool			ImplCreateMainNotes();
785 		sal_Bool			ImplCreateSlide( sal_uInt32 nPageNum );
786 		sal_Bool			ImplCreateNotes( sal_uInt32 nPageNum );
787 		void				ImplWriteBackground( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXBackgroundPropSet );
788 		void				ImplWriteVBA( SvMemoryStream* pVBA );
789 		void				ImplWriteOLE( sal_uInt32 nCnvrtFlags );
790 		sal_Bool			ImplWriteAtomEnding();
791 
792 		sal_Bool			ImplInitSOIface();
793 		sal_Bool			ImplSetCurrentStyleSheet( sal_uInt32 nPageNum );
794 		sal_Bool			ImplGetPageByIndex( sal_uInt32 nIndex, PageType );
795 		sal_Bool			ImplGetShapeByIndex( sal_uInt32 nIndex, sal_Bool bGroup = sal_False );
796 		sal_uInt32			ImplGetMasterIndex( PageType ePageType );
797 		void				ImplFlipBoundingBox( EscherPropertyContainer& rPropOpt );
798 		sal_Bool			ImplGetText();
799 		sal_Bool			ImplCreatePresentationPlaceholder( const sal_Bool bMaster, const PageType PageType,
800 								const sal_uInt32 StyleInstance, const sal_uInt8 PlaceHolderId );
801 		sal_Bool			ImplGetEffect( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
802 								::com::sun::star::presentation::AnimationEffect& eEffect,
803 								::com::sun::star::presentation::AnimationEffect& eTextEffect,
804 								sal_Bool& bHasSound );
805 		void				ImplWriteObjectEffect( SvStream& rSt,
806 								::com::sun::star::presentation::AnimationEffect eEffect,
807 								::com::sun::star::presentation::AnimationEffect eTextEffect,
808 								sal_uInt16 nOrder );
809 		void				ImplWriteClickAction( SvStream& rSt, ::com::sun::star::presentation::ClickAction eAction, sal_Bool bMediaClickAction );
810 		sal_Bool			ImplGetStyleSheets();
811 		void				ImplWriteParagraphs( SvStream& rOutStrm, TextObj& rTextObj );
812 		void				ImplWritePortions( SvStream& rOutStrm, TextObj& rTextObj );
813 		void				ImplWriteTextStyleAtom( SvStream& rOut, int nTextInstance, sal_uInt32 nAtomInstance,
814 								TextRuleEntry* pTextRule, SvStream& rExtBu, EscherPropertyContainer* );
815 		void				ImplAdjustFirstLineLineSpacing( TextObj& rTextObj, EscherPropertyContainer& rPropOpt );
816 		void				ImplCreateShape( sal_uInt32 nType, sal_uInt32 nFlags, EscherSolverContainer& );
817 		void				ImplCreateTextShape( EscherPropertyContainer&, EscherSolverContainer&, sal_Bool bFill );
818 
819 		void				ImplWritePage( const PHLayout& rLayout,
820 												EscherSolverContainer& rSolver,
821 													PageType ePageType,
822 														sal_Bool bMaster,
823 															int nPageNumber = 0 );
824 		sal_Bool			ImplCreateCellBorder( const CellBorder* pCellBorder, sal_Int32 nX1, sal_Int32 nY1, sal_Int32 nX2, sal_Int32 nY2 );
825 		void				ImplCreateTable( com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& rXShape, EscherSolverContainer& aSolverContainer,
826 								EscherPropertyContainer& aPropOpt );
827 		::com::sun::star::awt::Point		ImplMapPoint( const ::com::sun::star::awt::Point& );
828 		::com::sun::star::awt::Size			ImplMapSize( const ::com::sun::star::awt::Size& );
829 		Rectangle							ImplMapRectangle( const ::com::sun::star::awt::Rectangle& );
830 
831 		sal_Bool							ImplCloseDocument();		// die font-, hyper-, Soundliste wird geschrieben ..
832 
833 	public:
834 								PPTWriter( const std::vector< com::sun::star::beans::PropertyValue >&, SvStorageRef& rSvStorage,
835 											::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & rModel,
836 											::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > & rStatInd,
837 												SvMemoryStream* pVBA, sal_uInt32 nCnvrtFlags );
838 
839 								~PPTWriter();
840 
IsValid() const841 		sal_Bool				IsValid() const { return mbStatus; };
842 };
843 
844 
845 #endif
846