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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_xmloff.hxx"
26 #include "unointerfacetouniqueidentifiermapper.hxx"
27 #include <xmloff/nmspmap.hxx>
28 #include "xmloff/xmlnmspe.hxx"
29 #include <xmloff/xmluconv.hxx>
30 #include <xmloff/xmltoken.hxx>
31 #include <xmloff/xmlmetae.hxx>
32 #include <com/sun/star/lang/ServiceNotRegisteredException.hpp>
33 #include <com/sun/star/presentation/XPresentationSupplier.hpp>
34 #include <com/sun/star/presentation/XCustomPresentationSupplier.hpp>
35 #include <com/sun/star/geometry/RealPoint2D.hpp>
36 #include <com/sun/star/task/XStatusIndicatorSupplier.hpp>
37 #include <com/sun/star/office/XAnnotationAccess.hpp>
38 #include <com/sun/star/lang/Locale.hpp>
39 #include <com/sun/star/uno/Any.hxx>
40 #include "sdxmlexp_impl.hxx"
41 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
42 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
43 #include <com/sun/star/presentation/XHandoutMasterSupplier.hpp>
44 #include <com/sun/star/container/XIndexContainer.hpp>
45 #include <com/sun/star/view/PaperOrientation.hpp>
46 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
47 #include <com/sun/star/style/XStyle.hpp>
48
49 #include <com/sun/star/form/XFormsSupplier2.hpp>
50 #include <com/sun/star/presentation/XPresentationPage.hpp>
51 #include <com/sun/star/drawing/XMasterPageTarget.hpp>
52 #include <com/sun/star/text/XText.hpp>
53 #include <com/sun/star/chart/XChartDocument.hpp>
54 #include <com/sun/star/animations/XAnimationNodeSupplier.hpp>
55 #include <com/sun/star/container/XNamed.hpp>
56 #include <rtl/ustrbuf.hxx>
57 #include <tools/gen.hxx>
58 #include <tools/debug.hxx>
59 #include <xmloff/xmlaustp.hxx>
60 #include <xmloff/families.hxx>
61 #include <xmloff/styleexp.hxx>
62 #include "sdpropls.hxx"
63 #include <xmloff/xmlexppr.hxx>
64 #include <com/sun/star/beans/XPropertyState.hpp>
65 #include "xexptran.hxx"
66
67 #ifndef _CPPUHELPER_IMPLBASE1_HXX
68 #include <cppuhelper/implbase1.hxx>
69 #endif
70 #include <comphelper/extract.hxx>
71 #include <com/sun/star/lang/XServiceInfo.hpp>
72 #include "PropertySetMerger.hxx"
73 #include "layerexp.hxx"
74
75
76 #include "xmloff/VisAreaExport.hxx"
77 #include "XMLNumberStylesExport.hxx"
78 #include <tools/list.hxx>
79 #include <tools/string.hxx>
80
81 #include "animationexport.hxx"
82
83 #include <com/sun/star/document/XDocumentProperties.hpp>
84 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
85
86 using ::rtl::OUString;
87 using ::rtl::OUStringBuffer;
88
89 using namespace ::com::sun::star;
90 using namespace ::com::sun::star::uno;
91 using namespace ::com::sun::star::beans;
92 using namespace ::com::sun::star::util;
93 using namespace ::com::sun::star::container;
94 using namespace ::com::sun::star::drawing;
95 using namespace ::com::sun::star::office;
96 using namespace ::com::sun::star::presentation;
97 using namespace ::com::sun::star::geometry;
98 using namespace ::com::sun::star::text;
99 using namespace ::xmloff::token;
100
101
102 //////////////////////////////////////////////////////////////////////////////
103
104 class ImpXMLEXPPageMasterInfo
105 {
106 sal_Int32 mnBorderBottom;
107 sal_Int32 mnBorderLeft;
108 sal_Int32 mnBorderRight;
109 sal_Int32 mnBorderTop;
110 sal_Int32 mnWidth;
111 sal_Int32 mnHeight;
112 view::PaperOrientation meOrientation;
113 OUString msName;
114 OUString msMasterPageName;
115
116 public:
117 ImpXMLEXPPageMasterInfo(const SdXMLExport& rExp, const Reference<XDrawPage>& xPage);
118 sal_Bool operator==(const ImpXMLEXPPageMasterInfo& rInfo) const;
119 void SetName(const OUString& rStr);
120
GetName() const121 const OUString& GetName() const { return msName; }
GetMasterPageName() const122 const OUString& GetMasterPageName() const { return msMasterPageName; }
123
GetBorderBottom() const124 sal_Int32 GetBorderBottom() const { return mnBorderBottom; }
GetBorderLeft() const125 sal_Int32 GetBorderLeft() const { return mnBorderLeft; }
GetBorderRight() const126 sal_Int32 GetBorderRight() const { return mnBorderRight; }
GetBorderTop() const127 sal_Int32 GetBorderTop() const { return mnBorderTop; }
GetWidth() const128 sal_Int32 GetWidth() const { return mnWidth; }
GetHeight() const129 sal_Int32 GetHeight() const { return mnHeight; }
GetOrientation() const130 view::PaperOrientation GetOrientation() const { return meOrientation; }
131 };
132
ImpXMLEXPPageMasterInfo(const SdXMLExport & rExp,const Reference<XDrawPage> & xPage)133 ImpXMLEXPPageMasterInfo::ImpXMLEXPPageMasterInfo(
134 const SdXMLExport& rExp,
135 const Reference<XDrawPage>& xPage)
136 : mnBorderBottom(0),
137 mnBorderLeft(0),
138 mnBorderRight(0),
139 mnBorderTop(0),
140 mnWidth(0),
141 mnHeight(0),
142 meOrientation(rExp.IsDraw() ? view::PaperOrientation_PORTRAIT : view::PaperOrientation_LANDSCAPE)
143 {
144 Reference <beans::XPropertySet> xPropSet(xPage, UNO_QUERY);
145 if(xPropSet.is())
146 {
147 Any aAny;
148
149 Reference< beans::XPropertySetInfo > xPropsInfo( xPropSet->getPropertySetInfo() );
150 if( xPropsInfo.is() && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("BorderBottom") )))
151 {
152 aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("BorderBottom")));
153 aAny >>= mnBorderBottom;
154
155 aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("BorderLeft")));
156 aAny >>= mnBorderLeft;
157
158 aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("BorderRight")));
159 aAny >>= mnBorderRight;
160
161 aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("BorderTop")));
162 aAny >>= mnBorderTop;
163 }
164
165 if( xPropsInfo.is() && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("Width") )))
166 {
167 aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Width")));
168 aAny >>= mnWidth;
169
170 aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Height")));
171 aAny >>= mnHeight;
172 }
173
174 if( xPropsInfo.is() && xPropsInfo->hasPropertyByName(OUString(RTL_CONSTASCII_USTRINGPARAM("Orientation") )))
175 {
176 aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Orientation")));
177 aAny >>= meOrientation;
178 }
179 }
180
181 Reference <container::XNamed> xMasterNamed(xPage, UNO_QUERY);
182 if(xMasterNamed.is())
183 {
184 msMasterPageName = xMasterNamed->getName();
185 }
186 }
187
operator ==(const ImpXMLEXPPageMasterInfo & rInfo) const188 sal_Bool ImpXMLEXPPageMasterInfo::operator==(const ImpXMLEXPPageMasterInfo& rInfo) const
189 {
190 return ((mnBorderBottom == rInfo.mnBorderBottom)
191 && (mnBorderLeft == rInfo.mnBorderLeft)
192 && (mnBorderRight == rInfo.mnBorderRight)
193 && (mnBorderTop == rInfo.mnBorderTop)
194 && (mnWidth == rInfo.mnWidth)
195 && (mnHeight == rInfo.mnHeight)
196 && (meOrientation == rInfo.meOrientation));
197 }
198
SetName(const OUString & rStr)199 void ImpXMLEXPPageMasterInfo::SetName(const OUString& rStr)
200 {
201 msName = rStr;
202 }
203
204 DECLARE_LIST(ImpXMLEXPPageMasterList, ImpXMLEXPPageMasterInfo*)
205
206 //////////////////////////////////////////////////////////////////////////////
207
208 #define IMP_AUTOLAYOUT_INFO_MAX (35L)
209
210 class ImpXMLAutoLayoutInfo
211 {
212 sal_uInt16 mnType;
213 ImpXMLEXPPageMasterInfo* mpPageMasterInfo;
214 OUString msLayoutName;
215 Rectangle maTitleRect;
216 Rectangle maPresRect;
217 sal_Int32 mnGapX;
218 sal_Int32 mnGapY;
219
220 public:
221 ImpXMLAutoLayoutInfo(sal_uInt16 nTyp, ImpXMLEXPPageMasterInfo* pInf);
222
223 sal_Bool operator==(const ImpXMLAutoLayoutInfo& rInfo) const;
224
GetLayoutType() const225 sal_uInt16 GetLayoutType() const { return mnType; }
GetGapX() const226 sal_Int32 GetGapX() const { return mnGapX; }
GetGapY() const227 sal_Int32 GetGapY() const { return mnGapY; }
228
GetLayoutName() const229 const OUString& GetLayoutName() const { return msLayoutName; }
SetLayoutName(const OUString & rNew)230 void SetLayoutName(const OUString& rNew) { msLayoutName = rNew; }
231
GetTitleRectangle() const232 const Rectangle& GetTitleRectangle() const { return maTitleRect; }
GetPresRectangle() const233 const Rectangle& GetPresRectangle() const { return maPresRect; }
234
235 static sal_Bool IsCreateNecessary(sal_uInt16 nTyp);
236 };
237
IsCreateNecessary(sal_uInt16 nTyp)238 sal_Bool ImpXMLAutoLayoutInfo::IsCreateNecessary(sal_uInt16 nTyp)
239 {
240 if(nTyp == 5 /* AUTOLAYOUT_ORG */
241 || nTyp == 20 /* AUTOLAYOUT_NONE */
242 || nTyp >= IMP_AUTOLAYOUT_INFO_MAX)
243 return sal_False;
244 return sal_True;
245 }
246
operator ==(const ImpXMLAutoLayoutInfo & rInfo) const247 sal_Bool ImpXMLAutoLayoutInfo::operator==(const ImpXMLAutoLayoutInfo& rInfo) const
248 {
249 return ((mnType == rInfo.mnType
250 && mpPageMasterInfo == rInfo.mpPageMasterInfo));
251 }
252
ImpXMLAutoLayoutInfo(sal_uInt16 nTyp,ImpXMLEXPPageMasterInfo * pInf)253 ImpXMLAutoLayoutInfo::ImpXMLAutoLayoutInfo(sal_uInt16 nTyp, ImpXMLEXPPageMasterInfo* pInf)
254 : mnType(nTyp),
255 mpPageMasterInfo(pInf)
256 {
257 // create full info (initialze with typical values)
258 Point aPagePos(0,0);
259 Size aPageSize(28000, 21000);
260 Size aPageInnerSize(28000, 21000);
261
262 if(mpPageMasterInfo)
263 {
264 aPagePos = Point(mpPageMasterInfo->GetBorderLeft(), mpPageMasterInfo->GetBorderTop());
265 aPageSize = Size(mpPageMasterInfo->GetWidth(), mpPageMasterInfo->GetHeight());
266 aPageInnerSize = aPageSize;
267 aPageInnerSize.Width() -= mpPageMasterInfo->GetBorderLeft() + mpPageMasterInfo->GetBorderRight();
268 aPageInnerSize.Height() -= mpPageMasterInfo->GetBorderTop() + mpPageMasterInfo->GetBorderBottom();
269 }
270
271 // title rectangle aligning
272 Point aTitlePos(aPagePos);
273 Size aTitleSize(aPageInnerSize);
274
275 if(mnType == 21 /* AUTOLAYOUT_NOTES */)
276 {
277 aTitleSize.Height() = (long) (aTitleSize.Height() / 2.5);
278 Point aPos = aTitlePos;
279 aPos.Y() += long( aTitleSize.Height() * 0.083 );
280 Size aPartArea = aTitleSize;
281 Size aSize;
282
283 // tatsaechliche Seitengroesse in das Handout-Rechteck skalieren
284 double fH = (double) aPartArea.Width() / aPageSize.Width();
285 double fV = (double) aPartArea.Height() / aPageSize.Height();
286
287 if ( fH > fV )
288 fH = fV;
289 aSize.Width() = (long) (fH * aPageSize.Width());
290 aSize.Height() = (long) (fH * aPageSize.Height());
291
292 aPos.X() += (aPartArea.Width() - aSize.Width()) / 2;
293 aPos.Y() += (aPartArea.Height()- aSize.Height())/ 2;
294
295 aTitlePos = aPos;
296 aTitleSize = aSize;
297 }
298 else if(mnType == 27 || mnType == 28)
299 {
300 // AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART or
301 // AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE
302 Point aClassicTPos(
303 aTitlePos.X() + long( aTitleSize.Width() * 0.0735 ),
304 aTitlePos.Y() + long( aTitleSize.Height() * 0.083 ));
305 Size aClassicTSize(
306 long( aTitleSize.Width() * 0.854 ),
307 long( aTitleSize.Height() * 0.167 ));
308 Point aLPos(aPagePos);
309 Size aLSize(aPageInnerSize);
310 Point aClassicLPos(
311 aLPos.X() + long( aLSize.Width() * 0.0735 ),
312 aLPos.Y() + long( aLSize.Height() * 0.472 ));
313 Size aClassicLSize(
314 long( aLSize.Width() * 0.854 ),
315 long( aLSize.Height() * 0.444 ));
316
317 aTitlePos.X() = (aClassicTPos.X() + aClassicTSize.Width()) - aClassicTSize.Height();
318 aTitlePos.Y() = aClassicTPos.Y();
319 aTitleSize.Width() = aClassicTSize.Height();
320 aTitleSize.Height() = (aClassicLPos.Y() + aClassicLSize.Height()) - aClassicTPos.Y();
321 }
322 else
323 {
324 aTitlePos.X() += long( aTitleSize.Width() * 0.0735 );
325 aTitlePos.Y() += long( aTitleSize.Height() * 0.083 );
326 aTitleSize.Width() = long( aTitleSize.Width() * 0.854 );
327 aTitleSize.Height() = long( aTitleSize.Height() * 0.167 );
328 }
329
330 maTitleRect.SetPos(aTitlePos);
331 maTitleRect.SetSize(aTitleSize);
332
333 // layout rectangle aligning
334 Point aLayoutPos(aPagePos);
335 Size aLayoutSize(aPageInnerSize);
336
337 if(mnType == 21 /* AUTOLAYOUT_NOTES */)
338 {
339 aLayoutPos.X() += long( aLayoutSize.Width() * 0.0735 );
340 aLayoutPos.Y() += long( aLayoutSize.Height() * 0.472 );
341 aLayoutSize.Width() = long( aLayoutSize.Width() * 0.854 );
342 aLayoutSize.Height() = long( aLayoutSize.Height() * 0.444 );
343 }
344 else if((mnType >= 22 && mnType <= 26) || (mnType == 31)) // AUTOLAYOUT_HANDOUT
345 {
346 // keep info for inner area in maPresRect, put info for gap size
347 // to maTitleRect position
348 mnGapX = (aPageSize.Width() - aPageInnerSize.Width()) / 2;
349 mnGapY = (aPageSize.Height() - aPageInnerSize.Height()) / 2;
350
351 if(!mnGapX)
352 mnGapX = aPageSize.Width() / 10;
353
354 if(!mnGapY)
355 mnGapY = aPageSize.Height() / 10;
356
357 if(mnGapX < aPageInnerSize.Width() / 10)
358 mnGapX = aPageInnerSize.Width() / 10;
359
360 if(mnGapY < aPageInnerSize.Height() / 10)
361 mnGapY = aPageInnerSize.Height() / 10;
362 }
363 else if(mnType == 27 || mnType == 28)
364 {
365 // AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART or
366 // AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE
367 Point aClassicTPos(
368 aTitlePos.X() + long( aTitleSize.Width() * 0.0735 ),
369 aTitlePos.Y() + long( aTitleSize.Height() * 0.083 ));
370 Size aClassicTSize(
371 long( aTitleSize.Width() * 0.854 ),
372 long( aTitleSize.Height() * 0.167 ));
373 Point aClassicLPos(
374 aLayoutPos.X() + long( aLayoutSize.Width() * 0.0735 ),
375 aLayoutPos.Y() + long( aLayoutSize.Height() * 0.472 ));
376 Size aClassicLSize(
377 long( aLayoutSize.Width() * 0.854 ),
378 long( aLayoutSize.Height() * 0.444 ));
379
380 aLayoutPos.X() = aClassicLPos.X();
381 aLayoutPos.Y() = aClassicTPos.Y();
382 aLayoutSize.Width() = (aClassicLPos.X() + aClassicLSize.Width())
383 - (aClassicTSize.Height() + (aClassicLPos.Y() - (aClassicTPos.Y() + aClassicTSize.Height())));
384 aLayoutSize.Height() = (aClassicLPos.Y() + aClassicLSize.Height()) - aClassicTPos.Y();
385 }
386 else if( mnType == 32 )
387 {
388 // AUTOLAYOUT_ONLY_TEXT
389 aLayoutPos = aTitlePos;
390 aLayoutSize.Width() = aTitleSize.Width();
391 aLayoutSize.Height() = long( aLayoutSize.Height() * 0.825 );
392 }
393 else
394 {
395 aLayoutPos.X() += long( aLayoutSize.Width() * 0.0735 );
396 aLayoutPos.Y() += long( aLayoutSize.Height() * 0.278 );
397 aLayoutSize.Width() = long( aLayoutSize.Width() * 0.854 );
398 aLayoutSize.Height() = long( aLayoutSize.Height() * 0.630 );
399 }
400
401 maPresRect.SetPos(aLayoutPos);
402 maPresRect.SetSize(aLayoutSize);
403 }
404
DECLARE_LIST(ImpXMLAutoLayoutInfoList,ImpXMLAutoLayoutInfo *)405 DECLARE_LIST(ImpXMLAutoLayoutInfoList, ImpXMLAutoLayoutInfo*)
406
407 //////////////////////////////////////////////////////////////////////////////
408
409 // #110680#
410 SdXMLExport::SdXMLExport(
411 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
412 sal_Bool bIsDraw, sal_uInt16 nExportFlags )
413 : SvXMLExport( xServiceFactory, MAP_CM, bIsDraw ? XML_DRAWING : XML_PRESENTATION, nExportFlags ),
414 mnDocMasterPageCount(0L),
415 mnDocDrawPageCount(0L),
416 mnShapeStyleInfoIndex(0L),
417 mnObjectCount(0L),
418 mpPageMasterInfoList(new ImpXMLEXPPageMasterList(1, 4, 4)),
419 mpPageMasterUsageList(new ImpXMLEXPPageMasterList(1, 4, 4)),
420 mpNotesPageMasterUsageList(new ImpXMLEXPPageMasterList(1, 4, 4)),
421 mpHandoutPageMaster(NULL),
422 mpAutoLayoutInfoList(new ImpXMLAutoLayoutInfoList(1, 4, 4)),
423 mpSdPropHdlFactory(0L),
424 mpPropertySetMapper(0L),
425 mpPresPagePropsMapper(0L),
426 mbIsDraw(bIsDraw),
427 mbFamilyGraphicUsed(sal_False),
428 mbFamilyPresentationUsed(sal_False),
429 msZIndex( GetXMLToken(XML_ZINDEX) ),
430 msEmptyPres( RTL_CONSTASCII_USTRINGPARAM("IsEmptyPresentationObject") ),
431 msModel( RTL_CONSTASCII_USTRINGPARAM("Model") ),
432 msStartShape( RTL_CONSTASCII_USTRINGPARAM("StartShape") ),
433 msEndShape( RTL_CONSTASCII_USTRINGPARAM("EndShape") ),
434 msPageLayoutNames( RTL_CONSTASCII_USTRINGPARAM("PageLayoutNames") )
435 {
436
437
438 }
439
440 // XExporter
setSourceDocument(const Reference<lang::XComponent> & xDoc)441 void SAL_CALL SdXMLExport::setSourceDocument( const Reference< lang::XComponent >& xDoc )
442 throw(lang::IllegalArgumentException, uno::RuntimeException)
443 {
444 SvXMLExport::setSourceDocument( xDoc );
445
446 const OUString aEmpty;
447
448 // prepare factory parts
449 mpSdPropHdlFactory = new XMLSdPropHdlFactory( GetModel(), *this );
450 if(mpSdPropHdlFactory)
451 {
452 // set lock to avoid deletion
453 mpSdPropHdlFactory->acquire();
454
455 // build one ref
456 const UniReference< XMLPropertyHandlerFactory > aFactoryRef = mpSdPropHdlFactory;
457
458 // construct PropertySetMapper
459 UniReference < XMLPropertySetMapper > xMapper = new XMLShapePropertySetMapper( aFactoryRef);
460
461 mpPropertySetMapper = new XMLShapeExportPropertyMapper( xMapper, (XMLTextListAutoStylePool*)&GetTextParagraphExport()->GetListAutoStylePool(), *this );
462 // set lock to avoid deletion
463 mpPropertySetMapper->acquire();
464
465 // chain text attributes
466 mpPropertySetMapper->ChainExportMapper(XMLTextParagraphExport::CreateParaExtPropMapper(*this));
467
468 // construct PresPagePropsMapper
469 xMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLSDPresPageProps, aFactoryRef);
470
471 mpPresPagePropsMapper = new XMLPageExportPropertyMapper( xMapper, *this );
472 if(mpPresPagePropsMapper)
473 {
474 // set lock to avoid deletion
475 mpPresPagePropsMapper->acquire();
476 }
477 }
478
479 // add family name
480 GetAutoStylePool()->AddFamily(
481 XML_STYLE_FAMILY_SD_GRAPHICS_ID,
482 OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME)),
483 GetPropertySetMapper(),
484 OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_PREFIX)));
485 GetAutoStylePool()->AddFamily(
486 XML_STYLE_FAMILY_SD_PRESENTATION_ID,
487 OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_PRESENTATION_NAME)),
488 GetPropertySetMapper(),
489 OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_PRESENTATION_PREFIX)));
490 GetAutoStylePool()->AddFamily(
491 XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID,
492 OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_DRAWINGPAGE_NAME)),
493 GetPresPagePropsMapper(),
494 OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_DRAWINGPAGE_PREFIX)));
495 // prepare access to styles
496 Reference< style::XStyleFamiliesSupplier > xFamSup( GetModel(), UNO_QUERY );
497 if(xFamSup.is())
498 {
499 mxDocStyleFamilies = xFamSup->getStyleFamilies();
500 }
501
502 // prepare access to master pages
503 Reference < drawing::XMasterPagesSupplier > xMasterPagesSupplier(GetModel(), UNO_QUERY);
504 if(xMasterPagesSupplier.is())
505 {
506 mxDocMasterPages = mxDocMasterPages.query( xMasterPagesSupplier->getMasterPages() );
507 if(mxDocMasterPages.is())
508 {
509 mnDocMasterPageCount = mxDocMasterPages->getCount();
510 maMasterPagesStyleNames.insert( maMasterPagesStyleNames.begin(), mnDocMasterPageCount, aEmpty );
511 }
512 }
513
514 // prepare access to draw pages
515 Reference <XDrawPagesSupplier> xDrawPagesSupplier(GetModel(), UNO_QUERY);
516 if(xDrawPagesSupplier.is())
517 {
518 mxDocDrawPages = mxDocDrawPages.query( xDrawPagesSupplier->getDrawPages() );
519 if(mxDocDrawPages.is())
520 {
521 mnDocDrawPageCount = mxDocDrawPages->getCount();
522 maDrawPagesStyleNames.insert( maDrawPagesStyleNames.begin(), mnDocDrawPageCount, aEmpty );
523 maDrawNotesPagesStyleNames.insert( maDrawNotesPagesStyleNames.begin(), mnDocDrawPageCount, aEmpty );
524 if( !mbIsDraw )
525 maDrawPagesAutoLayoutNames.realloc( mnDocDrawPageCount + 1 );
526
527 HeaderFooterPageSettingsImpl aEmptySettings;
528 maDrawPagesHeaderFooterSettings.insert( maDrawPagesHeaderFooterSettings.begin(), mnDocDrawPageCount, aEmptySettings );
529 maDrawNotesPagesHeaderFooterSettings.insert( maDrawNotesPagesHeaderFooterSettings.begin(), mnDocDrawPageCount, aEmptySettings );
530 }
531 }
532
533 // #82003# count all draw objects for use with progress bar.
534 // #88245# init mnObjectCount once, use counter itself as flag. It
535 // is initialized to 0.
536 if(!mnObjectCount)
537 {
538 if( IsImpress() )
539 {
540 // #91587# add handout master count
541 Reference<presentation::XHandoutMasterSupplier> xHandoutSupp(GetModel(), UNO_QUERY);
542 if(xHandoutSupp.is())
543 {
544 Reference<XDrawPage> xHandoutPage(xHandoutSupp->getHandoutMasterPage());
545 if(xHandoutPage.is())
546 {
547 Reference<drawing::XShapes> xShapes(xHandoutPage, UNO_QUERY);
548 if(xShapes.is() && xShapes->getCount())
549 {
550 mnObjectCount += ImpRecursiveObjectCount(xShapes);
551 }
552 }
553 }
554 }
555
556 if(mxDocMasterPages.is())
557 {
558 for(sal_Int32 a(0); a < mnDocMasterPageCount; a++)
559 {
560 Any aAny(mxDocMasterPages->getByIndex(a));
561 Reference< drawing::XShapes > xMasterPage;
562
563 if((aAny >>= xMasterPage) && xMasterPage.is())
564 {
565 mnObjectCount += ImpRecursiveObjectCount(xMasterPage);
566 }
567
568 if( IsImpress() )
569 {
570 // #91587# take notes pages from master pages into account
571 Reference<presentation::XPresentationPage> xPresPage;
572 if((aAny >>= xPresPage) && xPresPage.is())
573 {
574 Reference<XDrawPage> xNotesPage(xPresPage->getNotesPage());
575 if(xNotesPage.is())
576 {
577 Reference<drawing::XShapes> xShapes(xNotesPage, UNO_QUERY);
578 if(xShapes.is() && xShapes->getCount())
579 {
580 mnObjectCount += ImpRecursiveObjectCount(xShapes);
581 }
582 }
583 }
584 }
585 }
586 }
587
588 if(mxDocDrawPages.is())
589 {
590 for(sal_Int32 a(0); a < mnDocDrawPageCount; a++)
591 {
592 Any aAny(mxDocDrawPages->getByIndex(a));
593 Reference< drawing::XShapes > xPage;
594
595 if((aAny >>= xPage) && xPage.is())
596 {
597 mnObjectCount += ImpRecursiveObjectCount(xPage);
598 }
599
600 if( IsImpress() )
601 {
602 // #91587# take notes pages from draw pages into account
603 Reference<presentation::XPresentationPage> xPresPage;
604 if((aAny >>= xPresPage) && xPresPage.is())
605 {
606 Reference<XDrawPage> xNotesPage(xPresPage->getNotesPage());
607 if(xNotesPage.is())
608 {
609 Reference<drawing::XShapes> xShapes(xNotesPage, UNO_QUERY);
610 if(xShapes.is() && xShapes->getCount())
611 {
612 mnObjectCount += ImpRecursiveObjectCount(xShapes);
613 }
614 }
615 }
616 }
617 }
618 }
619
620 // #82003# init progress bar
621 GetProgressBarHelper()->SetReference(mnObjectCount);
622 }
623
624 // add namespaces
625 _GetNamespaceMap().Add(
626 GetXMLToken(XML_NP_PRESENTATION),
627 GetXMLToken(XML_N_PRESENTATION),
628 XML_NAMESPACE_PRESENTATION);
629
630 _GetNamespaceMap().Add(
631 GetXMLToken(XML_NP_SMIL),
632 GetXMLToken(XML_N_SMIL_COMPAT),
633 XML_NAMESPACE_SMIL);
634
635 _GetNamespaceMap().Add(
636 GetXMLToken(XML_NP_ANIMATION),
637 GetXMLToken(XML_N_ANIMATION),
638 XML_NAMESPACE_ANIMATION);
639
640 if( getDefaultVersion() > SvtSaveOptions::ODFVER_012 )
641 {
642 _GetNamespaceMap().Add(
643 GetXMLToken(XML_NP_OFFICE_EXT),
644 GetXMLToken(XML_N_OFFICE_EXT),
645 XML_NAMESPACE_OFFICE_EXT);
646
647 _GetNamespaceMap().Add(
648 GetXMLToken(XML_NP_DRAW_EXT),
649 GetXMLToken(XML_N_DRAW_EXT),
650 XML_NAMESPACE_DRAW_EXT);
651 }
652
653 GetShapeExport()->enableLayerExport();
654
655 // #88546# enable progress bar increments
656 GetShapeExport()->enableHandleProgressBar();
657 }
658
659 //////////////////////////////////////////////////////////////////////////////
660 // #82003# helper function for recursive object count
ImpRecursiveObjectCount(Reference<drawing::XShapes> xShapes)661 sal_uInt32 SdXMLExport::ImpRecursiveObjectCount(Reference< drawing::XShapes > xShapes)
662 {
663 sal_uInt32 nRetval(0L);
664
665 if(xShapes.is())
666 {
667 sal_Int32 nCount = xShapes->getCount();
668
669 for(sal_Int32 a(0L); a < nCount; a++)
670 {
671 Any aAny(xShapes->getByIndex(a));
672 Reference< drawing::XShapes > xGroup;
673
674 if((aAny >>= xGroup) && xGroup.is())
675 {
676 // #93180# count group objects, too.
677 nRetval += 1 + ImpRecursiveObjectCount(xGroup);
678 }
679 else
680 {
681 nRetval++;
682 }
683 }
684 }
685
686 return nRetval;
687 }
688
689 //////////////////////////////////////////////////////////////////////////////
690
~SdXMLExport()691 __EXPORT SdXMLExport::~SdXMLExport()
692 {
693 // cleanup factory, decrease refcount. Should lead to destruction.
694 if(mpSdPropHdlFactory)
695 {
696 mpSdPropHdlFactory->release();
697 mpSdPropHdlFactory = 0L;
698 }
699
700 // cleanup mapper, decrease refcount. Should lead to destruction.
701 if(mpPropertySetMapper)
702 {
703 mpPropertySetMapper->release();
704 mpPropertySetMapper = 0L;
705 }
706
707 // cleanup presPage mapper, decrease refcount. Should lead to destruction.
708 if(mpPresPagePropsMapper)
709 {
710 mpPresPagePropsMapper->release();
711 mpPresPagePropsMapper = 0L;
712 }
713
714 // clear evtl. temporary page master infos
715 if(mpPageMasterInfoList)
716 {
717 while(mpPageMasterInfoList->Count())
718 delete mpPageMasterInfoList->Remove(mpPageMasterInfoList->Count() - 1L);
719 delete mpPageMasterInfoList;
720 mpPageMasterInfoList = 0L;
721 }
722 if(mpPageMasterUsageList)
723 {
724 delete mpPageMasterUsageList;
725 mpPageMasterUsageList = 0L;
726 }
727 if(mpNotesPageMasterUsageList)
728 {
729 delete mpNotesPageMasterUsageList;
730 mpNotesPageMasterUsageList = 0L;
731 }
732
733 // clear auto-layout infos
734 if(mpAutoLayoutInfoList)
735 {
736 while(mpAutoLayoutInfoList->Count())
737 delete mpAutoLayoutInfoList->Remove(mpAutoLayoutInfoList->Count() - 1L);
738 delete mpAutoLayoutInfoList;
739 mpAutoLayoutInfoList = 0L;
740 }
741
742 // #82003# status indicator stop is called exclusively
743 // from SdXMLFilter::Export() now.
744 //
745 // stop progress view
746 // if(GetStatusIndicator().is())
747 // {
748 // GetStatusIndicator()->end();
749 // GetStatusIndicator()->reset();
750 // }
751 }
752
753 //////////////////////////////////////////////////////////////////////////////
754 // to get default values in XPropertySet use this wrapper class
755
756 class ImpDefaultMapper : public ::cppu::WeakAggImplHelper1< beans::XPropertySet >
757 {
758 Reference< beans::XPropertyState > mxState;
759 Reference< beans::XPropertySet > mxSet;
760
761 public:
762 ImpDefaultMapper( Reference< beans::XPropertyState >& rxState );
763
764 // Methods
765 virtual Reference< beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() throw(uno::RuntimeException);
766 virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const Any& aValue ) throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException);
767 virtual Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException);
768
769 // empty implementations
770 virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const Reference< beans::XPropertyChangeListener >& xListener ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException);
771 virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const Reference< beans::XPropertyChangeListener >& aListener ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException);
772 virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const Reference< beans::XVetoableChangeListener >& aListener ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException);
773 virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const Reference< beans::XVetoableChangeListener >& aListener ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException);
774 };
775
ImpDefaultMapper(Reference<beans::XPropertyState> & rxState)776 ImpDefaultMapper::ImpDefaultMapper( Reference< beans::XPropertyState >& rxState )
777 : mxState( rxState ),
778 mxSet( rxState, UNO_QUERY )
779 {
780 }
781
getPropertySetInfo()782 Reference< beans::XPropertySetInfo > SAL_CALL ImpDefaultMapper::getPropertySetInfo() throw(uno::RuntimeException)
783 {
784 return mxSet->getPropertySetInfo();
785 }
786
setPropertyValue(const OUString & aPropertyName,const Any &)787 void SAL_CALL ImpDefaultMapper::setPropertyValue( const OUString& aPropertyName, const Any& /*aValue*/ ) throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
788 {
789 mxState->setPropertyToDefault( aPropertyName /*, aValue */ );
790 }
791
getPropertyValue(const OUString & PropertyName)792 Any SAL_CALL ImpDefaultMapper::getPropertyValue( const OUString& PropertyName ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
793 {
794 return mxState->getPropertyDefault( PropertyName );
795 }
796
797 // empty implementations
addPropertyChangeListener(const OUString &,const Reference<beans::XPropertyChangeListener> &)798 void SAL_CALL ImpDefaultMapper::addPropertyChangeListener( const OUString&, const Reference< beans::XPropertyChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
removePropertyChangeListener(const OUString &,const Reference<beans::XPropertyChangeListener> &)799 void SAL_CALL ImpDefaultMapper::removePropertyChangeListener( const OUString&, const Reference< beans::XPropertyChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
addVetoableChangeListener(const OUString &,const Reference<beans::XVetoableChangeListener> &)800 void SAL_CALL ImpDefaultMapper::addVetoableChangeListener( const OUString&, const Reference< beans::XVetoableChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
removeVetoableChangeListener(const OUString &,const Reference<beans::XVetoableChangeListener> &)801 void SAL_CALL ImpDefaultMapper::removeVetoableChangeListener( const OUString&, const Reference< beans::XVetoableChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
802
803 //////////////////////////////////////////////////////////////////////////////
804
805 /* moved to shapeexport.cxx
806 void SdXMLExport::ImpWriteObjGraphicStyleInfos()
807 {
808 XMLStyleExport aStEx(*this, OUString(), GetAutoStylePool().get());
809 const UniReference< SvXMLExportPropertyMapper > aMapperRef( GetPropertySetMapper() );
810
811 // write graphic family default style
812 Reference< lang::XMultiServiceFactory > xFact( GetModel(), UNO_QUERY );
813 if( xFact.is() )
814 {
815 try
816 {
817 Reference< beans::XPropertySet > xDefaults( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.Defaults") ) ), UNO_QUERY );
818 if( xDefaults.is() )
819 {
820 aStEx.exportDefaultStyle( xDefaults, OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME)), aMapperRef );
821
822 // write graphic family styles
823 aStEx.exportStyleFamily(XML_STYLE_FAMILY_SD_GRAPHICS_NAME, OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME)), aMapperRef, sal_False, XML_STYLE_FAMILY_SD_GRAPHICS_ID);
824 }
825 }
826 catch( lang::ServiceNotRegisteredException& )
827 {
828 }
829 }
830 }
831 */
832 //////////////////////////////////////////////////////////////////////////////
833
ImpPrepAutoLayoutInfos()834 void SdXMLExport::ImpPrepAutoLayoutInfos()
835 {
836 if(IsImpress())
837 {
838 OUString aStr;
839
840 Reference< presentation::XHandoutMasterSupplier > xHandoutSupp( GetModel(), UNO_QUERY );
841 if( xHandoutSupp.is() )
842 {
843 Reference< XDrawPage > xHandoutPage( xHandoutSupp->getHandoutMasterPage() );
844 if( xHandoutPage.is() )
845 {
846 if(ImpPrepAutoLayoutInfo(xHandoutPage, aStr))
847 maDrawPagesAutoLayoutNames[0] = aStr;
848 }
849 }
850
851 // prepare name creation
852 for (sal_Int32 nCnt = 0; nCnt < mnDocDrawPageCount; nCnt++)
853 {
854 Any aAny(mxDocDrawPages->getByIndex(nCnt));
855 Reference<XDrawPage> xDrawPage;
856
857 if((aAny >>= xDrawPage) && xDrawPage.is())
858 {
859 if(ImpPrepAutoLayoutInfo(xDrawPage, aStr))
860 maDrawPagesAutoLayoutNames[nCnt+1] = aStr;
861 }
862 }
863 }
864 }
865
ImpPrepAutoLayoutInfo(const Reference<XDrawPage> & xPage,OUString & rName)866 sal_Bool SdXMLExport::ImpPrepAutoLayoutInfo(const Reference<XDrawPage>& xPage, OUString& rName)
867 {
868 rName = OUString();
869 sal_Bool bRetval(sal_False);
870
871 Reference <beans::XPropertySet> xPropSet(xPage, UNO_QUERY);
872 if(xPropSet.is())
873 {
874 sal_uInt16 nType = sal_uInt16();
875 Any aAny;
876
877 aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Layout")));
878 if(aAny >>= nType)
879 {
880 if(ImpXMLAutoLayoutInfo::IsCreateNecessary(nType))
881 {
882 ImpXMLEXPPageMasterInfo* pInfo = 0L;
883
884 // get master-page info
885 Reference < drawing::XMasterPageTarget > xMasterPageInt(xPage, UNO_QUERY);
886 if(xMasterPageInt.is())
887 {
888 Reference<XDrawPage> xUsedMasterPage(xMasterPageInt->getMasterPage());
889 if(xUsedMasterPage.is())
890 {
891 Reference < container::XNamed > xMasterNamed(xUsedMasterPage, UNO_QUERY);
892 if(xMasterNamed.is())
893 {
894 OUString sMasterPageName = xMasterNamed->getName();
895 pInfo = ImpGetPageMasterInfoByName(sMasterPageName);
896 }
897 }
898 }
899
900 // create entry and look for existance
901 ImpXMLAutoLayoutInfo* pNew = new ImpXMLAutoLayoutInfo(nType, pInfo);
902 sal_Bool bDidExist(sal_False);
903
904 for(sal_uInt32 nCnt = 0L; !bDidExist && nCnt < mpAutoLayoutInfoList->Count(); nCnt++)
905 {
906 if(*mpAutoLayoutInfoList->GetObject(nCnt) == *pNew)
907 {
908 delete pNew;
909 pNew = mpAutoLayoutInfoList->GetObject(nCnt);
910 bDidExist = sal_True;
911 }
912 }
913
914 if(!bDidExist)
915 {
916 mpAutoLayoutInfoList->Insert(pNew, LIST_APPEND);
917 OUString sNewName = OUString(RTL_CONSTASCII_USTRINGPARAM("AL"));
918 sNewName += OUString::valueOf(sal_Int32(mpAutoLayoutInfoList->Count() - 1));
919 sNewName += OUString(RTL_CONSTASCII_USTRINGPARAM("T"));
920 sNewName += OUString::valueOf(sal_Int32(nType));
921 pNew->SetLayoutName(sNewName);
922 }
923
924 rName = pNew->GetLayoutName();
925 bRetval = sal_True;
926 }
927 }
928 }
929
930 return bRetval;
931 }
932
933 //////////////////////////////////////////////////////////////////////////////
934
ImpWriteAutoLayoutInfos()935 void SdXMLExport::ImpWriteAutoLayoutInfos()
936 {
937 if(mpAutoLayoutInfoList->Count())
938 {
939 for(sal_uInt32 nCnt = 0L; nCnt < mpAutoLayoutInfoList->Count(); nCnt++)
940 {
941 ImpXMLAutoLayoutInfo* pInfo = mpAutoLayoutInfoList->GetObject(nCnt);
942 if(pInfo)
943 {
944 // prepare presentation-page layout attributes, style-name
945 AddAttribute(XML_NAMESPACE_STYLE, XML_NAME, pInfo->GetLayoutName());
946
947 // write draw-style attributes
948 SvXMLElementExport aDSE(*this, XML_NAMESPACE_STYLE, XML_PRESENTATION_PAGE_LAYOUT, sal_True, sal_True);
949
950 // write presentation placeholders
951 switch(pInfo->GetLayoutType())
952 {
953 case 0 : // AUTOLAYOUT_TITLE
954 {
955 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
956 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderSubtitle, pInfo->GetPresRectangle());
957 break;
958 }
959 case 1 : // AUTOLAYOUT_ENUM
960 {
961 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
962 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, pInfo->GetPresRectangle());
963 break;
964 }
965 case 2 : // AUTOLAYOUT_CHART
966 {
967 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
968 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderChart, pInfo->GetPresRectangle());
969 break;
970 }
971 case 3 : // AUTOLAYOUT_2TEXT
972 {
973 Rectangle aLeft(pInfo->GetPresRectangle());
974 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
975 Rectangle aRight(aLeft);
976 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
977
978 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
979 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aLeft);
980 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aRight);
981 break;
982 }
983 case 4 : // AUTOLAYOUT_TEXTCHART
984 {
985 Rectangle aLeft(pInfo->GetPresRectangle());
986 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
987 Rectangle aRight(aLeft);
988 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
989
990 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
991 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aLeft);
992 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderChart, aRight);
993 break;
994 }
995 case 6 : // AUTOLAYOUT_TEXTCLIP
996 {
997 Rectangle aLeft(pInfo->GetPresRectangle());
998 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
999 Rectangle aRight(aLeft);
1000 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
1001
1002 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1003 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aLeft);
1004 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aRight);
1005 break;
1006 }
1007 case 7 : // AUTOLAYOUT_CHARTTEXT
1008 {
1009 Rectangle aLeft(pInfo->GetPresRectangle());
1010 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
1011 Rectangle aRight(aLeft);
1012 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
1013
1014 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1015 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderChart, aLeft);
1016 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aRight);
1017 break;
1018 }
1019 case 8 : // AUTOLAYOUT_TAB
1020 {
1021 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1022 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTable, pInfo->GetPresRectangle());
1023 break;
1024 }
1025 case 9 : // AUTOLAYOUT_CLIPTEXT
1026 {
1027 Rectangle aLeft(pInfo->GetPresRectangle());
1028 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
1029 Rectangle aRight(aLeft);
1030 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
1031
1032 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1033 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aLeft);
1034 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aRight);
1035 break;
1036 }
1037 case 10 : // AUTOLAYOUT_TEXTOBJ
1038 {
1039 Rectangle aLeft(pInfo->GetPresRectangle());
1040 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
1041 Rectangle aRight(aLeft);
1042 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
1043
1044 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1045 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aLeft);
1046 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aRight);
1047 break;
1048 }
1049 case 11 : // AUTOLAYOUT_OBJ
1050 {
1051 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1052 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, pInfo->GetPresRectangle());
1053 break;
1054 }
1055 case 12 : // AUTOLAYOUT_TEXT2OBJ
1056 {
1057 Rectangle aLeft(pInfo->GetPresRectangle());
1058 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
1059 Rectangle aRightTop(aLeft);
1060 aRightTop.Left() = long(aRightTop.Left() + aRightTop.GetWidth() * 1.05);
1061 aRightTop.setHeight(long(aRightTop.GetHeight() * 0.477));
1062 Rectangle aRightBottom(aRightTop);
1063 aRightBottom.Top() = long(aRightBottom.Top() + aRightBottom.GetHeight() * 1.095);
1064
1065 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1066 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aLeft);
1067 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aRightTop);
1068 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aRightBottom);
1069 break;
1070 }
1071 case 13 : // AUTOLAYOUT_OBJTEXT
1072 {
1073 Rectangle aLeft(pInfo->GetPresRectangle());
1074 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
1075 Rectangle aRight(aLeft);
1076 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
1077
1078 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1079 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aLeft);
1080 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aRight);
1081 break;
1082 }
1083 case 14 : // AUTOLAYOUT_OBJOVERTEXT
1084 {
1085 Rectangle aTop(pInfo->GetPresRectangle());
1086 aTop.setHeight(long(aTop.GetHeight() * 0.477));
1087 Rectangle aBottom(aTop);
1088 aBottom.Top() = long(aBottom.Top() + aBottom.GetHeight() * 1.095);
1089
1090 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1091 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aTop);
1092 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aBottom);
1093 break;
1094 }
1095 case 15 : // AUTOLAYOUT_2OBJTEXT
1096 {
1097 Rectangle aLeftTop(pInfo->GetPresRectangle());
1098 aLeftTop.setWidth(long(aLeftTop.GetWidth() * 0.488));
1099 Rectangle aRight(aLeftTop);
1100 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
1101 aLeftTop.setHeight(long(aLeftTop.GetHeight() * 0.477));
1102 Rectangle aLeftBottom(aLeftTop);
1103 aLeftBottom.Top() = long(aLeftBottom.Top() + aLeftBottom.GetHeight() * 1.095);
1104
1105 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1106 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aLeftTop);
1107 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aLeftBottom);
1108 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aRight);
1109 break;
1110 }
1111 case 16 : // AUTOLAYOUT_2OBJOVERTEXT
1112 {
1113 Rectangle aTopLeft(pInfo->GetPresRectangle());
1114 aTopLeft.setHeight(long(aTopLeft.GetHeight() * 0.477));
1115 Rectangle aBottom(aTopLeft);
1116 aBottom.Top() = long(aBottom.Top() + aBottom.GetHeight() * 1.095);
1117 aTopLeft.setWidth(long(aTopLeft.GetWidth() * 0.488));
1118 Rectangle aTopRight(aTopLeft);
1119 aTopRight.Left() = long(aTopRight.Left() + aTopRight.GetWidth() * 1.05);
1120
1121 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1122 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aTopLeft);
1123 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aTopRight);
1124 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aBottom);
1125 break;
1126 }
1127 case 17 : // AUTOLAYOUT_TEXTOVEROBJ
1128 {
1129 Rectangle aTop(pInfo->GetPresRectangle());
1130 aTop.setHeight(long(aTop.GetHeight() * 0.477));
1131 Rectangle aBottom(aTop);
1132 aBottom.Top() = long(aBottom.Top() + aBottom.GetHeight() * 1.095);
1133
1134 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1135 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderOutline, aTop);
1136 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aBottom);
1137 break;
1138 }
1139 case 18 : // AUTOLAYOUT_4OBJ
1140 {
1141 Rectangle aTopLeft(pInfo->GetPresRectangle());
1142 aTopLeft.setHeight(long(aTopLeft.GetHeight() * 0.477));
1143 aTopLeft.setWidth(long(aTopLeft.GetWidth() * 0.488));
1144 Rectangle aBottomLeft(aTopLeft);
1145 aBottomLeft.Top() = long(aBottomLeft.Top() + aBottomLeft.GetHeight() * 1.095);
1146 Rectangle aTopRight(aTopLeft);
1147 aTopRight.Left() = long(aTopRight.Left() + aTopRight.GetWidth() * 1.05);
1148 Rectangle aBottomRight(aTopRight);
1149 aBottomRight.Top() = long(aBottomRight.Top() + aBottomRight.GetHeight() * 1.095);
1150
1151 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1152 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aTopLeft);
1153 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aTopRight);
1154 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aBottomLeft);
1155 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderObject, aBottomRight);
1156 break;
1157 }
1158 case 19 : // AUTOLAYOUT_ONLY_TITLE
1159 {
1160 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1161 break;
1162 }
1163 case 21 : // AUTOLAYOUT_NOTES
1164 {
1165 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderPage, pInfo->GetTitleRectangle());
1166 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderNotes, pInfo->GetPresRectangle());
1167 break;
1168 }
1169 case 22 : // AUTOLAYOUT_HANDOUT1
1170 case 23 : // AUTOLAYOUT_HANDOUT2
1171 case 24 : // AUTOLAYOUT_HANDOUT3
1172 case 25 : // AUTOLAYOUT_HANDOUT4
1173 case 26 : // AUTOLAYOUT_HANDOUT6
1174 case 31 : // AUTOLAYOUT_HANDOUT9
1175 {
1176 sal_Int32 nColCnt, nRowCnt;
1177 sal_Int32 nGapX = pInfo->GetGapX();
1178 sal_Int32 nGapY = pInfo->GetGapY();
1179
1180 switch(pInfo->GetLayoutType())
1181 {
1182 case 22 : nColCnt = 1; nRowCnt = 1; break;
1183 case 23 : nColCnt = 1; nRowCnt = 2; break;
1184 case 24 : nColCnt = 1; nRowCnt = 3; break;
1185 case 25 : nColCnt = 2; nRowCnt = 2; break;
1186 case 26 : nColCnt = 3; nRowCnt = 2; break;
1187 case 31 : nColCnt = 3; nRowCnt = 3; break;
1188 default: nColCnt = 0; nRowCnt = 0; break; // FIXME - What is correct values?
1189 }
1190
1191 Size aPartSize(pInfo->GetTitleRectangle().GetSize());
1192 Point aPartPos(pInfo->GetTitleRectangle().TopLeft());
1193
1194 if(aPartSize.Width() > aPartSize.Height())
1195 {
1196 sal_Int32 nZwi(nColCnt);
1197 nColCnt = nRowCnt;
1198 nRowCnt = nZwi;
1199 }
1200
1201 aPartSize.Width() = (aPartSize.Width() - ((nColCnt - 1) * nGapX)) / nColCnt;
1202 aPartSize.Height() = (aPartSize.Height() - ((nRowCnt - 1) * nGapY)) / nRowCnt;
1203
1204 Point aTmpPos(aPartPos);
1205
1206 for (sal_Int32 a = 0; a < nRowCnt; a++)
1207 {
1208 aTmpPos.X() = aPartPos.X();
1209
1210 for (sal_Int32 b = 0; b < nColCnt; b++)
1211 {
1212 Rectangle aTmpRect(aTmpPos, aPartSize);
1213
1214 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderHandout, aTmpRect);
1215 aTmpPos.X() += aPartSize.Width() + nGapX;
1216 }
1217
1218 aTmpPos.Y() += aPartSize.Height() + nGapY;
1219 }
1220 break;
1221 }
1222 case 27 : // AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART
1223 {
1224 Rectangle aTop(pInfo->GetPresRectangle());
1225 aTop.setHeight(long(aTop.GetHeight() * 0.488));
1226 Rectangle aBottom(aTop);
1227 aBottom.Top() = long(aBottom.Top() + aBottom.GetHeight() * 1.05);
1228
1229 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderVerticalTitle, pInfo->GetTitleRectangle());
1230 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderVerticalOutline, aTop);
1231 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderChart, aBottom);
1232 break;
1233 }
1234 case 28 : // AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE
1235 {
1236 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderVerticalTitle, pInfo->GetTitleRectangle());
1237 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderVerticalOutline, pInfo->GetPresRectangle());
1238 break;
1239 }
1240 case 29 : // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE
1241 {
1242 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1243 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderVerticalOutline, pInfo->GetPresRectangle());
1244 break;
1245 }
1246 case 30 : // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART
1247 {
1248 Rectangle aLeft(pInfo->GetPresRectangle());
1249 aLeft.setWidth(long(aLeft.GetWidth() * 0.488));
1250 Rectangle aRight(aLeft);
1251 aRight.Left() = long(aRight.Left() + aRight.GetWidth() * 1.05);
1252
1253 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1254 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aLeft);
1255 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderVerticalOutline, aRight);
1256 break;
1257 }
1258 case 32 : // AUTOLAYOUT_TITLE
1259 {
1260 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderSubtitle, pInfo->GetPresRectangle());
1261 break;
1262 }
1263
1264 case 33 : // AUTOLAYOUT_4CLIPART
1265 {
1266 Rectangle aTopLeft(pInfo->GetPresRectangle());
1267 aTopLeft.setHeight(long(aTopLeft.GetHeight() * 0.477));
1268 aTopLeft.setWidth(long(aTopLeft.GetWidth() * 0.488));
1269 Rectangle aBottomLeft(aTopLeft);
1270 aBottomLeft.Top() = long(aBottomLeft.Top() + aBottomLeft.GetHeight() * 1.095);
1271 Rectangle aTopRight(aTopLeft);
1272 aTopRight.Left() = long(aTopRight.Left() + aTopRight.GetWidth() * 1.05);
1273 Rectangle aBottomRight(aTopRight);
1274 aBottomRight.Top() = long(aBottomRight.Top() + aBottomRight.GetHeight() * 1.095);
1275
1276 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1277 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aTopLeft);
1278 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aTopRight);
1279 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aBottomLeft);
1280 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aBottomRight);
1281 break;
1282 }
1283
1284 case 34 : // AUTOLAYOUT_6CLIPART
1285 {
1286 Rectangle aTopLeft(pInfo->GetPresRectangle());
1287 aTopLeft.setHeight(long(aTopLeft.GetHeight() * 0.477));
1288 aTopLeft.setWidth(long(aTopLeft.GetWidth() * 0.322));
1289 Rectangle aTopCenter(aTopLeft);
1290 aTopCenter.Left() = long(aTopCenter.Left() + aTopCenter.GetWidth() * 1.05);
1291 Rectangle aTopRight(aTopLeft);
1292 aTopRight.Left() = long(aTopRight.Left() + aTopRight.GetWidth() * 2 * 1.05);
1293
1294 Rectangle aBottomLeft(aTopLeft);
1295 aBottomLeft.Top() = long(aBottomLeft.Top() + aBottomLeft.GetHeight() * 1.095);
1296 Rectangle aBottomCenter(aTopCenter);
1297 aBottomCenter.Top() = long(aBottomCenter.Top() + aBottomCenter.GetHeight() * 1.095);
1298 Rectangle aBottomRight(aTopRight);
1299 aBottomRight.Top() = long(aBottomRight.Top() + aBottomRight.GetHeight() * 1.095);
1300
1301 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderTitle, pInfo->GetTitleRectangle());
1302 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aTopLeft);
1303 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aTopCenter);
1304 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aTopRight);
1305 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aBottomLeft);
1306 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aBottomCenter);
1307 ImpWriteAutoLayoutPlaceholder(XmlPlaceholderGraphic, aBottomRight);
1308 break;
1309 }
1310 default:
1311 {
1312 DBG_ERROR("XMLEXP: unknown autolayout export");
1313 break;
1314 }
1315 }
1316 }
1317 }
1318 }
1319 }
1320
1321 //////////////////////////////////////////////////////////////////////////////
1322
ImpWriteAutoLayoutPlaceholder(XmlPlaceholder ePl,const Rectangle & rRect)1323 void SdXMLExport::ImpWriteAutoLayoutPlaceholder(XmlPlaceholder ePl, const Rectangle& rRect)
1324 {
1325 OUString aStr;
1326 OUStringBuffer sStringBuffer;
1327
1328 // prepare presentation-placeholder attributes, presentation:object
1329 switch(ePl)
1330 {
1331 case XmlPlaceholderTitle: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("title")); break;
1332 case XmlPlaceholderOutline: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("outline")); break;
1333 case XmlPlaceholderSubtitle: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("subtitle")); break;
1334 case XmlPlaceholderText: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("text")); break;
1335 case XmlPlaceholderGraphic: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("graphic")); break;
1336 case XmlPlaceholderObject: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("object")); break;
1337 case XmlPlaceholderChart: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("chart")); break;
1338 case XmlPlaceholderOrgchart: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("orgchart")); break;
1339 case XmlPlaceholderTable: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("table")); break;
1340 case XmlPlaceholderPage: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("page")); break;
1341 case XmlPlaceholderNotes: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("notes")); break;
1342 case XmlPlaceholderHandout: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("handout")); break;
1343 case XmlPlaceholderVerticalTitle: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_title")); break;
1344 case XmlPlaceholderVerticalOutline: aStr = OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_outline")); break;
1345 }
1346
1347 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_OBJECT, aStr);
1348
1349 // svg:x,y,width,height
1350 GetMM100UnitConverter().convertMeasure(sStringBuffer, rRect.Left());
1351 aStr = sStringBuffer.makeStringAndClear();
1352 AddAttribute(XML_NAMESPACE_SVG, XML_X, aStr);
1353
1354 GetMM100UnitConverter().convertMeasure(sStringBuffer, rRect.Top());
1355 aStr = sStringBuffer.makeStringAndClear();
1356 AddAttribute(XML_NAMESPACE_SVG, XML_Y, aStr);
1357
1358 GetMM100UnitConverter().convertMeasure(sStringBuffer, rRect.GetWidth());
1359 aStr = sStringBuffer.makeStringAndClear();
1360 AddAttribute(XML_NAMESPACE_SVG, XML_WIDTH, aStr);
1361
1362 GetMM100UnitConverter().convertMeasure(sStringBuffer, rRect.GetHeight());
1363 aStr = sStringBuffer.makeStringAndClear();
1364 AddAttribute(XML_NAMESPACE_SVG, XML_HEIGHT, aStr);
1365
1366 // write presentation-placeholder
1367 SvXMLElementExport aPPL(*this, XML_NAMESPACE_PRESENTATION, XML_PLACEHOLDER, sal_True, sal_True);
1368 }
1369
1370 //////////////////////////////////////////////////////////////////////////////
1371
ImpGetOrCreatePageMasterInfo(Reference<XDrawPage> xMasterPage)1372 ImpXMLEXPPageMasterInfo* SdXMLExport::ImpGetOrCreatePageMasterInfo( Reference< XDrawPage > xMasterPage )
1373 {
1374 bool bDoesExist = false;
1375
1376 ImpXMLEXPPageMasterInfo* pNewInfo = new ImpXMLEXPPageMasterInfo(*this, xMasterPage);
1377
1378 // compare with prev page-master infos
1379 for(sal_uInt32 a = 0; !bDoesExist && a < mpPageMasterInfoList->Count(); a++)
1380 {
1381 if(mpPageMasterInfoList->GetObject(a)
1382 && *mpPageMasterInfoList->GetObject(a) == *pNewInfo)
1383 {
1384 delete pNewInfo;
1385 pNewInfo = mpPageMasterInfoList->GetObject(a);
1386 bDoesExist = true;
1387 }
1388 }
1389 // add entry when not found same page-master infos
1390 if(!bDoesExist)
1391 mpPageMasterInfoList->Insert(pNewInfo, LIST_APPEND);
1392
1393 return pNewInfo;
1394 }
1395
ImpPrepPageMasterInfos()1396 void SdXMLExport::ImpPrepPageMasterInfos()
1397 {
1398 if( IsImpress() )
1399 {
1400 // create page master info for handout master page
1401
1402 Reference< XHandoutMasterSupplier > xHMS( GetModel(), UNO_QUERY );
1403 if( xHMS.is() )
1404 {
1405 Reference< XDrawPage > xMasterPage( xHMS->getHandoutMasterPage() );
1406 if( xMasterPage.is() )
1407 mpHandoutPageMaster = ImpGetOrCreatePageMasterInfo(xMasterPage);
1408 }
1409 }
1410
1411 // create page master infos for master pages
1412 if(mnDocMasterPageCount)
1413 {
1414 // look for needed page-masters, create these
1415 for (sal_Int32 nMPageId = 0; nMPageId < mnDocMasterPageCount; nMPageId++)
1416 {
1417 Reference< XDrawPage > xMasterPage( mxDocMasterPages->getByIndex(nMPageId), UNO_QUERY );
1418 ImpXMLEXPPageMasterInfo* pNewInfo = 0L;
1419
1420 if(xMasterPage.is())
1421 pNewInfo = ImpGetOrCreatePageMasterInfo(xMasterPage);
1422
1423 mpPageMasterUsageList->Insert(pNewInfo, LIST_APPEND);
1424
1425 // look for page master of handout page
1426 if(IsImpress())
1427 {
1428 pNewInfo = NULL;
1429 Reference< presentation::XPresentationPage > xPresPage(xMasterPage, UNO_QUERY);
1430 if(xPresPage.is())
1431 {
1432 Reference< XDrawPage > xNotesPage(xPresPage->getNotesPage());
1433 if(xNotesPage.is())
1434 {
1435 pNewInfo = ImpGetOrCreatePageMasterInfo(xNotesPage);
1436 }
1437 }
1438 mpNotesPageMasterUsageList->Insert( pNewInfo, LIST_APPEND );
1439 }
1440 }
1441 }
1442 }
1443
1444 //////////////////////////////////////////////////////////////////////////////
1445
ImpWritePageMasterInfos()1446 void SdXMLExport::ImpWritePageMasterInfos()
1447 {
1448 // write created page-masters, create names for these
1449 for(sal_uInt32 nCnt = 0L; nCnt < mpPageMasterInfoList->Count(); nCnt++)
1450 {
1451 ImpXMLEXPPageMasterInfo* pInfo = mpPageMasterInfoList->GetObject(nCnt);
1452 if(pInfo)
1453 {
1454 // create name
1455 OUString sNewName = OUString(RTL_CONSTASCII_USTRINGPARAM("PM"));
1456
1457 sNewName += OUString::valueOf((sal_Int32)nCnt);
1458 pInfo->SetName(sNewName);
1459
1460 // prepare page-master attributes
1461 OUString sString;
1462 OUStringBuffer sStringBuffer;
1463
1464 sString = sNewName;
1465 AddAttribute(XML_NAMESPACE_STYLE, XML_NAME, sString);
1466
1467 // write page-layout
1468 SvXMLElementExport aPME(*this, XML_NAMESPACE_STYLE, XML_PAGE_LAYOUT, sal_True, sal_True);
1469
1470 // prepare style:properties inside page-master
1471 GetMM100UnitConverter().convertMeasure(sStringBuffer, pInfo->GetBorderTop());
1472 sString = sStringBuffer.makeStringAndClear();
1473 AddAttribute(XML_NAMESPACE_FO, XML_MARGIN_TOP, sString);
1474
1475 GetMM100UnitConverter().convertMeasure(sStringBuffer, pInfo->GetBorderBottom());
1476 sString = sStringBuffer.makeStringAndClear();
1477 AddAttribute(XML_NAMESPACE_FO, XML_MARGIN_BOTTOM, sString);
1478
1479 GetMM100UnitConverter().convertMeasure(sStringBuffer, pInfo->GetBorderLeft());
1480 sString = sStringBuffer.makeStringAndClear();
1481 AddAttribute(XML_NAMESPACE_FO, XML_MARGIN_LEFT, sString);
1482
1483 GetMM100UnitConverter().convertMeasure(sStringBuffer, pInfo->GetBorderRight());
1484 sString = sStringBuffer.makeStringAndClear();
1485 AddAttribute(XML_NAMESPACE_FO, XML_MARGIN_RIGHT, sString);
1486
1487 GetMM100UnitConverter().convertMeasure(sStringBuffer, pInfo->GetWidth());
1488 sString = sStringBuffer.makeStringAndClear();
1489 AddAttribute(XML_NAMESPACE_FO, XML_PAGE_WIDTH, sString);
1490
1491 GetMM100UnitConverter().convertMeasure(sStringBuffer, pInfo->GetHeight());
1492 sString = sStringBuffer.makeStringAndClear();
1493 AddAttribute(XML_NAMESPACE_FO, XML_PAGE_HEIGHT, sString);
1494
1495 if(pInfo->GetOrientation() == view::PaperOrientation_PORTRAIT)
1496 AddAttribute(XML_NAMESPACE_STYLE, XML_PRINT_ORIENTATION, XML_PORTRAIT);
1497 else
1498 AddAttribute(XML_NAMESPACE_STYLE, XML_PRINT_ORIENTATION, XML_LANDSCAPE);
1499
1500 // write style:properties
1501 SvXMLElementExport aPMF(*this, XML_NAMESPACE_STYLE, XML_PAGE_LAYOUT_PROPERTIES, sal_True, sal_True);
1502 }
1503 }
1504 }
1505
1506 //////////////////////////////////////////////////////////////////////////////
1507
ImpGetPageMasterInfoByName(const OUString & rName)1508 ImpXMLEXPPageMasterInfo* SdXMLExport::ImpGetPageMasterInfoByName(const OUString& rName)
1509 {
1510 if(rName.getLength() && mpPageMasterInfoList->Count())
1511 {
1512 for(sal_uInt32 nCnt = 0L; nCnt < mpPageMasterInfoList->Count(); nCnt++)
1513 {
1514 ImpXMLEXPPageMasterInfo* pInfo = mpPageMasterInfoList->GetObject(nCnt);
1515 if(pInfo)
1516 {
1517 if(pInfo->GetMasterPageName().getLength() && rName.equals(pInfo->GetMasterPageName()))
1518 {
1519 return pInfo;
1520 }
1521 }
1522 }
1523 }
1524 return 0L;
1525 }
1526
1527 //////////////////////////////////////////////////////////////////////////////
1528
ImpPrepDrawPageInfos()1529 void SdXMLExport::ImpPrepDrawPageInfos()
1530 {
1531 // create draw:style-name entries for page export
1532 // containing presentation page attributes AND background attributes
1533 // fixed family for page-styles is "drawing-page" (XML_STYLE_FAMILY_SD_DRAWINGPAGE_NAME)
1534
1535 sal_Int32 nCnt;
1536 for(nCnt = 0; nCnt < mnDocDrawPageCount; nCnt++)
1537 {
1538 Reference<XDrawPage> xDrawPage;
1539 mxDocDrawPages->getByIndex(nCnt) >>= xDrawPage;
1540 maDrawPagesStyleNames[nCnt] = ImpCreatePresPageStyleName( xDrawPage );
1541
1542 Reference< presentation::XPresentationPage > xPresPage(xDrawPage, UNO_QUERY);
1543 if(xPresPage.is())
1544 {
1545 maDrawNotesPagesStyleNames[nCnt] = ImpCreatePresPageStyleName( xPresPage->getNotesPage(), false );
1546
1547 maDrawPagesHeaderFooterSettings[nCnt] = ImpPrepDrawPageHeaderFooterDecls( xDrawPage );
1548 maDrawNotesPagesHeaderFooterSettings[nCnt] = ImpPrepDrawPageHeaderFooterDecls( xPresPage->getNotesPage() );
1549 }
1550 }
1551 }
1552
1553 //////////////////////////////////////////////////////////////////////////////
1554
findOrAppendImpl(std::vector<OUString> & rVector,const OUString & rText,const sal_Char * pPrefix)1555 static OUString findOrAppendImpl( std::vector< OUString >& rVector, const OUString& rText, const sal_Char* pPrefix )
1556 {
1557 // search rVector if there is already a string that equals rText
1558 std::vector< OUString >::iterator aIter;
1559 sal_Int32 nIndex;
1560 for( nIndex = 1, aIter = rVector.begin(); aIter != rVector.end(); aIter++, nIndex++ )
1561 {
1562 if( (*aIter) == rText )
1563 break;
1564 }
1565
1566 // if nothing is found, append the string at the end of rVector
1567 if( aIter == rVector.end() )
1568 rVector.push_back( rText );
1569
1570 // create a reference string with pPrefix and the index of the
1571 // found or created rText
1572 OUString aStr( OUString::createFromAscii( pPrefix ) );
1573 aStr += OUString::valueOf( nIndex );
1574 return aStr;
1575 }
1576
findOrAppendImpl(std::vector<DateTimeDeclImpl> & rVector,const OUString & rText,sal_Bool bFixed,sal_Int32 nFormat,const sal_Char * pPrefix)1577 static OUString findOrAppendImpl( std::vector< DateTimeDeclImpl >& rVector, const OUString& rText, sal_Bool bFixed, sal_Int32 nFormat, const sal_Char* pPrefix )
1578 {
1579 // search rVector if there is already a DateTimeDeclImpl with rText,bFixed and nFormat
1580 std::vector< DateTimeDeclImpl >::iterator aIter;
1581 sal_Int32 nIndex;
1582 for( nIndex = 1, aIter = rVector.begin(); aIter != rVector.end(); aIter++, nIndex++ )
1583 {
1584 const DateTimeDeclImpl& rDecl = (*aIter);
1585 if( (rDecl.mbFixed == bFixed ) &&
1586 (!bFixed || rDecl.maStrText == rText) &&
1587 (bFixed || (rDecl.mnFormat == nFormat) ) )
1588 break;
1589 }
1590
1591 // if nothing is found, append a new DateTimeDeclImpl
1592 if( aIter == rVector.end() )
1593 {
1594 DateTimeDeclImpl aDecl;
1595 aDecl.maStrText = rText;
1596 aDecl.mbFixed = bFixed;
1597 aDecl.mnFormat = nFormat;
1598 rVector.push_back( aDecl );
1599 }
1600
1601 // create a reference string with pPrefix and the index of the
1602 // found or created DateTimeDeclImpl
1603 OUString aStr( OUString::createFromAscii( pPrefix ) );
1604 aStr += OUString::valueOf( nIndex );
1605 return aStr;
1606
1607 }
1608
1609 static const sal_Char* gpStrHeaderTextPrefix = "hdr";
1610 static const sal_Char* gpStrFooterTextPrefix = "ftr";
1611 static const sal_Char* gpStrDateTimeTextPrefix = "dtd";
1612
ImpPrepDrawPageHeaderFooterDecls(const Reference<XDrawPage> & xDrawPage)1613 HeaderFooterPageSettingsImpl SdXMLExport::ImpPrepDrawPageHeaderFooterDecls( const Reference<XDrawPage>& xDrawPage )
1614 {
1615 HeaderFooterPageSettingsImpl aSettings;
1616
1617 if( xDrawPage.is() ) try
1618 {
1619 Reference< XPropertySet > xSet( xDrawPage, UNO_QUERY_THROW );
1620 Reference< XPropertySetInfo > xInfo( xSet->getPropertySetInfo() );
1621
1622 OUString aStrText;
1623
1624 const OUString aStrHeaderTextProp( RTL_CONSTASCII_USTRINGPARAM( "HeaderText" ) );
1625 if( xInfo->hasPropertyByName( aStrHeaderTextProp ) )
1626 {
1627 xSet->getPropertyValue( aStrHeaderTextProp ) >>= aStrText;
1628 if( aStrText.getLength() )
1629 aSettings.maStrHeaderDeclName = findOrAppendImpl( maHeaderDeclsVector, aStrText, gpStrHeaderTextPrefix );
1630 }
1631
1632 const OUString aStrFooterTextProp( RTL_CONSTASCII_USTRINGPARAM( "FooterText" ) );
1633 if( xInfo->hasPropertyByName( aStrFooterTextProp ) )
1634 {
1635 xSet->getPropertyValue( aStrFooterTextProp ) >>= aStrText;
1636 if( aStrText.getLength() )
1637 aSettings.maStrFooterDeclName = findOrAppendImpl( maFooterDeclsVector, aStrText, gpStrFooterTextPrefix );
1638 }
1639
1640 const OUString aStrDateTimeTextProp( RTL_CONSTASCII_USTRINGPARAM( "DateTimeText" ) );
1641 if( xInfo->hasPropertyByName( aStrDateTimeTextProp ) )
1642 {
1643 sal_Bool bFixed = false;
1644 sal_Int32 nFormat = 0;
1645 xSet->getPropertyValue( aStrDateTimeTextProp ) >>= aStrText;
1646 xSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsDateTimeFixed" ) ) ) >>= bFixed;
1647 xSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DateTimeFormat" ) ) ) >>= nFormat;
1648
1649 if( !bFixed || aStrText.getLength() )
1650 {
1651 aSettings.maStrDateTimeDeclName = findOrAppendImpl( maDateTimeDeclsVector, aStrText, bFixed, nFormat, gpStrDateTimeTextPrefix );
1652 if( !bFixed )
1653 addDataStyle( nFormat );
1654 }
1655 }
1656 }
1657 catch( Exception& e )
1658 {
1659 (void)e;
1660 DBG_ERROR( "SdXMLExport::ImpPrepDrawPageHeaderFooterDecls(), unexpected exception cought!" );
1661 }
1662
1663 return aSettings;
1664 }
1665
1666 //////////////////////////////////////////////////////////////////////////////
1667
ImpWriteHeaderFooterDecls()1668 void SdXMLExport::ImpWriteHeaderFooterDecls()
1669 {
1670 OUStringBuffer sBuffer;
1671
1672 if( !maHeaderDeclsVector.empty() )
1673 {
1674 // export header decls
1675 const OUString aPrefix( OUString::createFromAscii( gpStrHeaderTextPrefix ) );
1676 std::vector< OUString >::iterator aIter;
1677 sal_Int32 nIndex;
1678 for( nIndex = 1, aIter = maHeaderDeclsVector.begin(); aIter != maHeaderDeclsVector.end(); aIter++, nIndex++ )
1679 {
1680 sBuffer.append( aPrefix );
1681 sBuffer.append( nIndex );
1682 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_NAME, sBuffer.makeStringAndClear());
1683
1684 SvXMLElementExport aElem(*this, XML_NAMESPACE_PRESENTATION, XML_HEADER_DECL, sal_True, sal_True);
1685 Characters((*aIter));
1686 }
1687 }
1688
1689 if( !maFooterDeclsVector.empty() )
1690 {
1691 // export footer decls
1692 const OUString aPrefix( OUString::createFromAscii( gpStrFooterTextPrefix ) );
1693 std::vector< OUString >::iterator aIter;
1694 sal_Int32 nIndex;
1695 for( nIndex = 1, aIter = maFooterDeclsVector.begin(); aIter != maFooterDeclsVector.end(); aIter++, nIndex++ )
1696 {
1697 sBuffer.append( aPrefix );
1698 sBuffer.append( nIndex );
1699 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_NAME, sBuffer.makeStringAndClear());
1700
1701 SvXMLElementExport aElem(*this, XML_NAMESPACE_PRESENTATION, XML_FOOTER_DECL, sal_False, sal_False);
1702 Characters((*aIter));
1703 }
1704 }
1705
1706 if( !maDateTimeDeclsVector.empty() )
1707 {
1708 // export footer decls
1709 const OUString aPrefix( OUString::createFromAscii( gpStrDateTimeTextPrefix ) );
1710 std::vector< DateTimeDeclImpl >::iterator aIter;
1711 sal_Int32 nIndex;
1712 for( nIndex = 1, aIter = maDateTimeDeclsVector.begin(); aIter != maDateTimeDeclsVector.end(); aIter++, nIndex++ )
1713 {
1714 const DateTimeDeclImpl& rDecl = (*aIter);
1715
1716 sBuffer.append( aPrefix );
1717 sBuffer.append( nIndex );
1718 AddAttribute( XML_NAMESPACE_PRESENTATION, XML_NAME, sBuffer.makeStringAndClear());
1719
1720 AddAttribute( XML_NAMESPACE_PRESENTATION, XML_SOURCE, rDecl.mbFixed ? XML_FIXED : XML_CURRENT_DATE );
1721
1722 if( !rDecl.mbFixed )
1723 AddAttribute( XML_NAMESPACE_STYLE, XML_DATA_STYLE_NAME, getDataStyleName( rDecl.mnFormat ) );
1724
1725 SvXMLElementExport aElem(*this, XML_NAMESPACE_PRESENTATION, XML_DATE_TIME_DECL, sal_False, sal_False);
1726 if( rDecl.mbFixed )
1727 Characters(rDecl.maStrText);
1728 }
1729 }
1730 }
1731
ImplExportHeaderFooterDeclAttributes(const HeaderFooterPageSettingsImpl & aSettings)1732 void SdXMLExport::ImplExportHeaderFooterDeclAttributes( const HeaderFooterPageSettingsImpl& aSettings )
1733 {
1734 if( aSettings.maStrHeaderDeclName.getLength() )
1735 AddAttribute( XML_NAMESPACE_PRESENTATION, XML_USE_HEADER_NAME, aSettings.maStrHeaderDeclName );
1736
1737 if( aSettings.maStrFooterDeclName.getLength() )
1738 AddAttribute( XML_NAMESPACE_PRESENTATION, XML_USE_FOOTER_NAME, aSettings.maStrFooterDeclName );
1739
1740 if( aSettings.maStrDateTimeDeclName.getLength() )
1741 AddAttribute( XML_NAMESPACE_PRESENTATION, XML_USE_DATE_TIME_NAME, aSettings.maStrDateTimeDeclName );
1742 }
1743
1744 //////////////////////////////////////////////////////////////////////////////
1745
ImpCreatePresPageStyleName(Reference<XDrawPage> xDrawPage,bool bExportBackground)1746 OUString SdXMLExport::ImpCreatePresPageStyleName( Reference<XDrawPage> xDrawPage, bool bExportBackground /* = true */ )
1747 {
1748 // create name
1749 OUString sStyleName;
1750
1751 // create style for this page and add to auto style pool
1752
1753 Reference< beans::XPropertySet > xPropSet1(xDrawPage, UNO_QUERY);
1754 if(xPropSet1.is())
1755 {
1756 Reference< beans::XPropertySet > xPropSet;
1757
1758 if( bExportBackground )
1759 {
1760 // since the background items are in a different propertyset
1761 // which itself is a property of the pages property set
1762 // we now merge these two propertysets if possible to simulate
1763 // a single propertyset with all draw page properties
1764 const OUString aBackground(RTL_CONSTASCII_USTRINGPARAM("Background"));
1765 Reference< beans::XPropertySet > xPropSet2;
1766 Reference< beans::XPropertySetInfo > xInfo( xPropSet1->getPropertySetInfo() );
1767 if( xInfo.is() && xInfo->hasPropertyByName( aBackground ) )
1768 {
1769 Any aAny( xPropSet1->getPropertyValue( aBackground ) );
1770 aAny >>= xPropSet2;
1771 }
1772
1773 if( xPropSet2.is() )
1774 xPropSet = PropertySetMerger_CreateInstance( xPropSet1, xPropSet2 );
1775 else
1776 xPropSet = xPropSet1;
1777 }
1778 else
1779 {
1780 xPropSet = xPropSet1;
1781 }
1782
1783 const UniReference< SvXMLExportPropertyMapper > aMapperRef( GetPresPagePropsMapper() );
1784
1785 std::vector< XMLPropertyState > xPropStates( aMapperRef->Filter( xPropSet ) );
1786
1787 if( !xPropStates.empty() )
1788 {
1789 // there are filtered properties -> hard attributes
1790 // try to find this style in AutoStylePool
1791 sStyleName = GetAutoStylePool()->Find(XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID, sStyleName, xPropStates);
1792
1793 if(!sStyleName.getLength())
1794 {
1795 // Style did not exist, add it to AutoStalePool
1796 sStyleName = GetAutoStylePool()->Add(XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID, sStyleName, xPropStates);
1797 }
1798 }
1799 }
1800
1801 return sStyleName;
1802 }
1803
1804 //////////////////////////////////////////////////////////////////////////////
1805
ImpPrepMasterPageInfos()1806 void SdXMLExport::ImpPrepMasterPageInfos()
1807 {
1808 // create draw:style-name entries for master page export
1809 // containing only background attributes
1810 // fixed family for page-styles is "drawing-page" (XML_STYLE_FAMILY_SD_DRAWINGPAGE_NAME)
1811
1812 sal_Int32 nCnt;
1813 for( nCnt = 0; nCnt < mnDocMasterPageCount; nCnt++)
1814 {
1815 Reference<XDrawPage> xDrawPage;
1816 mxDocMasterPages->getByIndex(nCnt) >>= xDrawPage;
1817 maMasterPagesStyleNames[nCnt] = ImpCreatePresPageStyleName( xDrawPage );
1818 }
1819
1820 if( IsImpress() )
1821 {
1822 Reference< presentation::XHandoutMasterSupplier > xHandoutSupp( GetModel(), UNO_QUERY );
1823 if( xHandoutSupp.is() )
1824 {
1825 Reference< XDrawPage > xHandoutPage( xHandoutSupp->getHandoutMasterPage() );
1826 if( xHandoutPage.is() )
1827 {
1828 maHandoutPageHeaderFooterSettings = ImpPrepDrawPageHeaderFooterDecls( xHandoutPage );
1829 maHandoutMasterStyleName = ImpCreatePresPageStyleName( xHandoutPage, false );
1830 }
1831 }
1832 }
1833 }
1834
1835 //////////////////////////////////////////////////////////////////////////////
ImpWritePresentationStyles()1836 void SdXMLExport::ImpWritePresentationStyles()
1837 {
1838 if(IsImpress())
1839 {
1840 for (sal_Int32 nCnt = 0; nCnt < mnDocMasterPageCount; nCnt++)
1841 {
1842 Any aAny(mxDocMasterPages->getByIndex(nCnt));
1843 Reference<container::XNamed> xNamed;
1844
1845 if(aAny >>= xNamed)
1846 {
1847 // write presentation styles (ONLY if presentation)
1848 if(IsImpress() && mxDocStyleFamilies.is() && xNamed.is())
1849 {
1850 XMLStyleExport aStEx(*this, OUString(), GetAutoStylePool().get());
1851 const UniReference< SvXMLExportPropertyMapper > aMapperRef( GetPropertySetMapper() );
1852
1853 OUString aPrefix( xNamed->getName() );
1854
1855 aPrefix += OUString(RTL_CONSTASCII_USTRINGPARAM("-"));
1856 aStEx.exportStyleFamily(xNamed->getName(),
1857 OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_PRESENTATION_NAME)),
1858 aMapperRef, sal_False,
1859 XML_STYLE_FAMILY_SD_PRESENTATION_ID, &aPrefix);
1860 }
1861 }
1862 }
1863 }
1864 }
1865
1866 //////////////////////////////////////////////////////////////////////////////
1867
SetProgress(sal_Int32 nProg)1868 void SdXMLExport::SetProgress(sal_Int32 nProg)
1869 {
1870 // set progress view
1871 if(GetStatusIndicator().is())
1872 GetStatusIndicator()->setValue(nProg);
1873 }
1874
1875 //////////////////////////////////////////////////////////////////////////////
1876 // #82003#
1877
_ExportMeta()1878 void SdXMLExport::_ExportMeta()
1879 {
1880 uno::Sequence<beans::NamedValue> stats(1);
1881 stats[0] = beans::NamedValue(::rtl::OUString::createFromAscii("ObjectCount"),
1882 uno::makeAny(mnObjectCount));
1883
1884 // update document statistics at the model
1885 uno::Reference<document::XDocumentPropertiesSupplier> xPropSup(GetModel(),
1886 uno::UNO_QUERY_THROW);
1887 uno::Reference<document::XDocumentProperties> xDocProps(
1888 xPropSup->getDocumentProperties());
1889 if (xDocProps.is()) {
1890 xDocProps->setDocumentStatistics(stats);
1891 }
1892
1893 // call parent
1894 SvXMLExport::_ExportMeta();
1895 }
1896
1897 //////////////////////////////////////////////////////////////////////////////
1898
_ExportContent()1899 void SdXMLExport::_ExportContent()
1900 {
1901 // export <pres:header-decl>, <pres:footer-decl> and <pres:date-time-decl> elements
1902 ImpWriteHeaderFooterDecls();
1903
1904 // page export
1905 for(sal_Int32 nPageInd(0); nPageInd < mnDocDrawPageCount; nPageInd++)
1906 {
1907 uno::Reference<drawing::XDrawPage> xDrawPage( mxDocDrawPages->getByIndex(nPageInd), uno::UNO_QUERY );
1908
1909 SetProgress(((nPageInd + 1) * 100) / mnDocDrawPageCount);
1910
1911 if(xDrawPage.is())
1912 {
1913 // prepare page attributes, name of page
1914 Reference < container::XNamed > xNamed(xDrawPage, UNO_QUERY);
1915 if(xNamed.is())
1916 AddAttribute(XML_NAMESPACE_DRAW, XML_NAME, xNamed->getName());
1917
1918 // draw:style-name (presentation page attributes AND background attributes)
1919 if( maDrawPagesStyleNames[nPageInd].getLength() )
1920 AddAttribute(XML_NAMESPACE_DRAW, XML_STYLE_NAME,
1921 maDrawPagesStyleNames[nPageInd]);
1922
1923 // draw:master-page-name
1924 Reference < drawing::XMasterPageTarget > xMasterPageInt(xDrawPage, UNO_QUERY);
1925 if(xMasterPageInt.is())
1926 {
1927 Reference<XDrawPage> xUsedMasterPage(xMasterPageInt->getMasterPage());
1928 if(xUsedMasterPage.is())
1929 {
1930 Reference < container::XNamed > xMasterNamed(xUsedMasterPage, UNO_QUERY);
1931 if(xMasterNamed.is())
1932 {
1933 AddAttribute(XML_NAMESPACE_DRAW, XML_MASTER_PAGE_NAME,
1934 EncodeStyleName( xMasterNamed->getName()) );
1935 }
1936 }
1937 }
1938
1939 // presentation:page-layout-name
1940 if( IsImpress() && maDrawPagesAutoLayoutNames[nPageInd+1].getLength())
1941 {
1942 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_PRESENTATION_PAGE_LAYOUT_NAME, maDrawPagesAutoLayoutNames[nPageInd+1] );
1943 }
1944
1945 Reference< beans::XPropertySet > xProps( xDrawPage, UNO_QUERY );
1946 if( xProps.is() )
1947 {
1948 try
1949 {
1950 OUString aBookmarkURL;
1951 xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "BookmarkURL" ) ) ) >>= aBookmarkURL;
1952
1953 if( aBookmarkURL.getLength() )
1954 {
1955 sal_Int32 nIndex = aBookmarkURL.lastIndexOf( (sal_Unicode)'#' );
1956 if( nIndex != -1 )
1957 {
1958 OUString aFileName( aBookmarkURL.copy( 0, nIndex ) );
1959 OUString aBookmarkName( aBookmarkURL.copy( nIndex+1 ) );
1960
1961 aBookmarkURL = GetRelativeReference( aFileName );
1962 aBookmarkURL += String( '#' );
1963 aBookmarkURL += aBookmarkName;
1964 }
1965
1966 AddAttribute ( XML_NAMESPACE_XLINK, XML_HREF, aBookmarkURL);
1967 AddAttribute ( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
1968 AddAttribute ( XML_NAMESPACE_XLINK, XML_SHOW, XML_REPLACE );
1969 AddAttribute ( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONREQUEST );
1970 }
1971 }
1972 catch( Exception& )
1973 {
1974 DBG_ERROR(" no \"BookmarkURL\" property at page?" );
1975 }
1976 }
1977
1978 if( IsImpress() )
1979 ImplExportHeaderFooterDeclAttributes( maDrawPagesHeaderFooterSettings[nPageInd] );
1980
1981
1982 OUString sNavigationOrder( getNavigationOrder( xDrawPage ) );
1983 if( sNavigationOrder.getLength() != 0 )
1984 AddAttribute ( XML_NAMESPACE_DRAW, XML_NAV_ORDER, sNavigationOrder );
1985
1986 UniReference< xmloff::AnimationsExporter > xAnimationsExporter;
1987 uno::Reference< ::com::sun::star::animations::XAnimationNodeSupplier > xAnimNodeSupplier;
1988
1989 // prepare animation export
1990 if(IsImpress())
1991 {
1992 if( getExportFlags() & EXPORT_OASIS )
1993 {
1994 // export new animations for oasis format
1995 xAnimNodeSupplier.set( xDrawPage, UNO_QUERY );
1996
1997 // prepare animations exporter if impress
1998 if(xAnimNodeSupplier.is())
1999 {
2000 xAnimationsExporter = new xmloff::AnimationsExporter( *this, xProps );
2001 xAnimationsExporter->prepare( xAnimNodeSupplier->getAnimationNode() );
2002 }
2003 }
2004 else
2005 {
2006 // export old animations for ooo format
2007 UniReference< XMLAnimationsExporter > xAnimExport = new XMLAnimationsExporter( GetShapeExport().get() );
2008 GetShapeExport()->setAnimationsExporter( xAnimExport );
2009 }
2010 }
2011
2012 // write draw:id
2013 const OUString aPageId = getInterfaceToIdentifierMapper().getIdentifier( xDrawPage );
2014 if( aPageId.getLength() != 0 )
2015 {
2016 AddAttributeIdLegacy(XML_NAMESPACE_DRAW, aPageId);
2017 }
2018
2019 // write page
2020 SvXMLElementExport aDPG(*this, XML_NAMESPACE_DRAW, XML_PAGE, sal_True, sal_True);
2021
2022 // write optional office:forms
2023 exportFormsElement( xDrawPage );
2024
2025 // write graphic objects on this page (if any)
2026 Reference< drawing::XShapes > xExportShapes(xDrawPage, UNO_QUERY);
2027 if(xExportShapes.is() && xExportShapes->getCount())
2028 GetShapeExport()->exportShapes( xExportShapes );
2029
2030 // write animations and presentation notes (ONLY if presentation)
2031 if(IsImpress())
2032 {
2033 if(xAnimNodeSupplier.is())
2034 {
2035 xAnimationsExporter->exportAnimations( xAnimNodeSupplier->getAnimationNode() );
2036 }
2037 else
2038 {
2039 // animations
2040 UniReference< XMLAnimationsExporter > xAnimExport( GetShapeExport()->getAnimationsExporter() );
2041 if( xAnimExport.is() )
2042 xAnimExport->exportAnimations( *this );
2043
2044 xAnimExport = NULL;
2045 GetShapeExport()->setAnimationsExporter( xAnimExport );
2046 }
2047
2048 // presentations
2049 Reference< presentation::XPresentationPage > xPresPage(xDrawPage, UNO_QUERY);
2050 if(xPresPage.is())
2051 {
2052 Reference< XDrawPage > xNotesPage(xPresPage->getNotesPage());
2053 if(xNotesPage.is())
2054 {
2055 Reference< drawing::XShapes > xShapes(xNotesPage, UNO_QUERY);
2056 if(xShapes.is())
2057 {
2058 if( maDrawNotesPagesStyleNames[nPageInd].getLength() )
2059 AddAttribute(XML_NAMESPACE_DRAW, XML_STYLE_NAME, maDrawNotesPagesStyleNames[nPageInd]);
2060
2061 ImplExportHeaderFooterDeclAttributes( maDrawNotesPagesHeaderFooterSettings[nPageInd] );
2062
2063 // write presentation notes
2064 SvXMLElementExport aPSY(*this, XML_NAMESPACE_PRESENTATION, XML_NOTES, sal_True, sal_True);
2065
2066 // write optional office:forms
2067 exportFormsElement( xNotesPage );
2068
2069 // write shapes per se
2070 GetShapeExport()->exportShapes( xShapes );
2071 }
2072 }
2073 }
2074 }
2075
2076 exportAnnotations( xDrawPage );
2077 }
2078 }
2079
2080 if( IsImpress() )
2081 exportPresentationSettings();
2082 }
2083
2084 //////////////////////////////////////////////////////////////////////////////
2085
exportPresentationSettings()2086 void SdXMLExport::exportPresentationSettings()
2087 {
2088 try
2089 {
2090 Reference< XPresentationSupplier > xPresSupplier( GetModel(), UNO_QUERY );
2091 if( !xPresSupplier.is() )
2092 return;
2093
2094 Reference< XPropertySet > xPresProps( xPresSupplier->getPresentation(), UNO_QUERY );
2095 if( !xPresProps.is() )
2096 return;
2097
2098 sal_Bool bHasAttr = sal_False;
2099
2100 sal_Bool bTemp = false;
2101
2102 // export range
2103 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsShowAll" ) ) ) >>= bTemp;
2104 if( !bTemp )
2105 {
2106 OUString aFirstPage;
2107 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "FirstPage" ) ) ) >>= aFirstPage;
2108 if( aFirstPage.getLength() )
2109 {
2110 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_START_PAGE, aFirstPage );
2111 bHasAttr = sal_True;
2112 }
2113 else
2114 {
2115 OUString aCustomShow;
2116 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "CustomShow" ) ) ) >>= aCustomShow;
2117 if( aCustomShow.getLength() )
2118 {
2119 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_SHOW, aCustomShow );
2120 bHasAttr = sal_True;
2121 }
2122 }
2123 }
2124
2125 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsEndless" ) ) ) >>= bTemp;
2126 if( bTemp )
2127 {
2128 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_ENDLESS, XML_TRUE );
2129 bHasAttr = sal_True;
2130
2131 sal_Int32 nPause = 0;
2132 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Pause" ) ) ) >>= nPause;
2133
2134 util::DateTime aTime( 0, (sal_uInt16)nPause, 0, 0, 0, 0, 0 );
2135
2136 OUStringBuffer aOut;
2137 SvXMLUnitConverter::convertTime( aOut, aTime );
2138 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_PAUSE, aOut.makeStringAndClear() );
2139 }
2140
2141 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "AllowAnimations" ) ) ) >>= bTemp;
2142 if( !bTemp )
2143 {
2144 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_ANIMATIONS, XML_DISABLED );
2145 bHasAttr = sal_True;
2146 }
2147
2148 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsAlwaysOnTop" ) ) ) >>= bTemp;
2149 if( bTemp )
2150 {
2151 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_STAY_ON_TOP, XML_TRUE );
2152 bHasAttr = sal_True;
2153 }
2154
2155 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsAutomatic" ) ) ) >>= bTemp;
2156 if( bTemp )
2157 {
2158 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_FORCE_MANUAL, XML_TRUE );
2159 bHasAttr = sal_True;
2160 }
2161
2162 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsFullScreen" ) ) ) >>= bTemp;
2163 if( !bTemp )
2164 {
2165 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_FULL_SCREEN, XML_FALSE );
2166 bHasAttr = sal_True;
2167 }
2168
2169 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsMouseVisible" ) ) ) >>= bTemp;
2170 if( !bTemp )
2171 {
2172 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_MOUSE_VISIBLE, XML_FALSE );
2173 bHasAttr = sal_True;
2174 }
2175
2176 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "StartWithNavigator" ) ) ) >>= bTemp;
2177 if( bTemp )
2178 {
2179 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_START_WITH_NAVIGATOR, XML_TRUE );
2180 bHasAttr = sal_True;
2181 }
2182
2183 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "UsePen" ) ) ) >>= bTemp;
2184 if( bTemp )
2185 {
2186 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_MOUSE_AS_PEN, XML_TRUE );
2187 bHasAttr = sal_True;
2188 }
2189
2190 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsTransitionOnClick" ) ) ) >>= bTemp;
2191 if( !bTemp )
2192 {
2193 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_TRANSITION_ON_CLICK, XML_DISABLED );
2194 bHasAttr = sal_True;
2195 }
2196
2197 xPresProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsShowLogo" ) ) ) >>= bTemp;
2198 if( bTemp )
2199 {
2200 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_SHOW_LOGO, XML_TRUE );
2201 bHasAttr = sal_True;
2202 }
2203
2204 Reference< container::XNameContainer > xShows;
2205 Sequence< OUString > aShowNames;
2206 const OUString* pShowNames = NULL;
2207 sal_Int32 nShowCount = 0;
2208
2209 Reference< XCustomPresentationSupplier > xSup( GetModel(), UNO_QUERY );
2210 if( xSup.is() )
2211 {
2212 xShows = xSup->getCustomPresentations();
2213 if( xShows.is() )
2214 {
2215 aShowNames = xShows->getElementNames();
2216 pShowNames = aShowNames.getArray();
2217 nShowCount = aShowNames.getLength();
2218 }
2219 }
2220
2221 if( bHasAttr || nShowCount != 0 )
2222 {
2223 SvXMLElementExport aSettings(*this, XML_NAMESPACE_PRESENTATION, XML_SETTINGS, sal_True, sal_True);
2224
2225 if( nShowCount == 0 )
2226 return;
2227
2228 Reference< XIndexContainer > xShow;
2229 Reference< XNamed > xPageName;
2230
2231 OUStringBuffer sTmp;
2232
2233 for( sal_Int32 nIndex = 0; nIndex < nShowCount; nIndex++, pShowNames++ )
2234 {
2235 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_NAME, *pShowNames );
2236
2237 xShows->getByName( *pShowNames ) >>= xShow;
2238 DBG_ASSERT( xShow.is(), "invalid custom show!" );
2239 if( !xShow.is() )
2240 continue;
2241
2242 const sal_Int32 nPageCount = xShow->getCount();
2243 for( sal_Int32 nPage = 0; nPage < nPageCount; nPage++ )
2244 {
2245 xShow->getByIndex( nPage ) >>= xPageName;
2246
2247 if( !xPageName.is() )
2248 continue;
2249
2250 if( sTmp.getLength() != 0 )
2251 sTmp.append( sal_Unicode( ',' ) );
2252 sTmp.append( xPageName->getName() );
2253
2254 }
2255
2256 if( sTmp.getLength() )
2257 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_PAGES, sTmp.makeStringAndClear() );
2258
2259 SvXMLElementExport aShows(*this, XML_NAMESPACE_PRESENTATION, XML_SHOW, sal_True, sal_True);
2260 }
2261 }
2262 }
2263 catch( uno::Exception )
2264 {
2265 DBG_ERROR( "uno::Exception while exporting <presentation:settings>" );
2266 }
2267 }
2268
2269 //////////////////////////////////////////////////////////////////////////////
2270
_ExportStyles(sal_Bool bUsed)2271 void SdXMLExport::_ExportStyles(sal_Bool bUsed)
2272 {
2273 GetPropertySetMapper()->SetAutoStyles( sal_False );
2274
2275 // export fill styles
2276 SvXMLExport::_ExportStyles( bUsed );
2277
2278 // write draw:style-name for object graphic-styles
2279 GetShapeExport()->ExportGraphicDefaults();
2280
2281 // do not export in ODF 1.1 or older
2282 if( getDefaultVersion() >= SvtSaveOptions::ODFVER_012 )
2283 GetShapeExport()->GetShapeTableExport()->exportTableStyles();
2284
2285 // write presentation styles
2286 ImpWritePresentationStyles();
2287
2288 // prepare draw:auto-layout-name for page export
2289 ImpPrepAutoLayoutInfos();
2290
2291 // write draw:auto-layout-name for page export
2292 ImpWriteAutoLayoutInfos();
2293
2294 Reference< beans::XPropertySet > xInfoSet( getExportInfo() );
2295 if( xInfoSet.is() )
2296 {
2297 Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() );
2298
2299 Any aAny;
2300
2301 if( xInfoSetInfo->hasPropertyByName( msPageLayoutNames ) )
2302 {
2303 aAny <<= maDrawPagesAutoLayoutNames;
2304 xInfoSet->setPropertyValue( msPageLayoutNames, aAny );
2305 }
2306 }
2307 }
2308
2309 //////////////////////////////////////////////////////////////////////////////
2310
_ExportAutoStyles()2311 void SdXMLExport::_ExportAutoStyles()
2312 {
2313 Reference< beans::XPropertySet > xInfoSet( getExportInfo() );
2314 if( xInfoSet.is() )
2315 {
2316 Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() );
2317
2318 if( xInfoSetInfo->hasPropertyByName( msPageLayoutNames ) )
2319 {
2320 xInfoSet->getPropertyValue( msPageLayoutNames ) >>= maDrawPagesAutoLayoutNames;
2321 }
2322 }
2323
2324 GetPropertySetMapper()->SetAutoStyles( sal_True );
2325
2326 if( getExportFlags() & EXPORT_STYLES )
2327 {
2328 // #80012# PageMaster export moved from _ExportStyles
2329 // prepare page-master infos
2330 ImpPrepPageMasterInfos();
2331
2332 // write page-master infos
2333 ImpWritePageMasterInfos();
2334
2335 // prepare draw:style-name for master page export
2336 ImpPrepMasterPageInfos();
2337 }
2338
2339 if( getExportFlags() & EXPORT_CONTENT )
2340 {
2341 // prepare draw:style-name for page export
2342 ImpPrepDrawPageInfos();
2343 }
2344
2345 // export draw-page styles
2346 GetAutoStylePool()->exportXML(
2347 XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID
2348 , GetDocHandler(),
2349 GetMM100UnitConverter(),
2350 GetNamespaceMap()
2351 );
2352
2353 if( getExportFlags() & EXPORT_STYLES )
2354 {
2355 // create auto style infos for shapes on master handout page
2356 if( IsImpress() )
2357 {
2358 Reference< presentation::XHandoutMasterSupplier > xHandoutSupp( GetModel(), UNO_QUERY );
2359 if( xHandoutSupp.is() )
2360 {
2361 Reference< XDrawPage > xHandoutPage( xHandoutSupp->getHandoutMasterPage() );
2362 if( xHandoutPage.is() )
2363 {
2364 Reference< drawing::XShapes > xShapes(xHandoutPage, UNO_QUERY);
2365 if(xShapes.is() && xShapes->getCount())
2366 GetShapeExport()->collectShapesAutoStyles( xShapes );
2367 }
2368 }
2369 }
2370
2371 // create auto style infos for objects on master pages
2372 for(sal_Int32 nMPageId(0L); nMPageId < mnDocMasterPageCount; nMPageId++)
2373 {
2374 Reference< XDrawPage > xMasterPage(mxDocMasterPages->getByIndex(nMPageId), UNO_QUERY );
2375
2376 if( xMasterPage.is() )
2377 {
2378 // collect layer information
2379 GetFormExport()->examineForms( xMasterPage );
2380
2381 // get MasterPage Name
2382 OUString aMasterPageNamePrefix;
2383 Reference < container::XNamed > xNamed(xMasterPage, UNO_QUERY);
2384 if(xNamed.is())
2385 {
2386 aMasterPageNamePrefix = xNamed->getName();
2387 }
2388 if(aMasterPageNamePrefix.getLength())
2389 {
2390 aMasterPageNamePrefix += OUString(RTL_CONSTASCII_USTRINGPARAM("-"));
2391 }
2392 GetShapeExport()->setPresentationStylePrefix( aMasterPageNamePrefix );
2393
2394 Reference< drawing::XShapes > xMasterShapes(xMasterPage, UNO_QUERY);
2395 if(xMasterShapes.is() && xMasterShapes->getCount())
2396 GetShapeExport()->collectShapesAutoStyles( xMasterShapes );
2397
2398 if(IsImpress())
2399 {
2400 Reference< presentation::XPresentationPage > xPresPage(xMasterPage, UNO_QUERY);
2401 if(xPresPage.is())
2402 {
2403 Reference< XDrawPage > xNotesPage(xPresPage->getNotesPage());
2404 if(xNotesPage.is())
2405 {
2406 // collect layer information
2407 GetFormExport()->examineForms( xNotesPage );
2408
2409 Reference< drawing::XShapes > xShapes(xNotesPage, UNO_QUERY);
2410 if(xShapes.is() && xShapes->getCount())
2411 GetShapeExport()->collectShapesAutoStyles( xShapes );
2412 }
2413 }
2414 }
2415 collectAnnotationAutoStyles(xMasterPage);
2416 }
2417 }
2418 }
2419
2420 if( getExportFlags() & EXPORT_CONTENT )
2421 {
2422 // prepare animations exporter if impress
2423 if(IsImpress() && ((getExportFlags() & EXPORT_OASIS) == 0) )
2424 {
2425 UniReference< XMLAnimationsExporter > xAnimExport = new XMLAnimationsExporter( GetShapeExport().get() );
2426 GetShapeExport()->setAnimationsExporter( xAnimExport );
2427 }
2428
2429 // create auto style infos for objects on pages
2430 for(sal_Int32 nPageInd(0); nPageInd < mnDocDrawPageCount; nPageInd++)
2431 {
2432 Reference<XDrawPage> xDrawPage( mxDocDrawPages->getByIndex(nPageInd), UNO_QUERY );
2433 if( xDrawPage.is() )
2434 {
2435 // collect layer information
2436 GetFormExport()->examineForms( xDrawPage );
2437
2438 // get MasterPage Name
2439 OUString aMasterPageNamePrefix;
2440 Reference < drawing::XMasterPageTarget > xMasterPageInt(xDrawPage, UNO_QUERY);
2441 if(xMasterPageInt.is())
2442 {
2443 Reference<XDrawPage> xUsedMasterPage(xMasterPageInt->getMasterPage());
2444 if(xUsedMasterPage.is())
2445 {
2446 Reference < container::XNamed > xMasterNamed(xUsedMasterPage, UNO_QUERY);
2447 if(xMasterNamed.is())
2448 {
2449 aMasterPageNamePrefix = xMasterNamed->getName();
2450 }
2451 }
2452 }
2453 if(aMasterPageNamePrefix.getLength())
2454 {
2455 aMasterPageNamePrefix += OUString(RTL_CONSTASCII_USTRINGPARAM("-"));
2456 }
2457
2458 GetShapeExport()->setPresentationStylePrefix( aMasterPageNamePrefix );
2459
2460 // prepare object infos
2461 Reference< drawing::XShapes > xDrawShapes(xDrawPage, UNO_QUERY);
2462 if(xDrawShapes.is() && xDrawShapes->getCount())
2463 GetShapeExport()->collectShapesAutoStyles( xDrawShapes );
2464
2465 // prepare presentation notes page object infos (ONLY if presentation)
2466 if(IsImpress())
2467 {
2468 Reference< presentation::XPresentationPage > xPresPage(xDrawPage, UNO_QUERY);
2469 if(xPresPage.is())
2470 {
2471 Reference< XDrawPage > xNotesPage(xPresPage->getNotesPage());
2472 if(xNotesPage.is())
2473 {
2474 // collect layer information
2475 GetFormExport()->examineForms( xNotesPage );
2476
2477 Reference< drawing::XShapes > xShapes(xNotesPage, UNO_QUERY);
2478 if(xShapes.is() && xShapes->getCount())
2479 GetShapeExport()->collectShapesAutoStyles( xShapes );
2480 }
2481 }
2482 }
2483
2484 collectAnnotationAutoStyles( xDrawPage );
2485 }
2486 }
2487 if(IsImpress())
2488 {
2489 UniReference< XMLAnimationsExporter > xAnimExport;
2490 GetShapeExport()->setAnimationsExporter( xAnimExport );
2491 }
2492 }
2493
2494 exportAutoDataStyles();
2495
2496 GetShapeExport()->exportAutoStyles();
2497
2498 sal_uInt16 nContentAutostyles = EXPORT_CONTENT | EXPORT_AUTOSTYLES;
2499 if ( ( getExportFlags() & nContentAutostyles ) == nContentAutostyles )
2500 GetFormExport()->exportAutoStyles( );
2501
2502 // ...for text
2503 GetTextParagraphExport()->exportTextAutoStyles();
2504 }
2505
2506 //////////////////////////////////////////////////////////////////////////////
2507
_ExportMasterStyles()2508 void SdXMLExport::_ExportMasterStyles()
2509 {
2510 // export layer
2511 SdXMLayerExporter::exportLayer( *this );
2512
2513 // export handout master page if impress
2514 if( IsImpress() )
2515 {
2516 Reference< presentation::XHandoutMasterSupplier > xHandoutSupp( GetModel(), UNO_QUERY );
2517 if( xHandoutSupp.is() )
2518 {
2519 Reference< XDrawPage > xHandoutPage( xHandoutSupp->getHandoutMasterPage() );
2520 if( xHandoutPage.is() )
2521 {
2522 // presentation:page-layout-name
2523 if( IsImpress() && maDrawPagesAutoLayoutNames[0].getLength())
2524 {
2525 AddAttribute(XML_NAMESPACE_PRESENTATION, XML_PRESENTATION_PAGE_LAYOUT_NAME, EncodeStyleName( maDrawPagesAutoLayoutNames[0] ));
2526 }
2527
2528 ImpXMLEXPPageMasterInfo* pInfo = mpHandoutPageMaster;
2529 if(pInfo)
2530 {
2531 OUString sString = pInfo->GetName();
2532 AddAttribute(XML_NAMESPACE_STYLE, XML_PAGE_LAYOUT_NAME, sString );
2533 }
2534
2535 // draw:style-name
2536 if( maHandoutMasterStyleName.getLength() )
2537 AddAttribute(XML_NAMESPACE_DRAW, XML_STYLE_NAME, maHandoutMasterStyleName);
2538
2539 ImplExportHeaderFooterDeclAttributes( maHandoutPageHeaderFooterSettings );
2540
2541 // write masterpage
2542 SvXMLElementExport aMPG(*this, XML_NAMESPACE_STYLE, XML_HANDOUT_MASTER, sal_True, sal_True);
2543
2544 // write graphic objects on this master page (if any)
2545 Reference< drawing::XShapes > xShapes(xHandoutPage, UNO_QUERY);
2546 if(xShapes.is() && xShapes->getCount())
2547 GetShapeExport()->exportShapes( xShapes );
2548 }
2549 }
2550 }
2551
2552 // export MasterPages in master-styles section
2553 for (sal_Int32 nMPageId = 0; nMPageId < mnDocMasterPageCount; nMPageId++)
2554 {
2555 Reference< XDrawPage > xMasterPage( mxDocMasterPages->getByIndex(nMPageId), UNO_QUERY );
2556 if(xMasterPage.is())
2557 {
2558 // prepare masterpage attributes
2559 OUString sMasterPageName;
2560 Reference < container::XNamed > xNamed(xMasterPage, UNO_QUERY);
2561 if(xNamed.is())
2562 {
2563 sal_Bool bEncoded = sal_False;
2564 sMasterPageName = xNamed->getName();
2565 AddAttribute(XML_NAMESPACE_STYLE, XML_NAME,
2566 EncodeStyleName( sMasterPageName, &bEncoded ));
2567 if( bEncoded )
2568 AddAttribute(
2569 XML_NAMESPACE_STYLE, XML_DISPLAY_NAME,
2570 sMasterPageName );
2571 }
2572
2573 ImpXMLEXPPageMasterInfo* pInfo = mpPageMasterUsageList->GetObject(nMPageId);
2574 if(pInfo)
2575 {
2576 OUString sString = pInfo->GetName();
2577 AddAttribute(XML_NAMESPACE_STYLE, XML_PAGE_LAYOUT_NAME, sString );
2578 }
2579
2580 // draw:style-name (background attributes)
2581 if( maMasterPagesStyleNames[nMPageId].getLength() )
2582 AddAttribute(XML_NAMESPACE_DRAW, XML_STYLE_NAME,
2583 maMasterPagesStyleNames[nMPageId]);
2584
2585 // write masterpage
2586 SvXMLElementExport aMPG(*this, XML_NAMESPACE_STYLE, XML_MASTER_PAGE, sal_True, sal_True);
2587
2588 // write optional office:forms
2589 exportFormsElement( xMasterPage );
2590
2591 // write graphic objects on this master page (if any)
2592 Reference< drawing::XShapes > xMasterShapes(xMasterPage, UNO_QUERY);
2593 if(xMasterShapes.is() && xMasterShapes->getCount())
2594 GetShapeExport()->exportShapes( xMasterShapes );
2595
2596 // write presentation notes (ONLY if presentation)
2597 if(IsImpress())
2598 {
2599 Reference< presentation::XPresentationPage > xPresPage(xMasterPage, UNO_QUERY);
2600 if(xPresPage.is())
2601 {
2602 Reference< XDrawPage > xNotesPage(xPresPage->getNotesPage());
2603 if(xNotesPage.is())
2604 {
2605 Reference< drawing::XShapes > xShapes(xNotesPage, UNO_QUERY);
2606 if(xShapes.is())
2607 {
2608 ImpXMLEXPPageMasterInfo* pMasterInfo = mpNotesPageMasterUsageList->GetObject(nMPageId);
2609 if(pMasterInfo)
2610 {
2611 OUString sString = pMasterInfo->GetName();
2612 AddAttribute(XML_NAMESPACE_STYLE, XML_PAGE_LAYOUT_NAME, sString);
2613 }
2614
2615 // write presentation notes
2616 SvXMLElementExport aPSY(*this, XML_NAMESPACE_PRESENTATION, XML_NOTES, sal_True, sal_True);
2617
2618 // write optional office:forms
2619 exportFormsElement( xNotesPage );
2620
2621 // write shapes per se
2622 GetShapeExport()->exportShapes( xShapes );
2623 }
2624 }
2625 }
2626 }
2627 exportAnnotations( xMasterPage );
2628 }
2629 }
2630 }
2631
exportFormsElement(Reference<XDrawPage> xDrawPage)2632 void SdXMLExport::exportFormsElement( Reference< XDrawPage > xDrawPage )
2633 {
2634 if( xDrawPage.is() )
2635 {
2636 Reference< form::XFormsSupplier2 > xFormsSupplier( xDrawPage, UNO_QUERY );
2637 if ( xFormsSupplier.is() && xFormsSupplier->hasForms() )
2638 {
2639 // write masterpage
2640 ::xmloff::OOfficeFormsExport aForms(*this);
2641 GetFormExport()->exportForms( xDrawPage );
2642 }
2643
2644 if(! GetFormExport()->seekPage( xDrawPage ) )
2645 {
2646 DBG_ERROR( "OFormLayerXMLExport::seekPage failed!" );
2647 }
2648 }
2649 }
2650
GetViewSettings(uno::Sequence<beans::PropertyValue> & rProps)2651 void SdXMLExport::GetViewSettings(uno::Sequence<beans::PropertyValue>& rProps)
2652 {
2653 rProps.realloc(4);
2654 beans::PropertyValue* pProps = rProps.getArray();
2655 if(pProps)
2656 {
2657 // SvXMLElementExport aViewSettingsElem(*this, XML_NAMESPACE_DRAW, XML_VIEW_SETTINGS, sal_True, sal_True);
2658
2659 Reference< beans::XPropertySet > xPropSet( GetModel(), UNO_QUERY );
2660 if( !xPropSet.is() )
2661 return;
2662
2663 awt::Rectangle aVisArea;
2664 xPropSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "VisibleArea" ) ) ) >>= aVisArea;
2665 /*
2666 sal_Int16 nMapUnit;
2667 xPropSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "MapUnit" ) ) ) >>= nMapUnit;
2668 */
2669
2670 sal_uInt16 i = 0;
2671 pProps[i].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VisibleAreaTop"));
2672 pProps[i++].Value <<= aVisArea.Y;
2673 pProps[i].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VisibleAreaLeft"));
2674 pProps[i++].Value <<= aVisArea.X;
2675 pProps[i].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VisibleAreaWidth"));
2676 pProps[i++].Value <<= aVisArea.Width;
2677 pProps[i].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VisibleAreaHeight"));
2678 pProps[i++].Value <<= aVisArea.Height;
2679 }
2680 }
2681
GetConfigurationSettings(uno::Sequence<beans::PropertyValue> & rProps)2682 void SdXMLExport::GetConfigurationSettings(uno::Sequence<beans::PropertyValue>& rProps)
2683 {
2684 Reference< lang::XMultiServiceFactory > xFac( GetModel(), UNO_QUERY );
2685 if( xFac.is() )
2686 {
2687 Reference< beans::XPropertySet > xProps( xFac->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.Settings" ) ) ), UNO_QUERY );
2688 if( xProps.is() )
2689 SvXMLUnitConverter::convertPropertySet( rProps, xProps );
2690 }
2691 }
2692
2693 //////////////////////////////////////////////////////////////////////////////
2694
addDataStyle(const sal_Int32 nNumberFormat,sal_Bool bTimeFormat)2695 void SdXMLExport::addDataStyle(const sal_Int32 nNumberFormat, sal_Bool bTimeFormat )
2696 {
2697 sal_Int32 nFormat = nNumberFormat;
2698 if( (nNumberFormat > 1) && (nNumberFormat <= 0x0f) )
2699 nFormat -= 2;
2700
2701 if( bTimeFormat )
2702 {
2703 if( maUsedTimeStyles.count( nFormat ) == 0 )
2704 maUsedTimeStyles.insert( nFormat );
2705 }
2706 else
2707 {
2708 if( maUsedDateStyles.count( nFormat ) == 0 )
2709 maUsedDateStyles.insert( nFormat );
2710 }
2711 }
2712
2713 //////////////////////////////////////////////////////////////////////////////
2714
exportDataStyles()2715 void SdXMLExport::exportDataStyles()
2716 {
2717 // there are no data styles to export in draw/impress yet
2718 }
2719
2720 //////////////////////////////////////////////////////////////////////////////
2721
exportAutoDataStyles()2722 void SdXMLExport::exportAutoDataStyles()
2723 {
2724 SdXMLFormatMap::iterator aIter( maUsedDateStyles.begin() );
2725 SdXMLFormatMap::iterator aEnd( maUsedDateStyles.end() );
2726
2727 while( aIter != aEnd )
2728 SdXMLNumberStylesExporter::exportDateStyle( *this, (*aIter++) );
2729
2730 aIter = maUsedTimeStyles.begin();
2731 aEnd = maUsedTimeStyles.end();
2732 while( aIter != aEnd )
2733 SdXMLNumberStylesExporter::exportTimeStyle( *this, (*aIter++) );
2734
2735 if(HasFormExport())
2736 GetFormExport()->exportAutoControlNumberStyles();
2737 }
2738
2739 //////////////////////////////////////////////////////////////////////////////
2740
getDataStyleName(const sal_Int32 nNumberFormat,sal_Bool bTimeFormat) const2741 OUString SdXMLExport::getDataStyleName(const sal_Int32 nNumberFormat, sal_Bool bTimeFormat ) const
2742 {
2743 if( bTimeFormat )
2744 {
2745 return SdXMLNumberStylesExporter::getTimeStyleName( nNumberFormat );
2746 }
2747 else
2748 {
2749 return SdXMLNumberStylesExporter::getDateStyleName( nNumberFormat );
2750 }
2751 }
2752
getNavigationOrder(const Reference<XDrawPage> & xDrawPage)2753 OUString SdXMLExport::getNavigationOrder( const Reference< XDrawPage >& xDrawPage )
2754 {
2755 OUStringBuffer sNavOrder;
2756 try
2757 {
2758 Reference< XPropertySet > xSet( xDrawPage, UNO_QUERY_THROW );
2759 Reference< XIndexAccess > xNavOrder( xSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "NavigationOrder" ) ) ), UNO_QUERY_THROW );
2760
2761 Reference< XIndexAccess > xZOrderAccess( xDrawPage, UNO_QUERY );
2762
2763 // only export navigation order if it is different from the z-order
2764 if( (xNavOrder.get() != xZOrderAccess.get()) && (xNavOrder->getCount() == xDrawPage->getCount()) )
2765 {
2766 sal_Int32 nIndex;
2767 const sal_Int32 nCount = xNavOrder->getCount();
2768 for( nIndex = 0; nIndex < nCount; ++nIndex )
2769 {
2770 OUString sId( getInterfaceToIdentifierMapper().registerReference( Reference< XInterface >( xNavOrder->getByIndex( nIndex ), UNO_QUERY ) ) );
2771 if( sId.getLength() != 0 )
2772 {
2773 if( sNavOrder.getLength() != 0 )
2774 sNavOrder.append( (sal_Unicode)' ' );
2775 sNavOrder.append( sId );
2776 }
2777 }
2778 }
2779 }
2780 catch( Exception& )
2781 {
2782 }
2783 return sNavOrder.makeStringAndClear();
2784 }
2785
2786 //////////////////////////////////////////////////////////////////////////////
2787
collectAnnotationAutoStyles(const Reference<XDrawPage> & xDrawPage)2788 void SdXMLExport::collectAnnotationAutoStyles( const Reference<XDrawPage>& xDrawPage )
2789 {
2790 Reference< XAnnotationAccess > xAnnotationAccess( xDrawPage, UNO_QUERY );
2791 if( xAnnotationAccess.is() ) try
2792 {
2793 Reference< XAnnotationEnumeration > xAnnotationEnumeration( xAnnotationAccess->createAnnotationEnumeration() );
2794 if( xAnnotationEnumeration.is() )
2795 {
2796 while( xAnnotationEnumeration->hasMoreElements() )
2797 {
2798 Reference< XAnnotation > xAnnotation( xAnnotationEnumeration->nextElement(), UNO_QUERY_THROW );
2799 Reference< XText > xText( xAnnotation->getTextRange() );
2800 if(xText.is() && xText->getString().getLength())
2801 GetTextParagraphExport()->collectTextAutoStyles( xText );
2802 }
2803 }
2804 }
2805 catch( Exception& )
2806 {
2807 DBG_ERROR("SdXMLExport::collectAnnotationAutoStyles(), exception caught during export of annotation auto styles");
2808 }
2809 }
2810
exportAnnotations(const Reference<XDrawPage> & xDrawPage)2811 void SdXMLExport::exportAnnotations( const Reference<XDrawPage>& xDrawPage )
2812 {
2813 // do not export in ODF 1.2 or older
2814 if( getDefaultVersion() <= SvtSaveOptions::ODFVER_012 )
2815 return;
2816
2817 Reference< XAnnotationAccess > xAnnotationAccess( xDrawPage, UNO_QUERY );
2818 if( xAnnotationAccess.is() ) try
2819 {
2820 Reference< XAnnotationEnumeration > xAnnotationEnumeration( xAnnotationAccess->createAnnotationEnumeration() );
2821 if( xAnnotationEnumeration.is() && xAnnotationEnumeration->hasMoreElements() )
2822 {
2823 OUStringBuffer sStringBuffer;
2824 do
2825 {
2826 Reference< XAnnotation > xAnnotation( xAnnotationEnumeration->nextElement(), UNO_QUERY_THROW );
2827
2828 RealPoint2D aPosition( xAnnotation->getPosition() );
2829
2830 GetMM100UnitConverter().convertMeasure(sStringBuffer, static_cast<sal_Int32>( aPosition.X * 100 ) );
2831 AddAttribute(XML_NAMESPACE_SVG, XML_X, sStringBuffer.makeStringAndClear());
2832
2833 GetMM100UnitConverter().convertMeasure(sStringBuffer, static_cast<sal_Int32>( aPosition.Y * 100 ) );
2834 AddAttribute(XML_NAMESPACE_SVG, XML_Y, sStringBuffer.makeStringAndClear());
2835
2836 RealSize2D aSize( xAnnotation->getSize() );
2837
2838 if( aSize.Width || aSize.Height )
2839 {
2840 GetMM100UnitConverter().convertMeasure(sStringBuffer, static_cast<sal_Int32>( aSize.Width * 100 ) );
2841 AddAttribute(XML_NAMESPACE_SVG, XML_WIDTH, sStringBuffer.makeStringAndClear());
2842 GetMM100UnitConverter().convertMeasure(sStringBuffer, static_cast<sal_Int32>( aSize.Height * 100 ) );
2843 AddAttribute(XML_NAMESPACE_SVG, XML_HEIGHT, sStringBuffer.makeStringAndClear());
2844 }
2845
2846 // annotation element + content
2847 SvXMLElementExport aElem(*this, XML_NAMESPACE_OFFICE_EXT, XML_ANNOTATION, sal_False, sal_True);
2848
2849 // author
2850 OUString aAuthor( xAnnotation->getAuthor() );
2851 if( aAuthor.getLength() )
2852 {
2853 SvXMLElementExport aCreatorElem( *this, XML_NAMESPACE_DC, XML_CREATOR, sal_True, sal_False );
2854 this->Characters(aAuthor);
2855 }
2856
2857 {
2858 // date time
2859 DateTime aDate( xAnnotation->getDateTime() );
2860 GetMM100UnitConverter().convertDateTime(sStringBuffer, aDate, sal_True);
2861 SvXMLElementExport aDateElem( *this, XML_NAMESPACE_DC, XML_DATE, sal_True, sal_False );
2862 Characters(sStringBuffer.makeStringAndClear());
2863 }
2864
2865 com::sun::star::uno::Reference < com::sun::star::text::XText > xText( xAnnotation->getTextRange() );
2866 if( xText.is() )
2867 this->GetTextParagraphExport()->exportText( xText );
2868 }
2869 while( xAnnotationEnumeration->hasMoreElements() );
2870 }
2871 }
2872 catch( Exception& )
2873 {
2874 DBG_ERROR("SdXMLExport::exportAnnotations(), exception caught during export of annotations");
2875 }
2876 }
2877
2878 //////////////////////////////////////////////////////////////////////////////
2879
2880 #define SERVICE( classname, servicename, implementationname, draw, flags )\
2881 uno::Sequence< OUString > SAL_CALL classname##_getSupportedServiceNames() throw()\
2882 {\
2883 const OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( servicename ) );\
2884 const uno::Sequence< OUString > aSeq( &aServiceName, 1 );\
2885 return aSeq;\
2886 }\
2887 OUString SAL_CALL classname##_getImplementationName() throw()\
2888 {\
2889 return OUString( RTL_CONSTASCII_USTRINGPARAM( implementationname ) );\
2890 }\
2891 uno::Reference< uno::XInterface > SAL_CALL classname##_createInstance(const uno::Reference< lang::XMultiServiceFactory > & rSMgr) throw( uno::Exception )\
2892 {\
2893 return (cppu::OWeakObject*)new SdXMLExport( rSMgr, draw, flags );\
2894 }
2895
2896 SERVICE( XMLImpressExportOasis, "com.sun.star.comp.Impress.XMLOasisExporter", "XMLImpressExportOasis", sal_False, EXPORT_OASIS|EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS|EXPORT_FONTDECLS|EXPORT_EMBEDDED );
2897 SERVICE( XMLImpressStylesExportOasis, "com.sun.star.comp.Impress.XMLOasisStylesExporter", "XMLImpressStylesExportOasis", sal_False, EXPORT_OASIS|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES );
2898 SERVICE( XMLImpressContentExportOasis, "com.sun.star.comp.Impress.XMLOasisContentExporter", "XMLImpressContentExportOasis", sal_False, EXPORT_OASIS|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_FONTDECLS );
2899 SERVICE( XMLImpressMetaExportOasis, "com.sun.star.comp.Impress.XMLOasisMetaExporter", "XMLImpressMetaExportOasis", sal_False, EXPORT_OASIS|EXPORT_META );
2900 SERVICE( XMLImpressSettingsExportOasis, "com.sun.star.comp.Impress.XMLOasisSettingsExporter", "XMLImpressSettingsExportOasis", sal_False, EXPORT_OASIS|EXPORT_SETTINGS );
2901
2902 SERVICE( XMLImpressExportOOO, "com.sun.star.comp.Impress.XMLExporter", "XMLImpressExportOOO", sal_False, EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS|EXPORT_FONTDECLS|EXPORT_EMBEDDED );
2903 SERVICE( XMLImpressStylesExportOOO, "com.sun.star.comp.Impress.XMLStylesExporter", "XMLImpressStylesExportOOO", sal_False, EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES );
2904 SERVICE( XMLImpressContentExportOOO, "com.sun.star.comp.Impress.XMLContentExporter", "XMLImpressContentExportOOO", sal_False, EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_FONTDECLS );
2905 SERVICE( XMLImpressMetaExportOOO, "com.sun.star.comp.Impress.XMLMetaExporter", "XMLImpressMetaExportOOO", sal_False, EXPORT_META );
2906 SERVICE( XMLImpressSettingsExportOOO, "com.sun.star.comp.Impress.XMLSettingsExporter", "XMLImpressSettingsExportOOO", sal_False, EXPORT_SETTINGS );
2907
2908 SERVICE( XMLDrawExportOasis, "com.sun.star.comp.Draw.XMLOasisExporter", "XMLDrawExportOasis", sal_True, EXPORT_OASIS|EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS|EXPORT_FONTDECLS|EXPORT_EMBEDDED );
2909 SERVICE( XMLDrawStylesExportOasis, "com.sun.star.comp.Draw.XMLOasisStylesExporter", "XMLDrawStylesExportOasis", sal_True, EXPORT_OASIS|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES );
2910 SERVICE( XMLDrawContentExportOasis, "com.sun.star.comp.Draw.XMLOasisContentExporter", "XMLDrawContentExportOasis", sal_True, EXPORT_OASIS|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_FONTDECLS );
2911 SERVICE( XMLDrawMetaExportOasis, "com.sun.star.comp.Draw.XMLOasisMetaExporter", "XMLDrawMetaExportOasis", sal_True, EXPORT_OASIS|EXPORT_META );
2912 SERVICE( XMLDrawSettingsExportOasis, "com.sun.star.comp.Draw.XMLOasisSettingsExporter", "XMLDrawSettingsExportOasis", sal_True, EXPORT_OASIS|EXPORT_SETTINGS );
2913
2914 SERVICE( XMLDrawExportOOO, "com.sun.star.comp.Draw.XMLExporter", "XMLDrawExportOOO", sal_True, EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS|EXPORT_FONTDECLS|EXPORT_EMBEDDED );
2915 SERVICE( XMLDrawStylesExportOOO, "com.sun.star.comp.Draw.XMLStylesExporter", "XMLDrawStylesExportOOO", sal_True, EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES );
2916 SERVICE( XMLDrawContentExportOOO, "com.sun.star.comp.Draw.XMLContentExporter", "XMLDrawContentExportOOO", sal_True, EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_FONTDECLS );
2917 SERVICE( XMLDrawMetaExportOOO, "com.sun.star.comp.Draw.XMLMetaExporter", "XMLDrawMetaExportOOO", sal_True, EXPORT_META );
2918 SERVICE( XMLDrawSettingsExportOOO, "com.sun.star.comp.Draw.XMLSettingsExporter", "XMLDrawSettingsExportOOO", sal_True, EXPORT_SETTINGS );
2919
2920 SERVICE( XMLDrawingLayerExport, "com.sun.star.comp.DrawingLayer.XMLExporter", "XMLDrawingLayerExport", sal_True, EXPORT_OASIS|EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_FONTDECLS|EXPORT_EMBEDDED );
2921 SERVICE( XMLImpressClipboardExport, "com.sun.star.comp.Impress.XMLClipboardExporter", "XMLImpressClipboardExport", sal_False, EXPORT_OASIS|EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_FONTDECLS|EXPORT_EMBEDDED );
2922
2923 // XServiceInfo
getImplementationName()2924 OUString SAL_CALL SdXMLExport::getImplementationName() throw( uno::RuntimeException )
2925 {
2926 if( IsDraw())
2927 {
2928 // Draw
2929
2930 switch( getExportFlags())
2931 {
2932 case EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS|EXPORT_FONTDECLS|EXPORT_EMBEDDED:
2933 return XMLDrawExportOOO_getImplementationName();
2934 case EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES:
2935 return XMLDrawStylesExportOOO_getImplementationName();
2936 case EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_FONTDECLS:
2937 return XMLDrawContentExportOOO_getImplementationName();
2938 case EXPORT_META:
2939 return XMLDrawMetaExportOOO_getImplementationName();
2940 case EXPORT_SETTINGS:
2941 return XMLDrawSettingsExportOOO_getImplementationName();
2942
2943 case EXPORT_OASIS|EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS|EXPORT_FONTDECLS|EXPORT_EMBEDDED:
2944 return XMLDrawExportOasis_getImplementationName();
2945 case EXPORT_OASIS|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES:
2946 return XMLDrawStylesExportOasis_getImplementationName();
2947 case EXPORT_OASIS|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_FONTDECLS:
2948 return XMLDrawContentExportOasis_getImplementationName();
2949 case EXPORT_OASIS|EXPORT_META:
2950 return XMLDrawMetaExportOasis_getImplementationName();
2951 case EXPORT_OASIS|EXPORT_SETTINGS:
2952 return XMLDrawSettingsExportOasis_getImplementationName();
2953
2954 default:
2955 return XMLDrawExportOOO_getImplementationName();
2956 }
2957 }
2958 else
2959 {
2960 // Impress
2961
2962 switch( getExportFlags())
2963 {
2964 case EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS|EXPORT_FONTDECLS|EXPORT_EMBEDDED:
2965 return XMLImpressExportOOO_getImplementationName();
2966 case EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES:
2967 return XMLImpressStylesExportOOO_getImplementationName();
2968 case EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_FONTDECLS:
2969 return XMLImpressContentExportOOO_getImplementationName();
2970 case EXPORT_META:
2971 return XMLImpressMetaExportOOO_getImplementationName();
2972 case EXPORT_SETTINGS:
2973 return XMLImpressSettingsExportOOO_getImplementationName();
2974 case EXPORT_OASIS|EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS|EXPORT_FONTDECLS|EXPORT_EMBEDDED:
2975 return XMLImpressExportOasis_getImplementationName();
2976 case EXPORT_OASIS|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES:
2977 return XMLImpressStylesExportOasis_getImplementationName();
2978 case EXPORT_OASIS|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_FONTDECLS:
2979 return XMLImpressContentExportOasis_getImplementationName();
2980 case EXPORT_OASIS|EXPORT_META:
2981 return XMLImpressMetaExportOasis_getImplementationName();
2982 case EXPORT_OASIS|EXPORT_SETTINGS:
2983 return XMLImpressSettingsExportOasis_getImplementationName();
2984
2985 default:
2986 return XMLImpressExportOOO_getImplementationName();
2987 }
2988 }
2989 }
2990