1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef SCRIPTING_DLGEVTATT_HXX 29 #define SCRIPTING_DLGEVTATT_HXX 30 31 #include <com/sun/star/frame/XModel.hpp> 32 #include <com/sun/star/script/XAllListener.hpp> 33 #include <com/sun/star/script/XEventAttacher.hpp> 34 #include <com/sun/star/script/XScriptEventsAttacher.hpp> 35 #include <com/sun/star/script/XScriptListener.hpp> 36 #include <com/sun/star/uno/XComponentContext.hpp> 37 #include <com/sun/star/awt/XControl.hpp> 38 #ifndef _COM_SUN_STAR_BEANS_XINTROSPECTION_HPP_ 39 #include <com/sun/star/beans/XIntrospectionAccess.hpp> 40 #endif 41 #include <cppuhelper/implbase1.hxx> 42 43 #include <com/sun/star/script/XScriptEventsSupplier.hpp> 44 45 #include <hash_map> 46 47 //......................................................................... 48 namespace dlgprov 49 { 50 //......................................................................... 51 52 // ============================================================================= 53 // class DialogEventsAttacherImpl 54 // ============================================================================= 55 typedef std::hash_map< rtl::OUString, 56 ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >, 57 ::rtl::OUStringHash, 58 ::std::equal_to< ::rtl::OUString > > ListenerHash; 59 60 typedef ::cppu::WeakImplHelper1< 61 ::com::sun::star::script::XScriptEventsAttacher > DialogEventsAttacherImpl_BASE; 62 63 64 class DialogEventsAttacherImpl : public DialogEventsAttacherImpl_BASE 65 { 66 private: 67 bool mbUseFakeVBAEvents; 68 ListenerHash listernersForTypes; 69 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext; 70 ::com::sun::star::uno::Reference< ::com::sun::star::script::XEventAttacher > m_xEventAttacher; 71 ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener > getScriptListenerForKey( const rtl::OUString& sScriptName ) throw ( ::com::sun::star::uno::RuntimeException ); 72 ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptEventsSupplier > getFakeVbaEventsSupplier( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl, rtl::OUString& sCodeName ); 73 void SAL_CALL attachEventsToControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl, const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptEventsSupplier >& events, const ::com::sun::star::uno::Any& Helper ); 74 public: 75 DialogEventsAttacherImpl( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, 76 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& xModel, 77 const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& xControl, 78 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xHandler, 79 const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XIntrospectionAccess >& xIntrospect, 80 bool bProviderMode, 81 const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >& xRTLListener ); 82 virtual ~DialogEventsAttacherImpl(); 83 84 // XScriptEventsAttacher 85 virtual void SAL_CALL attachEvents( const ::com::sun::star::uno::Sequence< 86 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > >& Objects, 87 const com::sun::star::uno::Reference<com::sun::star::script::XScriptListener>&, 88 const ::com::sun::star::uno::Any& Helper ) 89 throw (::com::sun::star::lang::IllegalArgumentException, 90 ::com::sun::star::beans::IntrospectionException, 91 ::com::sun::star::script::CannotCreateAdapterException, 92 ::com::sun::star::lang::ServiceNotRegisteredException, 93 ::com::sun::star::uno::RuntimeException); 94 }; 95 96 97 // ============================================================================= 98 // class DialogAllListenerImpl 99 // ============================================================================= 100 101 typedef ::cppu::WeakImplHelper1< 102 ::com::sun::star::script::XAllListener > DialogAllListenerImpl_BASE; 103 104 105 class DialogAllListenerImpl : public DialogAllListenerImpl_BASE 106 { 107 private: 108 ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener > m_xScriptListener; 109 ::rtl::OUString m_sScriptType; 110 ::rtl::OUString m_sScriptCode; 111 112 virtual void firing_impl( const ::com::sun::star::script::AllEventObject& Event, ::com::sun::star::uno::Any* pRet ); 113 114 public: 115 DialogAllListenerImpl( const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >& rxListener, 116 const ::rtl::OUString& rScriptType, const ::rtl::OUString& rScriptCode ); 117 virtual ~DialogAllListenerImpl(); 118 119 // XEventListener 120 virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) 121 throw (::com::sun::star::uno::RuntimeException); 122 123 // XAllListener 124 virtual void SAL_CALL firing( const ::com::sun::star::script::AllEventObject& Event ) 125 throw (::com::sun::star::uno::RuntimeException); 126 virtual ::com::sun::star::uno::Any SAL_CALL approveFiring( const ::com::sun::star::script::AllEventObject& Event ) 127 throw (::com::sun::star::reflection::InvocationTargetException, ::com::sun::star::uno::RuntimeException); 128 }; 129 130 131 // ============================================================================= 132 // class DialogScriptListenerImpl 133 // ============================================================================= 134 135 typedef ::cppu::WeakImplHelper1< 136 ::com::sun::star::script::XScriptListener > DialogScriptListenerImpl_BASE; 137 138 139 class DialogScriptListenerImpl : public DialogScriptListenerImpl_BASE 140 { 141 protected: 142 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext; 143 virtual void firing_impl( const ::com::sun::star::script::ScriptEvent& aScriptEvent, ::com::sun::star::uno::Any* pRet ) = 0; 144 public: 145 DialogScriptListenerImpl( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext ) : m_xContext( rxContext ) {} 146 virtual ~DialogScriptListenerImpl(); 147 148 // XEventListener 149 virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) 150 throw (::com::sun::star::uno::RuntimeException); 151 152 // XScriptListener 153 virtual void SAL_CALL firing( const ::com::sun::star::script::ScriptEvent& aScriptEvent ) 154 throw (::com::sun::star::uno::RuntimeException); 155 virtual ::com::sun::star::uno::Any SAL_CALL approveFiring( const ::com::sun::star::script::ScriptEvent& aScriptEvent ) 156 throw (::com::sun::star::reflection::InvocationTargetException, ::com::sun::star::uno::RuntimeException); 157 }; 158 159 160 //......................................................................... 161 } // namespace dlgprov 162 //......................................................................... 163 164 #endif // SCRIPTING_DLGEVT_HXX 165