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

Generated by: LCOV version 1.10