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 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_xmloff.hxx" 24 25 #include <tools/debug.hxx> 26 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 27 #include <com/sun/star/text/TextContentAnchorType.hpp> 28 #include <com/sun/star/beans/XPropertySet.hpp> 29 #include <com/sun/star/text/XTextFrame.hpp> 30 #include <com/sun/star/container/XNamed.hpp> 31 #include <com/sun/star/text/SizeType.hpp> 32 #include <com/sun/star/drawing/XShape.hpp> 33 #include <com/sun/star/document/XEventsSupplier.hpp> 34 #include <com/sun/star/document/XEmbeddedObjectSupplier.hpp> 35 #include <com/sun/star/io/XOutputStream.hpp> 36 #include <com/sun/star/text/HoriOrientation.hpp> 37 #include <com/sun/star/text/VertOrientation.hpp> 38 #include <xmloff/xmlimp.hxx> 39 #include <xmloff/xmltoken.hxx> 40 #include "xmloff/xmlnmspe.hxx" 41 #include <xmloff/nmspmap.hxx> 42 #include <xmloff/xmluconv.hxx> 43 #include "XMLAnchorTypePropHdl.hxx" 44 #include "XMLEmbeddedObjectImportContext.hxx" 45 #include <xmloff/XMLBase64ImportContext.hxx> 46 #include "XMLReplacementImageContext.hxx" 47 #include <xmloff/prstylei.hxx> 48 #include "xmloff/i18nmap.hxx" 49 #include "xexptran.hxx" 50 #include <xmloff/shapeimport.hxx> 51 #include <xmloff/XMLEventsImportContext.hxx> 52 #include "XMLImageMapContext.hxx" 53 #include "XMLTextFrameContext.hxx" 54 #include "XMLTextListBlockContext.hxx" 55 #include "XMLTextListItemContext.hxx" 56 #include <xmloff/attrlist.hxx> 57 #include <comphelper/stl_types.hxx> 58 #include <basegfx/polygon/b2dpolygon.hxx> 59 #include <basegfx/polygon/b2dpolygontools.hxx> 60 #include <basegfx/matrix/b2dhommatrixtools.hxx> 61 #include <basegfx/polygon/b2dpolypolygontools.hxx> 62 #include <map> 63 64 using ::rtl::OUString; 65 using ::rtl::OUStringBuffer; 66 67 using namespace ::com::sun::star; 68 using namespace ::com::sun::star::uno; 69 using namespace ::com::sun::star::text; 70 using namespace ::com::sun::star::xml::sax; 71 using namespace ::com::sun::star::beans; 72 using namespace ::com::sun::star::lang; 73 using namespace ::com::sun::star::container; 74 using namespace ::com::sun::star::drawing; 75 using namespace ::com::sun::star::document; 76 using namespace ::xmloff::token; 77 using ::com::sun::star::document::XEventsSupplier; 78 79 #define XML_TEXT_FRAME_TEXTBOX 1 80 #define XML_TEXT_FRAME_GRAPHIC 2 81 #define XML_TEXT_FRAME_OBJECT 3 82 #define XML_TEXT_FRAME_OBJECT_OLE 4 83 #define XML_TEXT_FRAME_APPLET 5 84 #define XML_TEXT_FRAME_PLUGIN 6 85 #define XML_TEXT_FRAME_FLOATING_FRAME 7 86 87 typedef ::std::map < const ::rtl::OUString, ::rtl::OUString, ::comphelper::UStringLess> ParamMap; 88 89 class XMLTextFrameContextHyperlink_Impl 90 { 91 OUString sHRef; 92 OUString sName; 93 OUString sTargetFrameName; 94 sal_Bool bMap; 95 96 public: 97 98 inline XMLTextFrameContextHyperlink_Impl( const OUString& rHRef, 99 const OUString& rName, 100 const OUString& rTargetFrameName, 101 sal_Bool bMap ); 102 103 const OUString& GetHRef() const { return sHRef; } 104 const OUString& GetName() const { return sName; } 105 const OUString& GetTargetFrameName() const { return sTargetFrameName; } 106 sal_Bool GetMap() const { return bMap; } 107 }; 108 109 inline XMLTextFrameContextHyperlink_Impl::XMLTextFrameContextHyperlink_Impl( 110 const OUString& rHRef, const OUString& rName, 111 const OUString& rTargetFrameName, sal_Bool bM ) : 112 sHRef( rHRef ), 113 sName( rName ), 114 sTargetFrameName( rTargetFrameName ), 115 bMap( bM ) 116 { 117 } 118 119 // --> OD 2009-07-22 #i73249# 120 class XMLTextFrameTitleOrDescContext_Impl : public SvXMLImportContext 121 { 122 OUString& mrTitleOrDesc; 123 124 public: 125 126 TYPEINFO(); 127 128 XMLTextFrameTitleOrDescContext_Impl( SvXMLImport& rImport, 129 sal_uInt16 nPrfx, 130 const ::rtl::OUString& rLName, 131 OUString& rTitleOrDesc ); 132 virtual ~XMLTextFrameTitleOrDescContext_Impl(); 133 134 virtual void Characters( const OUString& rText ); 135 }; 136 137 TYPEINIT1( XMLTextFrameTitleOrDescContext_Impl, SvXMLImportContext ); 138 139 XMLTextFrameTitleOrDescContext_Impl::XMLTextFrameTitleOrDescContext_Impl( 140 SvXMLImport& rImport, 141 sal_uInt16 nPrfx, 142 const OUString& rLName, 143 OUString& rTitleOrDesc ) 144 : SvXMLImportContext( rImport, nPrfx, rLName ) 145 , mrTitleOrDesc( rTitleOrDesc ) 146 { 147 } 148 149 XMLTextFrameTitleOrDescContext_Impl::~XMLTextFrameTitleOrDescContext_Impl() 150 { 151 } 152 153 void XMLTextFrameTitleOrDescContext_Impl::Characters( const OUString& rText ) 154 { 155 mrTitleOrDesc += rText; 156 } 157 // <-- 158 159 // ------------------------------------------------------------------------ 160 161 class XMLTextFrameParam_Impl : public SvXMLImportContext 162 { 163 public: 164 165 TYPEINFO(); 166 167 XMLTextFrameParam_Impl( SvXMLImport& rImport, sal_uInt16 nPrfx, 168 const ::rtl::OUString& rLName, 169 const ::com::sun::star::uno::Reference< 170 ::com::sun::star::xml::sax::XAttributeList > & xAttrList, 171 sal_uInt16 nType, 172 ParamMap &rParamMap); 173 virtual ~XMLTextFrameParam_Impl(); 174 }; 175 176 TYPEINIT1( XMLTextFrameParam_Impl, SvXMLImportContext ); 177 178 XMLTextFrameParam_Impl::~XMLTextFrameParam_Impl() 179 { 180 } 181 182 XMLTextFrameParam_Impl::XMLTextFrameParam_Impl( 183 SvXMLImport& rImport, sal_uInt16 nPrfx, 184 const ::rtl::OUString& rLName, 185 const ::com::sun::star::uno::Reference< 186 ::com::sun::star::xml::sax::XAttributeList > & xAttrList, 187 sal_uInt16 /*nType*/, 188 ParamMap &rParamMap): 189 SvXMLImportContext( rImport, nPrfx, rLName ) 190 { 191 OUString sName, sValue; 192 sal_Bool bFoundValue = sal_False; // to allow empty values 193 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 194 for( sal_Int16 i=0; i < nAttrCount; i++ ) 195 { 196 const OUString& rAttrName = xAttrList->getNameByIndex( i ); 197 const OUString& rValue = xAttrList->getValueByIndex( i ); 198 199 OUString aLocalName; 200 sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName ); 201 if ( XML_NAMESPACE_DRAW == nPrefix ) 202 { 203 if( IsXMLToken(aLocalName, XML_VALUE) ) 204 { 205 sValue = rValue; 206 bFoundValue=sal_True; 207 } 208 else if( IsXMLToken(aLocalName, XML_NAME) ) 209 { 210 sName = rValue; 211 } 212 } 213 } 214 if (sName.getLength() && bFoundValue ) 215 rParamMap[sName] = sValue; 216 } 217 class XMLTextFrameContourContext_Impl : public SvXMLImportContext 218 { 219 Reference < XPropertySet > xPropSet; 220 221 public: 222 223 TYPEINFO(); 224 225 XMLTextFrameContourContext_Impl( SvXMLImport& rImport, sal_uInt16 nPrfx, 226 const ::rtl::OUString& rLName, 227 const ::com::sun::star::uno::Reference< 228 ::com::sun::star::xml::sax::XAttributeList > & xAttrList, 229 const Reference < XPropertySet >& rPropSet, 230 sal_Bool bPath ); 231 virtual ~XMLTextFrameContourContext_Impl(); 232 }; 233 234 TYPEINIT1( XMLTextFrameContourContext_Impl, SvXMLImportContext ); 235 236 XMLTextFrameContourContext_Impl::XMLTextFrameContourContext_Impl( 237 SvXMLImport& rImport, 238 sal_uInt16 nPrfx, const OUString& rLName, 239 const Reference< XAttributeList > & xAttrList, 240 const Reference < XPropertySet >& rPropSet, 241 sal_Bool bPath ) : 242 SvXMLImportContext( rImport, nPrfx, rLName ), 243 xPropSet( rPropSet ) 244 { 245 OUString sD, sPoints, sViewBox; 246 sal_Bool bPixelWidth = sal_False, bPixelHeight = sal_False; 247 sal_Bool bAuto = sal_False; 248 sal_Int32 nWidth = 0; 249 sal_Int32 nHeight = 0; 250 251 const SvXMLTokenMap& rTokenMap = 252 GetImport().GetTextImport()->GetTextContourAttrTokenMap(); 253 254 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 255 for( sal_Int16 i=0; i < nAttrCount; i++ ) 256 { 257 const OUString& rAttrName = xAttrList->getNameByIndex( i ); 258 const OUString& rValue = xAttrList->getValueByIndex( i ); 259 260 OUString aLocalName; 261 sal_uInt16 nPrefix = 262 GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, 263 &aLocalName ); 264 switch( rTokenMap.Get( nPrefix, aLocalName ) ) 265 { 266 case XML_TOK_TEXT_CONTOUR_VIEWBOX: 267 sViewBox = rValue; 268 break; 269 case XML_TOK_TEXT_CONTOUR_D: 270 if( bPath ) 271 sD = rValue; 272 break; 273 case XML_TOK_TEXT_CONTOUR_POINTS: 274 if( !bPath ) 275 sPoints = rValue; 276 break; 277 case XML_TOK_TEXT_CONTOUR_WIDTH: 278 if( GetImport().GetMM100UnitConverter().convertMeasurePx( nWidth, 279 rValue) ) 280 bPixelWidth = sal_True; 281 else 282 GetImport().GetMM100UnitConverter().convertMeasure( nWidth, 283 rValue); 284 break; 285 case XML_TOK_TEXT_CONTOUR_HEIGHT: 286 if( GetImport().GetMM100UnitConverter().convertMeasurePx( nHeight, 287 rValue) ) 288 bPixelHeight = sal_True; 289 else 290 GetImport().GetMM100UnitConverter().convertMeasure( nHeight, 291 rValue); 292 break; 293 case XML_TOK_TEXT_CONTOUR_AUTO: 294 bAuto = IsXMLToken(rValue, XML_TRUE); 295 break; 296 } 297 } 298 299 OUString sContourPolyPolygon(RTL_CONSTASCII_USTRINGPARAM("ContourPolyPolygon")); 300 Reference < XPropertySetInfo > xPropSetInfo = rPropSet->getPropertySetInfo(); 301 302 if(xPropSetInfo->hasPropertyByName(sContourPolyPolygon) && nWidth > 0 && nHeight > 0 && bPixelWidth == bPixelHeight && (bPath ? sD : sPoints).getLength()) 303 { 304 const SdXMLImExViewBox aViewBox( sViewBox, GetImport().GetMM100UnitConverter()); 305 basegfx::B2DPolyPolygon aPolyPolygon; 306 Any aAny; 307 308 if( bPath ) 309 { 310 basegfx::tools::importFromSvgD(aPolyPolygon, sD, true, 0); 311 } 312 else 313 { 314 basegfx::B2DPolygon aPolygon; 315 316 if(basegfx::tools::importFromSvgPoints(aPolygon, sPoints)) 317 { 318 aPolyPolygon = basegfx::B2DPolyPolygon(aPolygon); 319 } 320 } 321 322 if(aPolyPolygon.count()) 323 { 324 const basegfx::B2DRange aSourceRange( 325 aViewBox.GetX(), aViewBox.GetY(), 326 aViewBox.GetX() + aViewBox.GetWidth(), aViewBox.GetY() + aViewBox.GetHeight()); 327 const basegfx::B2DRange aTargetRange( 328 0.0, 0.0, 329 nWidth, nHeight); 330 331 if(!aSourceRange.equal(aTargetRange)) 332 { 333 aPolyPolygon.transform( 334 basegfx::tools::createSourceRangeTargetRangeTransform( 335 aSourceRange, 336 aTargetRange)); 337 } 338 339 com::sun::star::drawing::PointSequenceSequence aPointSequenceSequence; 340 basegfx::tools::B2DPolyPolygonToUnoPointSequenceSequence(aPolyPolygon, aPointSequenceSequence); 341 aAny <<= aPointSequenceSequence; 342 xPropSet->setPropertyValue( sContourPolyPolygon, aAny ); 343 } 344 345 const OUString sIsPixelContour(RTL_CONSTASCII_USTRINGPARAM("IsPixelContour")); 346 347 if( xPropSetInfo->hasPropertyByName( sIsPixelContour ) ) 348 { 349 aAny.setValue( &bPixelWidth, ::getBooleanCppuType() ); 350 xPropSet->setPropertyValue( sIsPixelContour, aAny ); 351 } 352 353 const OUString sIsAutomaticContour(RTL_CONSTASCII_USTRINGPARAM("IsAutomaticContour") ); 354 355 if( xPropSetInfo->hasPropertyByName( sIsAutomaticContour ) ) 356 { 357 aAny.setValue( &bAuto, ::getBooleanCppuType() ); 358 xPropSet->setPropertyValue( sIsAutomaticContour, aAny ); 359 } 360 } 361 } 362 363 XMLTextFrameContourContext_Impl::~XMLTextFrameContourContext_Impl() 364 { 365 } 366 367 // ------------------------------------------------------------------------ 368 369 class XMLTextFrameContext_Impl : public SvXMLImportContext 370 { 371 ::com::sun::star::uno::Reference < 372 ::com::sun::star::text::XTextCursor > xOldTextCursor; 373 ::com::sun::star::uno::Reference < 374 ::com::sun::star::beans::XPropertySet > xPropSet; 375 ::com::sun::star::uno::Reference < 376 ::com::sun::star::io::XOutputStream > xBase64Stream; 377 378 /// old list item and block (#89891#) 379 bool mbListContextPushed; 380 381 const ::rtl::OUString sWidth; 382 const ::rtl::OUString sWidthType; 383 const ::rtl::OUString sRelativeWidth; 384 const ::rtl::OUString sHeight; 385 const ::rtl::OUString sRelativeHeight; 386 const ::rtl::OUString sSizeType; 387 const ::rtl::OUString sIsSyncWidthToHeight; 388 const ::rtl::OUString sIsSyncHeightToWidth; 389 const ::rtl::OUString sHoriOrient; 390 const ::rtl::OUString sHoriOrientPosition; 391 const ::rtl::OUString sVertOrient; 392 const ::rtl::OUString sVertOrientPosition; 393 const ::rtl::OUString sChainNextName; 394 const ::rtl::OUString sAnchorType; 395 const ::rtl::OUString sAnchorPageNo; 396 const ::rtl::OUString sGraphicURL; 397 const ::rtl::OUString sGraphicFilter; 398 // --> OD 2009-07-22 #i73249# 399 // const ::rtl::OUString sAlternativeText; 400 const ::rtl::OUString sTitle; 401 const ::rtl::OUString sDescription; 402 // <-- 403 const ::rtl::OUString sFrameStyleName; 404 const ::rtl::OUString sGraphicRotation; 405 const ::rtl::OUString sTextBoxServiceName; 406 const ::rtl::OUString sGraphicServiceName; 407 408 ::rtl::OUString sName; 409 ::rtl::OUString sStyleName; 410 ::rtl::OUString sNextName; 411 ::rtl::OUString sHRef; 412 ::rtl::OUString sFilterName; 413 ::rtl::OUString sCode; 414 ::rtl::OUString sObject; 415 ::rtl::OUString sArchive; 416 ::rtl::OUString sMimeType; 417 ::rtl::OUString sFrameName; 418 ::rtl::OUString sAppletName; 419 ::rtl::OUString sFilterService; 420 ::rtl::OUString sBase64CharsLeft; 421 ::rtl::OUString sTblName; 422 423 ParamMap aParamMap; 424 425 sal_Int32 nX; 426 sal_Int32 nY; 427 sal_Int32 nWidth; 428 sal_Int32 nHeight; 429 sal_Int32 nZIndex; 430 sal_Int16 nPage; 431 sal_Int16 nRotation; 432 sal_Int16 nRelWidth; 433 sal_Int16 nRelHeight; 434 435 sal_uInt16 nType; 436 ::com::sun::star::text::TextContentAnchorType eAnchorType; 437 438 sal_Bool bMayScript : 1; 439 sal_Bool bMinWidth : 1; 440 sal_Bool bMinHeight : 1; 441 sal_Bool bSyncWidth : 1; 442 sal_Bool bSyncHeight : 1; 443 sal_Bool bCreateFailed : 1; 444 sal_Bool bOwnBase64Stream : 1; 445 bool mbSetNameForFrame : 1; // #123261# remember if to set the NameForFrame 446 447 void Create( sal_Bool bHRefOrBase64 ); 448 449 public: 450 451 TYPEINFO(); 452 453 sal_Bool CreateIfNotThere(); 454 const OUString& GetHRef() const { return sHRef; } 455 456 XMLTextFrameContext_Impl( SvXMLImport& rImport, 457 sal_uInt16 nPrfx, 458 const ::rtl::OUString& rLName, 459 const ::com::sun::star::uno::Reference< 460 ::com::sun::star::xml::sax::XAttributeList > & rAttrList, 461 ::com::sun::star::text::TextContentAnchorType eAnchorType, 462 sal_uInt16 nType, 463 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & rFrameAttrList, 464 bool bSetNameForFrame); // #123261# control if to set the NameForFrame 465 virtual ~XMLTextFrameContext_Impl(); 466 467 virtual void EndElement(); 468 469 virtual void Characters( const ::rtl::OUString& rChars ); 470 471 SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix, 472 const ::rtl::OUString& rLocalName, 473 const ::com::sun::star::uno::Reference< 474 ::com::sun::star::xml::sax::XAttributeList > & xAttrList ); 475 476 void SetHyperlink( const ::rtl::OUString& rHRef, 477 const ::rtl::OUString& rName, 478 const ::rtl::OUString& rTargetFrameName, 479 sal_Bool bMap ); 480 // --> OD 2009-07-22 #i73249# 481 void SetTitle( const ::rtl::OUString& rTitle ); 482 // <-- 483 void SetDesc( const ::rtl::OUString& rDesc ); 484 485 ::com::sun::star::text::TextContentAnchorType GetAnchorType() const { return eAnchorType; } 486 487 const ::com::sun::star::uno::Reference < 488 ::com::sun::star::beans::XPropertySet >& GetPropSet() const { return xPropSet; } 489 490 // #123261# helper to set the NameForFrame 491 void SetNameForFrameFromPropSet(); 492 }; 493 494 TYPEINIT1( XMLTextFrameContext_Impl, SvXMLImportContext ); 495 496 void XMLTextFrameContext_Impl::SetNameForFrameFromPropSet() 497 { 498 // set name 499 UniReference < XMLTextImportHelper > xTextImportHelper = GetImport().GetTextImport(); 500 Reference < XNamed > xNamed( xPropSet, UNO_QUERY ); 501 502 if( xNamed.is() && xTextImportHelper.is() ) 503 { 504 OUString sOrigName( xNamed->getName() ); 505 if( !sOrigName.getLength() || 506 (sName.getLength() && sOrigName != sName) ) 507 { 508 OUString sOldName( sName ); 509 sal_Int32 i = 0; 510 while( xTextImportHelper->HasFrameByName( sName ) ) 511 { 512 sName = sOldName; 513 sName += OUString::valueOf( ++i ); 514 } 515 xNamed->setName( sName ); 516 if( sName != sOldName ) 517 xTextImportHelper->GetRenameMap().Add( XML_TEXT_RENAME_TYPE_FRAME, 518 sOldName, sName ); 519 } 520 } 521 } 522 523 void XMLTextFrameContext_Impl::Create( sal_Bool /*bHRefOrBase64*/ ) 524 { 525 UniReference < XMLTextImportHelper > xTextImportHelper = 526 GetImport().GetTextImport(); 527 528 switch ( nType) 529 { 530 case XML_TEXT_FRAME_OBJECT: 531 case XML_TEXT_FRAME_OBJECT_OLE: 532 if( xBase64Stream.is() ) 533 { 534 OUString sURL( GetImport().ResolveEmbeddedObjectURLFromBase64() ); 535 if( sURL.getLength() ) 536 xPropSet = GetImport().GetTextImport() 537 ->createAndInsertOLEObject( GetImport(), sURL, 538 sStyleName, 539 sTblName, 540 nWidth, nHeight ); 541 } 542 else if( sHRef.getLength() ) 543 { 544 OUString sURL( GetImport().ResolveEmbeddedObjectURL( sHRef, 545 OUString() ) ); 546 547 if( GetImport().IsPackageURL( sHRef ) ) 548 { 549 xPropSet = GetImport().GetTextImport() 550 ->createAndInsertOLEObject( GetImport(), sURL, 551 sStyleName, 552 sTblName, 553 nWidth, nHeight ); 554 } 555 else 556 { 557 // it should be an own OOo link that has no storage persistance 558 xPropSet = GetImport().GetTextImport() 559 ->createAndInsertOOoLink( GetImport(), 560 sURL, 561 sStyleName, 562 sTblName, 563 nWidth, nHeight ); 564 } 565 } 566 else 567 { 568 OUString sURL( RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.ServiceName:") ); 569 sURL += sFilterService; 570 xPropSet = GetImport().GetTextImport() 571 ->createAndInsertOLEObject( GetImport(), sURL, 572 sStyleName, 573 sTblName, 574 nWidth, nHeight ); 575 576 } 577 break; 578 case XML_TEXT_FRAME_APPLET: 579 { 580 xPropSet = GetImport().GetTextImport() 581 ->createAndInsertApplet( sAppletName, sCode, 582 bMayScript, sHRef, 583 nWidth, nHeight); 584 break; 585 } 586 case XML_TEXT_FRAME_PLUGIN: 587 { 588 if(sHRef.getLength()) 589 GetImport().GetAbsoluteReference(sHRef); 590 xPropSet = GetImport().GetTextImport() 591 ->createAndInsertPlugin( sMimeType, sHRef, 592 nWidth, nHeight); 593 594 break; 595 } 596 case XML_TEXT_FRAME_FLOATING_FRAME: 597 { 598 xPropSet = GetImport().GetTextImport() 599 ->createAndInsertFloatingFrame( sFrameName, sHRef, 600 sStyleName, 601 nWidth, nHeight); 602 break; 603 } 604 default: 605 { 606 Reference<XMultiServiceFactory> xFactory( GetImport().GetModel(), 607 UNO_QUERY ); 608 if( xFactory.is() ) 609 { 610 OUString sServiceName; 611 switch( nType ) 612 { 613 case XML_TEXT_FRAME_TEXTBOX: sServiceName = sTextBoxServiceName; break; 614 case XML_TEXT_FRAME_GRAPHIC: sServiceName = sGraphicServiceName; break; 615 } 616 Reference<XInterface> xIfc = xFactory->createInstance( sServiceName ); 617 DBG_ASSERT( xIfc.is(), "couldn't create frame" ); 618 if( xIfc.is() ) 619 xPropSet = Reference < XPropertySet >( xIfc, UNO_QUERY ); 620 } 621 } 622 } 623 624 if( !xPropSet.is() ) 625 { 626 bCreateFailed = sal_True; 627 return; 628 } 629 630 Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo(); 631 632 // #123261# set name, but only if wanted, e.g. for MultiImageSupport, it will be set after 633 // it is decided which image will be used. This is done e.g. to avoid double stuff and effects 634 // for the target to avoid double names 635 if(mbSetNameForFrame) 636 { 637 SetNameForFrameFromPropSet(); 638 } 639 640 // frame style 641 XMLPropStyleContext *pStyle = 0; 642 if( sStyleName.getLength() ) 643 { 644 pStyle = xTextImportHelper->FindAutoFrameStyle( sStyleName ); 645 if( pStyle ) 646 sStyleName = pStyle->GetParentName(); 647 } 648 649 Any aAny; 650 if( sStyleName.getLength() ) 651 { 652 OUString sDisplayStyleName( GetImport().GetStyleDisplayName( 653 XML_STYLE_FAMILY_SD_GRAPHICS_ID, sStyleName ) ); 654 const Reference < XNameContainer > & rStyles = 655 xTextImportHelper->GetFrameStyles(); 656 if( rStyles.is() && 657 rStyles->hasByName( sDisplayStyleName ) ) 658 { 659 aAny <<= sDisplayStyleName; 660 xPropSet->setPropertyValue( sFrameStyleName, aAny ); 661 } 662 } 663 664 // anchor type (must be set before any other properties, because 665 // otherwise some orientations cannot be set or will be changed 666 // afterwards) 667 aAny <<= eAnchorType; 668 xPropSet->setPropertyValue( sAnchorType, aAny ); 669 670 // hard properties 671 if( pStyle ) 672 pStyle->FillPropertySet( xPropSet ); 673 674 675 // x and y 676 sal_Int16 nHoriOrient = HoriOrientation::NONE; 677 aAny = xPropSet->getPropertyValue( sHoriOrient ); 678 aAny >>= nHoriOrient; 679 if( HoriOrientation::NONE == nHoriOrient ) 680 { 681 aAny <<= nX; 682 xPropSet->setPropertyValue( sHoriOrientPosition, aAny ); 683 } 684 685 sal_Int16 nVertOrient = VertOrientation::NONE; 686 aAny = xPropSet->getPropertyValue( sVertOrient ); 687 aAny >>= nVertOrient; 688 if( VertOrientation::NONE == nVertOrient ) 689 { 690 aAny <<= nY; 691 xPropSet->setPropertyValue( sVertOrientPosition, aAny ); 692 } 693 694 // width 695 if( nWidth > 0 ) 696 { 697 aAny <<= nWidth; 698 xPropSet->setPropertyValue( sWidth, aAny ); 699 } 700 if( nRelWidth > 0 || nWidth > 0 ) 701 { 702 aAny <<= nRelWidth; 703 xPropSet->setPropertyValue( sRelativeWidth, aAny ); 704 } 705 if( bSyncWidth || nWidth > 0 ) 706 { 707 sal_Bool bTmp = bSyncWidth; 708 aAny.setValue( &bTmp, ::getBooleanCppuType() ); 709 xPropSet->setPropertyValue( sIsSyncWidthToHeight, aAny ); 710 } 711 if( xPropSetInfo->hasPropertyByName( sWidthType ) && 712 (bMinWidth || nWidth > 0 || nRelWidth > 0 ) ) 713 { 714 sal_Int16 nSizeType = 715 (bMinWidth && XML_TEXT_FRAME_TEXTBOX == nType) ? SizeType::MIN 716 : SizeType::FIX; 717 aAny <<= nSizeType; 718 xPropSet->setPropertyValue( sWidthType, aAny ); 719 } 720 721 if( nHeight > 0 ) 722 { 723 aAny <<= nHeight; 724 xPropSet->setPropertyValue( sHeight, aAny ); 725 } 726 if( nRelHeight > 0 || nHeight > 0 ) 727 { 728 aAny <<= nRelHeight; 729 xPropSet->setPropertyValue( sRelativeHeight, aAny ); 730 } 731 if( bSyncHeight || nHeight > 0 ) 732 { 733 sal_Bool bTmp = bSyncHeight; 734 aAny.setValue( &bTmp, ::getBooleanCppuType() ); 735 xPropSet->setPropertyValue( sIsSyncHeightToWidth, aAny ); 736 } 737 if( xPropSetInfo->hasPropertyByName( sSizeType ) && 738 (bMinHeight || nHeight > 0 || nRelHeight > 0 ) ) 739 { 740 sal_Int16 nSizeType = 741 (bMinHeight && XML_TEXT_FRAME_TEXTBOX == nType) ? SizeType::MIN 742 : SizeType::FIX; 743 aAny <<= nSizeType; 744 xPropSet->setPropertyValue( sSizeType, aAny ); 745 } 746 747 if( XML_TEXT_FRAME_GRAPHIC == nType ) 748 { 749 // URL 750 OSL_ENSURE( sHRef.getLength() > 0 || xBase64Stream.is(), 751 "neither URL nor base64 image data given" ); 752 UniReference < XMLTextImportHelper > xTxtImport = 753 GetImport().GetTextImport(); 754 if( sHRef.getLength() ) 755 { 756 sal_Bool bForceLoad = xTxtImport->IsInsertMode() || 757 xTxtImport->IsBlockMode() || 758 xTxtImport->IsStylesOnlyMode() || 759 xTxtImport->IsOrganizerMode(); 760 sHRef = GetImport().ResolveGraphicObjectURL( sHRef, !bForceLoad ); 761 } 762 else if( xBase64Stream.is() ) 763 { 764 sHRef = GetImport().ResolveGraphicObjectURLFromBase64( xBase64Stream ); 765 xBase64Stream = 0; 766 } 767 aAny <<= sHRef; 768 xPropSet->setPropertyValue( sGraphicURL, aAny ); 769 770 // filter name 771 aAny <<=sFilterName; 772 xPropSet->setPropertyValue( sGraphicFilter, aAny ); 773 774 // rotation 775 aAny <<= nRotation; 776 xPropSet->setPropertyValue( sGraphicRotation, aAny ); 777 } 778 779 // page number (must be set after the frame is inserted, because it 780 // will be overwritten then inserting the frame. 781 if( TextContentAnchorType_AT_PAGE == eAnchorType && nPage > 0 ) 782 { 783 aAny <<= nPage; 784 xPropSet->setPropertyValue( sAnchorPageNo, aAny ); 785 } 786 787 if( XML_TEXT_FRAME_OBJECT != nType && 788 XML_TEXT_FRAME_OBJECT_OLE != nType && 789 XML_TEXT_FRAME_APPLET != nType && 790 XML_TEXT_FRAME_PLUGIN!= nType && 791 XML_TEXT_FRAME_FLOATING_FRAME != nType) 792 { 793 Reference < XTextContent > xTxtCntnt( xPropSet, UNO_QUERY ); 794 xTextImportHelper->InsertTextContent( xTxtCntnt ); 795 } 796 797 // #107848# 798 // Make adding the shepe to Z-Ordering dependent from if we are 799 // inside a inside_deleted_section (redlining). That is necessary 800 // since the shape will be removed again later. It would lead to 801 // errors if it would stay inside the Z-Ordering. Thus, the 802 // easiest way to solve that conflict is to not add it here. 803 if(!GetImport().HasTextImport() 804 || !GetImport().GetTextImport()->IsInsideDeleteContext()) 805 { 806 Reference < XShape > xShape( xPropSet, UNO_QUERY ); 807 808 GetImport().GetShapeImport()->shapeWithZIndexAdded( xShape, nZIndex ); 809 } 810 811 if( XML_TEXT_FRAME_TEXTBOX == nType ) 812 { 813 xTextImportHelper->ConnectFrameChains( sName, sNextName, xPropSet ); 814 Reference < XTextFrame > xTxtFrame( xPropSet, UNO_QUERY ); 815 Reference < XText > xTxt = xTxtFrame->getText(); 816 xOldTextCursor = xTextImportHelper->GetCursor(); 817 xTextImportHelper->SetCursor( xTxt->createTextCursor() ); 818 819 // remember old list item and block (#89892#) and reset them 820 // for the text frame 821 xTextImportHelper->PushListContext(); 822 mbListContextPushed = true; 823 } 824 } 825 826 sal_Bool XMLTextFrameContext_Impl::CreateIfNotThere() 827 { 828 if( !xPropSet.is() && 829 ( XML_TEXT_FRAME_OBJECT_OLE == nType || 830 XML_TEXT_FRAME_GRAPHIC == nType ) && 831 xBase64Stream.is() && !bCreateFailed ) 832 { 833 if( bOwnBase64Stream ) 834 xBase64Stream->closeOutput(); 835 Create( sal_True ); 836 } 837 838 return xPropSet.is(); 839 } 840 841 XMLTextFrameContext_Impl::XMLTextFrameContext_Impl( 842 SvXMLImport& rImport, 843 sal_uInt16 nPrfx, const OUString& rLName, 844 const Reference< XAttributeList > & rAttrList, 845 TextContentAnchorType eATyp, 846 sal_uInt16 nNewType, 847 const Reference< XAttributeList > & rFrameAttrList, 848 bool bSetNameForFrame) 849 : SvXMLImportContext( rImport, nPrfx, rLName ) 850 , mbListContextPushed( false ) 851 , sWidth(RTL_CONSTASCII_USTRINGPARAM("Width")) 852 , sWidthType(RTL_CONSTASCII_USTRINGPARAM("WidthType")) 853 , sRelativeWidth(RTL_CONSTASCII_USTRINGPARAM("RelativeWidth")) 854 , sHeight(RTL_CONSTASCII_USTRINGPARAM("Height")) 855 , sRelativeHeight(RTL_CONSTASCII_USTRINGPARAM("RelativeHeight")) 856 , sSizeType(RTL_CONSTASCII_USTRINGPARAM("SizeType")) 857 , sIsSyncWidthToHeight(RTL_CONSTASCII_USTRINGPARAM("IsSyncWidthToHeight")) 858 , sIsSyncHeightToWidth(RTL_CONSTASCII_USTRINGPARAM("IsSyncHeightToWidth")) 859 , sHoriOrient(RTL_CONSTASCII_USTRINGPARAM("HoriOrient")) 860 , sHoriOrientPosition(RTL_CONSTASCII_USTRINGPARAM("HoriOrientPosition")) 861 , sVertOrient(RTL_CONSTASCII_USTRINGPARAM("VertOrient")) 862 , sVertOrientPosition(RTL_CONSTASCII_USTRINGPARAM("VertOrientPosition")) 863 , sChainNextName(RTL_CONSTASCII_USTRINGPARAM("ChainNextName")) 864 , sAnchorType(RTL_CONSTASCII_USTRINGPARAM("AnchorType")) 865 , sAnchorPageNo(RTL_CONSTASCII_USTRINGPARAM("AnchorPageNo")) 866 , sGraphicURL(RTL_CONSTASCII_USTRINGPARAM("GraphicURL")) 867 , sGraphicFilter(RTL_CONSTASCII_USTRINGPARAM("GraphicFilter")) 868 // --> OD 2009-07-22 #i73249# 869 //, sAlternativeText(RTL_CONSTASCII_USTRINGPARAM("AlternativeText")) 870 , sTitle(RTL_CONSTASCII_USTRINGPARAM("Title")) 871 , sDescription(RTL_CONSTASCII_USTRINGPARAM("Description")) 872 // <-- 873 , sFrameStyleName(RTL_CONSTASCII_USTRINGPARAM("FrameStyleName")) 874 , sGraphicRotation(RTL_CONSTASCII_USTRINGPARAM("GraphicRotation")) 875 , sTextBoxServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFrame")) 876 , sGraphicServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.GraphicObject")) 877 , nType( nNewType ) 878 , eAnchorType( eATyp ) 879 , mbSetNameForFrame(bSetNameForFrame) 880 { 881 nX = 0; 882 nY = 0; 883 nWidth = 0; 884 nHeight = 0; 885 nZIndex = -1; 886 nPage = 0; 887 nRotation = 0; 888 nRelWidth = 0; 889 nRelHeight = 0; 890 bMayScript = sal_False; 891 892 bMinHeight = sal_False; 893 bMinWidth = sal_False; 894 bSyncWidth = sal_False; 895 bSyncHeight = sal_False; 896 bCreateFailed = sal_False; 897 bOwnBase64Stream = sal_False; 898 899 UniReference < XMLTextImportHelper > xTxtImport = 900 GetImport().GetTextImport(); 901 const SvXMLTokenMap& rTokenMap = 902 xTxtImport->GetTextFrameAttrTokenMap(); 903 904 sal_Int16 nAttrCount = rAttrList.is() ? rAttrList->getLength() : 0; 905 sal_Int16 nTotalAttrCount = nAttrCount + (rFrameAttrList.is() ? rFrameAttrList->getLength() : 0); 906 for( sal_Int16 i=0; i < nTotalAttrCount; i++ ) 907 { 908 const OUString& rAttrName = 909 i < nAttrCount ? rAttrList->getNameByIndex( i ) : rFrameAttrList->getNameByIndex( i-nAttrCount ); 910 const OUString& rValue = 911 i < nAttrCount ? rAttrList->getValueByIndex( i ): rFrameAttrList->getValueByIndex( i-nAttrCount ); 912 913 OUString aLocalName; 914 sal_uInt16 nPrefix = 915 GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, 916 &aLocalName ); 917 switch( rTokenMap.Get( nPrefix, aLocalName ) ) 918 { 919 case XML_TOK_TEXT_FRAME_STYLE_NAME: 920 sStyleName = rValue; 921 break; 922 case XML_TOK_TEXT_FRAME_NAME: 923 sName = rValue; 924 break; 925 case XML_TOK_TEXT_FRAME_FRAME_NAME: 926 sFrameName = rValue; 927 break; 928 case XML_TOK_TEXT_FRAME_APPLET_NAME: 929 sAppletName = rValue; 930 break; 931 case XML_TOK_TEXT_FRAME_ANCHOR_TYPE: 932 if( TextContentAnchorType_AT_PARAGRAPH == eAnchorType || 933 TextContentAnchorType_AT_CHARACTER == eAnchorType || 934 TextContentAnchorType_AS_CHARACTER == eAnchorType ) 935 { 936 937 TextContentAnchorType eNew; 938 if( XMLAnchorTypePropHdl::convert( rValue, eNew ) && 939 ( TextContentAnchorType_AT_PARAGRAPH == eNew || 940 TextContentAnchorType_AT_CHARACTER == eNew || 941 TextContentAnchorType_AS_CHARACTER == eNew || 942 TextContentAnchorType_AT_PAGE == eNew) ) 943 eAnchorType = eNew; 944 } 945 break; 946 case XML_TOK_TEXT_FRAME_ANCHOR_PAGE_NUMBER: 947 { 948 sal_Int32 nTmp; 949 if( GetImport().GetMM100UnitConverter(). 950 convertNumber( nTmp, rValue, 1, SHRT_MAX ) ) 951 nPage = (sal_Int16)nTmp; 952 } 953 break; 954 case XML_TOK_TEXT_FRAME_X: 955 GetImport().GetMM100UnitConverter().convertMeasure( nX, rValue ); 956 break; 957 case XML_TOK_TEXT_FRAME_Y: 958 GetImport().GetMM100UnitConverter().convertMeasure( nY, rValue ); 959 break; 960 case XML_TOK_TEXT_FRAME_WIDTH: 961 // relative widths are obsolete since SRC617. Remove them some day! 962 if( rValue.indexOf( '%' ) != -1 ) 963 { 964 sal_Int32 nTmp; 965 GetImport().GetMM100UnitConverter().convertPercent( nTmp, 966 rValue ); 967 nRelWidth = (sal_Int16)nTmp; 968 } 969 else 970 { 971 GetImport().GetMM100UnitConverter().convertMeasure( nWidth, 972 rValue, 0 ); 973 } 974 break; 975 case XML_TOK_TEXT_FRAME_REL_WIDTH: 976 if( IsXMLToken(rValue, XML_SCALE) ) 977 { 978 bSyncWidth = sal_True; 979 } 980 else 981 { 982 sal_Int32 nTmp; 983 if( GetImport().GetMM100UnitConverter(). 984 convertPercent( nTmp, rValue ) ) 985 nRelWidth = (sal_Int16)nTmp; 986 } 987 break; 988 case XML_TOK_TEXT_FRAME_MIN_WIDTH: 989 if( rValue.indexOf( '%' ) != -1 ) 990 { 991 sal_Int32 nTmp; 992 GetImport().GetMM100UnitConverter().convertPercent( nTmp, 993 rValue ); 994 nRelWidth = (sal_Int16)nTmp; 995 } 996 else 997 { 998 GetImport().GetMM100UnitConverter().convertMeasure( nWidth, 999 rValue, 0 ); 1000 } 1001 bMinWidth = sal_True; 1002 break; 1003 case XML_TOK_TEXT_FRAME_HEIGHT: 1004 // relative heights are obsolete since SRC617. Remove them some day! 1005 if( rValue.indexOf( '%' ) != -1 ) 1006 { 1007 sal_Int32 nTmp; 1008 GetImport().GetMM100UnitConverter().convertPercent( nTmp, 1009 rValue ); 1010 nRelHeight = (sal_Int16)nTmp; 1011 } 1012 else 1013 { 1014 GetImport().GetMM100UnitConverter().convertMeasure( nHeight, 1015 rValue, 0 ); 1016 } 1017 break; 1018 case XML_TOK_TEXT_FRAME_REL_HEIGHT: 1019 if( IsXMLToken( rValue, XML_SCALE ) ) 1020 { 1021 bSyncHeight = sal_True; 1022 } 1023 else if( IsXMLToken( rValue, XML_SCALE_MIN ) ) 1024 { 1025 bSyncHeight = sal_True; 1026 bMinHeight = sal_True; 1027 } 1028 else 1029 { 1030 sal_Int32 nTmp; 1031 if( GetImport().GetMM100UnitConverter(). 1032 convertPercent( nTmp, rValue ) ) 1033 nRelHeight = (sal_Int16)nTmp; 1034 } 1035 break; 1036 case XML_TOK_TEXT_FRAME_MIN_HEIGHT: 1037 if( rValue.indexOf( '%' ) != -1 ) 1038 { 1039 sal_Int32 nTmp; 1040 GetImport().GetMM100UnitConverter().convertPercent( nTmp, 1041 rValue ); 1042 nRelHeight = (sal_Int16)nTmp; 1043 } 1044 else 1045 { 1046 GetImport().GetMM100UnitConverter().convertMeasure( nHeight, 1047 rValue, 0 ); 1048 } 1049 bMinHeight = sal_True; 1050 break; 1051 case XML_TOK_TEXT_FRAME_Z_INDEX: 1052 GetImport().GetMM100UnitConverter().convertNumber( nZIndex, rValue, -1 ); 1053 break; 1054 case XML_TOK_TEXT_FRAME_NEXT_CHAIN_NAME: 1055 sNextName = rValue; 1056 break; 1057 case XML_TOK_TEXT_FRAME_HREF: 1058 sHRef = rValue; 1059 break; 1060 case XML_TOK_TEXT_FRAME_FILTER_NAME: 1061 sFilterName = rValue; 1062 break; 1063 case XML_TOK_TEXT_FRAME_TRANSFORM: 1064 { 1065 OUString sValue( rValue ); 1066 sValue.trim(); 1067 const OUString aRotate(GetXMLToken(XML_ROTATE)); 1068 const sal_Int32 nRotateLen(aRotate.getLength()); 1069 sal_Int32 nLen = sValue.getLength(); 1070 if( nLen >= nRotateLen+3 && 1071 0 == sValue.compareTo( aRotate, nRotateLen ) && 1072 '(' == sValue[nRotateLen] && 1073 ')' == sValue[nLen-1] ) 1074 { 1075 sValue = sValue.copy( nRotateLen+1, nLen-(nRotateLen+2) ); 1076 sValue.trim(); 1077 sal_Int32 nVal; 1078 if( GetImport().GetMM100UnitConverter().convertNumber( nVal, sValue ) ) 1079 nRotation = (sal_Int16)(nVal % 360 ); 1080 } 1081 } 1082 break; 1083 case XML_TOK_TEXT_FRAME_CODE: 1084 sCode = rValue; 1085 break; 1086 case XML_TOK_TEXT_FRAME_OBJECT: 1087 sObject = rValue; 1088 break; 1089 case XML_TOK_TEXT_FRAME_ARCHIVE: 1090 sArchive = rValue; 1091 break; 1092 case XML_TOK_TEXT_FRAME_MAY_SCRIPT: 1093 bMayScript = IsXMLToken( rValue, XML_TRUE ); 1094 break; 1095 case XML_TOK_TEXT_FRAME_MIME_TYPE: 1096 sMimeType = rValue; 1097 break; 1098 case XML_TOK_TEXT_FRAME_NOTIFY_ON_UPDATE: 1099 sTblName = rValue; 1100 break; 1101 } 1102 } 1103 1104 if( ( (XML_TEXT_FRAME_GRAPHIC == nType || 1105 XML_TEXT_FRAME_OBJECT == nType || 1106 XML_TEXT_FRAME_OBJECT_OLE == nType) && 1107 !sHRef.getLength() ) || 1108 ( XML_TEXT_FRAME_APPLET == nType && !sCode.getLength() ) || 1109 ( XML_TEXT_FRAME_PLUGIN == nType && 1110 sHRef.getLength() == 0 && sMimeType.getLength() == 0 ) ) 1111 return; // no URL: no image or OLE object 1112 1113 Create( sal_True ); 1114 } 1115 1116 XMLTextFrameContext_Impl::~XMLTextFrameContext_Impl() 1117 { 1118 } 1119 1120 void XMLTextFrameContext_Impl::EndElement() 1121 { 1122 CreateIfNotThere(); 1123 1124 if( xOldTextCursor.is() ) 1125 { 1126 GetImport().GetTextImport()->DeleteParagraph(); 1127 GetImport().GetTextImport()->SetCursor( xOldTextCursor ); 1128 } 1129 1130 // reinstall old list item (if necessary) #89892# 1131 if (mbListContextPushed) { 1132 GetImport().GetTextImport()->PopListContext(); 1133 } 1134 1135 if (( nType == XML_TEXT_FRAME_APPLET || nType == XML_TEXT_FRAME_PLUGIN ) && xPropSet.is()) 1136 GetImport().GetTextImport()->endAppletOrPlugin( xPropSet, aParamMap); 1137 } 1138 1139 SvXMLImportContext *XMLTextFrameContext_Impl::CreateChildContext( 1140 sal_uInt16 nPrefix, 1141 const OUString& rLocalName, 1142 const Reference< XAttributeList > & xAttrList ) 1143 { 1144 SvXMLImportContext *pContext = 0; 1145 1146 if( XML_NAMESPACE_DRAW == nPrefix ) 1147 { 1148 if ( (nType == XML_TEXT_FRAME_APPLET || nType == XML_TEXT_FRAME_PLUGIN) && 1149 IsXMLToken( rLocalName, XML_PARAM ) ) 1150 { 1151 pContext = new XMLTextFrameParam_Impl( GetImport(), 1152 nPrefix, rLocalName, 1153 xAttrList, nType, aParamMap ); 1154 } 1155 } 1156 else if( (XML_NAMESPACE_OFFICE == nPrefix) ) 1157 { 1158 if( IsXMLToken( rLocalName, XML_BINARY_DATA ) ) 1159 { 1160 if( !xPropSet.is() && !xBase64Stream.is() && !bCreateFailed ) 1161 { 1162 switch( nType ) 1163 { 1164 case XML_TEXT_FRAME_GRAPHIC: 1165 xBase64Stream = 1166 GetImport().GetStreamForGraphicObjectURLFromBase64(); 1167 break; 1168 case XML_TEXT_FRAME_OBJECT_OLE: 1169 xBase64Stream = 1170 GetImport().GetStreamForEmbeddedObjectURLFromBase64(); 1171 break; 1172 } 1173 if( xBase64Stream.is() ) 1174 pContext = new XMLBase64ImportContext( GetImport(), nPrefix, 1175 rLocalName, xAttrList, 1176 xBase64Stream ); 1177 } 1178 } 1179 } 1180 // --> OD 2009-08-17 #i100480# 1181 // correction of condition which also avoids warnings. 1182 if( !pContext && 1183 ( XML_TEXT_FRAME_OBJECT == nType && 1184 ( ( XML_NAMESPACE_OFFICE == nPrefix && 1185 IsXMLToken( rLocalName, XML_DOCUMENT ) ) || 1186 ( XML_NAMESPACE_MATH == nPrefix && 1187 IsXMLToken( rLocalName, XML_MATH ) ) ) ) ) 1188 // <-- 1189 { 1190 if( !xPropSet.is() && !bCreateFailed ) 1191 { 1192 XMLEmbeddedObjectImportContext *pEContext = 1193 new XMLEmbeddedObjectImportContext( GetImport(), nPrefix, 1194 rLocalName, xAttrList ); 1195 sFilterService = pEContext->GetFilterServiceName(); 1196 if( sFilterService.getLength() != 0 ) 1197 { 1198 Create( sal_False ); 1199 if( xPropSet.is() ) 1200 { 1201 Reference < XEmbeddedObjectSupplier > xEOS( xPropSet, 1202 UNO_QUERY ); 1203 OSL_ENSURE( xEOS.is(), 1204 "no embedded object supplier for own object" ); 1205 Reference<com::sun::star::lang::XComponent> aXComponent(xEOS->getEmbeddedObject()); 1206 pEContext->SetComponent( aXComponent ); 1207 } 1208 } 1209 pContext = pEContext; 1210 } 1211 } 1212 if( !pContext && xOldTextCursor.is() ) // text-box 1213 pContext = GetImport().GetTextImport()->CreateTextChildContext( 1214 GetImport(), nPrefix, rLocalName, xAttrList, 1215 XML_TEXT_TYPE_TEXTBOX ); 1216 1217 if( !pContext ) 1218 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName ); 1219 1220 return pContext; 1221 } 1222 1223 void XMLTextFrameContext_Impl::Characters( const OUString& rChars ) 1224 { 1225 if( ( XML_TEXT_FRAME_OBJECT_OLE == nType || 1226 XML_TEXT_FRAME_GRAPHIC == nType) && 1227 !xPropSet.is() && !bCreateFailed ) 1228 { 1229 OUString sTrimmedChars( rChars. trim() ); 1230 if( sTrimmedChars.getLength() ) 1231 { 1232 if( !xBase64Stream.is() ) 1233 { 1234 if( XML_TEXT_FRAME_GRAPHIC == nType ) 1235 { 1236 xBase64Stream = 1237 GetImport().GetStreamForGraphicObjectURLFromBase64(); 1238 } 1239 else 1240 { 1241 xBase64Stream = 1242 GetImport().GetStreamForEmbeddedObjectURLFromBase64(); 1243 } 1244 if( xBase64Stream.is() ) 1245 bOwnBase64Stream = sal_True; 1246 } 1247 if( bOwnBase64Stream && xBase64Stream.is() ) 1248 { 1249 OUString sChars; 1250 if( sBase64CharsLeft ) 1251 { 1252 sChars = sBase64CharsLeft; 1253 sChars += sTrimmedChars; 1254 sBase64CharsLeft = OUString(); 1255 } 1256 else 1257 { 1258 sChars = sTrimmedChars; 1259 } 1260 Sequence< sal_Int8 > aBuffer( (sChars.getLength() / 4) * 3 ); 1261 sal_Int32 nCharsDecoded = 1262 GetImport().GetMM100UnitConverter(). 1263 decodeBase64SomeChars( aBuffer, sChars ); 1264 xBase64Stream->writeBytes( aBuffer ); 1265 if( nCharsDecoded != sChars.getLength() ) 1266 sBase64CharsLeft = sChars.copy( nCharsDecoded ); 1267 } 1268 } 1269 } 1270 } 1271 1272 void XMLTextFrameContext_Impl::SetHyperlink( const OUString& rHRef, 1273 const OUString& rName, 1274 const OUString& rTargetFrameName, 1275 sal_Bool bMap ) 1276 { 1277 static ::rtl::OUString s_HyperLinkURL( 1278 RTL_CONSTASCII_USTRINGPARAM("HyperLinkURL")); 1279 static ::rtl::OUString s_HyperLinkName( 1280 RTL_CONSTASCII_USTRINGPARAM("HyperLinkName")); 1281 static ::rtl::OUString s_HyperLinkTarget( 1282 RTL_CONSTASCII_USTRINGPARAM("HyperLinkTarget")); 1283 static ::rtl::OUString s_ServerMap( 1284 RTL_CONSTASCII_USTRINGPARAM("ServerMap")); 1285 if( !xPropSet.is() ) 1286 return; 1287 1288 UniReference< XMLTextImportHelper > xTxtImp = GetImport().GetTextImport(); 1289 Reference < XPropertySetInfo > xPropSetInfo = 1290 xPropSet->getPropertySetInfo(); 1291 if( !xPropSetInfo.is() || 1292 !xPropSetInfo->hasPropertyByName(s_HyperLinkURL)) 1293 return; 1294 1295 Any aAny; 1296 aAny <<= rHRef; 1297 xPropSet->setPropertyValue( s_HyperLinkURL, aAny ); 1298 1299 if (xPropSetInfo->hasPropertyByName(s_HyperLinkName)) 1300 { 1301 aAny <<= rName; 1302 xPropSet->setPropertyValue(s_HyperLinkName, aAny); 1303 } 1304 1305 if (xPropSetInfo->hasPropertyByName(s_HyperLinkTarget)) 1306 { 1307 aAny <<= rTargetFrameName; 1308 xPropSet->setPropertyValue( s_HyperLinkTarget, aAny ); 1309 } 1310 1311 if (xPropSetInfo->hasPropertyByName(s_ServerMap)) 1312 { 1313 aAny.setValue( &bMap, ::getBooleanCppuType() ); 1314 xPropSet->setPropertyValue(s_ServerMap, aAny); 1315 } 1316 } 1317 1318 // --> OD 2009-07-22 #i73249# 1319 void XMLTextFrameContext_Impl::SetTitle( const OUString& rTitle ) 1320 { 1321 if ( xPropSet.is() ) 1322 { 1323 Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo(); 1324 if( xPropSetInfo->hasPropertyByName( sTitle ) ) 1325 { 1326 xPropSet->setPropertyValue( sTitle, makeAny( rTitle ) ); 1327 } 1328 } 1329 } 1330 1331 void XMLTextFrameContext_Impl::SetDesc( const OUString& rDesc ) 1332 { 1333 if ( xPropSet.is() ) 1334 { 1335 Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo(); 1336 if( xPropSetInfo->hasPropertyByName( sDescription ) ) 1337 { 1338 xPropSet->setPropertyValue( sDescription, makeAny( rDesc ) ); 1339 } 1340 } 1341 } 1342 // <-- 1343 1344 //----------------------------------------------------------------------------------------------------- 1345 1346 TYPEINIT1( XMLTextFrameContext, SvXMLImportContext ); 1347 1348 void XMLTextFrameContext::removeGraphicFromImportContext(const SvXMLImportContext& rContext) const 1349 { 1350 const XMLTextFrameContext_Impl* pXMLTextFrameContext_Impl = dynamic_cast< const XMLTextFrameContext_Impl* >(&rContext); 1351 1352 if(pXMLTextFrameContext_Impl) 1353 { 1354 try 1355 { 1356 // just dispose to delete 1357 uno::Reference< lang::XComponent > xComp(pXMLTextFrameContext_Impl->GetPropSet(), UNO_QUERY); 1358 1359 if(xComp.is()) 1360 { 1361 xComp->dispose(); 1362 } 1363 } 1364 catch( uno::Exception& ) 1365 { 1366 DBG_ERROR( "Error in cleanup of multiple graphic object import (!)" ); 1367 } 1368 } 1369 } 1370 1371 rtl::OUString XMLTextFrameContext::getGraphicURLFromImportContext(const SvXMLImportContext& rContext) const 1372 { 1373 rtl::OUString aRetval; 1374 const XMLTextFrameContext_Impl* pXMLTextFrameContext_Impl = dynamic_cast< const XMLTextFrameContext_Impl* >(&rContext); 1375 1376 if(pXMLTextFrameContext_Impl) 1377 { 1378 return pXMLTextFrameContext_Impl->GetHRef(); 1379 } 1380 1381 return aRetval; 1382 } 1383 1384 sal_Bool XMLTextFrameContext::CreateIfNotThere() 1385 { 1386 sal_Bool bRet = sal_False; 1387 SvXMLImportContext *pContext = &m_xImplContext; 1388 XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext ); 1389 if( pImpl ) 1390 bRet = pImpl->CreateIfNotThere(); 1391 1392 return bRet; 1393 } 1394 1395 sal_Bool XMLTextFrameContext::CreateIfNotThere( ::com::sun::star::uno::Reference < 1396 ::com::sun::star::beans::XPropertySet >& rPropSet ) 1397 { 1398 SvXMLImportContext *pContext = &m_xImplContext; 1399 XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext ); 1400 if( pImpl ) 1401 { 1402 if( pImpl->CreateIfNotThere() ) 1403 rPropSet = pImpl->GetPropSet(); 1404 } 1405 1406 return rPropSet.is(); 1407 } 1408 1409 XMLTextFrameContext::XMLTextFrameContext( 1410 SvXMLImport& rImport, 1411 sal_uInt16 nPrfx, const OUString& rLName, 1412 const Reference< XAttributeList > & xAttrList, 1413 TextContentAnchorType eATyp ) 1414 : SvXMLImportContext( rImport, nPrfx, rLName ) 1415 , multiImageImportHelper() 1416 , m_xAttrList( new SvXMLAttributeList( xAttrList ) ) 1417 , m_pHyperlink( 0 ) 1418 // --> OD 2009-07-22 #i73249# 1419 , m_sTitle() 1420 , m_sDesc() 1421 // <-- 1422 , m_eDefaultAnchorType( eATyp ) 1423 // --> OD 2006-03-10 #i51726# 1424 , m_HasAutomaticStyleWithoutParentStyle( sal_False ) 1425 // <-- 1426 , m_bSupportsReplacement( sal_False ) 1427 { 1428 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 1429 for( sal_Int16 i=0; i < nAttrCount; i++ ) 1430 { 1431 const OUString& rAttrName = xAttrList->getNameByIndex( i ); 1432 1433 OUString aLocalName; 1434 sal_uInt16 nPrefix = 1435 GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName ); 1436 // --> OD 2006-03-10 #i51726# 1437 // New distinguish attribute between Writer objects and Draw objects is: 1438 // Draw objects have an automatic style without a parent style 1439 if ( XML_NAMESPACE_DRAW == nPrefix && 1440 IsXMLToken( aLocalName, XML_STYLE_NAME ) ) 1441 { 1442 OUString aStyleName = xAttrList->getValueByIndex( i ); 1443 if( aStyleName.getLength() ) 1444 { 1445 UniReference < XMLTextImportHelper > xTxtImport = 1446 GetImport().GetTextImport(); 1447 XMLPropStyleContext* pStyle( 0L ); 1448 pStyle = xTxtImport->FindAutoFrameStyle( aStyleName ); 1449 if ( pStyle && !pStyle->GetParentName().getLength() ) 1450 { 1451 m_HasAutomaticStyleWithoutParentStyle = sal_True; 1452 } 1453 } 1454 } 1455 // <-- 1456 else if ( XML_NAMESPACE_TEXT == nPrefix && 1457 IsXMLToken( aLocalName, XML_ANCHOR_TYPE ) ) 1458 { 1459 TextContentAnchorType eNew; 1460 if( XMLAnchorTypePropHdl::convert( xAttrList->getValueByIndex(i), 1461 eNew ) && 1462 ( TextContentAnchorType_AT_PARAGRAPH == eNew || 1463 TextContentAnchorType_AT_CHARACTER == eNew || 1464 TextContentAnchorType_AS_CHARACTER == eNew || 1465 TextContentAnchorType_AT_PAGE == eNew) ) 1466 m_eDefaultAnchorType = eNew; 1467 } 1468 } 1469 } 1470 1471 XMLTextFrameContext::~XMLTextFrameContext() 1472 { 1473 delete m_pHyperlink; 1474 } 1475 1476 void XMLTextFrameContext::EndElement() 1477 { 1478 /// solve if multiple image child contexts were imported 1479 /// the winner is returned, if something has yet to be done with it 1480 const SvXMLImportContext* pWinner = solveMultipleImages(); 1481 1482 // #123261# see if the winner is a XMLTextFrameContext_Impl 1483 const XMLTextFrameContext_Impl* pImplWinner = dynamic_cast< const XMLTextFrameContext_Impl* >(pWinner); 1484 1485 if(pImplWinner) 1486 { 1487 // #123261# if yes, set name now, after the winner is identified (setting at each 1488 // candidate may run into problems due to colliding with efforts in the target to 1489 // avoid double names, so only set one name at one image and not at each) 1490 const_cast< XMLTextFrameContext_Impl* >(pImplWinner)->SetNameForFrameFromPropSet(); 1491 } 1492 1493 SvXMLImportContext *pContext = &m_xImplContext; 1494 XMLTextFrameContext_Impl *pImpl = dynamic_cast< XMLTextFrameContext_Impl* >(pContext); 1495 1496 if( pImpl ) 1497 { 1498 pImpl->CreateIfNotThere(); 1499 1500 // --> OD 2009-07-22 #i73249# 1501 // // alternative text 1502 // if( m_sDesc.getLength() ) 1503 // pImpl->SetDesc( m_sDesc ); 1504 // svg:title 1505 if( m_sTitle.getLength() ) 1506 { 1507 pImpl->SetTitle( m_sTitle ); 1508 } 1509 if( m_sDesc.getLength() ) 1510 { 1511 pImpl->SetDesc( m_sDesc ); 1512 } 1513 // <-- 1514 1515 if( m_pHyperlink ) 1516 { 1517 pImpl->SetHyperlink( m_pHyperlink->GetHRef(), m_pHyperlink->GetName(), 1518 m_pHyperlink->GetTargetFrameName(), m_pHyperlink->GetMap() ); 1519 delete m_pHyperlink; 1520 m_pHyperlink = 0; 1521 } 1522 1523 } 1524 } 1525 1526 SvXMLImportContext *XMLTextFrameContext::CreateChildContext( 1527 sal_uInt16 p_nPrefix, 1528 const OUString& rLocalName, 1529 const Reference< XAttributeList > & xAttrList ) 1530 { 1531 SvXMLImportContext *pContext = 0; 1532 1533 if( !m_xImplContext.Is() ) 1534 { 1535 // no child exists 1536 if( XML_NAMESPACE_DRAW == p_nPrefix ) 1537 { 1538 sal_uInt16 nFrameType = USHRT_MAX; 1539 if( IsXMLToken( rLocalName, XML_TEXT_BOX ) ) 1540 nFrameType = XML_TEXT_FRAME_TEXTBOX; 1541 else if( IsXMLToken( rLocalName, XML_IMAGE ) ) 1542 nFrameType = XML_TEXT_FRAME_GRAPHIC; 1543 else if( IsXMLToken( rLocalName, XML_OBJECT ) ) 1544 nFrameType = XML_TEXT_FRAME_OBJECT; 1545 else if( IsXMLToken( rLocalName, XML_OBJECT_OLE ) ) 1546 nFrameType = XML_TEXT_FRAME_OBJECT_OLE; 1547 else if( IsXMLToken( rLocalName, XML_APPLET) ) 1548 nFrameType = XML_TEXT_FRAME_APPLET; 1549 else if( IsXMLToken( rLocalName, XML_PLUGIN ) ) 1550 nFrameType = XML_TEXT_FRAME_PLUGIN; 1551 else if( IsXMLToken( rLocalName, XML_FLOATING_FRAME ) ) 1552 nFrameType = XML_TEXT_FRAME_FLOATING_FRAME; 1553 1554 if( USHRT_MAX != nFrameType ) 1555 { 1556 // --> OD 2006-03-10 #i51726# 1557 if ( ( XML_TEXT_FRAME_TEXTBOX == nFrameType || 1558 XML_TEXT_FRAME_GRAPHIC == nFrameType ) && 1559 m_HasAutomaticStyleWithoutParentStyle ) 1560 // <-- 1561 { 1562 Reference < XShapes > xShapes; 1563 pContext = GetImport().GetShapeImport()->CreateFrameChildContext( 1564 GetImport(), p_nPrefix, rLocalName, xAttrList, xShapes, m_xAttrList ); 1565 } 1566 else if( XML_TEXT_FRAME_PLUGIN == nFrameType ) 1567 { 1568 bool bMedia = false; 1569 1570 // check, if we have a media object 1571 for( sal_Int16 n = 0, nAttrCount = ( xAttrList.is() ? xAttrList->getLength() : 0 ); n < nAttrCount; ++n ) 1572 { 1573 OUString aLocalName; 1574 sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( xAttrList->getNameByIndex( n ), &aLocalName ); 1575 1576 if( nPrefix == XML_NAMESPACE_DRAW && IsXMLToken( aLocalName, XML_MIME_TYPE ) ) 1577 { 1578 if( 0 == xAttrList->getValueByIndex( n ).compareToAscii( "application/vnd.sun.star.media" ) ) 1579 bMedia = true; 1580 1581 // leave this loop 1582 n = nAttrCount - 1; 1583 } 1584 } 1585 1586 if( bMedia ) 1587 { 1588 Reference < XShapes > xShapes; 1589 pContext = GetImport().GetShapeImport()->CreateFrameChildContext( 1590 GetImport(), p_nPrefix, rLocalName, xAttrList, xShapes, m_xAttrList ); 1591 } 1592 } 1593 else if( XML_TEXT_FRAME_OBJECT == nFrameType || 1594 XML_TEXT_FRAME_OBJECT_OLE == nFrameType ) 1595 { 1596 m_bSupportsReplacement = sal_True; 1597 } 1598 else if(XML_TEXT_FRAME_GRAPHIC == nFrameType) 1599 { 1600 setSupportsMultipleContents(IsXMLToken(rLocalName, XML_IMAGE)); 1601 } 1602 1603 if( !pContext ) 1604 { 1605 pContext = new XMLTextFrameContext_Impl( 1606 GetImport(), 1607 p_nPrefix, 1608 rLocalName, 1609 xAttrList, 1610 m_eDefaultAnchorType, 1611 nFrameType, 1612 m_xAttrList, 1613 !getSupportsMultipleContents()); 1614 } 1615 1616 m_xImplContext = pContext; 1617 1618 if(getSupportsMultipleContents() && XML_TEXT_FRAME_GRAPHIC == nFrameType) 1619 { 1620 addContent(*m_xImplContext); 1621 } 1622 } 1623 } 1624 } 1625 else if(getSupportsMultipleContents() && XML_NAMESPACE_DRAW == p_nPrefix && IsXMLToken(rLocalName, XML_IMAGE)) 1626 { 1627 // read another image 1628 pContext = new XMLTextFrameContext_Impl( 1629 GetImport(), 1630 p_nPrefix, 1631 rLocalName, 1632 xAttrList, 1633 m_eDefaultAnchorType, 1634 XML_TEXT_FRAME_GRAPHIC, 1635 m_xAttrList, 1636 false); 1637 1638 m_xImplContext = pContext; 1639 addContent(*m_xImplContext); 1640 } 1641 else if( m_bSupportsReplacement && !m_xReplImplContext && 1642 XML_NAMESPACE_DRAW == p_nPrefix && 1643 IsXMLToken( rLocalName, XML_IMAGE ) ) 1644 { 1645 // read replacement image 1646 Reference < XPropertySet > xPropSet; 1647 if( CreateIfNotThere( xPropSet ) ) 1648 { 1649 pContext = new XMLReplacementImageContext( GetImport(), 1650 p_nPrefix, rLocalName, xAttrList, xPropSet ); 1651 m_xReplImplContext = pContext; 1652 } 1653 } 1654 else if( m_xImplContext->ISA( XMLTextFrameContext_Impl ) ) 1655 { 1656 // the child is a writer frame 1657 if( XML_NAMESPACE_SVG == p_nPrefix ) 1658 { 1659 // --> OD 2009-07-22 #i73249# 1660 // bool bOld = SvXMLImport::OOo_2x >= GetImport().getGeneratorVersion(); 1661 // if( IsXMLToken( rLocalName, bOld ? XML_DESC : XML_TITLE ) ) 1662 // pContext = new XMLTextFrameDescContext_Impl( GetImport(), p_nPrefix, rLocalName, 1663 // xAttrList, m_sDesc ); 1664 const bool bOld = SvXMLImport::OOo_2x >= GetImport().getGeneratorVersion(); 1665 if ( bOld ) 1666 { 1667 if ( IsXMLToken( rLocalName, XML_DESC ) ) 1668 { 1669 pContext = new XMLTextFrameTitleOrDescContext_Impl( GetImport(), 1670 p_nPrefix, 1671 rLocalName, 1672 m_sTitle ); 1673 } 1674 } 1675 else 1676 { 1677 if( IsXMLToken( rLocalName, XML_TITLE ) ) 1678 { 1679 pContext = new XMLTextFrameTitleOrDescContext_Impl( GetImport(), 1680 p_nPrefix, 1681 rLocalName, 1682 m_sTitle ); 1683 } 1684 else if ( IsXMLToken( rLocalName, XML_DESC ) ) 1685 { 1686 pContext = new XMLTextFrameTitleOrDescContext_Impl( GetImport(), 1687 p_nPrefix, 1688 rLocalName, 1689 m_sDesc ); 1690 } 1691 } 1692 // <-- 1693 } 1694 else if( XML_NAMESPACE_DRAW == p_nPrefix ) 1695 { 1696 Reference < XPropertySet > xPropSet; 1697 if( IsXMLToken( rLocalName, XML_CONTOUR_POLYGON ) ) 1698 { 1699 if( CreateIfNotThere( xPropSet ) ) 1700 pContext = new XMLTextFrameContourContext_Impl( GetImport(), p_nPrefix, rLocalName, 1701 xAttrList, xPropSet, sal_False ); 1702 } 1703 else if( IsXMLToken( rLocalName, XML_CONTOUR_PATH ) ) 1704 { 1705 if( CreateIfNotThere( xPropSet ) ) 1706 pContext = new XMLTextFrameContourContext_Impl( GetImport(), p_nPrefix, rLocalName, 1707 xAttrList, xPropSet, sal_True ); 1708 } 1709 else if( IsXMLToken( rLocalName, XML_IMAGE_MAP ) ) 1710 { 1711 if( CreateIfNotThere( xPropSet ) ) 1712 pContext = new XMLImageMapContext( GetImport(), p_nPrefix, rLocalName, xPropSet ); 1713 } 1714 } 1715 else if( (XML_NAMESPACE_OFFICE == p_nPrefix) && IsXMLToken( rLocalName, XML_EVENT_LISTENERS ) ) 1716 { 1717 // do we still have the frame object? 1718 Reference < XPropertySet > xPropSet; 1719 if( CreateIfNotThere( xPropSet ) ) 1720 { 1721 // is it an event supplier? 1722 Reference<XEventsSupplier> xEventsSupplier(xPropSet, UNO_QUERY); 1723 if (xEventsSupplier.is()) 1724 { 1725 // OK, we have the events, so create the context 1726 pContext = new XMLEventsImportContext(GetImport(), p_nPrefix, 1727 rLocalName, xEventsSupplier); 1728 } 1729 } 1730 } 1731 } 1732 else if( p_nPrefix == XML_NAMESPACE_SVG && // #i68101# 1733 (IsXMLToken( rLocalName, XML_TITLE ) || IsXMLToken( rLocalName, XML_DESC ) ) ) 1734 { 1735 pContext = m_xImplContext->CreateChildContext( p_nPrefix, rLocalName, xAttrList ); 1736 } 1737 else 1738 { 1739 // the child is a drawing shape 1740 pContext = GetImport().GetShapeImport()->CreateFrameChildContext( 1741 &m_xImplContext, p_nPrefix, rLocalName, xAttrList ); 1742 } 1743 1744 if( !pContext ) 1745 pContext = new SvXMLImportContext( GetImport(), p_nPrefix, rLocalName ); 1746 1747 return pContext; 1748 } 1749 1750 void XMLTextFrameContext::SetHyperlink( const OUString& rHRef, 1751 const OUString& rName, 1752 const OUString& rTargetFrameName, 1753 sal_Bool bMap ) 1754 { 1755 OSL_ENSURE( !m_pHyperlink, "recursive SetHyperlink call" ); 1756 delete m_pHyperlink; 1757 m_pHyperlink = new XMLTextFrameContextHyperlink_Impl( 1758 rHRef, rName, rTargetFrameName, bMap ); 1759 } 1760 1761 TextContentAnchorType XMLTextFrameContext::GetAnchorType() const 1762 { 1763 SvXMLImportContext *pContext = &m_xImplContext; 1764 XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext ); 1765 if( pImpl ) 1766 return pImpl->GetAnchorType(); 1767 else 1768 return m_eDefaultAnchorType; 1769 } 1770 1771 Reference < XTextContent > XMLTextFrameContext::GetTextContent() const 1772 { 1773 Reference < XTextContent > xTxtCntnt; 1774 SvXMLImportContext *pContext = &m_xImplContext; 1775 XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext ); 1776 if( pImpl ) 1777 xTxtCntnt.set( pImpl->GetPropSet(), UNO_QUERY ); 1778 1779 return xTxtCntnt; 1780 } 1781 1782 // --> OD 2004-08-24 #33242# 1783 Reference < XShape > XMLTextFrameContext::GetShape() const 1784 { 1785 Reference < XShape > xShape; 1786 SvXMLImportContext* pContext = &m_xImplContext; 1787 SvXMLShapeContext* pImpl = PTR_CAST( SvXMLShapeContext, pContext ); 1788 if ( pImpl ) 1789 { 1790 xShape = pImpl->getShape(); 1791 } 1792 1793 return xShape; 1794 } 1795 // <-- 1796