LCOV - code coverage report
Current view: top level - xmloff/source/text - XMLTextFrameContext.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 521 776 67.1 %
Date: 2015-06-13 12:38:46 Functions: 42 68 61.8 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.11