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