openoffice-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From a..@apache.org
Subject svn commit: r1523968 - in /openoffice/trunk/main/xmloff: inc/xmloff/xmlmultiimagehelper.hxx source/text/XMLTextFrameContext.cxx
Date Tue, 17 Sep 2013 09:58:39 GMT
Author: alg
Date: Tue Sep 17 09:58:39 2013
New Revision: 1523968

URL: http://svn.apache.org/r1523968
Log:
i123261 corrected name clashes on writer graphic import with multi image support

Modified:
    openoffice/trunk/main/xmloff/inc/xmloff/xmlmultiimagehelper.hxx
    openoffice/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx

Modified: openoffice/trunk/main/xmloff/inc/xmloff/xmlmultiimagehelper.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/xmloff/inc/xmloff/xmlmultiimagehelper.hxx?rev=1523968&r1=1523967&r2=1523968&view=diff
==============================================================================
--- openoffice/trunk/main/xmloff/inc/xmloff/xmlmultiimagehelper.hxx (original)
+++ openoffice/trunk/main/xmloff/inc/xmloff/xmlmultiimagehelper.hxx Tue Sep 17 09:58:39 2013
@@ -40,7 +40,7 @@ protected:
 
 public:
     multiImageImportHelper();
-    ~multiImageImportHelper();
+    virtual ~multiImageImportHelper();
 
     /// solve multiple imported images. The most valuable one is choosen,
     /// see imlementation for evtl. changing weights and/or adding filetypes.

Modified: openoffice/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx?rev=1523968&r1=1523967&r2=1523968&view=diff
==============================================================================
--- openoffice/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx (original)
+++ openoffice/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx Tue Sep 17 09:58:39 2013
@@ -425,6 +425,7 @@ class XMLTextFrameContext_Impl : public 
 	sal_Bool	bSyncHeight : 1;
 	sal_Bool	bCreateFailed : 1;
 	sal_Bool	bOwnBase64Stream : 1;
+    bool        mbSetNameForFrame : 1; // #123261# remember if to set the NameForFrame
 
 	void Create( sal_Bool bHRefOrBase64 );
 
@@ -435,16 +436,16 @@ public:
 	sal_Bool CreateIfNotThere();
 	const OUString& GetHRef() const { return sHRef; }
 
-	XMLTextFrameContext_Impl( SvXMLImport& rImport,
-			sal_uInt16 nPrfx,
-			const ::rtl::OUString& rLName,
-			const ::com::sun::star::uno::Reference<
-				::com::sun::star::xml::sax::XAttributeList > & rAttrList,
-			::com::sun::star::text::TextContentAnchorType eAnchorType,
-			sal_uInt16 nType,
-			const ::com::sun::star::uno::Reference<
-				::com::sun::star::xml::sax::XAttributeList > & rFrameAttrList );
-	virtual ~XMLTextFrameContext_Impl();
+    XMLTextFrameContext_Impl( SvXMLImport& rImport,
+        sal_uInt16 nPrfx,
+        const ::rtl::OUString& rLName,
+        const ::com::sun::star::uno::Reference<
+        ::com::sun::star::xml::sax::XAttributeList > & rAttrList,
+        ::com::sun::star::text::TextContentAnchorType eAnchorType,
+        sal_uInt16 nType,
+        const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList
> & rFrameAttrList,
+        bool bSetNameForFrame); // #123261# control if to set the NameForFrame
+    virtual ~XMLTextFrameContext_Impl();
 
 	virtual void EndElement();
 
@@ -468,10 +469,40 @@ public:
 
 	const ::com::sun::star::uno::Reference <
 		::com::sun::star::beans::XPropertySet >& GetPropSet() const { return xPropSet; }
+
+    // #123261# helper to set the NameForFrame
+    void SetNameForFrameFromPropSet();
 };
 
 TYPEINIT1( XMLTextFrameContext_Impl, SvXMLImportContext );
 
+void XMLTextFrameContext_Impl::SetNameForFrameFromPropSet()
+{
+    // set name
+    UniReference < XMLTextImportHelper > xTextImportHelper = GetImport().GetTextImport();
+    Reference < XNamed > xNamed( xPropSet, UNO_QUERY );
+
+    if( xNamed.is() && xTextImportHelper.is() )
+    {
+        OUString sOrigName( xNamed->getName() );
+        if( !sOrigName.getLength() ||
+            (sName.getLength() && sOrigName != sName) )
+        {
+            OUString sOldName( sName );
+            sal_Int32 i = 0;
+            while( xTextImportHelper->HasFrameByName( sName ) )
+            {
+                sName = sOldName;
+                sName += OUString::valueOf( ++i );
+            }
+            xNamed->setName( sName );
+            if( sName != sOldName )
+                xTextImportHelper->GetRenameMap().Add( XML_TEXT_RENAME_TYPE_FRAME,
+                                             sOldName, sName );
+        }
+    }
+}
+
 void XMLTextFrameContext_Impl::Create( sal_Bool /*bHRefOrBase64*/ )
 {
 	UniReference < XMLTextImportHelper > xTextImportHelper =
@@ -581,27 +612,13 @@ void XMLTextFrameContext_Impl::Create( s
 
 	Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo();
 
-	// set name
-	Reference < XNamed > xNamed( xPropSet, UNO_QUERY );
-	if( xNamed.is() )
-	{
-		OUString sOrigName( xNamed->getName() );
-		if( !sOrigName.getLength() ||
-			(sName.getLength() && sOrigName != sName) )
-		{
-			OUString sOldName( sName );
-			sal_Int32 i = 0;
-			while( xTextImportHelper->HasFrameByName( sName ) )
-			{
-				sName = sOldName;
-				sName += OUString::valueOf( ++i );
-			}
-			xNamed->setName( sName );
-			if( sName != sOldName )
-				xTextImportHelper->GetRenameMap().Add( XML_TEXT_RENAME_TYPE_FRAME,
-											 sOldName, sName );
-		}
-	}
+    // #123261# set name, but only if wanted, e.g. for MultiImageSupport, it will be set
after
+    // it is decided which image will be used. This is done e.g. to avoid double stuff and
effects
+    // for the target to avoid double names
+    if(mbSetNameForFrame)
+    {
+        SetNameForFrameFromPropSet();
+    }
 
 	// frame style
 	XMLPropStyleContext *pStyle = 0;
@@ -805,42 +822,44 @@ sal_Bool XMLTextFrameContext_Impl::Creat
 }
 
 XMLTextFrameContext_Impl::XMLTextFrameContext_Impl(
-		SvXMLImport& rImport,
-		sal_uInt16 nPrfx, const OUString& rLName,
-		const Reference< XAttributeList > & rAttrList,
-		TextContentAnchorType eATyp,
-		sal_uInt16 nNewType,
-		const Reference< XAttributeList > & rFrameAttrList )
-:	SvXMLImportContext( rImport, nPrfx, rLName )
+    SvXMLImport& rImport,
+    sal_uInt16 nPrfx, const OUString& rLName,
+    const Reference< XAttributeList > & rAttrList,
+    TextContentAnchorType eATyp,
+    sal_uInt16 nNewType,
+    const Reference< XAttributeList > & rFrameAttrList, 
+    bool bSetNameForFrame)
+:   SvXMLImportContext( rImport, nPrfx, rLName )
 ,   mbListContextPushed( false )
-,	sWidth(RTL_CONSTASCII_USTRINGPARAM("Width"))
-,	sWidthType(RTL_CONSTASCII_USTRINGPARAM("WidthType"))
-,	sRelativeWidth(RTL_CONSTASCII_USTRINGPARAM("RelativeWidth"))
-,	sHeight(RTL_CONSTASCII_USTRINGPARAM("Height"))
-,	sRelativeHeight(RTL_CONSTASCII_USTRINGPARAM("RelativeHeight"))
-,	sSizeType(RTL_CONSTASCII_USTRINGPARAM("SizeType"))
-,	sIsSyncWidthToHeight(RTL_CONSTASCII_USTRINGPARAM("IsSyncWidthToHeight"))
-,	sIsSyncHeightToWidth(RTL_CONSTASCII_USTRINGPARAM("IsSyncHeightToWidth"))
-,	sHoriOrient(RTL_CONSTASCII_USTRINGPARAM("HoriOrient"))
-,	sHoriOrientPosition(RTL_CONSTASCII_USTRINGPARAM("HoriOrientPosition"))
-,	sVertOrient(RTL_CONSTASCII_USTRINGPARAM("VertOrient"))
-,	sVertOrientPosition(RTL_CONSTASCII_USTRINGPARAM("VertOrientPosition"))
-,	sChainNextName(RTL_CONSTASCII_USTRINGPARAM("ChainNextName"))
-,	sAnchorType(RTL_CONSTASCII_USTRINGPARAM("AnchorType"))
-,	sAnchorPageNo(RTL_CONSTASCII_USTRINGPARAM("AnchorPageNo"))
-,	sGraphicURL(RTL_CONSTASCII_USTRINGPARAM("GraphicURL"))
-,	sGraphicFilter(RTL_CONSTASCII_USTRINGPARAM("GraphicFilter"))
+,   sWidth(RTL_CONSTASCII_USTRINGPARAM("Width"))
+,   sWidthType(RTL_CONSTASCII_USTRINGPARAM("WidthType"))
+,   sRelativeWidth(RTL_CONSTASCII_USTRINGPARAM("RelativeWidth"))
+,   sHeight(RTL_CONSTASCII_USTRINGPARAM("Height"))
+,   sRelativeHeight(RTL_CONSTASCII_USTRINGPARAM("RelativeHeight"))
+,   sSizeType(RTL_CONSTASCII_USTRINGPARAM("SizeType"))
+,   sIsSyncWidthToHeight(RTL_CONSTASCII_USTRINGPARAM("IsSyncWidthToHeight"))
+,   sIsSyncHeightToWidth(RTL_CONSTASCII_USTRINGPARAM("IsSyncHeightToWidth"))
+,   sHoriOrient(RTL_CONSTASCII_USTRINGPARAM("HoriOrient"))
+,   sHoriOrientPosition(RTL_CONSTASCII_USTRINGPARAM("HoriOrientPosition"))
+,   sVertOrient(RTL_CONSTASCII_USTRINGPARAM("VertOrient"))
+,   sVertOrientPosition(RTL_CONSTASCII_USTRINGPARAM("VertOrientPosition"))
+,   sChainNextName(RTL_CONSTASCII_USTRINGPARAM("ChainNextName"))
+,   sAnchorType(RTL_CONSTASCII_USTRINGPARAM("AnchorType"))
+,   sAnchorPageNo(RTL_CONSTASCII_USTRINGPARAM("AnchorPageNo"))
+,   sGraphicURL(RTL_CONSTASCII_USTRINGPARAM("GraphicURL"))
+,   sGraphicFilter(RTL_CONSTASCII_USTRINGPARAM("GraphicFilter"))
 // --> OD 2009-07-22 #i73249#
 //,   sAlternativeText(RTL_CONSTASCII_USTRINGPARAM("AlternativeText"))
 ,   sTitle(RTL_CONSTASCII_USTRINGPARAM("Title"))
 ,   sDescription(RTL_CONSTASCII_USTRINGPARAM("Description"))
 // <--
-,	sFrameStyleName(RTL_CONSTASCII_USTRINGPARAM("FrameStyleName"))
-,	sGraphicRotation(RTL_CONSTASCII_USTRINGPARAM("GraphicRotation"))
-,	sTextBoxServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFrame"))
-,	sGraphicServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.GraphicObject"))
-,	nType( nNewType )
-,	eAnchorType( eATyp )
+,   sFrameStyleName(RTL_CONSTASCII_USTRINGPARAM("FrameStyleName"))
+,   sGraphicRotation(RTL_CONSTASCII_USTRINGPARAM("GraphicRotation"))
+,   sTextBoxServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFrame"))
+,   sGraphicServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.GraphicObject"))
+,   nType( nNewType )
+,   eAnchorType( eATyp )
+,   mbSetNameForFrame(bSetNameForFrame)
 {
 	nX = 0;
 	nY = 0;
@@ -1441,13 +1460,25 @@ void XMLTextFrameContext::EndElement()
 {
     /// solve if multiple image child contexts were imported
     /// the winner is returned, if something has yet to be done with it
-    /*const SvXMLImportContext* pWinner =*/ solveMultipleImages();
+    const SvXMLImportContext* pWinner = solveMultipleImages();
 
-	SvXMLImportContext *pContext = &m_xImplContext;
-	XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext );
-	if( pImpl )
-	{
-		pImpl->CreateIfNotThere();
+    // #123261# see if the winner is a XMLTextFrameContext_Impl
+    const XMLTextFrameContext_Impl* pImplWinner = dynamic_cast< const XMLTextFrameContext_Impl*
>(pWinner);
+
+    if(pImplWinner)
+    {
+        // #123261# if yes, set name now, after the winner is identified (setting at each
+        // candidate may run into problems due to colliding with efforts in the target to
+        // avoid double names, so only set one name at one image and not at each)
+        const_cast< XMLTextFrameContext_Impl* >(pImplWinner)->SetNameForFrameFromPropSet();
+    }
+
+    SvXMLImportContext *pContext = &m_xImplContext;
+    XMLTextFrameContext_Impl *pImpl = dynamic_cast< XMLTextFrameContext_Impl* >(pContext);
+
+    if( pImpl )
+    {
+        pImpl->CreateIfNotThere();
 
         // --> OD 2009-07-22 #i73249#
 //        // alternative text
@@ -1552,32 +1583,41 @@ SvXMLImportContext *XMLTextFrameContext:
                     setSupportsMultipleContents(IsXMLToken(rLocalName, XML_IMAGE));
                 }
 
-				if( !pContext )
-				{
-
-					pContext = new XMLTextFrameContext_Impl( GetImport(), p_nPrefix,
-														rLocalName, xAttrList,
-														m_eDefaultAnchorType,
-														nFrameType,
-														m_xAttrList	);
-				}
+                if( !pContext )
+                {
+                    pContext = new XMLTextFrameContext_Impl( 
+                        GetImport(), 
+                        p_nPrefix,
+                        rLocalName, 
+                        xAttrList,
+                        m_eDefaultAnchorType,
+                        nFrameType,
+                        m_xAttrList,
+                        !getSupportsMultipleContents());
+                }
 
-				m_xImplContext = pContext;
+                m_xImplContext = pContext;
 
                 if(getSupportsMultipleContents() && XML_TEXT_FRAME_GRAPHIC == nFrameType)
                 {
                     addContent(*m_xImplContext);
                 }
-			}
-		}
-	}
+            }
+        }
+    }
     else if(getSupportsMultipleContents() && XML_NAMESPACE_DRAW == p_nPrefix &&
IsXMLToken(rLocalName, XML_IMAGE))
     {
         // read another image
         pContext = new XMLTextFrameContext_Impl(
-            GetImport(), p_nPrefix, rLocalName, xAttrList,
-            m_eDefaultAnchorType, XML_TEXT_FRAME_GRAPHIC, m_xAttrList);
-        
+            GetImport(), 
+            p_nPrefix, 
+            rLocalName, 
+            xAttrList,
+            m_eDefaultAnchorType, 
+            XML_TEXT_FRAME_GRAPHIC, 
+            m_xAttrList,
+            false);
+
         m_xImplContext = pContext;
         addContent(*m_xImplContext);
     }



Mime
View raw message