summaryrefslogtreecommitdiff
path: root/forms
diff options
context:
space:
mode:
authorZolnai Tamás <zolnaitamas2000@gmail.com>2015-07-12 18:21:35 +0200
committerZolnai Tamás <zolnaitamas2000@gmail.com>2015-07-14 10:36:17 +0200
commit70f152983f3425a77df2f65b4798417640d47b76 (patch)
tree553e855c3912e91b245ac9b73563eb1ff26e5746 /forms
parentc657740b0f6caa5d0c7d54db37aca013d6ac1c8c (diff)
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. Change-Id: If99a3efc4727a07df9d2daaefbdacc9565920005
Diffstat (limited to 'forms')
-rw-r--r--forms/source/component/clickableimage.cxx21
-rw-r--r--forms/source/component/clickableimage.hxx5
2 files changed, 26 insertions, 0 deletions
diff --git a/forms/source/component/clickableimage.cxx b/forms/source/component/clickableimage.cxx
index 90518576a0f0..77c2410f39b4 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 ) );
osl_atomic_increment( &m_refCount );
{
m_xProducer = m_pProducer;
@@ -851,6 +857,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 = 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 5033375d6735..9337b3cbe061 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