xref: /AOO41X/main/sc/source/ui/inc/AccessibleContextBase.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 
25 #ifndef _SC_ACCESSIBLECONTEXTBASE_HXX
26 #define _SC_ACCESSIBLECONTEXTBASE_HXX
27 
28 #include <com/sun/star/accessibility/XAccessible.hpp>
29 #include <com/sun/star/accessibility/XAccessibleComponent.hpp>
30 #include <com/sun/star/accessibility/XAccessibleContext.hpp>
31 #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
32 #ifndef _COM_SUN_STAR_ACCESSIBILITY_IllegalAccessibleComponentStateException_HPP_
33 #include <com/sun/star/accessibility/IllegalAccessibleComponentStateException.hpp>
34 #endif
35 #include <com/sun/star/lang/DisposedException.hpp>
36 #include <com/sun/star/uno/Reference.hxx>
37 #include <cppuhelper/weak.hxx>
38 #include <com/sun/star/lang/XServiceInfo.hpp>
39 #include <com/sun/star/lang/XTypeProvider.hpp>
40 #include <com/sun/star/lang/XServiceName.hpp>
41 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
42 #include <vos/mutex.hxx>
43 #include <cppuhelper/interfacecontainer.h>
44 
45 
46 #include <svl/lstner.hxx>
47 #include <cppuhelper/compbase5.hxx>
48 #include <cppuhelper/implbase1.hxx>
49 #include <comphelper/servicehelper.hxx>
50 #include <comphelper/broadcasthelper.hxx>
51 
52 class Rectangle;
53 
54 /** @descr
55         This base class provides an implementation of the
56         <code>AccessibleContext</code> service.
57 */
58 
59 typedef cppu::WeakAggComponentImplHelper5<
60                 ::com::sun::star::accessibility::XAccessible,
61                 ::com::sun::star::accessibility::XAccessibleComponent,
62                 ::com::sun::star::accessibility::XAccessibleContext,
63                 ::com::sun::star::accessibility::XAccessibleEventBroadcaster,
64                 ::com::sun::star::lang::XServiceInfo
65                 > ScAccessibleContextBaseWeakImpl;
66 
67 typedef cppu::ImplHelper1<
68                 ::com::sun::star::accessibility::XAccessibleEventListener
69                 > ScAccessibleContextBaseImplEvent;
70 
71 class ScAccessibleContextBase
72     :   public comphelper::OBaseMutex,
73         public ScAccessibleContextBaseWeakImpl,
74         public ScAccessibleContextBaseImplEvent,
75         public SfxListener
76 {
77 public:
78     //=====  internal  ========================================================
79     ScAccessibleContextBase(
80         const ::com::sun::star::uno::Reference<
81         ::com::sun::star::accessibility::XAccessible>& rxParent,
82         const sal_Int16 aRole);
83 
84     virtual void Init();
85     virtual void SAL_CALL disposing();
86 protected:
87     virtual ~ScAccessibleContextBase(void);
88 public:
89     using WeakAggComponentImplHelperBase::addEventListener;
90     using WeakAggComponentImplHelperBase::removeEventListener;
91 
92     ///=====  SfxListener  =====================================================
93 
94     virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
95 
96     ///=====  XInterface  =====================================================
97 
98     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
99         ::com::sun::star::uno::Type const & rType )
100         throw (::com::sun::star::uno::RuntimeException);
101 
102     virtual void SAL_CALL acquire() throw ();
103 
104     virtual void SAL_CALL release() throw ();
105 
106     ///=====  XAccessible  =====================================================
107 
108     /// Return the XAccessibleContext.
109     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL
110         getAccessibleContext(void) throw (::com::sun::star::uno::RuntimeException);
111 
112     ///=====  XAccessibleComponent  ============================================
113 
114     virtual sal_Bool SAL_CALL containsPoint(
115         const ::com::sun::star::awt::Point& rPoint )
116         throw (::com::sun::star::uno::RuntimeException);
117 
118     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
119         SAL_CALL getAccessibleAtPoint(
120         const ::com::sun::star::awt::Point& rPoint )
121         throw (::com::sun::star::uno::RuntimeException);
122 
123     virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds(  )
124         throw (::com::sun::star::uno::RuntimeException);
125 
126     virtual ::com::sun::star::awt::Point SAL_CALL getLocation(  )
127         throw (::com::sun::star::uno::RuntimeException);
128 
129     virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen(  )
130         throw (::com::sun::star::uno::RuntimeException);
131 
132     virtual ::com::sun::star::awt::Size SAL_CALL getSize(  )
133         throw (::com::sun::star::uno::RuntimeException);
134 
135     virtual sal_Bool SAL_CALL isShowing(  )
136         throw (::com::sun::star::uno::RuntimeException);
137 
138     virtual sal_Bool SAL_CALL isVisible(  )
139         throw (::com::sun::star::uno::RuntimeException);
140 
141     virtual void SAL_CALL grabFocus(  )
142         throw (::com::sun::star::uno::RuntimeException);
143 
144     virtual sal_Int32 SAL_CALL getForeground(  )
145         throw (::com::sun::star::uno::RuntimeException);
146 
147     virtual sal_Int32 SAL_CALL getBackground(  )
148         throw (::com::sun::star::uno::RuntimeException);
149 
150     ///=====  XAccessibleContext  ==============================================
151 
152     /// Return the number of currently visible children.
153     virtual sal_Int32 SAL_CALL
154         getAccessibleChildCount(void) throw (::com::sun::star::uno::RuntimeException);
155 
156     /// Return the specified child or NULL if index is invalid.
157     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
158         getAccessibleChild(sal_Int32 nIndex)
159         throw (::com::sun::star::uno::RuntimeException,
160                 ::com::sun::star::lang::IndexOutOfBoundsException);
161 
162     /// Return a reference to the parent.
163     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
164         getAccessibleParent(void)
165         throw (::com::sun::star::uno::RuntimeException);
166 
167     /// Return this objects index among the parents children.
168     virtual sal_Int32 SAL_CALL
169         getAccessibleIndexInParent(void)
170         throw (::com::sun::star::uno::RuntimeException);
171 
172     /// Return this object's role.
173     virtual sal_Int16 SAL_CALL
174         getAccessibleRole(void)
175         throw (::com::sun::star::uno::RuntimeException);
176 
177     /// Return this object's description.
178     virtual ::rtl::OUString SAL_CALL
179         getAccessibleDescription(void)
180         throw (::com::sun::star::uno::RuntimeException);
181 
182     /// Return the object's current name.
183     virtual ::rtl::OUString SAL_CALL
184         getAccessibleName(void)
185         throw (::com::sun::star::uno::RuntimeException);
186 
187     /// Return NULL to indicate that an empty relation set.
188     virtual ::com::sun::star::uno::Reference<
189             ::com::sun::star::accessibility::XAccessibleRelationSet> SAL_CALL
190         getAccessibleRelationSet(void)
191         throw (::com::sun::star::uno::RuntimeException);
192 
193     /// Return the set of current states.
194     virtual ::com::sun::star::uno::Reference<
195             ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL
196         getAccessibleStateSet(void)
197         throw (::com::sun::star::uno::RuntimeException);
198 
199     /** Return the parents locale or throw exception if this object has no
200         parent yet/anymore.
201     */
202     virtual ::com::sun::star::lang::Locale SAL_CALL
203         getLocale(void)
204         throw (::com::sun::star::uno::RuntimeException,
205             ::com::sun::star::accessibility::IllegalAccessibleComponentStateException);
206 
207     ///=====  XAccessibleEventBroadcaster  =====================================
208 
209     /** Add listener that is informed of future changes of name,
210         description and so on events.
211     */
212     virtual void SAL_CALL
213         addEventListener(
214             const ::com::sun::star::uno::Reference<
215                 ::com::sun::star::accessibility::XAccessibleEventListener>& xListener)
216         throw (com::sun::star::uno::RuntimeException);
217 
218     //  Remove an existing event listener.
219     virtual void SAL_CALL
220         removeEventListener(
221             const ::com::sun::star::uno::Reference<
222                 ::com::sun::star::accessibility::XAccessibleEventListener>& xListener)
223         throw (com::sun::star::uno::RuntimeException);
224 
225     ///=====  XAccessibleEventListener  ========================================
226 
227     virtual void SAL_CALL
228         disposing( const ::com::sun::star::lang::EventObject& Source )
229         throw (::com::sun::star::uno::RuntimeException);
230 
231     virtual void SAL_CALL
232         notifyEvent(
233         const ::com::sun::star::accessibility::AccessibleEventObject& aEvent )
234         throw (::com::sun::star::uno::RuntimeException);
235 
236     ///=====  XServiceInfo  ====================================================
237 
238     /** Returns an identifier for the implementation of this object.
239     */
240     virtual ::rtl::OUString SAL_CALL
241         getImplementationName(void)
242         throw (::com::sun::star::uno::RuntimeException);
243 
244     /** Return whether the specified service is supported by this class.
245     */
246     virtual sal_Bool SAL_CALL
247         supportsService(const ::rtl::OUString& sServiceName)
248         throw (::com::sun::star::uno::RuntimeException);
249 
250     /** Returns a list of all supported services.  In this case that is just
251         the AccessibleContext and Accessible service.
252     */
253     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
254         getSupportedServiceNames(void)
255         throw (::com::sun::star::uno::RuntimeException);
256 
257     ///=====  XTypeProvider  ===================================================
258 
259     /// returns the possible types
260     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL
261         getTypes()
262         throw (::com::sun::star::uno::RuntimeException);
263 
264     /** Returns a implementation id.
265     */
266     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL
267         getImplementationId(void)
268         throw (::com::sun::star::uno::RuntimeException);
269 
270 protected:
271     /// Return this object's description.
272     virtual ::rtl::OUString SAL_CALL
273         createAccessibleDescription(void)
274         throw (::com::sun::star::uno::RuntimeException);
275 
276     /// Return the object's current name.
277     virtual ::rtl::OUString SAL_CALL
278         createAccessibleName(void)
279         throw (::com::sun::star::uno::RuntimeException);
280 
281     /// Return the object's current bounding box relative to the desktop.
282     virtual Rectangle GetBoundingBoxOnScreen(void) const
283         throw (::com::sun::star::uno::RuntimeException);
284 
285     /// Return the object's current bounding box relative to the parent object.
286     virtual Rectangle GetBoundingBox(void) const
287         throw (::com::sun::star::uno::RuntimeException);
288 
289 public:
290     /// Calls all Listener to tell they the change.
291     void
292         CommitChange(const com::sun::star::accessibility::AccessibleEventObject& rEvent) const;
293 
294     /// change the name and call the listener to tell they the change
295     void
296         ChangeName();
297 
298 protected:
299     /// Calls all FocusListener to tell they that the focus is gained.
300     void CommitFocusGained() const;
301 
302     /// Calls all FocusListener to tell they that the focus is lost.
303     void CommitFocusLost() const;
304 
IsDefunc() const305     sal_Bool IsDefunc() const { return rBHelper.bDisposed; }
306 
307     virtual void IsObjectValid() const
308         throw (::com::sun::star::lang::DisposedException);
309 
310     /// Use this method to set initial Name without notification
SetName(const rtl::OUString & rName)311     void SetName(const rtl::OUString& rName) { msName = rName; }
312     /// Use this method to set initial Description without notification
SetDescription(const rtl::OUString & rDesc)313     void SetDescription(const rtl::OUString& rDesc) { msDescription = rDesc; }
314 
315     /// Reference to the parent object.
316     ::com::sun::star::uno::Reference<
317          ::com::sun::star::accessibility::XAccessible> mxParent;
318 
319 private:
320     /** Description of this object.  This is not a constant because it can
321         be set from the outside.  Furthermore, it changes according the the
322         draw page's display mode.
323     */
324     ::rtl::OUString msDescription;
325 
326     /** Name of this object.  It changes according the the draw page's
327         display mode.
328     */
329     ::rtl::OUString msName;
330 
331     /// client id in the AccessibleEventNotifier queue
332     sal_uInt32 mnClientId;
333 
334     /** This is the role of this object.
335     */
336     sal_Int16 maRole;
337 };
338 
339 
340 #endif
341