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 121 const OUString& GetName() const { return msName; } 122 const OUString& GetMasterPageName() const { return msMasterPageName; } 123 124 sal_Int32 GetBorderBottom() const { return mnBorderBottom; } 125 sal_Int32 GetBorderLeft() const { return mnBorderLeft; } 126 sal_Int32 GetBorderRight() const { return mnBorderRight; } 127 sal_Int32 GetBorderTop() const { return mnBorderTop; } 128 sal_Int32 GetWidth() const { return mnWidth; } 129 sal_Int32 GetHeight() const { return mnHeight; } 130 view::PaperOrientation GetOrientation() const { return meOrientation; } 131 }; 132 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 188 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 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 225 sal_uInt16 GetLayoutType() const { return mnType; } 226 sal_Int32 GetGapX() const { return mnGapX; } 227 sal_Int32 GetGapY() const { return mnGapY; } 228 229 const OUString& GetLayoutName() const { return msLayoutName; } 230 void SetLayoutName(const OUString& rNew) { msLayoutName = rNew; } 231 232 const Rectangle& GetTitleRectangle() const { return maTitleRect; } 233 const Rectangle& GetPresRectangle() const { return maPresRect; } 234 235 static sal_Bool IsCreateNecessary(sal_uInt16 nTyp); 236 }; 237 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 247 sal_Bool ImpXMLAutoLayoutInfo::operator==(const ImpXMLAutoLayoutInfo& rInfo) const 248 { 249 return ((mnType == rInfo.mnType 250 && mpPageMasterInfo == rInfo.mpPageMasterInfo)); 251 } 252 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 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 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 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 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 776 ImpDefaultMapper::ImpDefaultMapper( Reference< beans::XPropertyState >& rxState ) 777 : mxState( rxState ), 778 mxSet( rxState, UNO_QUERY ) 779 { 780 } 781 782 Reference< beans::XPropertySetInfo > SAL_CALL ImpDefaultMapper::getPropertySetInfo() throw(uno::RuntimeException) 783 { 784 return mxSet->getPropertySetInfo(); 785 } 786 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 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 798 void SAL_CALL ImpDefaultMapper::addPropertyChangeListener( const OUString&, const Reference< beans::XPropertyChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {} 799 void SAL_CALL ImpDefaultMapper::removePropertyChangeListener( const OUString&, const Reference< beans::XPropertyChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {} 800 void SAL_CALL ImpDefaultMapper::addVetoableChangeListener( const OUString&, const Reference< beans::XVetoableChangeListener >& ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {} 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 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 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 existence 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 ////////////////////////////////////////////////////////////////////////////// 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 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 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 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 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 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 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 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 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 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 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 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 2715 void SdXMLExport::exportDataStyles() 2716 { 2717 // there are no data styles to export in draw/impress yet 2718 } 2719 2720 ////////////////////////////////////////////////////////////////////////////// 2721 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 2741 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 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 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 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 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