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 //........................................................................
48 //........................................................................
50 //====================================================================
52 //====================================================================
53 typedef sal_Int32 EventId
;
54 struct EventDescription
57 ::rtl::OUString sDisplayName
;
58 ::rtl::OUString sListenerClassName
;
59 ::rtl::OUString sListenerMethodName
;
60 ::rtl::OString sHelpId
;
61 ::rtl::OString sUniqueBrowseId
;
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 //====================================================================
83 //====================================================================
84 typedef ::cppu::WeakComponentImplHelper2
< ::com::sun::star::inspection::XPropertyHandler
85 , ::com::sun::star::lang::XServiceInfo
87 class EventHandler
: public EventHandler_Base
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
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
;
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
);
116 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XComponentContext
>& _rxContext
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
);
144 virtual void SAL_CALL
disposing();
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
);
152 /** returns the script events associated with our introspectee
154 Takes, upon successfull return, the events currently associated with the introspectee
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
162 /** returns the script events associated with our introspectee
164 Takes, upon successfull return, the events currently associated with the introspectee
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
172 /** returns the script events associated with our introspectee
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
180 if ( m_bIsDialogElement
)
181 impl_getDialogElementScriptEvents_nothrow( _out_rEvents
);
183 impl_getFormComponentScriptEvents_nothrow( _out_rEvents
);
186 /** returns the types of the listeners which can be registered at our introspectee
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
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).
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/>).
204 if an unexpected error occurs during creation of the secondary component.
205 A <NULL/> component to be returned is not unexpected, but allowed
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
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
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
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
250 <TRUE/> if and only if the given method is allowed.
252 bool impl_filterMethod_nothrow( const EventDescription
& _rEvent
) const;
255 EventHandler(); // never implemented
256 EventHandler( const EventHandler
& ); // never implemented
257 EventHandler
& operator=( const EventHandler
& ); // never implemented
260 //........................................................................
262 //........................................................................
264 #endif // EXTENSIONS_SOURCE_PROPCTRLR_EVENTHANDLER_HXX