summaryrefslogtreecommitdiff
path: root/scripting
diff options
context:
space:
mode:
authorNoel Power <noel.power@novell.com>2010-10-13 10:51:50 +0100
committerNoel Power <noel.power@novell.com>2010-10-13 10:51:50 +0100
commit606a57481911e111dfab950cd7fb90ae80aed014 (patch)
tree62e85311b32105e6d4e165d60c9d4bbdb80c03bc /scripting
parenta4d7dbf897e41a1afda6c2b6f0e5cc35920a1cf3 (diff)
parented49568618442960781b63c3a47ddc65031b2fa0 (diff)
Merge branch 'vba' fix conflics, trailing ws & tab issues
also removed some old headers ( which I need to add new ones for ) Conflicts: basic/source/classes/sbunoobj.cxx basic/source/classes/sbxmod.cxx xmloff/inc/xmlnmspe.hxx xmloff/inc/xmloff/xmltoken.hxx xmlscript/inc/xmlscript/xmldlg_imexp.hxx
Diffstat (limited to 'scripting')
-rw-r--r--scripting/source/basprov/basprov.cxx77
-rw-r--r--scripting/source/basprov/basscript.cxx90
-rw-r--r--scripting/source/basprov/basscript.hxx39
-rw-r--r--scripting/source/dlgprov/dlgevtatt.cxx32
-rw-r--r--scripting/source/dlgprov/dlgevtatt.hxx2
-rw-r--r--scripting/source/dlgprov/dlgprov.cxx70
-rw-r--r--scripting/source/dlgprov/dlgprov.hxx40
-rw-r--r--scripting/source/vbaevents/eventhelper.cxx483
-rw-r--r--scripting/source/vbaevents/makefile.mk1
-rw-r--r--scripting/source/vbaevents/vbamsformreturntypes.hxx73
10 files changed, 648 insertions, 259 deletions
diff --git a/scripting/source/basprov/basprov.cxx b/scripting/source/basprov/basprov.cxx
index b2cd1018c5..88d38ae487 100644
--- a/scripting/source/basprov/basprov.cxx
+++ b/scripting/source/basprov/basprov.cxx
@@ -1,7 +1,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -149,12 +149,12 @@ namespace basprov
Reference< lang::XMultiComponentFactory > xSMgr( m_xContext->getServiceManager() );
if ( xSMgr.is() )
{
- xUriFac.set( xSMgr->createInstanceWithContext( ::rtl::OUString::createFromAscii(
+ xUriFac.set( xSMgr->createInstanceWithContext( ::rtl::OUString::createFromAscii(
"com.sun.star.uri.UriReferenceFactory" ), m_xContext ), UNO_QUERY );
}
if ( xUriFac.is() )
- {
+ {
::rtl::OUString aLinkURL( xLibContainer->getLibraryLinkURL( rLibName ) );
Reference< uri::XUriReference > xUriRef( xUriFac->parse( aLinkURL ), UNO_QUERY );
@@ -172,10 +172,10 @@ namespace basprov
{
::rtl::OUString aDecodedURL( aAuthority.copy( sizeof ( "vnd.sun.star.expand:" ) - 1 ) );
aDecodedURL = ::rtl::Uri::decode( aDecodedURL, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
- Reference<util::XMacroExpander> xMacroExpander(
- m_xContext->getValueByName(
+ Reference<util::XMacroExpander> xMacroExpander(
+ m_xContext->getValueByName(
::rtl::OUString::createFromAscii( "/singletons/com.sun.star.util.theMacroExpander" ) ),
- UNO_QUERY );
+ UNO_QUERY );
if ( xMacroExpander.is() )
aFileURL = xMacroExpander->expandMacros( aDecodedURL );
}
@@ -194,7 +194,7 @@ namespace basprov
::rtl::OUString aSearchURL1( RTL_CONSTASCII_USTRINGPARAM( "share/basic" ) );
::rtl::OUString aSearchURL2( RTL_CONSTASCII_USTRINGPARAM( "share/uno_packages" ) );
- if( aCanonicalFileURL.indexOf( aSearchURL1 ) != -1 || aCanonicalFileURL.indexOf( aSearchURL2 ) != -1 )
+ if( aCanonicalFileURL.indexOf( aSearchURL1 ) != -1 || aCanonicalFileURL.indexOf( aSearchURL2 ) != -1 )
bIsShared = true;
}
}
@@ -327,7 +327,7 @@ namespace basprov
// XScriptProvider
// -----------------------------------------------------------------------------
- Reference < provider::XScript > BasicProviderImpl::getScript( const ::rtl::OUString& scriptURI )
+ Reference < provider::XScript > BasicProviderImpl::getScript( const ::rtl::OUString& scriptURI )
throw ( provider::ScriptFrameworkErrorException, RuntimeException)
{
// TODO
@@ -347,7 +347,7 @@ namespace basprov
scriptURI, OUSTR("Basic"),
provider::ScriptFrameworkErrorType::UNKNOWN );
}
-
+
Reference< uri::XUriReference > uriRef(
xFac->parse( scriptURI ), UNO_QUERY );
@@ -355,7 +355,7 @@ namespace basprov
if ( !uriRef.is() || !sfUri.is() )
{
- ::rtl::OUString errorMsg = ::rtl::OUString::createFromAscii( "BasicProviderImpl::getScript: failed to parse URI: " );
+ ::rtl::OUString errorMsg = ::rtl::OUString::createFromAscii( "BasicProviderImpl::getScript: failed to parse URI: " );
errorMsg = errorMsg.concat( scriptURI );
throw provider::ScriptFrameworkErrorException(
errorMsg, Reference< XInterface >(),
@@ -363,13 +363,39 @@ namespace basprov
provider::ScriptFrameworkErrorType::MALFORMED_URL );
}
-
+
::rtl::OUString aDescription = sfUri->getName();
- ::rtl::OUString aLocation = sfUri->getParameter(
+ ::rtl::OUString aLocation = sfUri->getParameter(
::rtl::OUString::createFromAscii( "location" ) );
sal_Int32 nIndex = 0;
- ::rtl::OUString aLibrary = aDescription.getToken( 0, (sal_Unicode)'.', nIndex );
+ // In some strange circumstances the Library name can have an
+ // apparantly illegal '.' in it ( in imported VBA )
+
+ BasicManager* pBasicMgr = NULL;
+ if ( aLocation.equals( ::rtl::OUString::createFromAscii("document") ) )
+ {
+ pBasicMgr = m_pDocBasicManager;
+ }
+ else if ( aLocation.equals( ::rtl::OUString::createFromAscii("application") ) )
+ {
+ pBasicMgr = m_pAppBasicManager;
+ }
+ rtl::OUString sProjectName;
+ if ( pBasicMgr )
+ sProjectName = pBasicMgr->GetName();
+
+ ::rtl::OUString aLibrary;
+ if ( sProjectName.getLength() && aDescription.match( sProjectName ) )
+ {
+ OSL_TRACE("LibraryName %s is part of the url %s",
+ rtl::OUStringToOString( sProjectName, RTL_TEXTENCODING_UTF8 ).getStr(),
+ rtl::OUStringToOString( aDescription, RTL_TEXTENCODING_UTF8 ).getStr() );
+ aLibrary = sProjectName;
+ nIndex = sProjectName.getLength() + 1;
+ }
+ else
+ aLibrary = aDescription.getToken( 0, (sal_Unicode)'.', nIndex );
::rtl::OUString aModule;
if ( nIndex != -1 )
aModule = aDescription.getToken( 0, (sal_Unicode)'.', nIndex );
@@ -379,15 +405,6 @@ namespace basprov
if ( aLibrary.getLength() != 0 && aModule.getLength() != 0 && aMethod.getLength() != 0 && aLocation.getLength() != 0 )
{
- BasicManager* pBasicMgr = NULL;
- if ( aLocation.equals( ::rtl::OUString::createFromAscii("document") ) )
- {
- pBasicMgr = m_pDocBasicManager;
- }
- else if ( aLocation.equals( ::rtl::OUString::createFromAscii("application") ) )
- {
- pBasicMgr = m_pAppBasicManager;
- }
if ( pBasicMgr )
{
@@ -465,7 +482,7 @@ namespace basprov
if ( m_bIsAppScriptCtx )
{
- xLibContainer = m_xLibContainerApp;
+ xLibContainer = m_xLibContainerApp;
pBasicManager = m_pAppBasicManager;
}
else
@@ -474,7 +491,7 @@ namespace basprov
pBasicManager = m_pDocBasicManager;
}
- Sequence< Reference< browse::XBrowseNode > > aChildNodes;
+ Sequence< Reference< browse::XBrowseNode > > aChildNodes;
if ( pBasicManager && xLibContainer.is() )
{
@@ -500,7 +517,7 @@ namespace basprov
}
if ( bCreate )
{
- pChildNodes[childsFound++] = static_cast< browse::XBrowseNode* >( new BasicLibraryNodeImpl(
+ pChildNodes[childsFound++] = static_cast< browse::XBrowseNode* >( new BasicLibraryNodeImpl(
m_xContext, m_sScriptingContext, pBasicManager, xLibContainer, pLibNames[i], m_bIsAppScriptCtx ) );
}
}
@@ -522,7 +539,7 @@ namespace basprov
Reference< script::XLibraryContainer > xLibContainer;
if ( m_bIsAppScriptCtx )
{
- xLibContainer = m_xLibContainerApp;
+ xLibContainer = m_xLibContainerApp;
}
else
{
@@ -579,7 +596,7 @@ namespace basprov
extern "C"
{
- SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment(
+ SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment(
const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv )
{
(void)ppEnv;
@@ -587,18 +604,18 @@ extern "C"
*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
}
- SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo(
+ SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo(
lang::XMultiServiceFactory * pServiceManager, registry::XRegistryKey * pRegistryKey )
{
return ::cppu::component_writeInfoHelper(
pServiceManager, pRegistryKey, ::basprov::s_component_entries );
}
- SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
+ SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
const sal_Char * pImplName, lang::XMultiServiceFactory * pServiceManager,
registry::XRegistryKey * pRegistryKey )
{
- return ::cppu::component_getFactoryHelper(
+ return ::cppu::component_getFactoryHelper(
pImplName, pServiceManager, pRegistryKey, ::basprov::s_component_entries );
}
}
diff --git a/scripting/source/basprov/basscript.cxx b/scripting/source/basprov/basscript.cxx
index 620e249362..91daf8dc41 100644
--- a/scripting/source/basprov/basscript.cxx
+++ b/scripting/source/basprov/basscript.cxx
@@ -1,7 +1,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -36,7 +36,10 @@
#include <basic/sbmeth.hxx>
#include <basic/basmgr.hxx>
#include <com/sun/star/script/provider/ScriptFrameworkErrorType.hpp>
-
+#include "bcholder.hxx"
+#include <comphelper/proparrhlp.hxx>
+#include <comphelper/propertycontainer.hxx>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <map>
@@ -45,6 +48,7 @@ using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::script;
using namespace ::com::sun::star::document;
+using namespace ::com::sun::star::beans;
extern ::com::sun::star::uno::Any sbxToUnoValue( SbxVariable* pVar );
extern void unoToSbxValue( SbxVariable* pVar, const ::com::sun::star::uno::Any& aValue );
@@ -54,6 +58,10 @@ extern void unoToSbxValue( SbxVariable* pVar, const ::com::sun::star::uno::Any&
namespace basprov
{
//.........................................................................
+#define BASSCRIPT_PROPERTY_ID_CALLER 1
+#define BASSCRIPT_PROPERTY_CALLER ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Caller" ) )
+
+#define BASSCRIPT_DEFAULT_ATTRIBS() PropertyAttribute::BOUND | PropertyAttribute::TRANSIENT
typedef ::std::map< sal_Int16, Any, ::std::less< sal_Int16 > > OutParamMap;
@@ -64,22 +72,28 @@ namespace basprov
// -----------------------------------------------------------------------------
BasicScriptImpl::BasicScriptImpl( const ::rtl::OUString& funcName, SbMethodRef xMethod )
- :m_xMethod( xMethod )
+ : ::scripting_helper::OBroadcastHelperHolder( m_aMutex )
+ ,OPropertyContainer( GetBroadcastHelper() )
+ ,m_xMethod( xMethod )
,m_funcName( funcName )
,m_documentBasicManager( NULL )
,m_xDocumentScriptContext()
{
+ registerProperty( BASSCRIPT_PROPERTY_CALLER, BASSCRIPT_PROPERTY_ID_CALLER, BASSCRIPT_DEFAULT_ATTRIBS(), &m_caller, ::getCppuType( &m_caller ) );
}
// -----------------------------------------------------------------------------
BasicScriptImpl::BasicScriptImpl( const ::rtl::OUString& funcName, SbMethodRef xMethod,
- BasicManager& documentBasicManager, const Reference< XScriptInvocationContext >& documentScriptContext )
- :m_xMethod( xMethod )
+ BasicManager& documentBasicManager, const Reference< XScriptInvocationContext >& documentScriptContext ) : ::scripting_helper::OBroadcastHelperHolder( m_aMutex )
+ ,OPropertyContainer( GetBroadcastHelper() )
+ ,m_xMethod( xMethod )
,m_funcName( funcName )
,m_documentBasicManager( &documentBasicManager )
,m_xDocumentScriptContext( documentScriptContext )
{
+ //
+ registerProperty( BASSCRIPT_PROPERTY_CALLER, BASSCRIPT_PROPERTY_ID_CALLER, BASSCRIPT_DEFAULT_ATTRIBS(), &m_caller, ::getCppuType( &m_caller ) );
}
// -----------------------------------------------------------------------------
@@ -88,6 +102,48 @@ namespace basprov
}
// -----------------------------------------------------------------------------
+ // XInterface
+ // -----------------------------------------------------------------------------
+
+ IMPLEMENT_FORWARD_XINTERFACE2( BasicScriptImpl, BasicScriptImpl_BASE, OPropertyContainer )
+
+ // -----------------------------------------------------------------------------
+ // XTypeProvider
+ // -----------------------------------------------------------------------------
+
+ IMPLEMENT_FORWARD_XTYPEPROVIDER2( BasicScriptImpl, BasicScriptImpl_BASE, OPropertyContainer )
+
+ // -----------------------------------------------------------------------------
+ // OPropertySetHelper
+ // -----------------------------------------------------------------------------
+
+ ::cppu::IPropertyArrayHelper& BasicScriptImpl::getInfoHelper( )
+ {
+ return *getArrayHelper();
+ }
+
+ // -----------------------------------------------------------------------------
+ // OPropertyArrayUsageHelper
+ // -----------------------------------------------------------------------------
+
+ ::cppu::IPropertyArrayHelper* BasicScriptImpl::createArrayHelper( ) const
+ {
+ Sequence< Property > aProps;
+ describeProperties( aProps );
+ return new ::cppu::OPropertyArrayHelper( aProps );
+ }
+
+ // -----------------------------------------------------------------------------
+ // XPropertySet
+ // -----------------------------------------------------------------------------
+
+ Reference< XPropertySetInfo > BasicScriptImpl::getPropertySetInfo( ) throw (RuntimeException)
+ {
+ Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
+ return xInfo;
+ }
+
+ // -----------------------------------------------------------------------------
// XScript
// -----------------------------------------------------------------------------
@@ -112,7 +168,7 @@ namespace basprov
sal_Int32 nParamsCount = aParams.getLength();
SbxInfo* pInfo = m_xMethod->GetInfo();
if ( pInfo )
- {
+ {
sal_Int32 nSbxOptional = 0;
USHORT n = 1;
for ( const SbxParamInfo* pParamInfo = pInfo->GetParam( n ); pParamInfo; pParamInfo = pInfo->GetParam( ++n ) )
@@ -126,12 +182,12 @@ namespace basprov
if ( nParamsCount < nSbxCount - nSbxOptional )
{
throw provider::ScriptFrameworkErrorException(
- ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
+ ::rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
"wrong number of parameters!" ) ),
- Reference< XInterface >(),
+ Reference< XInterface >(),
m_funcName,
- ::rtl::OUString(
+ ::rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM( "Basic" ) ),
provider::ScriptFrameworkErrorType::NO_SUCH_SCRIPT );
}
@@ -166,8 +222,14 @@ namespace basprov
if ( m_documentBasicManager && m_xDocumentScriptContext.is() )
aOldThisComponent = m_documentBasicManager->SetGlobalUNOConstant( "ThisComponent", makeAny( m_xDocumentScriptContext ) );
+ if ( m_caller.getLength() && m_caller[ 0 ].hasValue() )
+ {
+ SbxVariableRef xCallerVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( static_cast< SbxVariable* >( xCallerVar ), m_caller[ 0 ] );
+ nErr = m_xMethod->Call( xReturn, xCallerVar );
+ }
+ else
nErr = m_xMethod->Call( xReturn );
-
if ( m_documentBasicManager && m_xDocumentScriptContext.is() )
m_documentBasicManager->SetGlobalUNOConstant( "ThisComponent", aOldThisComponent );
}
@@ -181,8 +243,8 @@ namespace basprov
{
SbxInfo* pInfo_ = m_xMethod->GetInfo();
if ( pInfo_ )
- {
- OutParamMap aOutParamMap;
+ {
+ OutParamMap aOutParamMap;
for ( USHORT n = 1, nCount = xSbxParams->Count(); n < nCount; ++n )
{
const SbxParamInfo* pParamInfo = pInfo_->GetParam( n );
@@ -216,7 +278,7 @@ namespace basprov
m_xMethod->SetParameters( NULL );
}
- return aReturn;
+ return aReturn;
}
// -----------------------------------------------------------------------------
diff --git a/scripting/source/basprov/basscript.hxx b/scripting/source/basprov/basscript.hxx
index a524c186b2..a140187ca7 100644
--- a/scripting/source/basprov/basscript.hxx
+++ b/scripting/source/basprov/basscript.hxx
@@ -1,7 +1,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -28,12 +28,14 @@
#ifndef SCRIPTING_BASSCRIPT_HXX
#define SCRIPTING_BASSCRIPT_HXX
+#include "bcholder.hxx"
#include <com/sun/star/script/provider/XScript.hpp>
#include <com/sun/star/document/XScriptInvocationContext.hpp>
#include <cppuhelper/implbase1.hxx>
+#include <comphelper/proparrhlp.hxx>
+#include <comphelper/propertycontainer.hxx>
#include <basic/sbmeth.hxx>
-
class BasicManager;
//.........................................................................
@@ -45,11 +47,15 @@ namespace basprov
// class BasicScriptImpl
// ----------------------------------------------------
- typedef ::cppu::WeakImplHelper1<
+ typedef ::cppu::WeakImplHelper1<
::com::sun::star::script::provider::XScript > BasicScriptImpl_BASE;
- class BasicScriptImpl : public BasicScriptImpl_BASE
+ class BasicScriptImpl : public BasicScriptImpl_BASE,
+ public ::scripting_helper::OMutexHolder,
+ public ::scripting_helper::OBroadcastHelperHolder,
+ public ::comphelper::OPropertyContainer,
+ public ::comphelper::OPropertyArrayUsageHelper< BasicScriptImpl >
{
private:
SbMethodRef m_xMethod;
@@ -57,6 +63,16 @@ namespace basprov
BasicManager* m_documentBasicManager;
::com::sun::star::uno::Reference< ::com::sun::star::document::XScriptInvocationContext >
m_xDocumentScriptContext;
+ // hack, OPropertyContainer doesn't allow you to define a property of unknown
+ // type ( I guess because an Any can't contain an Any... I've always wondered why?
+ // as its not unusual to do that in corba )
+ ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > m_caller;
+ protected:
+ // OPropertySetHelper
+ virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper( );
+
+ // OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const;
public:
BasicScriptImpl(
@@ -71,15 +87,24 @@ namespace basprov
);
virtual ~BasicScriptImpl();
+ // XInterface
+ DECLARE_XINTERFACE()
+
+ // XTypeProvider
+ DECLARE_XTYPEPROVIDER()
+
// XScript
virtual ::com::sun::star::uno::Any SAL_CALL invoke(
const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aParams,
::com::sun::star::uno::Sequence< sal_Int16 >& aOutParamIndex,
::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aOutParam )
- throw (
- ::com::sun::star::script::provider::ScriptFrameworkErrorException,
+ throw (
+ ::com::sun::star::script::provider::ScriptFrameworkErrorException,
::com::sun::star::reflection::InvocationTargetException,
- ::com::sun::star::uno::RuntimeException );
+ ::com::sun::star::uno::RuntimeException );
+ // XPropertySet
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( )
+ throw (::com::sun::star::uno::RuntimeException);
};
//.........................................................................
diff --git a/scripting/source/dlgprov/dlgevtatt.cxx b/scripting/source/dlgprov/dlgevtatt.cxx
index 11a101454e..8515ca3284 100644
--- a/scripting/source/dlgprov/dlgevtatt.cxx
+++ b/scripting/source/dlgprov/dlgevtatt.cxx
@@ -1,7 +1,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -108,13 +108,14 @@ namespace dlgprov
{
protected:
rtl::OUString msDialogCodeName;
+ rtl::OUString msDialogLibName;
Reference< script::XScriptListener > mxListener;
virtual void firing_impl( const script::ScriptEvent& aScriptEvent, uno::Any* pRet );
public:
- DialogVBAScriptListenerImpl( const Reference< XComponentContext >& rxContext, const Reference< awt::XControl >& rxControl, const Reference< frame::XModel >& xModel );
+ DialogVBAScriptListenerImpl( const Reference< XComponentContext >& rxContext, const Reference< awt::XControl >& rxControl, const Reference< frame::XModel >& xModel, const rtl::OUString& sDialogLibName );
};
- DialogVBAScriptListenerImpl::DialogVBAScriptListenerImpl( const Reference< XComponentContext >& rxContext, const Reference< awt::XControl >& rxControl, const Reference< frame::XModel >& xModel ) : DialogScriptListenerImpl( rxContext )
+ DialogVBAScriptListenerImpl::DialogVBAScriptListenerImpl( const Reference< XComponentContext >& rxContext, const Reference< awt::XControl >& rxControl, const Reference< frame::XModel >& xModel, const rtl::OUString& sDialogLibName ) : DialogScriptListenerImpl( rxContext ), msDialogLibName( sDialogLibName )
{
Reference< XMultiComponentFactory > xSMgr( m_xContext->getServiceManager() );
Sequence< Any > args(1);
@@ -131,7 +132,7 @@ namespace dlgprov
xProps->getPropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name") ) ) >>= msDialogCodeName;
xProps.set( mxListener, UNO_QUERY_THROW );
xProps->setPropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Model") ), args[ 0 ] );
- }
+ }
catch( const Exception& )
{
DBG_UNHANDLED_EXCEPTION();
@@ -145,7 +146,7 @@ namespace dlgprov
if ( aScriptEvent.ScriptType.equals( rtl::OUString::createFromAscii("VBAInterop") ) && mxListener.is() )
{
ScriptEvent aScriptEventCopy( aScriptEvent );
- aScriptEventCopy.ScriptCode = msDialogCodeName;
+ aScriptEventCopy.ScriptCode = msDialogLibName.concat( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "." ) ) ).concat( msDialogCodeName );
try
{
mxListener->firing( aScriptEventCopy );
@@ -163,7 +164,7 @@ namespace dlgprov
// DialogEventsAttacherImpl
// =============================================================================
- DialogEventsAttacherImpl::DialogEventsAttacherImpl( const Reference< XComponentContext >& rxContext, const Reference< frame::XModel >& rxModel, const Reference< awt::XControl >& rxControl, const Reference< XInterface >& rxHandler, const Reference< beans::XIntrospectionAccess >& rxIntrospect, bool bProviderMode, const Reference< script::XScriptListener >& rxRTLListener )
+ DialogEventsAttacherImpl::DialogEventsAttacherImpl( const Reference< XComponentContext >& rxContext, const Reference< frame::XModel >& rxModel, const Reference< awt::XControl >& rxControl, const Reference< XInterface >& rxHandler, const Reference< beans::XIntrospectionAccess >& rxIntrospect, bool bProviderMode, const Reference< script::XScriptListener >& rxRTLListener, const rtl::OUString& sDialogLibName )
:mbUseFakeVBAEvents( false ), m_xContext( rxContext )
{
// key listeners by protocol when ScriptType = 'Script'
@@ -186,11 +187,11 @@ namespace dlgprov
{
pFoundShell = reinterpret_cast<SfxObjectShell*>( xObjShellTunnel->getSomething(SfxObjectShell::getUnoTunnelId()));
if ( pFoundShell )
- mbUseFakeVBAEvents = ooo::vba::isAlienExcelDoc( *pFoundShell );
+ mbUseFakeVBAEvents = ooo::vba::isAlienExcelDoc( *pFoundShell ) || ooo::vba::isAlienWordDoc( *pFoundShell ) ;
}
}
if ( mbUseFakeVBAEvents )
- listernersForTypes[ rtl::OUString::createFromAscii("VBAInterop") ] = new DialogVBAScriptListenerImpl( rxContext, rxControl, rxModel );
+ listernersForTypes[ rtl::OUString::createFromAscii("VBAInterop") ] = new DialogVBAScriptListenerImpl( rxContext, rxControl, rxModel, sDialogLibName );
}
// -----------------------------------------------------------------------------
@@ -217,6 +218,7 @@ namespace dlgprov
Reference< ooo::vba::XVBAToOOEventDescGen > xVBAToOOEvtDesc( xSMgr->createInstanceWithContext( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBAToOOEventDesc" ) ), m_xContext ), UNO_QUERY );
if ( xVBAToOOEvtDesc.is() )
xEventsSupplier.set( xVBAToOOEvtDesc->getEventSupplier( xControl, sControlName ), UNO_QUERY );
+
}
return xEventsSupplier;
}
@@ -321,18 +323,18 @@ namespace dlgprov
// go over all objects
const Reference< XInterface >* pObjects = Objects.getConstArray();
sal_Int32 nObjCount = Objects.getLength();
- Reference< awt::XControl > xDlgControl( Objects[ nObjCount - 1 ], uno::UNO_QUERY ); // last object is the dialog
+ Reference< awt::XControl > xDlgControl( Objects[ nObjCount - 1 ], uno::UNO_QUERY ); // last object is the dialog
rtl::OUString sDialogCodeName;
if ( xDlgControl.is() )
{
Reference< XPropertySet > xProps( xDlgControl->getModel(), UNO_QUERY );
try
{
- xProps->getPropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name") ) ) >>= sDialogCodeName;
+ xProps->getPropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name") ) ) >>= sDialogCodeName;
}
catch( Exception& ){}
}
-
+
for ( sal_Int32 i = 0; i < nObjCount; ++i )
{
// We know that we have to do with instances of XControl.
@@ -409,7 +411,7 @@ namespace dlgprov
void DialogAllListenerImpl::firing( const AllEventObject& Event ) throw ( RuntimeException )
{
- ::osl::MutexGuard aGuard( getMutex() );
+ //::osl::MutexGuard aGuard( getMutex() );
firing_impl( Event, NULL );
}
@@ -419,7 +421,7 @@ namespace dlgprov
Any DialogAllListenerImpl::approveFiring( const AllEventObject& Event )
throw ( reflection::InvocationTargetException, RuntimeException )
{
- ::osl::MutexGuard aGuard( getMutex() );
+ //::osl::MutexGuard aGuard( getMutex() );
Any aReturn;
firing_impl( Event, &aReturn );
@@ -655,7 +657,7 @@ namespace dlgprov
void DialogScriptListenerImpl::firing( const ScriptEvent& aScriptEvent ) throw ( RuntimeException )
{
- ::osl::MutexGuard aGuard( getMutex() );
+ //::osl::MutexGuard aGuard( getMutex() );
firing_impl( aScriptEvent, NULL );
}
@@ -665,7 +667,7 @@ namespace dlgprov
Any DialogScriptListenerImpl::approveFiring( const ScriptEvent& aScriptEvent )
throw ( reflection::InvocationTargetException, RuntimeException )
{
- ::osl::MutexGuard aGuard( getMutex() );
+ //::osl::MutexGuard aGuard( getMutex() );
Any aReturn;
firing_impl( aScriptEvent, &aReturn );
diff --git a/scripting/source/dlgprov/dlgevtatt.hxx b/scripting/source/dlgprov/dlgevtatt.hxx
index 428b938933..0868465df2 100644
--- a/scripting/source/dlgprov/dlgevtatt.hxx
+++ b/scripting/source/dlgprov/dlgevtatt.hxx
@@ -76,7 +76,7 @@ namespace dlgprov
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xHandler,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XIntrospectionAccess >& xIntrospect,
bool bProviderMode,
- const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >& xRTLListener );
+ const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >& xRTLListener ,const rtl::OUString& sDialogLibName );
virtual ~DialogEventsAttacherImpl();
// XScriptEventsAttacher
diff --git a/scripting/source/dlgprov/dlgprov.cxx b/scripting/source/dlgprov/dlgprov.cxx
index e9e12993c4..7926ba0382 100644
--- a/scripting/source/dlgprov/dlgprov.cxx
+++ b/scripting/source/dlgprov/dlgprov.cxx
@@ -1,7 +1,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -164,7 +164,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
Reference< resource::XStringResourceResolver >
xStringResourceResolver = xStringResourceSupplier->getStringResource();
- xStringResourceManager =
+ xStringResourceManager =
Reference< resource::XStringResourceManager >( xStringResourceResolver, UNO_QUERY );
}
}
@@ -178,8 +178,8 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
return xControlModel;
}
- Reference< container::XNameContainer > DialogProviderImpl::createDialogModel(
- const Reference< io::XInputStream >& xInput,
+ Reference< container::XNameContainer > DialogProviderImpl::createDialogModel(
+ const Reference< io::XInputStream >& xInput,
const Reference< resource::XStringResourceManager >& xStringResourceManager,
const Any &aDialogSourceURL) throw ( Exception )
{
@@ -189,7 +189,15 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
Reference< beans::XPropertySet > xDlgPropSet( xDialogModel, UNO_QUERY );
xDlgPropSet->setPropertyValue( aDlgSrcUrlPropName, aDialogSourceURL );
- ::xmlscript::importDialogModel( xInput, xDialogModel, m_xContext );
+ // #TODO we really need to detect the source of the Dialog, is it
+ // located in the document or not. m_xModel need not be the location of
+ // the dialog. E.g. if the dialog was created from basic ( then we just
+ // can't tell where its from )
+ // If we are happy to always substitute the form model for the awt
+ // one then maybe the presence of a document model is enough to trigger
+ // swapping out the models ( or perhaps we only want to do this
+ // for vba mode ) there are a number of feasible and valid possibilities
+ ::xmlscript::importDialogModel( xInput, xDialogModel, m_xContext, m_xModel );
// Set resource property
if( xStringResourceManager.is() )
{
@@ -198,17 +206,17 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
aStringResourceManagerAny <<= xStringResourceManager;
xDlgPSet->setPropertyValue( aResourceResolverPropName, aStringResourceManagerAny );
}
-
- return xDialogModel;
+
+ return xDialogModel;
}
Reference< XControlModel > DialogProviderImpl::createDialogModelForBasic() throw ( Exception )
{
- if ( !m_BasicInfo.get() )
- // shouln't get here
+ if ( !m_BasicInfo.get() )
+ // shouln't get here
throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("No information to create dialog" ) ), Reference< XInterface >() );
Reference< resource::XStringResourceManager > xStringResourceManager = getStringResourceFromDialogLibrary( m_BasicInfo->mxDlgLib );
-
+
rtl::OUString aURL(RTL_CONSTASCII_USTRINGPARAM("" ));
Any aDialogSourceURL;
aDialogSourceURL <<= aURL;
@@ -225,7 +233,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
// TODO: use URL parsing class
// TODO: decoding of location
Reference< XMultiComponentFactory > xSMgr( m_xContext->getServiceManager(), UNO_QUERY );
-
+
if ( !xSMgr.is() )
{
throw RuntimeException(
@@ -244,7 +252,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
Reference< XInterface >() );
}
- // i75778: Support non-script URLs
+ // i75778: Support non-script URLs
Reference< io::XInputStream > xInput;
Reference< container::XNameContainer > xDialogLib;
@@ -294,7 +302,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
else
{
::rtl::OUString sDescription = sfUri->getName();
-
+
sal_Int32 nIndex = 0;
::rtl::OUString sLibName = sDescription.getToken( 0, (sal_Unicode)'.', nIndex );
@@ -403,6 +411,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
if ( xISP.is() )
xInput = xISP->createInputStream();
+ msDialogLibName = sLibName;
}
// import dialog model
@@ -432,7 +441,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
Reference< XMultiComponentFactory > xSMgr_( m_xContext->getServiceManager(), UNO_QUERY_THROW );
// TODO: Ctor
xStringResourceManager = Reference< resource::XStringResourceManager >( xSMgr_->createInstanceWithContext
- ( ::rtl::OUString::createFromAscii( "com.sun.star.resource.StringResourceWithLocation" ),
+ ( ::rtl::OUString::createFromAscii( "com.sun.star.resource.StringResourceWithLocation" ),
m_xContext ), UNO_QUERY );
if( xStringResourceManager.is() )
{
@@ -448,7 +457,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
Any aDialogSourceURLAny;
aDialogSourceURLAny <<= aURL;
-
+
Reference< container::XNameContainer > xDialogModel( createDialogModel( xInput , xStringResourceManager, aDialogSourceURLAny ), UNO_QUERY_THROW);
xCtrlModel = Reference< XControlModel >( xDialogModel, UNO_QUERY );
@@ -503,7 +512,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
}
// create a peer
- Reference< XToolkit> xToolkit( xSMgr->createInstanceWithContext(
+ Reference< XToolkit> xToolkit( xSMgr->createInstanceWithContext(
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.Toolkit" ) ), m_xContext ), UNO_QUERY );
if ( xToolkit.is() )
xDialogControl->createPeer( xToolkit, xPeer );
@@ -516,11 +525,11 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
// -----------------------------------------------------------------------------
- void DialogProviderImpl::attachControlEvents(
+ void DialogProviderImpl::attachControlEvents(
const Reference< XControl >& rxControl,
const Reference< XInterface >& rxHandler,
const Reference< XIntrospectionAccess >& rxIntrospectionAccess,
- bool bDialogProviderMode )
+ bool bDialogProviderMode, const rtl::OUString& sDialogLibName )
{
if ( rxControl.is() )
{
@@ -543,8 +552,8 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
pObjects[nControlCount] = Reference< XInterface >( rxControl, UNO_QUERY );
Reference< XScriptEventsAttacher > xScriptEventsAttacher = new DialogEventsAttacherImpl
- ( m_xContext, m_xModel, rxControl, rxHandler, rxIntrospectionAccess,
- bDialogProviderMode, ( m_BasicInfo.get() ? m_BasicInfo->mxBasicRTLListener : NULL ) );
+ ( m_xContext, m_xModel, rxControl, rxHandler, rxIntrospectionAccess,
+ bDialogProviderMode, ( m_BasicInfo.get() ? m_BasicInfo->mxBasicRTLListener : NULL ), msDialogLibName );
Any aHelper;
xScriptEventsAttacher->attachEvents( aObjects, Reference< XScriptListener >(), aHelper );
@@ -649,7 +658,10 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
aArguments[0] >>= m_xModel;
m_BasicInfo.reset( new BasicRTLParams() );
m_BasicInfo->mxInput.set( aArguments[ 1 ], UNO_QUERY_THROW );
- m_BasicInfo->mxDlgLib.set( aArguments[ 2 ], UNO_QUERY_THROW );
+ // allow null mxDlgLib, a document dialog instantiated from
+ // from application basic is unable to provide ( or find ) it's
+ // Library
+ aArguments[ 2 ] >>= m_BasicInfo->mxDlgLib;
// leave the possibility to optionally allow the old dialog creation
// to use the new XScriptListener ( which converts the old style macro
// to a SF url )
@@ -733,7 +745,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
{
//xDialog = Reference< XDialog >( xCtrl, UNO_QUERY );
Reference< XIntrospectionAccess > xIntrospectionAccess = inspectHandler( xHandler );
- attachControlEvents( xCtrl, xHandler, xIntrospectionAccess, bDialogProviderMode );
+ attachControlEvents( xCtrl, xHandler, xIntrospectionAccess, bDialogProviderMode, msDialogLibName );
}
}
@@ -791,9 +803,9 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
return xDialog;
}
- Reference< XWindow > DialogProviderImpl::createContainerWindow(
- const ::rtl::OUString& URL, const ::rtl::OUString& WindowType,
- const Reference< XWindowPeer >& xParent, const Reference< XInterface >& xHandler )
+ Reference< XWindow > DialogProviderImpl::createContainerWindow(
+ const ::rtl::OUString& URL, const ::rtl::OUString& WindowType,
+ const Reference< XWindowPeer >& xParent, const Reference< XInterface >& xHandler )
throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
{
(void)WindowType; // for future use
@@ -845,7 +857,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
extern "C"
{
- void SAL_CALL component_getImplementationEnvironment(
+ void SAL_CALL component_getImplementationEnvironment(
const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv )
{
(void)ppEnv;
@@ -853,18 +865,18 @@ extern "C"
*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
}
- sal_Bool SAL_CALL component_writeInfo(
+ sal_Bool SAL_CALL component_writeInfo(
lang::XMultiServiceFactory * pServiceManager, registry::XRegistryKey * pRegistryKey )
{
return ::cppu::component_writeInfoHelper(
pServiceManager, pRegistryKey, ::dlgprov::s_component_entries );
}
- void * SAL_CALL component_getFactory(
+ void * SAL_CALL component_getFactory(
const sal_Char * pImplName, lang::XMultiServiceFactory * pServiceManager,
registry::XRegistryKey * pRegistryKey )
{
- return ::cppu::component_getFactoryHelper(
+ return ::cppu::component_getFactoryHelper(
pImplName, pServiceManager, pRegistryKey, ::dlgprov::s_component_entries );
}
}
diff --git a/scripting/source/dlgprov/dlgprov.hxx b/scripting/source/dlgprov/dlgprov.hxx
index 82faef2f86..f064e79c80 100644
--- a/scripting/source/dlgprov/dlgprov.hxx
+++ b/scripting/source/dlgprov/dlgprov.hxx
@@ -1,7 +1,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -62,7 +62,7 @@ namespace dlgprov
// class DialogProviderImpl
// =============================================================================
- typedef ::cppu::WeakImplHelper4<
+ typedef ::cppu::WeakImplHelper4<
::com::sun::star::lang::XServiceInfo,
::com::sun::star::lang::XInitialization,
::com::sun::star::awt::XDialogProvider2,
@@ -81,30 +81,30 @@ namespace dlgprov
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > m_xModel;
-
+ rtl::OUString msDialogLibName;
::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > createDialogModel( const ::rtl::OUString& sURL );
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > createDialogControl(
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > createDialogControl(
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& rxDialogModel,
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& xParent );
void attachControlEvents( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& rxControlContainer,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxHandler,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XIntrospectionAccess >& rxIntrospectionAccess,
- bool bDialogProviderMode );
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XIntrospectionAccess > inspectHandler(
+ bool bDialogProviderMode, const rtl::OUString& );
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XIntrospectionAccess > inspectHandler(
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxHandler );
// helper methods
::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createControlModel() throw ( ::com::sun::star::uno::Exception );
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createDialogModel(
- const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInput,
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createDialogModel(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInput,
const ::com::sun::star::uno::Reference< ::com::sun::star::resource::XStringResourceManager >& xStringResourceManager,
const ::com::sun::star::uno::Any &aDialogSourceURL) throw ( ::com::sun::star::uno::Exception );
::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > createDialogModelForBasic() throw ( ::com::sun::star::uno::Exception );
// XDialogProvider / XDialogProvider2 impl method
virtual ::com::sun::star::uno::Reference < ::com::sun::star::awt::XControl > SAL_CALL createDialogImpl(
- const ::rtl::OUString& URL,
+ const ::rtl::OUString& URL,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xHandler,
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& xParent,
bool bDialogProviderMode )
@@ -116,37 +116,37 @@ namespace dlgprov
virtual ~DialogProviderImpl();
// XServiceInfo
- virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
throw (::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( )
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( )
throw (::com::sun::star::uno::RuntimeException);
// XInitialization
- virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
+ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
// XDialogProvider
- virtual ::com::sun::star::uno::Reference < ::com::sun::star::awt::XDialog > SAL_CALL createDialog(
+ virtual ::com::sun::star::uno::Reference < ::com::sun::star::awt::XDialog > SAL_CALL createDialog(
const ::rtl::OUString& URL )
throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
// XDialogProvider2
virtual ::com::sun::star::uno::Reference < ::com::sun::star::awt::XDialog > SAL_CALL createDialogWithHandler(
- const ::rtl::OUString& URL,
+ const ::rtl::OUString& URL,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xHandler )
throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference < ::com::sun::star::awt::XDialog > SAL_CALL createDialogWithArguments(
- const ::rtl::OUString& URL,
+ const ::rtl::OUString& URL,
const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& Arguments )
throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL createContainerWindow(
- const ::rtl::OUString& URL, const ::rtl::OUString& WindowType,
- const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& xParent,
- const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xHandler )
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL createContainerWindow(
+ const ::rtl::OUString& URL, const ::rtl::OUString& WindowType,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& xParent,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xHandler )
throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
};
diff --git a/scripting/source/vbaevents/eventhelper.cxx b/scripting/source/vbaevents/eventhelper.cxx
index 6975fba08e..7e8155fa78 100644
--- a/scripting/source/vbaevents/eventhelper.cxx
+++ b/scripting/source/vbaevents/eventhelper.cxx
@@ -1,7 +1,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -46,12 +46,17 @@
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/util/XCloseListener.hpp>
+#include <com/sun/star/util/XCloseBroadcaster.hpp>
+
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/script/XLibraryContainer.hpp>
#include <com/sun/star/script/ScriptEventDescriptor.hpp>
#include <com/sun/star/script/provider/XScriptProviderSupplier.hpp>
+#include <com/sun/star/container/XNamed.hpp>
+
#include <com/sun/star/drawing/XControlShape.hpp>
#include <com/sun/star/awt/XControl.hpp>
@@ -62,8 +67,9 @@
#include <com/sun/star/awt/XTextComponent.hpp> //liuchen 2009-6-5
#include <com/sun/star/awt/XComboBox.hpp> //liuchen 2009-6-18
#include <com/sun/star/awt/XRadioButton.hpp> //liuchen 2009-7-30
+#include <com/sun/star/awt/XListBox.hpp>
-#include <msforms/ReturnInteger.hpp>
+#include "vbamsformreturntypes.hxx"
#include <sfx2/objsh.hxx>
#include <basic/sbstar.hxx>
@@ -71,6 +77,7 @@
#include <basic/sbmeth.hxx>
#include <basic/sbmod.hxx>
#include <basic/sbx.hxx>
+#include <filter/msfilter/msvbahelper.hxx>
@@ -82,12 +89,21 @@
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
#include <com/sun/star/script/XScriptListener.hpp>
#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/implbase3.hxx>
#include <cppuhelper/implbase2.hxx>
#include <comphelper/evtmethodhelper.hxx>
#include <set>
#include <list>
#include <hash_map>
+#define ASYNC 0
+
+// primitive support for asynchronous handling of
+// events from controls ( all event will be processed asynchronously
+// in the application thread )
+#if ASYNC
+#include <vcl/svapp.hxx>
+#endif
using namespace ::com::sun::star;
using namespace ::com::sun::star::script;
@@ -97,7 +113,7 @@ using namespace ::ooo::vba;
#define MAP_CHAR_LEN(x) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(x))//liuchen 2009-6-8
#define GET_TYPE(x) ::getCppuType((uno::Reference< x > *)0);
-// Some constants
+// Some constants
const static rtl::OUString DELIM = rtl::OUString::createFromAscii( "::" );
const static sal_Int32 DELIMLEN = DELIM.getLength();
@@ -107,12 +123,12 @@ void dumpListeners( const Reference< beans::XIntrospection >& xIntrospection, co
Reference< beans::XIntrospectionAccess > xIntrospectionAccess;
if ( xIntrospection.is() )
{
- xIntrospectionAccess = xIntrospection->inspect(
+ xIntrospectionAccess = xIntrospection->inspect(
makeAny( xIfc ) );
- Sequence< Type > aControlListeners =
+ Sequence< Type > aControlListeners =
xIntrospectionAccess->getSupportedListeners();
sal_Int32 nLength = aControlListeners.getLength();
-
+
for ( sal_Int32 i = 0; i< nLength; ++i )
{
Type& listType = aControlListeners[ i ];
@@ -121,51 +137,51 @@ void dumpListeners( const Reference< beans::XIntrospection >& xIntrospection, co
sal_Int32 lastDotIndex = -1;
if ( ( lastDotIndex = sFullTypeName.lastIndexOf( '.' ) ) > -1 )
{
- sTypeName = sFullTypeName.copy( lastDotIndex + 1 );
- }
- Sequence< ::rtl::OUString > sMeths = comphelper::getEventMethodsForType( listType );
+ sTypeName = sFullTypeName.copy( lastDotIndex + 1 );
+ }
+ Sequence< ::rtl::OUString > sMeths = comphelper::getEventMethodsForType( listType );
sal_Int32 sMethLen = sMeths.getLength();
for ( sal_Int32 j=0 ; j < sMethLen; ++j )
{
OSL_TRACE("**Listener [%d] Type[%s] Method[%s]",j,
- rtl::OUStringToOString( sTypeName,
+ rtl::OUStringToOString( sTypeName,
RTL_TEXTENCODING_UTF8 ).getStr(),
- rtl::OUStringToOString( sMeths[ j ],
+ rtl::OUStringToOString( sMeths[ j ],
RTL_TEXTENCODING_UTF8 ).getStr() );
}
}
-
+
}
}
void dumpEvent( const ScriptEvent& evt )
{
OSL_TRACE("dumpEvent: Source %s",
- rtl::OUStringToOString( comphelper::anyToString( makeAny(evt.Source)),
+ rtl::OUStringToOString( comphelper::anyToString( makeAny(evt.Source)),
RTL_TEXTENCODING_UTF8 ).getStr() );
OSL_TRACE("dumpEvent: ScriptType %s",
- rtl::OUStringToOString( evt.ScriptType,
+ rtl::OUStringToOString( evt.ScriptType,
RTL_TEXTENCODING_UTF8 ).getStr() );
-
+
OSL_TRACE("dumpEvent: ScriptCode %s",
- rtl::OUStringToOString( evt.ScriptCode,
+ rtl::OUStringToOString( evt.ScriptCode,
RTL_TEXTENCODING_UTF8 ).getStr() );
OSL_TRACE("dumpEvent: ListenerType %s",
- rtl::OUStringToOString( evt.ListenerType.getTypeName(),
+ rtl::OUStringToOString( evt.ListenerType.getTypeName(),
RTL_TEXTENCODING_UTF8 ).getStr() );
-
+
OSL_TRACE("dumpEvent: Listener methodname %s",
- rtl::OUStringToOString( evt.MethodName,
+ rtl::OUStringToOString( evt.MethodName,
RTL_TEXTENCODING_UTF8 ).getStr() );
OSL_TRACE("dumpEvent: arguments;");
sal_Int32 nLen = evt.Arguments.getLength();
for ( sal_Int32 index=0; index < nLen; ++index )
{
- OSL_TRACE("\t [%d] %s", index,
- rtl::OUStringToOString( comphelper::anyToString( evt.Arguments[ index ] ),
+ OSL_TRACE("\t [%d] %s", index,
+ rtl::OUStringToOString( comphelper::anyToString( evt.Arguments[ index ] ),
RTL_TEXTENCODING_UTF8 ).getStr() );
}
@@ -189,14 +205,22 @@ bool isMouseEventOk( awt::MouseEvent& evt, const Sequence< Any >& params )
return true;
}
+bool isFocusEventOk( awt::FocusEvent& evt, const Sequence< Any >& params )
+{
+ if ( !( params.getLength() > 0 ) ||
+ !( params[ 0 ] >>= evt ) )
+ return false;
+ return true;
+}
+
Sequence< Any > ooMouseEvtToVBADblClick( const Sequence< Any >& params )
{
Sequence< Any > translatedParams;
awt::MouseEvent evt;
- if ( !( isMouseEventOk(evt, params)) ||
+ if ( !( isMouseEventOk(evt, params)) ||
(evt.ClickCount != 2) )
- return Sequence< Any >();
+ return Sequence< Any >();
// give back orig params, this will signal that the event is good
return params;
}
@@ -207,7 +231,7 @@ Sequence< Any > ooMouseEvtToVBAMouseEvt( const Sequence< Any >& params )
awt::MouseEvent evt;
if ( !isMouseEventOk(evt, params) )
- return Sequence< Any >();
+ return Sequence< Any >();
translatedParams.realloc(4);
@@ -228,13 +252,18 @@ Sequence< Any > ooKeyPressedToVBAKeyPressed( const Sequence< Any >& params )
awt::KeyEvent evt;
if ( !isKeyEventOk( evt, params ) )
- return Sequence< Any >();
+ return Sequence< Any >();
translatedParams.realloc(1);
- msforms::ReturnInteger keyCode;
- keyCode.Value = evt.KeyCode;
- translatedParams[0] <<= keyCode;
+ //The VBA events such as ComboBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) may cause an error because
+ //the original input parameter data structure -- msforms::ReturnInteger -- is a struct, it cannot support default value.
+ //So the newly defined VbaReturnIntege class is used here to support default value.
+ VbaReturnInteger* pKeyCode = new VbaReturnInteger();
+ pKeyCode->Value = evt.KeyChar;
+ ::uno::Reference< msforms::XReturnInteger > xInteger =
+ static_cast< ::uno::Reference< msforms::XReturnInteger > > (pKeyCode);
+ translatedParams[0] <<= xInteger;
return translatedParams;
}
@@ -244,35 +273,57 @@ Sequence< Any > ooKeyPressedToVBAKeyUpDown( const Sequence< Any >& params )
awt::KeyEvent evt;
if ( !isKeyEventOk( evt, params ) )
- return Sequence< Any >();
+ return Sequence< Any >();
translatedParams.realloc(2);
- msforms::ReturnInteger keyCode;
- sal_Int8 shift = sal::static_int_cast<sal_Int8>( evt.Modifiers );
+ //The VBA events such as ComboBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) may cause an error because
+ //the original input parameter data structure -- msforms::ReturnInteger -- is a struct, it cannot support default value.
+ //So the newly defined VbaReturnIntege class is used here to support default value.
+ VbaReturnInteger* pKeyCode = new VbaReturnInteger();
+ sal_Int8 shift = evt.Modifiers;
- // #TODO check whether values from OOO conform to values generated from vba
- keyCode.Value = evt.KeyCode;
- translatedParams[0] <<= keyCode;
+ pKeyCode->Value = evt.KeyChar;
+ ::uno::Reference< msforms::XReturnInteger > xInteger = static_cast< ::uno::Reference< msforms::XReturnInteger > > (pKeyCode);
+ translatedParams[0] <<= xInteger;
translatedParams[1] <<= shift;
return translatedParams;
}
+Sequence< Any > ooFocusLostToVBAExit( const Sequence< Any >& params )
+{
+ Sequence< Any > translatedParams;
+ awt::FocusEvent evt;
+
+ if ( !isFocusEventOk( evt, params ) )
+ return Sequence< Any >();
+
+ translatedParams.realloc(1);
+
+ VbaReturnBoolean* pCancel = new VbaReturnBoolean();
+
+ ::uno::Reference< msforms::XReturnBoolean > xBoolean=
+ static_cast< ::uno::Reference< msforms::XReturnBoolean > > (pCancel);
+ translatedParams[0] <<= xBoolean;
+ return translatedParams;
+}
+
+
typedef Sequence< Any > (*Translator)(const Sequence< Any >&);
//liuchen 2009-6-23
-//expand the "TranslateInfo" struct to support more kinds of events
+//expand the "TranslateInfo" struct to support more kinds of events
struct TranslateInfo
{
rtl::OUString sVBAName; //vba event name
- Translator toVBA; //the method to convert OO event parameters to VBA event parameters
- bool (*ApproveRule)(const ScriptEvent& evt, void* pPara); //this method is used to determine which types of controls should execute the event
+ Translator toVBA; //the method to convert OO event parameters to VBA event parameters
+ bool (*ApproveRule)(const ScriptEvent& evt, void* pPara); //this method is used to determine which types of controls should execute the event
void *pPara; //Parameters for the above approve method
};
-typedef std::hash_map< rtl::OUString,
-std::list< TranslateInfo >,
+typedef std::hash_map< rtl::OUString,
+std::list< TranslateInfo >,
::rtl::OUStringHash,
::std::equal_to< ::rtl::OUString > > EventInfoHash;
@@ -280,13 +331,14 @@ std::list< TranslateInfo >,
struct TranslatePropMap
{
rtl::OUString sEventInfo; //OO event name
- TranslateInfo aTransInfo;
+ TranslateInfo aTransInfo;
};
-
+
bool ApproveAll(const ScriptEvent& evt, void* pPara); //allow all types of controls to execute the event
bool ApproveType(const ScriptEvent& evt, void* pPara); //certain types of controls should execute the event, those types are given by pPara
bool DenyType(const ScriptEvent& evt, void* pPara); //certain types of controls should not execute the event, those types are given by pPara
bool DenyMouseDrag(const ScriptEvent& evt, void* pPara); //used for VBA MouseMove event when "Shift" key is pressed
+bool DenyKeys(const ScriptEvent& evt, void* pPara); //For some keys, press them will cause Symphony keyPressed event, but will not cause any events in Excel, so deny these key events
struct TypeList
{
@@ -294,37 +346,39 @@ struct TypeList
int nListLength;
};
-Type typeXFixedText = GET_TYPE(awt::XFixedText)
-Type typeXTextComponent = GET_TYPE(awt::XTextComponent)
-Type typeXComboBox = GET_TYPE(awt::XComboBox)
-Type typeXRadioButton = GET_TYPE(awt::XRadioButton)
+Type typeXFixedText = GET_TYPE(awt::XFixedText);
+Type typeXTextComponent = GET_TYPE(awt::XTextComponent);
+Type typeXComboBox = GET_TYPE(awt::XComboBox);
+Type typeXRadioButton = GET_TYPE(awt::XRadioButton);
+Type typeXListBox = GET_TYPE(awt::XListBox);
TypeList fixedTextList = {&typeXFixedText, 1};
TypeList textCompList = {&typeXTextComponent, 1};
TypeList radioButtonList = {&typeXRadioButton, 1};
TypeList comboBoxList = {&typeXComboBox, 1};
+TypeList listBoxList = {&typeXListBox, 1};
//this array stores the OO event to VBA event translation info
-static TranslatePropMap aTranslatePropMap_Impl[] =
+static TranslatePropMap aTranslatePropMap_Impl[] =
{
- // actionPerformed ooo event
- { MAP_CHAR_LEN("actionPerformed"), { MAP_CHAR_LEN("_Click"), NULL, ApproveAll, NULL } },
{ MAP_CHAR_LEN("actionPerformed"), { MAP_CHAR_LEN("_Change"), NULL, DenyType, (void*)(&radioButtonList) } }, //liuchen 2009-7-30, OptionalButton_Change event is not the same as OptionalButton_Click event
-
+ // actionPerformed ooo event
+ { MAP_CHAR_LEN("actionPerformed"), { MAP_CHAR_LEN("_Click"), NULL, ApproveAll, NULL } },
+ { MAP_CHAR_LEN("itemStateChanged"), { MAP_CHAR_LEN("_Change"), NULL, ApproveType, (void*)(&radioButtonList) } }, //liuchen 2009-7-30, OptionalButton_Change event should be triggered when the button state is changed
// itemStateChanged ooo event
{ MAP_CHAR_LEN("itemStateChanged"), { MAP_CHAR_LEN("_Click"), NULL, ApproveType, (void*)(&comboBoxList) } }, //liuchen, add to support VBA ComboBox_Click event
- { MAP_CHAR_LEN("itemStateChanged"), { MAP_CHAR_LEN("_Change"), NULL, ApproveType, (void*)(&radioButtonList) } }, //liuchen 2009-7-30, OptionalButton_Change event should be triggered when the button state is changed
-
+
+ { MAP_CHAR_LEN("itemStateChanged"), { MAP_CHAR_LEN("_Click"), NULL, ApproveType, (void*)(&listBoxList) } },
// changed ooo event
- { MAP_CHAR_LEN("changed"), { MAP_CHAR_LEN("_Change"), NULL, ApproveAll, NULL } },
+ { MAP_CHAR_LEN("changed"), { MAP_CHAR_LEN("_Change"), NULL, ApproveAll, NULL } },
// focusGained ooo event
{ MAP_CHAR_LEN("focusGained"), { MAP_CHAR_LEN("_GotFocus"), NULL, ApproveAll, NULL } },
// focusLost ooo event
{ MAP_CHAR_LEN("focusLost"), { MAP_CHAR_LEN("_LostFocus"), NULL, ApproveAll, NULL } },
- { MAP_CHAR_LEN("focusLost"), { MAP_CHAR_LEN("_Exit"), NULL, ApproveType, (void*)(&textCompList) } }, //liuchen, add to support VBA TextBox_Exit event
+ { MAP_CHAR_LEN("focusLost"), { MAP_CHAR_LEN("_Exit"), ooFocusLostToVBAExit, ApproveType, (void*)(&textCompList) } }, //liuchen, add to support VBA TextBox_Exit event
// adjustmentValueChanged ooo event
{ MAP_CHAR_LEN("adjustmentValueChanged"), { MAP_CHAR_LEN("_Scroll"), NULL, ApproveAll, NULL } },
@@ -344,13 +398,13 @@ static TranslatePropMap aTranslatePropMap_Impl[] =
{ MAP_CHAR_LEN("mousePressed"), { MAP_CHAR_LEN("_MouseDown"), ooMouseEvtToVBAMouseEvt, ApproveAll, NULL } },
{ MAP_CHAR_LEN("mousePressed"), { MAP_CHAR_LEN("_DblClick"), ooMouseEvtToVBADblClick, ApproveAll, NULL } },
- // mouseMoved ooo event
+ // mouseMoved ooo event
{ MAP_CHAR_LEN("mouseMoved"), { MAP_CHAR_LEN("_MouseMove"), ooMouseEvtToVBAMouseEvt, ApproveAll, NULL } },
{ MAP_CHAR_LEN("mouseDragged"), { MAP_CHAR_LEN("_MouseMove"), ooMouseEvtToVBAMouseEvt, DenyMouseDrag, NULL } }, //liuchen, add to support VBA MouseMove event when the "Shift" key is pressed
// keyPressed ooo event
- { MAP_CHAR_LEN("keyPressed"), { MAP_CHAR_LEN("_KeyDown"), ooKeyPressedToVBAKeyPressed, ApproveAll, NULL } },
- { MAP_CHAR_LEN("keyPressed"), { MAP_CHAR_LEN("_KeyPress"), ooKeyPressedToVBAKeyPressed, ApproveAll, NULL } }
+ { MAP_CHAR_LEN("keyPressed"), { MAP_CHAR_LEN("_KeyDown"), ooKeyPressedToVBAKeyUpDown, ApproveAll, NULL } },
+ { MAP_CHAR_LEN("keyPressed"), { MAP_CHAR_LEN("_KeyPress"), ooKeyPressedToVBAKeyUpDown, DenyKeys, NULL } }
};
EventInfoHash& getEventTransInfo()
@@ -365,17 +419,17 @@ EventInfoHash& getEventTransInfo()
int i = 0;
while (i < nCount)
- {
+ {
sEventInfo = pTransProp->sEventInfo;
std::list< TranslateInfo > infoList;
do
- {
+ {
infoList.push_back( pTransProp->aTransInfo );
pTransProp++;
i++;
}while(i < nCount && sEventInfo == pTransProp->sEventInfo);
- eventTransInfo[sEventInfo] = infoList;
- }
+ eventTransInfo[sEventInfo] = infoList;
+ }
initialised = true;
}
return eventTransInfo;
@@ -388,7 +442,7 @@ class ScriptEventHelper
{
public:
ScriptEventHelper( const Reference< XInterface >& xControl );
- Sequence< ScriptEventDescriptor > createEvents( const rtl::OUString& sCodeName );
+ Sequence< ScriptEventDescriptor > createEvents( const rtl::OUString& sCodeName );
Sequence< rtl::OUString > getEventListeners();
private:
Reference< XComponentContext > m_xCtx;
@@ -411,16 +465,16 @@ eventMethodToDescriptor( const ::rtl::OUString& rEventMethod, ScriptEventDescrip
}
sMethodName = rEventMethod.copy( nDelimPos + DELIMLEN );
sTypeName = rEventMethod.copy( 0, nDelimPos );
-
+
EventInfoHash& infos = getEventTransInfo();
// Only create an ScriptEventDescriptor for an event we can translate
// or emulate
- if ( sMethodName.getLength()
+ if ( sMethodName.getLength()
&& sTypeName.getLength()
&& ( infos.find( sMethodName ) != infos.end() ) )
{
- // just fill in CodeName, when the event fires the other
+ // just fill in CodeName, when the event fires the other
// info is gathered from the event source to determine what
// event handler we try to call
evtDesc.ScriptCode = sCodeName;
@@ -430,7 +484,7 @@ eventMethodToDescriptor( const ::rtl::OUString& rEventMethod, ScriptEventDescrip
// set this it VBAInterop, ensures that it doesn't
// get persisted or shown in property editors
evtDesc.ScriptType = rtl::OUString::createFromAscii(
- "VBAInterop" );
+ "VBAInterop" );
return true;
}
return false;
@@ -442,40 +496,40 @@ ScriptEventHelper::ScriptEventHelper( const Reference< XInterface >& xControl )
Reference < beans::XPropertySet > xProps(
::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW );
m_xCtx.set( xProps->getPropertyValue( rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))),
+ RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))),
uno::UNO_QUERY_THROW );
}
-Sequence< rtl::OUString >
+Sequence< rtl::OUString >
ScriptEventHelper::getEventListeners()
{
- Reference< lang::XMultiComponentFactory > xMFac(
+ Reference< lang::XMultiComponentFactory > xMFac(
m_xCtx->getServiceManager(), UNO_QUERY );
std::list< rtl::OUString > eventMethods;
if ( xMFac.is() )
{
- Reference< beans::XIntrospection > xIntrospection(
- xMFac->createInstanceWithContext( rtl::OUString(
+ Reference< beans::XIntrospection > xIntrospection(
+ xMFac->createInstanceWithContext( rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.beans.Introspection" ) ), m_xCtx ), UNO_QUERY );
#if 0
dumpListeners( xIntrospection, m_xControl );
dumpListeners( xIntrospection, m_xControl->getModel() );
-#endif
+#endif
Reference< beans::XIntrospectionAccess > xIntrospectionAccess;
if ( xIntrospection.is() )
{
- xIntrospectionAccess = xIntrospection->inspect(
+ xIntrospectionAccess = xIntrospection->inspect(
makeAny( m_xControl ) );
- Sequence< Type > aControlListeners =
+ Sequence< Type > aControlListeners =
xIntrospectionAccess->getSupportedListeners();
- sal_Int32 nLength = aControlListeners.getLength();
+ sal_Int32 nLength = aControlListeners.getLength();
for ( sal_Int32 i = 0; i< nLength; ++i )
{
Type& listType = aControlListeners[ i ];
rtl::OUString sFullTypeName = listType.getTypeName();
- Sequence< ::rtl::OUString > sMeths =
- comphelper::getEventMethodsForType( listType );
+ Sequence< ::rtl::OUString > sMeths =
+ comphelper::getEventMethodsForType( listType );
sal_Int32 sMethLen = sMeths.getLength();
for ( sal_Int32 j=0 ; j < sMethLen; ++j )
{
@@ -485,7 +539,7 @@ ScriptEventHelper::getEventListeners()
eventMethods.push_back( sEventMethod );
}
}
-
+
}
}
@@ -494,20 +548,20 @@ ScriptEventHelper::getEventListeners()
rtl::OUString* pDest = sEventMethodNames.getArray();
for ( ; it != eventMethods.end(); ++it, ++pDest )
- *pDest = *it;
+ *pDest = *it;
return sEventMethodNames;
}
-Sequence< ScriptEventDescriptor >
+Sequence< ScriptEventDescriptor >
ScriptEventHelper::createEvents( const rtl::OUString& sCodeName )
{
Sequence< rtl::OUString > aControlListeners = getEventListeners();
rtl::OUString* pSrc = aControlListeners.getArray();
- sal_Int32 nLength = aControlListeners.getLength();
+ sal_Int32 nLength = aControlListeners.getLength();
Sequence< ScriptEventDescriptor > aDest( nLength );
- sal_Int32 nEvts = 0;
+ sal_Int32 nEvts = 0;
for ( sal_Int32 i = 0; i< nLength; ++i, ++pSrc )
{
// from getListeners eventName is of form
@@ -541,7 +595,7 @@ public:
virtual void SAL_CALL insertByName( const ::rtl::OUString&, const Any& ) throw (lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, RuntimeException)
{
throw RuntimeException( rtl::OUString::createFromAscii( "ReadOnly container" ), Reference< XInterface >() );
-
+
}
virtual void SAL_CALL removeByName( const ::rtl::OUString& ) throw (::com::sun::star::container::NoSuchElementException, lang::WrappedTargetException, RuntimeException)
{
@@ -552,9 +606,9 @@ public:
virtual void SAL_CALL replaceByName( const ::rtl::OUString&, const Any& ) throw (lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, RuntimeException)
{
throw RuntimeException( rtl::OUString::createFromAscii( "ReadOnly container" ), Reference< XInterface >() );
-
+
}
-
+
// XNameAccess
virtual Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw (container::NoSuchElementException, lang::WrappedTargetException, RuntimeException);
virtual Sequence< ::rtl::OUString > SAL_CALL getElementNames( ) throw (RuntimeException);
@@ -583,13 +637,13 @@ ReadOnlyEventsNameContainer::ReadOnlyEventsNameContainer( const Sequence< rtl::O
ScriptEventDescriptor evtDesc;
if ( eventMethodToDescriptor( *pSrc, evtDesc, sCodeName ) )
{
- aDesc <<= evtDesc;
+ aDesc <<= evtDesc;
m_hEvents[ *pSrc ] = aDesc;
}
}
}
-Any SAL_CALL
+Any SAL_CALL
ReadOnlyEventsNameContainer::getByName( const ::rtl::OUString& aName ) throw (container::NoSuchElementException, lang::WrappedTargetException, RuntimeException){
EventSupplierHash::const_iterator it = m_hEvents.find( aName );
if ( it == m_hEvents.end() )
@@ -597,7 +651,7 @@ ReadOnlyEventsNameContainer::getByName( const ::rtl::OUString& aName ) throw (co
return it->second;
}
-Sequence< ::rtl::OUString > SAL_CALL
+Sequence< ::rtl::OUString > SAL_CALL
ReadOnlyEventsNameContainer::getElementNames( ) throw (RuntimeException)
{
Sequence< ::rtl::OUString > names(m_hEvents.size());
@@ -609,7 +663,7 @@ ReadOnlyEventsNameContainer::getElementNames( ) throw (RuntimeException)
return names;
}
-sal_Bool SAL_CALL
+sal_Bool SAL_CALL
ReadOnlyEventsNameContainer::hasByName( const ::rtl::OUString& aName ) throw (RuntimeException)
{
EventSupplierHash::const_iterator it = m_hEvents.find( aName );
@@ -625,14 +679,14 @@ class ReadOnlyEventsSupplier : public EventsSupplier_BASE
public:
ReadOnlyEventsSupplier( const Sequence< ::rtl::OUString >& eventMethods, const rtl::OUString& sCodeName )
{ m_xNameContainer = new ReadOnlyEventsNameContainer( eventMethods, sCodeName ); }
-
+
// XScriptEventSupplier
virtual Reference< container::XNameContainer > SAL_CALL getEvents( ) throw (RuntimeException){ return m_xNameContainer; }
private:
Reference< container::XNameContainer > m_xNameContainer;
};
-typedef ::cppu::WeakImplHelper2< XScriptListener, lang::XInitialization > EventListener_BASE;
+typedef ::cppu::WeakImplHelper3< XScriptListener, util::XCloseListener, lang::XInitialization > EventListener_BASE;
#define EVENTLSTNR_PROPERTY_ID_MODEL 1
#define EVENTLSTNR_PROPERTY_MODEL ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Model" ) )
@@ -643,7 +697,7 @@ class EventListener : public EventListener_BASE
,public ::comphelper::OPropertyArrayUsageHelper< EventListener >
{
-
+
public:
EventListener( const Reference< XComponentContext >& rxContext );
// XEventListener
@@ -653,8 +707,11 @@ public:
// XScriptListener
virtual void SAL_CALL firing(const ScriptEvent& evt) throw(RuntimeException);
virtual Any SAL_CALL approveFiring(const ScriptEvent& evt) throw(reflection::InvocationTargetException, RuntimeException);
+ // XCloseListener
+ virtual void SAL_CALL queryClosing( const lang::EventObject& Source, ::sal_Bool GetsOwnership ) throw (util::CloseVetoException, uno::RuntimeException);
+ virtual void SAL_CALL notifyClosing( const lang::EventObject& Source ) throw (uno::RuntimeException);
// XPropertySet
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (::com::sun::star::uno::RuntimeException);
// XInitialization
virtual void SAL_CALL initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException);
// XInterface
@@ -664,6 +721,25 @@ public:
DECLARE_XTYPEPROVIDER()
virtual void SAL_CALL setFastPropertyValue( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
{
+ if ( nHandle == EVENTLSTNR_PROPERTY_ID_MODEL )
+ {
+ uno::Reference< frame::XModel > xModel( rValue, uno::UNO_QUERY );
+ if( xModel != m_xModel)
+ {
+ // Remove the listener from the old XCloseBroadcaster.
+ uno::Reference< util::XCloseBroadcaster > xCloseBroadcaster( m_xModel, uno::UNO_QUERY );
+ if (xCloseBroadcaster.is())
+ {
+ xCloseBroadcaster->removeCloseListener( this );
+ }
+ // Add the listener into the new XCloseBroadcaster.
+ xCloseBroadcaster = uno::Reference< util::XCloseBroadcaster >( xModel, uno::UNO_QUERY );
+ if (xCloseBroadcaster.is())
+ {
+ xCloseBroadcaster->addCloseListener( this );
+ }
+ }
+ }
OPropertyContainer::setFastPropertyValue( nHandle, rValue );
if ( nHandle == EVENTLSTNR_PROPERTY_ID_MODEL )
setShellFromModel();
@@ -677,17 +753,21 @@ protected:
virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const;
private:
+#if ASYNC
+ DECL_LINK( OnAsyncScriptEvent, ScriptEvent* );
+#endif
void setShellFromModel();
void firing_Impl( const ScriptEvent& evt, Any *pSyncRet=NULL ) throw( RuntimeException );
Reference< XComponentContext > m_xContext;
Reference< frame::XModel > m_xModel;
SfxObjectShell* mpShell;
-
+ sal_Bool m_bDocClosed;
+
};
EventListener::EventListener( const Reference< XComponentContext >& rxContext ) :
-OPropertyContainer(GetBroadcastHelper()), m_xContext( rxContext ), mpShell( 0 )
+OPropertyContainer(GetBroadcastHelper()), m_xContext( rxContext ), m_bDocClosed(sal_False), mpShell( 0 )
{
registerProperty( EVENTLSTNR_PROPERTY_MODEL, EVENTLSTNR_PROPERTY_ID_MODEL,
beans::PropertyAttribute::TRANSIENT, &m_xModel, ::getCppuType( &m_xModel ) );
@@ -708,7 +788,7 @@ EventListener::setShellFromModel()
break;
}
pShell = SfxObjectShell::GetNext( *pShell );
- }
+ }
}
//XEventListener
@@ -719,13 +799,43 @@ EventListener::disposing(const lang::EventObject&) throw( RuntimeException )
//XScriptListener
-void SAL_CALL
+void SAL_CALL
EventListener::firing(const ScriptEvent& evt) throw(RuntimeException)
{
+#if ASYNC
+ // needs some logic to check if the event handler is oneway or not
+ // if not oneway then firing_Impl otherwise... as below
+ acquire();
+ Application::PostUserEvent( LINK( this, EventListener, OnAsyncScriptEvent ), new ScriptEvent( evt ) );
+#else
firing_Impl( evt );
+#endif
}
-Any SAL_CALL
+#if ASYNC
+IMPL_LINK( EventListener, OnAsyncScriptEvent, ScriptEvent*, _pEvent )
+{
+ if ( !_pEvent )
+ return 1L;
+
+ {
+ // #FIXME if we enable ASYNC we probably need something like
+ // below
+ //::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ //if ( !impl_isDisposed_nothrow() )
+ // impl_doFireScriptEvent_nothrow( aGuard, *_pEvent, NULL );
+ firing_Impl( *_pEvent, NULL );
+ }
+
+ delete _pEvent;
+ // we acquired ourself immediately before posting the event
+ release();
+ return 0L;
+ }
+#endif
+
+Any SAL_CALL
EventListener::approveFiring(const ScriptEvent& evt) throw(reflection::InvocationTargetException, RuntimeException)
{
Any ret;
@@ -733,8 +843,26 @@ EventListener::approveFiring(const ScriptEvent& evt) throw(reflection::Invocatio
return ret;
}
+// XCloseListener
+void SAL_CALL
+EventListener::queryClosing( const lang::EventObject& Source, ::sal_Bool GetsOwnership ) throw (util::CloseVetoException, uno::RuntimeException)
+{
+ //Nothing to do
+}
+
+void SAL_CALL
+EventListener::notifyClosing( const lang::EventObject& Source ) throw (uno::RuntimeException)
+{
+ m_bDocClosed = sal_True;
+ uno::Reference< util::XCloseBroadcaster > xCloseBroadcaster( m_xModel, uno::UNO_QUERY );
+ if (xCloseBroadcaster.is())
+ {
+ xCloseBroadcaster->removeCloseListener( this );
+ }
+}
+
// XInitialization
-void SAL_CALL
+void SAL_CALL
EventListener::initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException)
{
if ( aArguments.getLength() == 1 )
@@ -752,7 +880,7 @@ IMPLEMENT_FORWARD_XTYPEPROVIDER2( EventListener, EventListener_BASE, OPropertyCo
// OPropertySetHelper
-::cppu::IPropertyArrayHelper&
+::cppu::IPropertyArrayHelper&
EventListener::getInfoHelper( )
{
return *getArrayHelper();
@@ -760,7 +888,7 @@ EventListener::getInfoHelper( )
// OPropertyArrayUsageHelper
-::cppu::IPropertyArrayHelper*
+::cppu::IPropertyArrayHelper*
EventListener::createArrayHelper( ) const
{
Sequence< beans::Property > aProps;
@@ -769,7 +897,7 @@ EventListener::createArrayHelper( ) const
}
// XPropertySet
-Reference< beans::XPropertySetInfo >
+Reference< beans::XPropertySetInfo >
EventListener::getPropertySetInfo( ) throw (RuntimeException)
{
Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
@@ -819,7 +947,7 @@ bool DenyType(const ScriptEvent& evt, void* pPara)
}
//when mouse is moving, either the mouse button is pressed or some key is pressed can trigger the OO mouseDragged event,
-//the former should be denyed, and the latter allowed, only by doing so can the VBA MouseMove event when the "Shift" key is
+//the former should be denyed, and the latter allowed, only by doing so can the VBA MouseMove event when the "Shift" key is
//pressed can be correctly triggered
bool DenyMouseDrag(const ScriptEvent& evt, void* )
{
@@ -835,13 +963,28 @@ bool DenyMouseDrag(const ScriptEvent& evt, void* )
}
}
+//For some keys, press them will cause Symphony keyPressed event, but will not cause any events in Excel, so deny these key events
+bool DenyKeys(const ScriptEvent& evt, void* /*pPara*/)
+{
+ awt::KeyEvent aEvent;
+ evt.Arguments[ 0 ] >>= aEvent;
+ if (aEvent.KeyChar == 0 || aEvent.KeyChar == 8)
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
//liuchen 2009-6-23
// EventListener
void
-EventListener::firing_Impl(const ScriptEvent& evt, Any* /*pRet*/ ) throw(RuntimeException)
+EventListener::firing_Impl(const ScriptEvent& evt, Any* pRet ) throw(RuntimeException)
{
OSL_TRACE("EventListener::firing_Impl( FAKE VBA_EVENTS )");
static const ::rtl::OUString vbaInterOp =
@@ -852,18 +995,46 @@ EventListener::firing_Impl(const ScriptEvent& evt, Any* /*pRet*/ ) throw(Runtime
return;
lang::EventObject aEvent;
evt.Arguments[ 0 ] >>= aEvent;
+ OSL_TRACE("evt.MethodName is %s", rtl::OUStringToOString( evt.MethodName, RTL_TEXTENCODING_UTF8 ).getStr() );
OSL_TRACE("Argument[0] is %s", rtl::OUStringToOString( comphelper::anyToString( evt.Arguments[0] ), RTL_TEXTENCODING_UTF8 ).getStr() );
OSL_TRACE("Getting Control");
- uno::Reference< awt::XControl > xControl( aEvent.Source, uno::UNO_QUERY_THROW );
- OSL_TRACE("Getting properties");
- uno::Reference< beans::XPropertySet > xProps( xControl->getModel(), uno::UNO_QUERY_THROW );
-
rtl::OUString sName = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("UserForm") );
OSL_TRACE("Getting Name");
uno::Reference< awt::XDialog > xDlg( aEvent.Source, uno::UNO_QUERY );
if ( !xDlg.is() )
+ {
+ OSL_TRACE("Getting Control");
+ // evt.Source is
+ // a) Dialog
+ // b) xShapeControl ( from api (sheet control) )
+ // c) eventmanager ( I guess )
+ // d) vba control ( from api also )
+ uno::Reference< drawing::XControlShape > xCntrlShape( evt.Source, uno::UNO_QUERY );
+ uno::Reference< awt::XControl > xControl( aEvent.Source, uno::UNO_QUERY );
+ if ( xCntrlShape.is() )
+ {
+ // for sheet controls ( that fire from the api ) we don't
+ // have the real control ( thats only available from the view )
+ // api code creates just a control instance that is transferred
+ // via aEvent.Arguments[ 0 ] that control though has no
+ // info like name etc.
+ uno::Reference< drawing::XControlShape > xCntrlShape( evt.Source, UNO_QUERY_THROW );
+ OSL_TRACE("Got control shape");
+ uno::Reference< container::XNamed > xName( xCntrlShape->getControl(), uno::UNO_QUERY_THROW );
+ OSL_TRACE("Got xnamed ");
+ sName = xName->getName();
+ }
+ else
+ {
+ // Userform control ( fired from the api or from event manager )
+ uno::Reference< beans::XPropertySet > xProps;
+ OSL_TRACE("Getting properties");
+ xProps.set( xControl->getModel(), uno::UNO_QUERY_THROW );
xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Name") ) ) >>= sName;
+ }
+
+ }
//dumpEvent( evt );
EventInfoHash& infos = getEventTransInfo();
EventInfoHash::const_iterator eventInfo_it = infos.find( evt.MethodName );
@@ -885,20 +1056,49 @@ EventListener::firing_Impl(const ScriptEvent& evt, Any* /*pRet*/ ) throw(Runtime
std::list< TranslateInfo >::const_iterator txInfo =
eventInfo_it->second.begin();
std::list< TranslateInfo >::const_iterator txInfo_end = eventInfo_it->second.end();
- rtl::OUString sMacroLoc = rtl::OUString::createFromAscii("Standard.").concat( evt.ScriptCode ).concat( rtl::OUString::createFromAscii(".") );
-
+
StarBASIC* pBasic = mpShell->GetBasic();
- SbModule* pModule = pBasic->FindModule( evt.ScriptCode );
- for ( ; pModule && txInfo != txInfo_end; ++txInfo )
+ BasicManager* pBasicManager = mpShell->GetBasicManager();
+ rtl::OUString sProject;
+ rtl::OUString sScriptCode( evt.ScriptCode );
+ // dialogs pass their own library, presence of Dot determines that
+ if ( sScriptCode.indexOf( '.' ) == -1 )
+ {
+ //'Project' is a better default but I want to force failures
+ //rtl::OUString sMacroLoc = rtl::OUString::createFromAscii("Project");
+ sProject = rtl::OUString::createFromAscii("Standard");
+
+ if ( pBasicManager->GetName().Len() > 0 )
+ sProject = pBasicManager->GetName();
+ }
+ else
+ {
+ sal_Int32 nIndex = sScriptCode.indexOf( '.' );
+ sProject = sScriptCode.copy( 0, nIndex );
+ sScriptCode = sScriptCode.copy( nIndex + 1 );
+ }
+ rtl::OUString sMacroLoc = sProject;
+ sMacroLoc = sMacroLoc.concat( rtl::OUString::createFromAscii(".") );
+ sMacroLoc = sMacroLoc.concat( sScriptCode ).concat( rtl::OUString::createFromAscii(".") );
+
+ OSL_TRACE("sMacroLoc is %s", rtl::OUStringToOString( sMacroLoc, RTL_TEXTENCODING_UTF8 ).getStr() );
+ for ( ; txInfo != txInfo_end; ++txInfo )
{
+ // If the document is closed, we should not execute macro.
+ if (m_bDocClosed)
+ {
+ break;
+ }
+
+ rtl::OUString sTemp = sName.concat( (*txInfo).sVBAName );
// see if we have a match for the handlerextension
- // where ScriptCode is methodname_handlerextension
- rtl::OUString sTemp = sName.concat( (*txInfo).sVBAName );
-
+ // where ScriptCode is methodname_handlerextension
+ rtl::OUString sToResolve = sMacroLoc.concat( sTemp );
+
OSL_TRACE("*** trying to invoke %s ",
- rtl::OUStringToOString( sTemp, RTL_TEXTENCODING_UTF8 ).getStr() );
- SbMethod* pMeth = static_cast< SbMethod* >( pModule->Find( sTemp, SbxCLASS_METHOD ) );
- if ( pMeth )
+ rtl::OUStringToOString( sToResolve, RTL_TEXTENCODING_UTF8 ).getStr() );
+ ooo::vba::VBAMacroResolvedInfo aMacroResolvedInfo = ooo::vba::resolveVBAMacro( mpShell, sToResolve );
+ if ( aMacroResolvedInfo.IsResolved() )
{
//liuchen 2009-6-8
if (! txInfo->ApproveRule(evt, txInfo->pPara) )
@@ -906,7 +1106,7 @@ EventListener::firing_Impl(const ScriptEvent& evt, Any* /*pRet*/ ) throw(Runtime
continue;
}
//liuchen 2009-6-8
- // !! translate arguments & emulate events where necessary
+ // !! translate arguments & emulate events where necessary
Sequence< Any > aArguments;
if ( (*txInfo).toVBA )
aArguments = (*txInfo).toVBA( evt.Arguments );
@@ -916,31 +1116,28 @@ EventListener::firing_Impl(const ScriptEvent& evt, Any* /*pRet*/ ) throw(Runtime
{
// call basic event handlers for event
- static rtl::OUString part1 = rtl::OUString::createFromAscii( "vnd.sun.star.script:");
- static rtl::OUString part2 = rtl::OUString::createFromAscii("?language=Basic&location=document");
-
// create script url
- rtl::OUString url = part1 + sMacroLoc + sTemp + part2;
-
- OSL_TRACE("script url = %s",
- rtl::OUStringToOString( url,
+ rtl::OUString url = aMacroResolvedInfo.ResolvedMacro();
+
+ OSL_TRACE("resolved script = %s",
+ rtl::OUStringToOString( url,
RTL_TEXTENCODING_UTF8 ).getStr() );
- Sequence< sal_Int16 > aOutArgsIndex;
- Sequence< Any > aOutArgs;
try
{
- if ( mpShell )
+ uno::Any aDummyCaller = uno::makeAny( rtl::OUString::createFromAscii("Error") );
+ if ( pRet )
+ ooo::vba::executeMacro( mpShell, url, aArguments, *pRet, aDummyCaller );
+ else
{
uno::Any aRet;
- mpShell->CallXScript( url,
- aArguments, aRet, aOutArgsIndex, aOutArgs, false );
+ ooo::vba::executeMacro( mpShell, url, aArguments, aRet, aDummyCaller );
}
}
catch ( uno::Exception& e )
{
OSL_TRACE("event script raised %s", rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
}
- }
+ }
}
}
}
@@ -959,29 +1156,29 @@ public:
virtual Reference< XScriptEventsSupplier > SAL_CALL getEventSupplier( const Reference< XInterface >& xControl, const rtl::OUString& sCodeName ) throw (::com::sun::star::uno::RuntimeException);
private:
Reference< XComponentContext > m_xContext;
-
+
};
VBAToOOEventDescGen::VBAToOOEventDescGen( const Reference< XComponentContext >& rxContext ):m_xContext( rxContext ) {}
-Sequence< ScriptEventDescriptor > SAL_CALL
+Sequence< ScriptEventDescriptor > SAL_CALL
VBAToOOEventDescGen::getEventDescriptions( const Reference< XInterface >& xControl, const rtl::OUString& sCodeName ) throw (RuntimeException)
{
- ScriptEventHelper evntHelper( xControl );
- return evntHelper.createEvents( sCodeName );
+ ScriptEventHelper evntHelper( xControl );
+ return evntHelper.createEvents( sCodeName );
}
-Reference< XScriptEventsSupplier > SAL_CALL
+Reference< XScriptEventsSupplier > SAL_CALL
VBAToOOEventDescGen::getEventSupplier( const Reference< XInterface >& xControl, const rtl::OUString& sCodeName ) throw (::com::sun::star::uno::RuntimeException)
{
- ScriptEventHelper evntHelper( xControl );
- Reference< XScriptEventsSupplier > xSupplier =
- new ReadOnlyEventsSupplier(
+ ScriptEventHelper evntHelper( xControl );
+ Reference< XScriptEventsSupplier > xSupplier =
+ new ReadOnlyEventsSupplier(
evntHelper.getEventListeners(), sCodeName ) ;
return xSupplier;
}
-// Component related
+// Component related
namespace evtlstner
{
@@ -1011,9 +1208,9 @@ namespace evtlstner
{
const ::rtl::OUString strName( ::evtlstner::getImplementationName() );
return Sequence< ::rtl::OUString >( &strName, 1 );
- }
+ }
}
-namespace ooevtdescgen
+namespace ooevtdescgen
{
::rtl::OUString SAL_CALL getImplementationName()
{
@@ -1041,5 +1238,5 @@ namespace ooevtdescgen
{
const ::rtl::OUString strName( ::ooevtdescgen::getImplementationName() );
return Sequence< ::rtl::OUString >( &strName, 1 );
- }
+ }
}
diff --git a/scripting/source/vbaevents/makefile.mk b/scripting/source/vbaevents/makefile.mk
index 1946c61d1e..4784985e8a 100644
--- a/scripting/source/vbaevents/makefile.mk
+++ b/scripting/source/vbaevents/makefile.mk
@@ -69,6 +69,7 @@ SHL1STDLIBS= \
$(BASICLIB) \
$(COMPHELPERLIB) \
$(SFXLIB) \
+ $(MSFILTERLIB) \
$(CPPULIB) \
$(TOOLSLIB) \
$(SALLIB)
diff --git a/scripting/source/vbaevents/vbamsformreturntypes.hxx b/scripting/source/vbaevents/vbamsformreturntypes.hxx
new file mode 100644
index 0000000000..0aa1b9ec53
--- /dev/null
+++ b/scripting/source/vbaevents/vbamsformreturntypes.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright IBM Corporation 2009, 2010.
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef VBA_MSFORM_RETURNTYPES_HXX
+#define VBA_MSFORM_RETURNTYPES_HXX
+
+#include <cppuhelper/implbase1.hxx>
+#include <msforms/XReturnBoolean.hpp>
+#include <msforms/XReturnInteger.hpp>
+
+
+typedef ::cppu::WeakImplHelper1<msforms::XReturnBoolean> ReturnBoolean_BASE;
+
+class SAL_DLLPUBLIC_EXPORT VbaReturnBoolean : public ReturnBoolean_BASE
+{
+public:
+ sal_Bool Value;
+
+public:
+ VbaReturnBoolean() : Value(false) {} ;
+
+ // XReturnBoolean
+ virtual ::sal_Bool SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException) { return Value; }
+ virtual void SAL_CALL setValue( ::sal_Bool _value ) throw (::com::sun::star::uno::RuntimeException) { Value = _value; }
+
+ // XDefaultProperty
+ ::rtl::OUString SAL_CALL getDefaultPropertyName() throw (com::sun::star::uno::RuntimeException) { return ::rtl::OUString::createFromAscii("Value"); }
+};
+
+
+typedef ::cppu::WeakImplHelper1<msforms::XReturnInteger> ReturnInteger_BASE;
+
+class SAL_DLLPUBLIC_EXPORT VbaReturnInteger : public ReturnInteger_BASE
+{
+public:
+ sal_Int32 Value;
+
+public:
+ VbaReturnInteger() : Value(0) {} ;
+
+ // XReturnInteger
+ virtual ::sal_Int32 SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException) { return Value; }
+ virtual void SAL_CALL setValue( ::sal_Int32 _value ) throw (::com::sun::star::uno::RuntimeException) { Value = _value; }
+
+ // XDefaultProperty
+ ::rtl::OUString SAL_CALL getDefaultPropertyName() throw (com::sun::star::uno::RuntimeException) { return ::rtl::OUString::createFromAscii("Value"); }
+};
+#endif