ooo-build r13086 - trunk/patches/test/vba



Author: noelpwer
Date: Mon Jul  7 13:36:48 2008
New Revision: 13086
URL: http://svn.gnome.org/viewvc/ooo-build?rev=13086&view=rev

Log:
ok, got form controls to read from image stream inside the document too.
next, create a proper patch


Modified:
   trunk/patches/test/vba/HackyImageControlWithNonLinkedImages.diff

Modified: trunk/patches/test/vba/HackyImageControlWithNonLinkedImages.diff
==============================================================================
--- trunk/patches/test/vba/HackyImageControlWithNonLinkedImages.diff	(original)
+++ trunk/patches/test/vba/HackyImageControlWithNonLinkedImages.diff	Mon Jul  7 13:36:48 2008
@@ -1,3 +1,87 @@
+diff --git forms/source/component/ImageControl.cxx forms/source/component/ImageControl.cxx
+index 1ba9f90..6db2387 100644
+--- forms/source/component/ImageControl.cxx
++++ forms/source/component/ImageControl.cxx
+@@ -43,6 +43,8 @@
+ #include <svtools/imageresourceaccess.hxx>
+ #include <unotools/ucblockbytes.hxx>
+ #include <sfx2/filedlghelper.hxx>
++#include <com/sun/star/graphic/XGraphicLinkProvider.hpp>
++#include <com/sun/star/embed/ElementModes.hpp>
+ #include <com/sun/star/awt/XPopupMenu.hpp>
+ #include <com/sun/star/awt/PopupMenuDirection.hpp>
+ #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
+@@ -352,7 +354,51 @@ sal_Bool OImageControlModel::handleNewIm
+     // create a stream for the image specified by the URL
+     ::std::auto_ptr< SvStream > pImageStream;
+     Reference< XInputStream > xImageStream;
++			String aUserData = _rURL;
+ 
++	Reference< graphic::XGraphicLinkProvider > xProv;
++
++ 	getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("GraphicLinkProvider" ) ) )  >>= xProv;
++	OSL_TRACE("GraphicLinkProvider.is %d", xProv.is() );
++	if ( xProv.is() && _rURL.toAsciiLowerCase().indexOf( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.package:") ) ) == 0  )
++	{
++		Reference< embed::XStorage > xStor( xProv->getStorage() );
++		String aUserData = _rURL;
++		if( aUserData.Len() )
++		{
++			const String aPicturePath( aUserData.GetToken( 1, ':' ) );
++		
++				// graphic from picture stream in picture storage in XML package
++			if( aPicturePath.GetTokenCount( '/' ) == 2 )
++			{
++				const String aPictureStreamName( aPicturePath.GetToken( 1, '/' ) );
++				const String aPictureStorageName( aPicturePath.GetToken( 0, '/' ) );
++			
++				try {
++					if ( xStor->isStorageElement( aPictureStorageName ) )
++					{
++						uno::Reference< embed::XStorage > xPictureStorage =
++						xStor->openStorageElement( aPictureStorageName, embed::ElementModes::READ );
++						if( xPictureStorage.is() &&
++							xPictureStorage->isStreamElement( aPictureStreamName ) )
++						{
++							uno::Reference< io::XStream > xStream = xPictureStorage->openStreamElement( aPictureStreamName, embed::ElementModes::READ );
++							if ( xStream.is() )
++							{
++								pImageStream.reset( ::utl::UcbStreamHelper::CreateStream( xStream ) );
++	
++							}
++						}
++					}
++				}
++				catch( uno::Exception& )
++				{
++				}
++			}
++		}
++	}
++if ( !pImageStream.get() )
++{
+     if ( ::svt::ImageResourceAccess::isImageResourceURL( _rURL ) )
+     {
+         xImageStream = ::svt::ImageResourceAccess::getImageXStream( getORB(), _rURL );
+@@ -360,8 +406,9 @@ sal_Bool OImageControlModel::handleNewIm
+     else
+     {
+         pImageStream.reset( ::utl::UcbStreamHelper::CreateStream( _rURL, STREAM_READ ) );
++    }
++}
+ 	    sal_Bool bSetNull = ( pImageStream.get() == NULL ) || ( ERRCODE_NONE != pImageStream->GetErrorCode() );
+-
+         if (!bSetNull)
+ 	    {
+ 		    // get the size of the stream
+@@ -373,7 +420,6 @@ sal_Bool OImageControlModel::handleNewIm
+ 
+             xImageStream = new ::utl::OInputStreamHelper( new SvLockBytes( pImageStream.get(), sal_False ), nSize );
+         }
+-    }
+ 
+     if ( xImageStream.is() )
+     {
 diff --git forms/source/component/imgprod.cxx forms/source/component/imgprod.cxx
 index 01fa8ac..8c7e065 100644
 --- forms/source/component/imgprod.cxx
@@ -68,6 +152,18 @@
  }
  
  namespace frm
+diff --git forms/source/inc/frm_strings.hxx forms/source/inc/frm_strings.hxx
+index 7b1677d..a29cf97 100644
+--- forms/source/inc/frm_strings.hxx
++++ forms/source/inc/frm_strings.hxx
+@@ -144,6 +144,7 @@ namespace frm
+     FORMS_CONSTASCII_STRING( PROPERTY_SUBMIT_METHOD,            "SubmitMethod" );
+     FORMS_CONSTASCII_STRING( PROPERTY_SUBMIT_ENCODING,          "SubmitEncoding" );
+     FORMS_CONSTASCII_STRING( PROPERTY_IMAGE_URL,                "ImageURL" );
++    FORMS_CONSTASCII_STRING( PROPERTY_GRAPHICLINKPROVIDER,                "GraphicLinkProvider" );
+     FORMS_CONSTASCII_STRING( PROPERTY_IMAGE_POSITION,           "ImagePosition" );
+     FORMS_CONSTASCII_STRING( PROPERTY_EMPTY_IS_NULL,            "ConvertEmptyToNull" );
+     FORMS_CONSTASCII_STRING( PROPERTY_LISTSOURCETYPE,           "ListSourceType" );
 diff --git goodies/source/unographic/descriptor.cxx goodies/source/unographic/descriptor.cxx
 index 37721e1..d902d51 100644
 --- goodies/source/unographic/descriptor.cxx
@@ -328,18 +424,23 @@
  
  .IF "$(GUI)"=="WNT"
 diff --git toolkit/inc/toolkit/controls/unocontrols.hxx toolkit/inc/toolkit/controls/unocontrols.hxx
-index 72c7db8..757a6c8 100644
+index 72c7db8..23cdb87 100644
 --- toolkit/inc/toolkit/controls/unocontrols.hxx
 +++ toolkit/inc/toolkit/controls/unocontrols.hxx
-@@ -221,7 +221,7 @@ private:
+@@ -219,10 +219,11 @@ private:
+ 	std::list< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer > >  maListeners;
+     bool                                                                                    mbAdjustingImagePosition;
      bool                                                                                    mbAdjustingGraphic;
++    bool                                                                                    mbInLinkProvider;
  
  protected:
 -    ImageProducerControlModel() : mbAdjustingImagePosition( false ), mbAdjustingGraphic( false ) { }
+-    ImageProducerControlModel( const ImageProducerControlModel& _rSource ) : com::sun::star::awt::XImageProducer(), UnoControlModel( _rSource ), mbAdjustingImagePosition( false ), mbAdjustingGraphic( false ) { }
 +    ImageProducerControlModel();
-     ImageProducerControlModel( const ImageProducerControlModel& _rSource ) : com::sun::star::awt::XImageProducer(), UnoControlModel( _rSource ), mbAdjustingImagePosition( false ), mbAdjustingGraphic( false ) { }
++    ImageProducerControlModel( const ImageProducerControlModel& _rSource ) : com::sun::star::awt::XImageProducer(), UnoControlModel( _rSource ), mbAdjustingImagePosition( false ), mbAdjustingGraphic( false ), mbInLinkProvider( false ) { }
  
  	::com::sun::star::uno::Any	SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
+     ::com::sun::star::uno::Any	SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
 diff --git toolkit/inc/toolkit/helper/property.hxx toolkit/inc/toolkit/helper/property.hxx
 index db61c94..73e861e 100644
 --- toolkit/inc/toolkit/helper/property.hxx
@@ -400,7 +501,7 @@
              case BASEPROPERTY_BORDERCOLOR:
              case BASEPROPERTY_SYMBOL_COLOR:
 diff --git toolkit/source/controls/unocontrols.cxx toolkit/source/controls/unocontrols.cxx
-index 821c1b9..de4294d 100644
+index 821c1b9..fa2aae6 100644
 --- toolkit/source/controls/unocontrols.cxx
 +++ toolkit/source/controls/unocontrols.cxx
 @@ -37,6 +37,7 @@
@@ -460,30 +561,38 @@
  }
  
  void SAL_CALL ImageProducerControlModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw (::com::sun::star::uno::Exception)
-@@ -615,16 +635,39 @@ void SAL_CALL ImageProducerControlModel:
+@@ -615,16 +635,47 @@ void SAL_CALL ImageProducerControlModel:
      {
          switch ( nHandle )
          {
-+        case BASEPROPERTY_GRAPHICLINKPROVIDER:
-+            if ( !mbAdjustingGraphic && ImplHasProperty( BASEPROPERTY_GRAPHIC ) )
-+            {    
-+                uno::Reference< graphic::XGraphicLinkProvider > xProv;
-+                OSL_VERIFY( rValue >>= xProv );
-+                rtl::OUString sURL;
-+                //mbAdjustingGraphic = true;
-+                if ( xProv.is() )
-+		    sURL = xProv->getSourceURL();
-+
-+                if ( sURL.getLength() )
-+                {
-+                    //setPropertyValue( GetPropertyName( BASEPROPERTY_GRAPHIC ), uno::makeAny( lcl_getGraphicFromURL_nothrow( sURL, xProv->getStorage() ) ) );
-+                }
-+                break;
-+                
-+            }
++ 			// someone wants to set an image that is carried in the
++			// associated storage ( e.g the document )
++	        case BASEPROPERTY_GRAPHICLINKPROVIDER:
++			{
++				uno::Reference< graphic::XGraphicLinkProvider > xProv;
++				OSL_VERIFY( rValue >>= xProv );
++				rtl::OUString sURL;
++				if ( xProv.is() )
++				{
++					sURL = xProv->getSourceURL();
++					if ( sURL.getLength() )
++					{
++						mbInLinkProvider = true;
++						setPropertyValue( GetPropertyName( BASEPROPERTY_IMAGEURL ), uno::makeAny(  sURL ) );
++						mbInLinkProvider = false;
++					}
++				}
++				break;
++			}
 +            
          case BASEPROPERTY_IMAGEURL:
 +        {
++			OSL_TRACE("Setting IMAGEURL mbInLinkProvider = %s", mbInLinkProvider ? "true" : "false" );
++ 			// someone has set the an ImageUrl ( e.g. Linked Image )
++			if ( !mbInLinkProvider && ImplHasProperty( BASEPROPERTY_GRAPHICLINKPROVIDER ) )
++					setPropertyValue( GetPropertyName( BASEPROPERTY_GRAPHICLINKPROVIDER ), uno::makeAny(  uno::Reference< graphic::XGraphicLinkProvider >()  ) );
++	
++				
              if ( !mbAdjustingGraphic && ImplHasProperty( BASEPROPERTY_GRAPHIC ) )
              {
                  mbAdjustingGraphic = true;
@@ -501,7 +610,7 @@
  
          case BASEPROPERTY_GRAPHIC:
              if ( !mbAdjustingGraphic && ImplHasProperty( BASEPROPERTY_IMAGEURL ) )
-@@ -676,8 +719,23 @@ void ImageProducerControlModel::removeCo
+@@ -676,8 +727,23 @@ void ImageProducerControlModel::removeCo
  
  void ImageProducerControlModel::startProduction(  ) throw (::com::sun::star::uno::RuntimeException)
  {
@@ -546,8 +655,139 @@
              DECL_PROP_2     ( "HelpText",               HELPTEXT,           ::rtl::OUString,    BOUND, MAYBEDEFAULT ),
              DECL_PROP_2     ( "HelpURL",                HELPURL,            ::rtl::OUString,    BOUND, MAYBEDEFAULT ),
              DECL_PROP_2     ( "HideInactiveSelection",  HIDEINACTIVESELECTION, bool,            BOUND, MAYBEDEFAULT ),
+diff --git xmloff/source/forms/elementimport.cxx xmloff/source/forms/elementimport.cxx
+index edc0c77..0cc56a7 100644
+--- xmloff/source/forms/elementimport.cxx
++++ xmloff/source/forms/elementimport.cxx
+@@ -56,6 +56,7 @@
+ #include <com/sun/star/beans/XMultiPropertySet.hpp>
+ #include <com/sun/star/beans/XPropertyContainer.hpp>
+ #include <com/sun/star/beans/PropertyAttribute.hpp>
++#include <com/sun/star/document/XStorageBasedDocument.hpp>
+ /** === end UNO includes === **/
+ #include <tools/urlobj.hxx>
+ #include <tools/time.hxx>
+@@ -81,6 +82,38 @@ namespace xmloff
+ 	using namespace ::com::sun::star::util;
+ 	using namespace ::com::sun::star::text;
+     using namespace ::comphelper;
++typedef ::cppu::WeakImplHelper1< graphic::XGraphicLinkProvider >  GRAPHIC_LINKPROVIDER_BASE;
++
++class GraphLinkProviderImpl : public GRAPHIC_LINKPROVIDER_BASE
++{
++    Reference< embed::XStorage > mxStorage;
++    rtl::OUString msURL;
++public:
++    GraphLinkProviderImpl( const Reference< frame::XModel >& rxModel, const rtl::OUString& sURL ) : msURL( sURL )
++    {
++        Reference< document::XStorageBasedDocument > xDocStorage( rxModel, UNO_QUERY );
++        if ( xDocStorage.is() )
++        {
++            mxStorage = xDocStorage->getDocumentStorage();
++        }
++    }
++
++    virtual Reference< embed::XStorage > SAL_CALL getStorage() throw (RuntimeException)
++    {
++        return mxStorage;
++    }
++
++    virtual void SAL_CALL setStorage( const Reference< embed::XStorage >& _storage ) throw (RuntimeException)
++    {
++    }
++
++    virtual ::rtl::OUString SAL_CALL getSourceURL() throw (RuntimeException)
++    {
++        return msURL;
++    }
++
++};
++
+ 
+ #define PROPID_VALUE			1
+ #define PROPID_CURRENT_VALUE	2
+@@ -979,10 +1012,39 @@ namespace xmloff
+                 _rValue, OEnumMapper::getEnumMap( OEnumMapper::epImageAlign )
+             ) >>= m_nImageAlign );
+         }
++        else if ( _rLocalName == GetXMLToken( XML_IMAGE_DATA ) )//&& ( _rValue.indexOf( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.Package:") ) ) == 0  ) )
++	{
++		// strange, it seems the .GetAbsoluteReference call changes
++		// vnd.sun.star.Package to vnd.sun.star.package
++		sal_Int32 index = _rValue.toAsciiLowerCase().indexOf( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.package:") ) );
++		OSL_TRACE("*** Setting Packeurl link provider thing _rValue is %s index of = %d", rtl::OUStringToOString( _rValue, RTL_TEXTENCODING_UTF8 ).getStr(), index );
++		if ( index == 0 )
++			m_xProv = new GraphLinkProviderImpl( m_rContext.getGlobalContext().GetModel(), _rValue );
++		else
++            		OControlImport::handleAttribute( _nNamespaceKey, _rLocalName, _rValue );
++	}
+         else
+             OControlImport::handleAttribute( _nNamespaceKey, _rLocalName, _rValue );
+     }
+-
++	void OImagePositionImport::EndElement()
++	{
++		OSL_TRACE("** Image::EndElement");
++			if ( m_xElement.is () )
++			{
++				OSL_TRACE("**** About to set the attribute xProv is %d", m_xProv.is() );
++				try
++				{
++				m_xElement->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("GraphicLinkProvider" ) ), uno::makeAny( m_xProv ) );
++				}
++				catch(uno::Exception& e)
++				{
++					OSL_TRACE("Caught exception %s", rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
++				}
++			}
++			else
++				OSL_TRACE("Phreaking null");
++		OControlImport::EndElement();
++	}
+ 	//---------------------------------------------------------------------
+ 	void OImagePositionImport::StartElement(const Reference< sax::XAttributeList >& _rxAttrList)
+ 	{
+@@ -1136,7 +1198,9 @@ namespace xmloff
+ 		if ( bMakeAbsolute )
+ 		{
+ 			// make a global URL out of the local one
++			OSL_TRACE("Incomming URL = %s", rtl::OUStringToOString( _rValue, RTL_TEXTENCODING_UTF8 ).getStr() );
+ 			::rtl::OUString sAdjustedValue = m_rContext.getGlobalContext().GetAbsoluteReference( _rValue );
++			OSL_TRACE("OutGoing URL = %s", rtl::OUStringToOString( sAdjustedValue, RTL_TEXTENCODING_UTF8 ).getStr() );
+ 			OImagePositionImport::handleAttribute( _nNamespaceKey, _rLocalName, sAdjustedValue );
+ 		}
+ 		else
+diff --git xmloff/source/forms/elementimport.hxx xmloff/source/forms/elementimport.hxx
+index 58d279a..a41d341 100644
+--- xmloff/source/forms/elementimport.hxx
++++ xmloff/source/forms/elementimport.hxx
+@@ -41,6 +41,7 @@
+ #include <com/sun/star/lang/XMultiServiceFactory.hpp>
+ #include <com/sun/star/form/XGridColumnFactory.hpp>
+ #include <com/sun/star/script/XEventAttacherManager.hpp>
++#include <com/sun/star/graphic/XGraphicLinkProvider.hpp>
+ /** === end UNO includes === **/
+ #include <comphelper/stl_types.hxx>
+ #include "eventimport.hxx"
+@@ -282,6 +283,7 @@ namespace xmloff
+         sal_Int16   m_nImagePosition;
+         sal_Int16   m_nImageAlign;
+         sal_Bool    m_bHaveImagePosition;
++	::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicLinkProvider > m_xProv;
+ 
+     public:
+ 		OImagePositionImport(
+@@ -294,7 +296,7 @@ namespace xmloff
+ 		// SvXMLImportContext overridables
+ 		virtual void StartElement(
+ 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList);
+-
++		virtual void EndElement();
+         // OPropertyImport overridables
+ 		virtual void	handleAttribute( sal_uInt16 _nNamespaceKey,
+ 			const ::rtl::OUString& _rLocalName,
 diff --git xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx
-index d57bb95..8be9235 100644
+index d57bb95..f495e5f 100644
 --- xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx
 +++ xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx
 @@ -40,6 +40,8 @@
@@ -603,6 +843,7 @@
  	ctx.importBooleanProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("ScaleImage") ),
  							   OUString( RTL_CONSTASCII_USTRINGPARAM("scale-image") ),
  							   _xAttributes );
+-	ctx.importStringProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("ImageURL") ),
 +
 +	rtl::OUString sURL = _xAttributes->getValueByUidName( _pImport->XMLNS_DIALOGS_UID, OUSTR( "src" ) );
 +        // hard code-test
@@ -619,8 +860,8 @@
 +		}
 +    
 +        }
-+
- 	ctx.importStringProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("ImageURL") ),
++	else
++		ctx.importStringProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("ImageURL") ),
  							  OUString( RTL_CONSTASCII_USTRINGPARAM("src") ),
  							  _xAttributes );
 +



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]