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 _SVXRECTACCESSIBLECONTEXT_HXX
26 #define _SVXRECTACCESSIBLECONTEXT_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 #include <com/sun/star/accessibility/IllegalAccessibleComponentStateException.hpp>
33 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
34 #include <com/sun/star/accessibility/XAccessibleValue.hpp>
35 #include <com/sun/star/beans/XPropertyChangeListener.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 <com/sun/star/lang/DisposedException.hpp>
43 #include <vos/mutex.hxx>
44 #include <cppuhelper/interfacecontainer.h>
45 #include <cppuhelper/compbase6.hxx>
46 #ifndef _CPPUHELPER_COMPBASE7_HXX_
47 #include <cppuhelper/compbase7.hxx>
48 #endif
49 #ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_ACTION_HPP_
50 #include <com/sun/star/accessibility/XAccessibleAction.hpp>
51 #endif
52 #include <comphelper/broadcasthelper.hxx>
53 #include <cppuhelper/implbase6.hxx>
54 #include <comphelper/servicehelper.hxx>
55 #include <svx/rectenum.hxx>
56 
57 namespace com { namespace sun { namespace star { namespace awt {
58 	struct Point;
59 	struct Rectangle;
60 	struct Size;
61 	class XFocusListener;
62 } } } }
63 
64 class Rectangle;
65 class SvxRectCtl;
66 class SvxRectCtlChildAccessibleContext;
67 class Window;
68 
69 
70 typedef ::cppu::WeakAggComponentImplHelper6<
71 			::com::sun::star::accessibility::XAccessible,
72 			::com::sun::star::accessibility::XAccessibleComponent,
73 			::com::sun::star::accessibility::XAccessibleContext,
74 			::com::sun::star::accessibility::XAccessibleEventBroadcaster,
75 			::com::sun::star::accessibility::XAccessibleSelection,
76 			::com::sun::star::lang::XServiceInfo >
77 			SvxRectCtlAccessibleContext_Base;
78 
79 class SvxRectCtlAccessibleContext : public ::comphelper::OBaseMutex, public SvxRectCtlAccessibleContext_Base
80 {
81 public:
82 	//=====  internal  ========================================================
83 	SvxRectCtlAccessibleContext(
84         const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible>& rxParent,
85 		SvxRectCtl&				rRepresentation,
86 		const ::rtl::OUString*	pName = NULL,
87 		const ::rtl::OUString*	pDescription = NULL );
88 protected:
89 	virtual ~SvxRectCtlAccessibleContext();
90 public:
91 	//=====  XAccessible  =====================================================
92 
93 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL
94 		getAccessibleContext( void ) throw( ::com::sun::star::uno::RuntimeException );
95 
96 	//=====  XAccessibleComponent  ============================================
97 
98 	virtual sal_Bool SAL_CALL
99 		containsPoint( const ::com::sun::star::awt::Point& rPoint ) throw( ::com::sun::star::uno::RuntimeException );
100 
101 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
102 		getAccessibleAtPoint( const ::com::sun::star::awt::Point& rPoint ) throw( ::com::sun::star::uno::RuntimeException );
103 
104 	virtual ::com::sun::star::awt::Rectangle SAL_CALL
105 		getBounds() throw( ::com::sun::star::uno::RuntimeException );
106 
107 	virtual ::com::sun::star::awt::Point SAL_CALL
108 		getLocation() throw( ::com::sun::star::uno::RuntimeException );
109 
110 	virtual ::com::sun::star::awt::Point SAL_CALL
111 		getLocationOnScreen() throw( ::com::sun::star::uno::RuntimeException );
112 
113 	virtual ::com::sun::star::awt::Size SAL_CALL
114 		getSize() throw( ::com::sun::star::uno::RuntimeException );
115 
116 	virtual sal_Bool SAL_CALL
117 		isShowing() throw( ::com::sun::star::uno::RuntimeException );
118 
119 	virtual sal_Bool SAL_CALL
120 		isVisible() throw( ::com::sun::star::uno::RuntimeException );
121 
122 	virtual sal_Bool SAL_CALL
123 		isFocusTraversable() throw( ::com::sun::star::uno::RuntimeException );
124 
125 	virtual void SAL_CALL
126 		addFocusListener(
127 			const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener )
128 			throw( ::com::sun::star::uno::RuntimeException );
129 
130 	virtual void SAL_CALL
131 		removeFocusListener(
132 			const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener )
133 			throw( ::com::sun::star::uno::RuntimeException );
134 
135 	virtual void SAL_CALL
136 		grabFocus() throw( ::com::sun::star::uno::RuntimeException );
137 
138 	virtual ::com::sun::star::uno::Any SAL_CALL
139 		getAccessibleKeyBinding() throw( ::com::sun::star::uno::RuntimeException );
140     virtual sal_Int32 SAL_CALL
141         getForeground(  ) throw (::com::sun::star::uno::RuntimeException);
142     virtual sal_Int32 SAL_CALL
143         getBackground(  ) throw (::com::sun::star::uno::RuntimeException);
144 
145 	//=====  XAccessibleContext  ==============================================
146 
147 	virtual sal_Int32 SAL_CALL
148 		getAccessibleChildCount( void ) throw( ::com::sun::star::uno::RuntimeException );
149 
150 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
151 		getAccessibleChild( sal_Int32 nIndex )
152 			throw( ::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IndexOutOfBoundsException );
153 
154 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
155 		getAccessibleParent( void ) throw( ::com::sun::star::uno::RuntimeException );
156 
157 	virtual	sal_Int32 SAL_CALL
158 		getAccessibleIndexInParent( void ) throw( ::com::sun::star::uno::RuntimeException );
159 
160 	virtual sal_Int16 SAL_CALL
161 		getAccessibleRole( void ) throw( ::com::sun::star::uno::RuntimeException );
162 
163 	virtual ::rtl::OUString SAL_CALL
164 		getAccessibleDescription( void ) throw (::com::sun::star::uno::RuntimeException);
165 
166 	virtual ::rtl::OUString SAL_CALL
167 		getAccessibleName( void ) throw (::com::sun::star::uno::RuntimeException);
168 
169 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL
170 		getAccessibleRelationSet( void ) throw( ::com::sun::star::uno::RuntimeException );
171 
172 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleStateSet > SAL_CALL
173 		getAccessibleStateSet( void ) throw( ::com::sun::star::uno::RuntimeException );
174 
175 	virtual ::com::sun::star::lang::Locale SAL_CALL
176 		getLocale( void )
177 			throw(	::com::sun::star::uno::RuntimeException,
178 					::com::sun::star::accessibility::IllegalAccessibleComponentStateException );
179 
180     //=====  XComponent  =====================================================
181 
182     using ::cppu::WeakAggComponentImplHelperBase::addEventListener;
183     using ::cppu::WeakAggComponentImplHelperBase::removeEventListener;
184 
185     //=====  XAccessibleEventBroadcaster  =====================================
186 
187 	virtual void SAL_CALL
188 		addEventListener(
189 			const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener )
190 			throw( com::sun::star::uno::RuntimeException );
191 
192 	virtual void SAL_CALL
193 		removeEventListener(
194 			const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener )
195 			throw( com::sun::star::uno::RuntimeException );
196 
197 	//=====  XServiceInfo  ====================================================
198 
199 	virtual ::rtl::OUString SAL_CALL
200 		getImplementationName( void ) throw( ::com::sun::star::uno::RuntimeException );
201 
202 	virtual sal_Bool SAL_CALL
203 		supportsService( const ::rtl::OUString& sServiceName ) throw( ::com::sun::star::uno::RuntimeException );
204 
205 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
206 		getSupportedServiceNames( void ) throw( ::com::sun::star::uno::RuntimeException );
207 
208 	//=====  XTypeProvider  ===================================================
209 
210 	virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL
211 		getImplementationId( void ) throw( ::com::sun::star::uno::RuntimeException );
212 
213 	//=====  XAccessibleSelection =============================================
214 
215 	virtual void SAL_CALL
216 		selectAccessibleChild( sal_Int32 nChildIndex )
217 			throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
218 
219 	virtual sal_Bool SAL_CALL
220 		isAccessibleChildSelected( sal_Int32 nChildIndex )
221 			throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
222 
223 	virtual void SAL_CALL
224 		clearAccessibleSelection() throw( ::com::sun::star::uno::RuntimeException );
225 
226 	virtual void SAL_CALL
227 		selectAllAccessibleChildren() throw( ::com::sun::star::uno::RuntimeException );
228 
229 	virtual sal_Int32 SAL_CALL
230 		getSelectedAccessibleChildCount() throw( ::com::sun::star::uno::RuntimeException );
231 
232 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
233 		getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex )
234 			throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
235 
236 	virtual void SAL_CALL
237 		deselectAccessibleChild( sal_Int32 nSelectedChildIndex )
238 			throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException );
239 
240 
241 protected:
242 	//=====  internals ========================================================
243 
244 	void checkChildIndex( long nIndexOfChild ) throw( ::com::sun::star::lang::IndexOutOfBoundsException );
245 
246 	void checkChildIndexOnSelection( long nIndexOfChild ) throw( ::com::sun::star::lang::IndexOutOfBoundsException );
247 
248     /** Selects a new child by index.
249 
250         <p>If the child was not selected before, the state of the child will
251         be updated. If the index is invalid, the index will internaly set to NOCHILDSELECTED</p>
252 
253         @param nIndexOfChild
254             Index of the new child which should be selected.
255     */
256 	//void selectChild( long nIndexOfChild );
257 	void selectChild( long nIndexOfChild, sal_Bool bFireFocus = sal_True);
258 
259 public:
260     /** Selects a new child by point.
261 
262         <p>If the child was not selected before, the state of the child will
263         be updated. If the point is not invalid, the index will internaly set to NOCHILDSELECTED</p>
264 
265         @param eButton
266             Button which belongs to the child which should be selected.
267     */
268 	//void selectChild( RECT_POINT ePoint );
269 	void selectChild( RECT_POINT ePoint, sal_Bool bFireFocus = sal_True );
270 	void FireChildFocus( RECT_POINT eButton );
271 	//Solution: Add the event handling method
272 	void FireAccessibleEvent (short nEventId, const ::com::sun::star::uno::Any& rOld, const ::com::sun::star::uno::Any& rNew);
273 	/// Sets the name
274 	void setName( const ::rtl::OUString& rName );
275 
276 	/// Sets the description
277 	void setDescription( const ::rtl::OUString& rDescr );
278 private:
279 	static ::com::sun::star::uno::Sequence< sal_Int8 > getUniqueId( void );
280 protected:
281 
282     ///	@Return the object's current bounding box relative to the desktop.
283 	virtual Rectangle GetBoundingBoxOnScreen( void ) 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 ) throw( ::com::sun::star::uno::RuntimeException );
287 
288 	/// Calls all Listener to tell they the change.
289 	void CommitChange( const com::sun::star::accessibility::AccessibleEventObject& rEvent );
290 
291 	virtual void SAL_CALL disposing();
292 
293 	/// @returns true if it's disposed or in disposing
294 	inline sal_Bool IsAlive( void ) const;
295 
296 	/// @returns true if it's not disposed and no in disposing
297 	inline sal_Bool IsNotAlive( void ) const;
298 
299 	/// throws the exception DisposedException if it's not alive
300 	void ThrowExceptionIfNotAlive( void ) throw( ::com::sun::star::lang::DisposedException );
301 
302 private:
303     /**	Description of this object.  This is not a constant because it can
304     	be set from the outside.
305     */
306     ::rtl::OUString						msDescription;
307 
308     /**	Name of this object.
309     */
310     ::rtl::OUString						msName;
311 
312     ///	Reference to the parent object.
313     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
314 										mxParent;
315 
316 	/// pointer to internal representation
317 	SvxRectCtl*							mpRepr;
318 
319 	/// array for all possible childs
320 	SvxRectCtlChildAccessibleContext**	mpChilds;
321 
322     /// client id in the AccessibleEventNotifier queue
323     sal_uInt32 mnClientId;
324 
325     /// actual selected child
326 	long								mnSelectedChild;
327 
328 	/// mode of control (true -> 8 points, false -> 9 points)
329 	sal_Bool							mbAngleMode;
330 };
331 
332 inline sal_Bool SvxRectCtlAccessibleContext::IsAlive( void ) const
333 {
334 	return !rBHelper.bDisposed && !rBHelper.bInDispose;
335 }
336 
337 inline sal_Bool SvxRectCtlAccessibleContext::IsNotAlive( void ) const
338 {
339 	return rBHelper.bDisposed || rBHelper.bInDispose;
340 }
341 
342 typedef ::cppu::WeakAggComponentImplHelper7<
343 			::com::sun::star::accessibility::XAccessible,
344 			::com::sun::star::accessibility::XAccessibleComponent,
345 			::com::sun::star::accessibility::XAccessibleContext,
346 			::com::sun::star::accessibility::XAccessibleEventBroadcaster,
347 			::com::sun::star::accessibility::XAccessibleValue,
348 			::com::sun::star::accessibility::XAccessibleAction,
349 			::com::sun::star::lang::XServiceInfo >
350 			SvxRectCtlChildAccessibleContext_Base;
351 
352 
353 class SvxRectCtlChildAccessibleContext : public SvxRectCtlChildAccessibleContext_Base
354 {
355 public:
356 	SvxRectCtlChildAccessibleContext(
357         const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible>& rxParent,
358 		const Window& rParentWindow,
359 		const ::rtl::OUString& rName, const ::rtl::OUString& rDescription,
360 		const Rectangle& rBoundingBox,
361 		long nIndexInParent );
362 protected:
363 	virtual ~SvxRectCtlChildAccessibleContext();
364 public:
365 	//=====  XAccessible  =====================================================
366 
367     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL
368     	getAccessibleContext( void ) throw( ::com::sun::star::uno::RuntimeException );
369 
370 	//=====  XAccessibleComponent  ============================================
371 
372     virtual sal_Bool SAL_CALL
373 		containsPoint( const ::com::sun::star::awt::Point& rPoint ) throw( ::com::sun::star::uno::RuntimeException );
374 
375     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
376 		getAccessibleAtPoint( const ::com::sun::star::awt::Point& rPoint ) throw( ::com::sun::star::uno::RuntimeException );
377 
378     virtual ::com::sun::star::awt::Rectangle SAL_CALL
379 		getBounds() throw( ::com::sun::star::uno::RuntimeException );
380 
381     virtual ::com::sun::star::awt::Point SAL_CALL
382 		getLocation() throw( ::com::sun::star::uno::RuntimeException );
383 
384     virtual ::com::sun::star::awt::Point SAL_CALL
385 		getLocationOnScreen() throw( ::com::sun::star::uno::RuntimeException );
386 
387     virtual ::com::sun::star::awt::Size SAL_CALL
388 		getSize() throw( ::com::sun::star::uno::RuntimeException );
389 
390 	virtual sal_Bool SAL_CALL
391 		isShowing() throw( ::com::sun::star::uno::RuntimeException );
392 
393     virtual sal_Bool SAL_CALL
394 		isVisible() throw( ::com::sun::star::uno::RuntimeException );
395 
396     virtual sal_Bool SAL_CALL
397 		isFocusTraversable() throw( ::com::sun::star::uno::RuntimeException );
398 
399     virtual void SAL_CALL
400 		addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener )
401 			throw( ::com::sun::star::uno::RuntimeException );
402 
403 	virtual void SAL_CALL
404 		removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener )
405 			throw (::com::sun::star::uno::RuntimeException);
406 
407     virtual void SAL_CALL
408 		grabFocus() throw( ::com::sun::star::uno::RuntimeException );
409 
410     virtual ::com::sun::star::uno::Any SAL_CALL
411 		getAccessibleKeyBinding() throw( ::com::sun::star::uno::RuntimeException );
412     virtual sal_Int32 SAL_CALL
413         getForeground(  ) throw (::com::sun::star::uno::RuntimeException);
414     virtual sal_Int32 SAL_CALL
415         getBackground(  ) throw (::com::sun::star::uno::RuntimeException);
416 
417 	//=====  XAccessibleContext  ==============================================
418 
419     virtual sal_Int32 SAL_CALL
420     	getAccessibleChildCount( void ) throw( ::com::sun::star::uno::RuntimeException );
421 
422     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
423     	getAccessibleChild( sal_Int32 nIndex )
424 			throw( ::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IndexOutOfBoundsException );
425 
426 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
427     	getAccessibleParent( void ) throw( ::com::sun::star::uno::RuntimeException );
428 
429 	virtual	sal_Int32 SAL_CALL
430     	getAccessibleIndexInParent( void ) throw( ::com::sun::star::uno::RuntimeException );
431 
432 	virtual sal_Int16 SAL_CALL
433     	getAccessibleRole( void ) throw( ::com::sun::star::uno::RuntimeException );
434 
435 	virtual ::rtl::OUString SAL_CALL
436     	getAccessibleDescription( void ) throw( ::com::sun::star::uno::RuntimeException );
437 
438 	virtual ::rtl::OUString SAL_CALL
439     	getAccessibleName( void ) throw( ::com::sun::star::uno::RuntimeException );
440 
441 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL
442     	getAccessibleRelationSet( void ) throw( ::com::sun::star::uno::RuntimeException );
443 
444 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleStateSet > SAL_CALL
445     	getAccessibleStateSet( void ) throw( ::com::sun::star::uno::RuntimeException );
446 
447 	virtual ::com::sun::star::lang::Locale SAL_CALL
448     	getLocale( void )
449 			throw( ::com::sun::star::uno::RuntimeException, ::com::sun::star::accessibility::IllegalAccessibleComponentStateException );
450 
451     //=====  XComponent  =====================================================
452 
453     using ::cppu::WeakAggComponentImplHelperBase::addEventListener;
454     using ::cppu::WeakAggComponentImplHelperBase::removeEventListener;
455 
456 	//=====  XAccessibleEventBroadcaster  =====================================
457 
458 	virtual void SAL_CALL
459     	addEventListener(
460         	const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener )
461 			throw( ::com::sun::star::uno::RuntimeException );
462 
463 	virtual void SAL_CALL
464     	removeEventListener(
465 			const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener )
466 	        throw( com::sun::star::uno::RuntimeException );
467 
468 	//=====  XAccessibleValue  ================================================
469 
470     virtual ::com::sun::star::uno::Any SAL_CALL
471 		getCurrentValue() throw( ::com::sun::star::uno::RuntimeException );
472 
473     virtual sal_Bool SAL_CALL
474 		setCurrentValue( const ::com::sun::star::uno::Any& aNumber ) throw( ::com::sun::star::uno::RuntimeException );
475 
476     virtual ::com::sun::star::uno::Any SAL_CALL
477 		getMaximumValue() throw( ::com::sun::star::uno::RuntimeException );
478 
479     virtual ::com::sun::star::uno::Any SAL_CALL
480 		getMinimumValue() throw( ::com::sun::star::uno::RuntimeException );
481 
482 	// XAccessibleAction
483 	virtual sal_Int32 SAL_CALL getAccessibleActionCount( ) throw (::com::sun::star::uno::RuntimeException);
484 	virtual sal_Bool SAL_CALL doAccessibleAction ( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
485 	virtual ::rtl::OUString SAL_CALL getAccessibleActionDescription ( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
486 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleKeyBinding > SAL_CALL getAccessibleActionKeyBinding( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
487 	//=====  XServiceInfo  ====================================================
488 
489 	virtual ::rtl::OUString SAL_CALL
490     	getImplementationName( void ) throw( ::com::sun::star::uno::RuntimeException );
491 
492     virtual sal_Bool SAL_CALL
493     	supportsService( const ::rtl::OUString& sServiceName ) throw( ::com::sun::star::uno::RuntimeException );
494 
495 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
496     	getSupportedServiceNames( void ) throw( ::com::sun::star::uno::RuntimeException );
497 
498 
499 	//=====  XTypeProvider  ===================================================
500 
501     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL
502         getImplementationId( void ) throw( ::com::sun::star::uno::RuntimeException );
503 
504 	//===== internal ==========================================================
505 
506 	/// Sets the checked status
507 	//void setStateChecked( sal_Bool bChecked );
508 	void setStateChecked( sal_Bool bChecked, sal_Bool bFireFocus = sal_True);
509 	void FireFocusEvent();
510 protected:
511 	virtual Rectangle GetBoundingBoxOnScreen( void ) throw( ::com::sun::star::uno::RuntimeException );
512 
513 	virtual Rectangle GetBoundingBox( void ) throw( ::com::sun::star::uno::RuntimeException );
514 
515 	void CommitChange( const com::sun::star::accessibility::AccessibleEventObject& rEvent );
516 
517 	virtual void SAL_CALL disposing();
518 
519 	/// @returns true if it's disposed or in disposing
520 	inline sal_Bool IsAlive( void ) const;
521 
522 	/// @returns true if it's not disposed and no in disposing
523 	inline sal_Bool IsNotAlive( void ) const;
524 
525 	/// throws the exception DisposedException if it's not alive
526 	void ThrowExceptionIfNotAlive( void ) throw( ::com::sun::star::lang::DisposedException );
527 
528 	///	Mutex guarding this object.
529     ::osl::Mutex						maMutex;
530 
531 private:
532 
533     /**	Description of this object.  This is not a constant because it can
534     	be set from the outside.  Furthermore, it changes according the the
535         draw page's display mode.
536     */
537     ::rtl::OUString						msDescription;
538 
539     /**	Name of this object.  It changes according the the draw page's
540         display mode.
541     */
542     ::rtl::OUString						msName;
543 
544     ///	Reference to the parent object.
545     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
546 										mxParent;
547 
548 	/// Bounding box
549 	Rectangle*							mpBoundingBox;
550 
551 	/// window of parent
552 	const Window&						mrParentWindow;
553 
554     /// client id in the AccessibleEventNotifier queue
555     sal_uInt32                          mnClientId;
556 
557 	/// index of child in parent
558 	long								mnIndexInParent;
559 
560 	/// Indicates, if object is checked
561 	sal_Bool							mbIsChecked;
562 };
563 
564 inline sal_Bool SvxRectCtlChildAccessibleContext::IsAlive( void ) const
565 {
566 	return !rBHelper.bDisposed && !rBHelper.bInDispose;
567 }
568 
569 inline sal_Bool SvxRectCtlChildAccessibleContext::IsNotAlive( void ) const
570 {
571 	return rBHelper.bDisposed || rBHelper.bInDispose;
572 }
573 
574 
575 #endif
576