[Libreoffice-commits] core.git: Branch 'libreoffice-4-4-5' - forms/source

Zolnai Tamás zolnaitamas2000 at gmail.com
Wed Jul 22 13:53:42 PDT 2015


 forms/source/component/clickableimage.cxx |   21 +++++++++++++++++++++
 forms/source/component/clickableimage.hxx |    5 +++++
 2 files changed, 26 insertions(+)

New commits:
commit 09c45087cf02eef3166fb870bae531d40216ca66
Author: Zolnai Tamás <zolnaitamas2000 at gmail.com>
Date:   Thu Jul 16 03:01:59 2015 +0200

    tdf#47832: Pictures on buttons, created in forms, gone after reopening form
    
    When image is set to a Button control the correspoding graphic object
    lives only temporarily, after the graphic is copied from the graphic
    object it's destroyed so save can't find it by graphic ID.
    Use the same solution which works for ImageControls: use a graphic object
    member for the control, so save can find it.
    
    (cherry picked from commit 70f152983f3425a77df2f65b4798417640d47b76)
    
    fix windows build (from Noel Grandin)
    
    (cherry picked from commit 4c5498ec5ee478e27fd62bdcf9de1208c692422c)
    
    Conflicts:
    	forms/source/component/clickableimage.cxx
    
    Change-Id: Iad31904bef65e30796538685f7cd7ae8f59762dc
    Reviewed-on: https://gerrit.libreoffice.org/17111
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Reviewed-by: Adolfo Jayme Barrientos <fitojb at ubuntu.com>
    Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
    Tested-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>

diff --git a/forms/source/component/clickableimage.cxx b/forms/source/component/clickableimage.cxx
index 71ad12e..fe5bcde 100644
--- a/forms/source/component/clickableimage.cxx
+++ b/forms/source/component/clickableimage.cxx
@@ -31,6 +31,8 @@
 #include <com/sun/star/frame/XFrame.hpp>
 #include <com/sun/star/awt/ActionEvent.hpp>
 #include <com/sun/star/awt/XActionListener.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/graphic/GraphicObject.hpp>
 #include <tools/urlobj.hxx>
 #include <tools/debug.hxx>
 #include <vcl/svapp.hxx>
@@ -62,6 +64,7 @@ namespace frm
     using namespace ::com::sun::star::util;
     using namespace ::com::sun::star::frame;
     using namespace ::com::sun::star::form::submission;
+    using namespace ::com::sun::star::graphic;
     using ::com::sun::star::awt::MouseEvent;
     using ::com::sun::star::task::XInteractionHandler;
 
@@ -451,6 +454,7 @@ namespace frm
             const OUString& rDefault )
         :OControlModel( _rxFactory, _rUnoControlModelTypeName, rDefault )
         ,OPropertyChangeListener(m_aMutex)
+        ,m_xGraphicObject()
         ,m_pMedium(NULL)
         ,m_pProducer( NULL )
         ,m_bDispatchUrlInternal(false)
@@ -465,6 +469,7 @@ namespace frm
     OClickableImageBaseModel::OClickableImageBaseModel( const OClickableImageBaseModel* _pOriginal, const Reference<XComponentContext>& _rxFactory )
         :OControlModel( _pOriginal, _rxFactory )
         ,OPropertyChangeListener( m_aMutex )
+        ,m_xGraphicObject( _pOriginal->m_xGraphicObject )
         ,m_pMedium( NULL )
         ,m_pProducer( NULL )
         ,m_bDispatchUrlInternal(false)
@@ -497,6 +502,7 @@ namespace frm
     void OClickableImageBaseModel::implConstruct()
     {
         m_pProducer = new ImageProducer;
+        m_pProducer->SetDoneHdl( LINK( this, OClickableImageBaseModel, OnImageImportDone ) );
         increment( m_refCount );
         {
             m_xProducer = m_pProducer;
@@ -852,6 +858,21 @@ namespace frm
         }
     }
 
+    IMPL_LINK( OClickableImageBaseModel, OnImageImportDone, Graphic*, i_pGraphic )
+    {
+        const Reference< XGraphic > xGraphic( i_pGraphic != NULL ? Graphic(i_pGraphic->GetBitmapEx()).GetXGraphic() : NULL );
+        if ( !xGraphic.is() )
+        {
+            m_xGraphicObject.clear();
+        }
+        else
+        {
+            m_xGraphicObject = css::graphic::GraphicObject::create( m_xContext );
+            m_xGraphicObject->setGraphic( xGraphic );
+        }
+        return 1L;
+    }
+
 
     // OImageProducerThread_Impl
 
diff --git a/forms/source/component/clickableimage.hxx b/forms/source/component/clickableimage.hxx
index 60f03b8..f3d34ca 100644
--- a/forms/source/component/clickableimage.hxx
+++ b/forms/source/component/clickableimage.hxx
@@ -33,6 +33,7 @@
 #include <com/sun/star/form/submission/XSubmission.hpp>
 #include <com/sun/star/frame/XModel.hpp>
 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
+#include <com/sun/star/graphic/XGraphicObject.hpp>
 #include <cppuhelper/implbase3.hxx>
 
 
@@ -64,6 +65,8 @@ namespace frm
 
         // ImageProducer stuff
         ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer>    m_xProducer;
+        // Store the image in a graphic object to make it accesible via graphic cache using graphic ID.
+        ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicObject > m_xGraphicObject;
         SfxMedium*                              m_pMedium;     // Download medium
         ImageProducer*                          m_pProducer;
         bool                                m_bDispatchUrlInternal; // property: is not allowed to set : 1
@@ -143,6 +146,8 @@ namespace frm
 
         // to be called from within the cloning-ctor of your derived class
         void implInitializeImageURL( );
+
+        DECL_LINK( OnImageImportDone, ::Graphic* );
     };
 
     class ImageModelMethodGuard : public ::osl::MutexGuard


More information about the Libreoffice-commits mailing list