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

Generated by: LCOV version 1.10