masterfix DEV300: #i10000# build fix
[LibreOffice.git] / extensions / source / propctrlr / eventhandler.hxx
bloba2d9003a75f4c8da003b1d827a4d38e0b170a021
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
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.
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).
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.
26 ************************************************************************/
28 #ifndef EXTENSIONS_SOURCE_PROPCTRLR_EVENTHANDLER_HXX
29 #define EXTENSIONS_SOURCE_PROPCTRLR_EVENTHANDLER_HXX
31 #include "pcrcomponentcontext.hxx"
32 #include "pcrcommontypes.hxx"
33 #include "pcrcommon.hxx"
35 /** === begin UNO includes === **/
36 #include <com/sun/star/script/ScriptEventDescriptor.hpp>
37 #include <com/sun/star/lang/XServiceInfo.hpp>
38 #include <com/sun/star/inspection/XPropertyHandler.hpp>
39 #include <com/sun/star/beans/XPropertySet.hpp>
40 #include <com/sun/star/frame/XFrame.hpp>
41 /** === end UNO includes === **/
42 #include <cppuhelper/compbase2.hxx>
43 #include <comphelper/listenernotification.hxx>
45 //........................................................................
46 namespace pcr
48 //........................................................................
50 //====================================================================
51 //= EventDescription
52 //====================================================================
53 typedef sal_Int32 EventId;
54 struct EventDescription
56 public:
57 ::rtl::OUString sDisplayName;
58 ::rtl::OUString sListenerClassName;
59 ::rtl::OUString sListenerMethodName;
60 ::rtl::OString sHelpId;
61 ::rtl::OString sUniqueBrowseId;
62 EventId nId;
64 EventDescription()
65 :nId( 0 )
69 EventDescription(
70 EventId _nId,
71 const sal_Char* _pListenerNamespaceAscii,
72 const sal_Char* _pListenerClassAsciiName,
73 const sal_Char* _pListenerMethodAsciiName,
74 sal_uInt16 _nDisplayNameResId,
75 const rtl::OString& _sHelpId,
76 const rtl::OString& _sUniqueBrowseId );
79 typedef ::std::hash_map< ::rtl::OUString, EventDescription, ::rtl::OUStringHash > EventMap;
81 //====================================================================
82 //= EventHandler
83 //====================================================================
84 typedef ::cppu::WeakComponentImplHelper2 < ::com::sun::star::inspection::XPropertyHandler
85 , ::com::sun::star::lang::XServiceInfo
86 > EventHandler_Base;
87 class EventHandler : public EventHandler_Base
89 private:
90 mutable ::osl::Mutex m_aMutex;
92 /// the context in which the instance was created
93 ComponentContext m_aContext;
94 /// the properties of the object we're handling
95 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xComponent;
96 /// our XPropertyChangeListener(s)
97 PropertyChangeListeners m_aPropertyListeners;
98 /// cache of the events we found at our introspectee
99 EventMap m_aEvents;
100 /// has m_aEvents been initialized?
101 bool m_bEventsMapInitialized;
102 /// is our introspectee a dialog element?
103 bool m_bIsDialogElement;
104 // TODO: move different handling into different derived classes?
105 /// (FormComponent) type of the grid column being inspected, or -1 if we're not inspecting a grid column
106 sal_Int16 m_nGridColumnType;
108 public:
109 // XServiceInfo - static versions
110 static ::rtl::OUString SAL_CALL getImplementationName_static( ) throw (::com::sun::star::uno::RuntimeException);
111 static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static( ) throw (::com::sun::star::uno::RuntimeException);
112 static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > Create( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext );
114 protected:
115 EventHandler(
116 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext
119 ~EventHandler();
121 protected:
122 // XPropertyHandler overridables
123 virtual void SAL_CALL inspect( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIntrospectee ) throw (::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
124 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& _rPropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
125 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Any& _rValue ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
126 virtual ::com::sun::star::uno::Any SAL_CALL convertToPropertyValue( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Any& _rControlValue ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
127 virtual ::com::sun::star::uno::Any SAL_CALL convertToControlValue( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Any& _rPropertyValue, const ::com::sun::star::uno::Type& _rControlValueType ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
128 virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState( const ::rtl::OUString& _rPropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
129 virtual void SAL_CALL addPropertyChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& _rxListener ) throw (::com::sun::star::uno::RuntimeException);
130 virtual void SAL_CALL removePropertyChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& _rxListener ) throw (::com::sun::star::uno::RuntimeException);
131 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >
132 SAL_CALL getSupportedProperties() throw (::com::sun::star::uno::RuntimeException);
133 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupersededProperties( ) throw (::com::sun::star::uno::RuntimeException);
134 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getActuatingProperties( ) throw (::com::sun::star::uno::RuntimeException);
135 virtual ::com::sun::star::inspection::LineDescriptor SAL_CALL describePropertyLine( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::inspection::XPropertyControlFactory >& _rxControlFactory ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
136 virtual ::sal_Bool SAL_CALL isComposable( const ::rtl::OUString& _rPropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
137 virtual ::com::sun::star::inspection::InteractiveSelectionResult
138 SAL_CALL onInteractivePropertySelection( const ::rtl::OUString& _rPropertyName, sal_Bool _bPrimary, ::com::sun::star::uno::Any& _rData, const ::com::sun::star::uno::Reference< ::com::sun::star::inspection::XObjectInspectorUI >& _rxInspectorUI ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
139 virtual void SAL_CALL actuatingPropertyChanged( const ::rtl::OUString& _rActuatingPropertyName, const ::com::sun::star::uno::Any& _rNewValue, const ::com::sun::star::uno::Any& _rOldValue, const ::com::sun::star::uno::Reference< ::com::sun::star::inspection::XObjectInspectorUI >& _rxInspectorUI, sal_Bool _bFirstTimeInit ) throw (::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
140 virtual sal_Bool SAL_CALL suspend( sal_Bool _bSuspend ) throw (::com::sun::star::uno::RuntimeException);
142 // XComponent
143 DECLARE_XCOMPONENT()
144 virtual void SAL_CALL disposing();
146 // XServiceInfo
147 virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
148 virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
149 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
151 private:
152 /** returns the script events associated with our introspectee
153 @param _out_rEvents
154 Takes, upon successfull return, the events currently associated with the introspectee
155 @precond
156 Our introspectee is a form component
158 void impl_getFormComponentScriptEvents_nothrow(
159 ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor >& _out_rEvents
160 ) const;
162 /** returns the script events associated with our introspectee
163 @param _out_rEvents
164 Takes, upon successfull return, the events currently associated with the introspectee
165 @precond
166 Our introspectee is a dialog element
168 void impl_getDialogElementScriptEvents_nothrow(
169 ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor >& _out_rEvents
170 ) const;
172 /** returns the script events associated with our introspectee
173 @param _out_rEvents
174 Takes, the events currently associated with the introspectee
176 inline void impl_getComponentScriptEvents_nothrow(
177 ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor >& _out_rEvents
178 ) const
180 if ( m_bIsDialogElement )
181 impl_getDialogElementScriptEvents_nothrow( _out_rEvents );
182 else
183 impl_getFormComponentScriptEvents_nothrow( _out_rEvents );
186 /** returns the types of the listeners which can be registered at our introspectee
187 @param _out_rTypes
188 Takes, upon successfull return, the types of possible listeners at the introspectee
190 void impl_getCopmonentListenerTypes_nothrow(
191 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >& _out_rTypes
192 ) const;
194 /** returns a secondary component to be used for event inspection
196 In the UI, we want to mix events for the control model with events for the control.
197 Since our introspectee is a model, this method creates a control for it (if possible).
199 @return
200 the secondary component whose events should be mixed with the introspectee's events
201 The caller takes the ownership of the component (if not <NULL/>).
203 @throws
204 if an unexpected error occurs during creation of the secondary component.
205 A <NULL/> component to be returned is not unexpected, but allowed
207 @precond
208 ->m_xComponent is not <NULL/>
210 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
211 impl_getSecondaryComponentForEventInspection_throw( ) const;
213 /** returns the event description for the given (programmatic) property name
214 @param _rPropertyName
215 the name whose event description should be looked up
216 @return
217 the event description for the property name
218 @throws ::com::sun::star::beans::UnknownPropertyException
219 if our introspectee does not have an event with the given logical name (see ->getSupportedProperties)
221 const EventDescription&
222 impl_getEventForName_throw( const ::rtl::OUString& _rPropertyName ) const;
224 /** returns the index of our component within its parent, if this parent can be
225 obtained (XChild::getParent) and supports an ->XIndexAccess interface
227 sal_Int32 impl_getComponentIndexInParent_throw() const;
229 /** sets a given script event as event handler at a form component
231 @param _rScriptEvent
232 the script event to set
234 void impl_setFormComponentScriptEvent_nothrow( const ::com::sun::star::script::ScriptEventDescriptor& _rScriptEvent );
236 /** sets a given script event as event handler at a dialog component
238 @param _rScriptEvent
239 the script event to set
241 void impl_setDialogElementScriptEvent_nothrow( const ::com::sun::star::script::ScriptEventDescriptor& _rScriptEvent );
243 /** returns the frame associated with our context document
245 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >
246 impl_getContextFrame_nothrow() const;
248 /** approves or denies a certain method to be included in the UI
249 @return
250 <TRUE/> if and only if the given method is allowed.
252 bool impl_filterMethod_nothrow( const EventDescription& _rEvent ) const;
254 private:
255 EventHandler(); // never implemented
256 EventHandler( const EventHandler& ); // never implemented
257 EventHandler& operator=( const EventHandler& ); // never implemented
260 //........................................................................
261 } // namespace pcr
262 //........................................................................
264 #endif // EXTENSIONS_SOURCE_PROPCTRLR_EVENTHANDLER_HXX