1 diff --git svx/source/form/fmundo.cxx svx/source/form/fmundo.cxx
2 index ee1d592..f3b5c3d 100644
3 --- svx/source/form/fmundo.cxx
4 +++ svx/source/form/fmundo.cxx
5 @@ -86,6 +86,90 @@ using namespace ::com::sun::star::reflection;
6 using namespace ::com::sun::star::form::binding;
7 using namespace ::svxform;
10 +#include <com/sun/star/script/XScriptListener.hdl>
11 +#include <comphelper/processfactory.hxx>
12 +#include <cppuhelper/implbase1.hxx>
14 +typedef cppu::WeakImplHelper1< XScriptListener > ScriptEventListener_BASE;
15 +class ScriptEventListenerWrapper : public ScriptEventListener_BASE
18 + ScriptEventListenerWrapper( FmFormModel& _rModel) throw ( RuntimeException ) : pModel(&_rModel)
20 + Reference < XPropertySet > xProps(
21 + ::comphelper::getProcessServiceFactory(), UNO_QUERY );
24 + Reference< XComponentContext > xCtx( xProps->getPropertyValue(
25 + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))), UNO_QUERY );
28 + Reference< XMultiComponentFactory > xMFac(
29 + xCtx->getServiceManager(), UNO_QUERY );
32 + m_vbaListener.set( xMFac->createInstanceWithContext(
33 + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
34 + "ooo.vba.EventListener" ) ), xCtx ),
41 + virtual void SAL_CALL disposing(const EventObject& ) throw( RuntimeException ){}
44 + virtual void SAL_CALL firing(const ScriptEvent& evt) throw(RuntimeException)
47 + if ( m_vbaListener.is() )
49 + m_vbaListener->firing( evt );
53 + virtual Any SAL_CALL approveFiring(const ScriptEvent& evt) throw( com::sun::star::reflection::InvocationTargetException, RuntimeException)
56 + if ( m_vbaListener.is() )
58 + return m_vbaListener->approveFiring( evt );
66 + Reference< XPropertySet > xProps( m_vbaListener, UNO_QUERY );
71 + SfxObjectShellRef xObjSh = pModel->GetObjectShell();
72 + if ( xObjSh.Is() && m_vbaListener.is() )
75 + aVal <<= xObjSh->GetModel();
76 + xProps->setPropertyValue(
77 + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Model" ) ),
81 + catch( Exception& e )
83 + //swallow any errors
87 + FmFormModel* pModel;
88 + Reference< XScriptListener > m_vbaListener;
93 //------------------------------------------------------------------------------
94 // some helper structs for caching property infos
95 //------------------------------------------------------------------------------
96 @@ -128,6 +212,13 @@ FmXUndoEnvironment::FmXUndoEnvironment(FmFormModel& _rModel)
99 DBG_CTOR(FmXUndoEnvironment,NULL);
102 + m_vbaListener = new ScriptEventListenerWrapper( _rModel );
104 + catch( Exception& )
109 //------------------------------------------------------------------------------
110 @@ -752,9 +843,17 @@ void FmXUndoEnvironment::switchListening( const Reference< XIndexContainer >& _r
113 if ( _bStartListening )
115 m_pScriptingEnv->registerEventAttacherManager( xManager );
116 + if ( m_vbaListener.is() )
117 + xManager->addScriptListener( m_vbaListener );
121 m_pScriptingEnv->revokeEventAttacherManager( xManager );
122 + if ( m_vbaListener.is() )
123 + xManager->removeScriptListener( m_vbaListener );
127 // also handle all children of this element