Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <accessibility/extended/accessibletabbarpagelist.hxx>
21 : #include <svtools/tabbar.hxx>
22 : #include <accessibility/extended/accessibletabbarpage.hxx>
23 : #include <com/sun/star/accessibility/AccessibleEventId.hpp>
24 : #include <com/sun/star/accessibility/AccessibleRole.hpp>
25 : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
26 : #include <cppuhelper/supportsservice.hxx>
27 : #include <unotools/accessiblestatesethelper.hxx>
28 : #include <unotools/accessiblerelationsethelper.hxx>
29 : #include <vcl/svapp.hxx>
30 : #include <toolkit/helper/convert.hxx>
31 :
32 :
33 : //.........................................................................
34 : namespace accessibility
35 : {
36 : //.........................................................................
37 :
38 : using namespace ::com::sun::star::accessibility;
39 : using namespace ::com::sun::star::uno;
40 : using namespace ::com::sun::star::lang;
41 : using namespace ::com::sun::star;
42 : using namespace ::comphelper;
43 :
44 : // -----------------------------------------------------------------------------
45 : // class AccessibleTabBarPageList
46 : // -----------------------------------------------------------------------------
47 :
48 0 : AccessibleTabBarPageList::AccessibleTabBarPageList( TabBar* pTabBar, sal_Int32 nIndexInParent )
49 : :AccessibleTabBarBase( pTabBar )
50 0 : ,m_nIndexInParent( nIndexInParent )
51 : {
52 0 : if ( m_pTabBar )
53 0 : m_aAccessibleChildren.assign( m_pTabBar->GetPageCount(), Reference< XAccessible >() );
54 0 : }
55 :
56 : // -----------------------------------------------------------------------------
57 :
58 0 : AccessibleTabBarPageList::~AccessibleTabBarPageList()
59 : {
60 0 : }
61 :
62 : // -----------------------------------------------------------------------------
63 :
64 0 : void AccessibleTabBarPageList::UpdateEnabled( sal_Int32 i, sal_Bool bEnabled )
65 : {
66 0 : if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
67 : {
68 0 : Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
69 0 : if ( xChild.is() )
70 : {
71 0 : AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
72 0 : if ( pAccessibleTabBarPage )
73 0 : pAccessibleTabBarPage->SetEnabled( bEnabled );
74 0 : }
75 : }
76 0 : }
77 :
78 : // -----------------------------------------------------------------------------
79 :
80 0 : void AccessibleTabBarPageList::UpdateShowing( sal_Bool bShowing )
81 : {
82 0 : for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
83 : {
84 0 : Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
85 0 : if ( xChild.is() )
86 : {
87 0 : AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
88 0 : if ( pAccessibleTabBarPage )
89 0 : pAccessibleTabBarPage->SetShowing( bShowing );
90 : }
91 0 : }
92 0 : }
93 :
94 : // -----------------------------------------------------------------------------
95 :
96 0 : void AccessibleTabBarPageList::UpdateSelected( sal_Int32 i, sal_Bool bSelected )
97 : {
98 0 : NotifyAccessibleEvent( AccessibleEventId::SELECTION_CHANGED, Any(), Any() );
99 :
100 0 : if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
101 : {
102 0 : Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
103 0 : if ( xChild.is() )
104 : {
105 0 : AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
106 0 : if ( pAccessibleTabBarPage )
107 0 : pAccessibleTabBarPage->SetSelected( bSelected );
108 0 : }
109 : }
110 0 : }
111 :
112 : // -----------------------------------------------------------------------------
113 :
114 0 : void AccessibleTabBarPageList::UpdatePageText( sal_Int32 i )
115 : {
116 0 : if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
117 : {
118 0 : Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
119 0 : if ( xChild.is() )
120 : {
121 0 : AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
122 0 : if ( pAccessibleTabBarPage )
123 : {
124 0 : if ( m_pTabBar )
125 : {
126 0 : OUString sPageText = m_pTabBar->GetPageText( m_pTabBar->GetPageId( (sal_uInt16)i ) );
127 0 : pAccessibleTabBarPage->SetPageText( sPageText );
128 : }
129 : }
130 0 : }
131 : }
132 0 : }
133 :
134 : // -----------------------------------------------------------------------------
135 :
136 0 : void AccessibleTabBarPageList::InsertChild( sal_Int32 i )
137 : {
138 0 : if ( i >= 0 && i <= (sal_Int32)m_aAccessibleChildren.size() )
139 : {
140 : // insert entry in child list
141 0 : m_aAccessibleChildren.insert( m_aAccessibleChildren.begin() + i, Reference< XAccessible >() );
142 :
143 : // send accessible child event
144 0 : Reference< XAccessible > xChild( getAccessibleChild( i ) );
145 0 : if ( xChild.is() )
146 : {
147 0 : Any aOldValue, aNewValue;
148 0 : aNewValue <<= xChild;
149 0 : NotifyAccessibleEvent( AccessibleEventId::CHILD, aOldValue, aNewValue );
150 0 : }
151 : }
152 0 : }
153 :
154 : // -----------------------------------------------------------------------------
155 :
156 0 : void AccessibleTabBarPageList::RemoveChild( sal_Int32 i )
157 : {
158 0 : if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
159 : {
160 : // get the accessible of the removed page
161 0 : Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
162 :
163 : // remove entry in child list
164 0 : m_aAccessibleChildren.erase( m_aAccessibleChildren.begin() + i );
165 :
166 : // send accessible child event
167 0 : if ( xChild.is() )
168 : {
169 0 : Any aOldValue, aNewValue;
170 0 : aOldValue <<= xChild;
171 0 : NotifyAccessibleEvent( AccessibleEventId::CHILD, aOldValue, aNewValue );
172 :
173 0 : Reference< XComponent > xComponent( xChild, UNO_QUERY );
174 0 : if ( xComponent.is() )
175 0 : xComponent->dispose();
176 0 : }
177 : }
178 0 : }
179 :
180 : // -----------------------------------------------------------------------------
181 :
182 0 : void AccessibleTabBarPageList::MoveChild( sal_Int32 i, sal_Int32 j )
183 : {
184 0 : if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() &&
185 0 : j >= 0 && j <= (sal_Int32)m_aAccessibleChildren.size() )
186 : {
187 0 : if ( i < j )
188 0 : --j;
189 :
190 : // get the accessible of the moved page
191 0 : Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
192 :
193 : // remove entry in child list at old position
194 0 : m_aAccessibleChildren.erase( m_aAccessibleChildren.begin() + i );
195 :
196 : // insert entry in child list at new position
197 0 : m_aAccessibleChildren.insert( m_aAccessibleChildren.begin() + j, xChild );
198 : }
199 0 : }
200 :
201 : // -----------------------------------------------------------------------------
202 :
203 0 : void AccessibleTabBarPageList::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
204 : {
205 0 : switch ( rVclWindowEvent.GetId() )
206 : {
207 : case VCLEVENT_WINDOW_ENABLED:
208 : {
209 0 : Any aNewValue;
210 0 : aNewValue <<= AccessibleStateType::SENSITIVE;
211 0 : NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, Any(), aNewValue );
212 0 : aNewValue <<= AccessibleStateType::ENABLED;
213 0 : NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, Any(), aNewValue );
214 : }
215 0 : break;
216 : case VCLEVENT_WINDOW_DISABLED:
217 : {
218 0 : Any aOldValue;
219 0 : aOldValue <<= AccessibleStateType::ENABLED;
220 0 : NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, Any() );
221 0 : aOldValue <<= AccessibleStateType::SENSITIVE;
222 0 : NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, Any() );
223 : }
224 0 : break;
225 : case VCLEVENT_WINDOW_SHOW:
226 : {
227 0 : Any aOldValue, aNewValue;
228 0 : aNewValue <<= AccessibleStateType::SHOWING;
229 0 : NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
230 0 : UpdateShowing( sal_True );
231 : }
232 0 : break;
233 : case VCLEVENT_WINDOW_HIDE:
234 : {
235 0 : Any aOldValue, aNewValue;
236 0 : aOldValue <<= AccessibleStateType::SHOWING;
237 0 : NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
238 0 : UpdateShowing( sal_False );
239 : }
240 0 : break;
241 : case VCLEVENT_TABBAR_PAGEENABLED:
242 : {
243 0 : if ( m_pTabBar )
244 : {
245 0 : sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
246 0 : sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
247 0 : UpdateEnabled( nPagePos, sal_True );
248 : }
249 : }
250 0 : break;
251 : case VCLEVENT_TABBAR_PAGEDISABLED:
252 : {
253 0 : if ( m_pTabBar )
254 : {
255 0 : sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
256 0 : sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
257 0 : UpdateEnabled( nPagePos, sal_False );
258 : }
259 : }
260 0 : break;
261 : case VCLEVENT_TABBAR_PAGESELECTED:
262 : {
263 : // do nothing
264 : }
265 0 : break;
266 : case VCLEVENT_TABBAR_PAGEACTIVATED:
267 : {
268 0 : if ( m_pTabBar )
269 : {
270 0 : sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
271 0 : sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
272 0 : UpdateSelected( nPagePos, sal_True );
273 : }
274 : }
275 0 : break;
276 : case VCLEVENT_TABBAR_PAGEDEACTIVATED:
277 : {
278 0 : if ( m_pTabBar )
279 : {
280 0 : sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
281 0 : sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
282 0 : UpdateSelected( nPagePos, sal_False );
283 : }
284 : }
285 0 : break;
286 : case VCLEVENT_TABBAR_PAGEINSERTED:
287 : {
288 0 : if ( m_pTabBar )
289 : {
290 0 : sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
291 0 : sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
292 0 : InsertChild( nPagePos );
293 : }
294 : }
295 0 : break;
296 : case VCLEVENT_TABBAR_PAGEREMOVED:
297 : {
298 0 : if ( m_pTabBar )
299 : {
300 0 : sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
301 :
302 0 : if ( nPageId == TabBar::PAGE_NOT_FOUND )
303 : {
304 0 : for ( sal_Int32 i = m_aAccessibleChildren.size() - 1; i >= 0; --i )
305 0 : RemoveChild( i );
306 : }
307 : else
308 : {
309 0 : for ( sal_Int32 i = 0, nCount = getAccessibleChildCount(); i < nCount; ++i )
310 : {
311 0 : Reference< XAccessible > xChild( getAccessibleChild( i ) );
312 0 : if ( xChild.is() )
313 : {
314 0 : AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
315 0 : if ( pAccessibleTabBarPage && pAccessibleTabBarPage->GetPageId() == nPageId )
316 : {
317 0 : RemoveChild( i );
318 : break;
319 : }
320 : }
321 0 : }
322 : }
323 : }
324 : }
325 0 : break;
326 : case VCLEVENT_TABBAR_PAGEMOVED:
327 : {
328 0 : Pair* pPair = (Pair*) rVclWindowEvent.GetData();
329 0 : if ( pPair )
330 0 : MoveChild( pPair->A(), pPair->B() );
331 : }
332 0 : break;
333 : case VCLEVENT_TABBAR_PAGETEXTCHANGED:
334 : {
335 0 : sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
336 0 : sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
337 0 : UpdatePageText( nPagePos );
338 : }
339 0 : break;
340 : default:
341 : {
342 0 : AccessibleTabBarBase::ProcessWindowEvent( rVclWindowEvent );
343 : }
344 0 : break;
345 : }
346 0 : }
347 :
348 : // -----------------------------------------------------------------------------
349 :
350 0 : void AccessibleTabBarPageList::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
351 : {
352 0 : if ( m_pTabBar )
353 : {
354 0 : if ( m_pTabBar->IsEnabled() )
355 : {
356 0 : rStateSet.AddState( AccessibleStateType::ENABLED );
357 0 : rStateSet.AddState( AccessibleStateType::SENSITIVE );
358 : }
359 :
360 0 : rStateSet.AddState( AccessibleStateType::VISIBLE );
361 :
362 0 : if ( m_pTabBar->IsVisible() )
363 0 : rStateSet.AddState( AccessibleStateType::SHOWING );
364 : }
365 0 : }
366 :
367 : // -----------------------------------------------------------------------------
368 : // OCommonAccessibleComponent
369 : // -----------------------------------------------------------------------------
370 :
371 0 : awt::Rectangle AccessibleTabBarPageList::implGetBounds() throw (RuntimeException)
372 : {
373 0 : awt::Rectangle aBounds;
374 0 : if ( m_pTabBar )
375 0 : aBounds = AWTRectangle( m_pTabBar->GetPageArea() );
376 :
377 0 : return aBounds;
378 : }
379 :
380 : // -----------------------------------------------------------------------------
381 : // XInterface
382 : // -----------------------------------------------------------------------------
383 :
384 0 : IMPLEMENT_FORWARD_XINTERFACE2( AccessibleTabBarPageList, AccessibleExtendedComponentHelper_BASE, AccessibleTabBarPageList_BASE )
385 :
386 : // -----------------------------------------------------------------------------
387 : // XTypeProvider
388 : // -----------------------------------------------------------------------------
389 :
390 0 : IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccessibleTabBarPageList, AccessibleExtendedComponentHelper_BASE, AccessibleTabBarPageList_BASE )
391 :
392 : // -----------------------------------------------------------------------------
393 : // XComponent
394 : // -----------------------------------------------------------------------------
395 :
396 0 : void AccessibleTabBarPageList::disposing()
397 : {
398 0 : AccessibleTabBarBase::disposing();
399 :
400 : // dispose all children
401 0 : for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
402 : {
403 0 : Reference< XComponent > xComponent( m_aAccessibleChildren[i], UNO_QUERY );
404 0 : if ( xComponent.is() )
405 0 : xComponent->dispose();
406 0 : }
407 0 : m_aAccessibleChildren.clear();
408 0 : }
409 :
410 : // -----------------------------------------------------------------------------
411 : // XServiceInfo
412 : // -----------------------------------------------------------------------------
413 :
414 0 : OUString AccessibleTabBarPageList::getImplementationName() throw (RuntimeException)
415 : {
416 0 : return OUString( "com.sun.star.comp.svtools.AccessibleTabBarPageList" );
417 : }
418 :
419 : // -----------------------------------------------------------------------------
420 :
421 0 : sal_Bool AccessibleTabBarPageList::supportsService( const OUString& rServiceName ) throw (RuntimeException)
422 : {
423 0 : return cppu::supportsService(this, rServiceName);
424 : }
425 :
426 : // -----------------------------------------------------------------------------
427 :
428 0 : Sequence< OUString > AccessibleTabBarPageList::getSupportedServiceNames() throw (RuntimeException)
429 : {
430 0 : Sequence< OUString > aNames(1);
431 0 : aNames[0] = "com.sun.star.awt.AccessibleTabBarPageList";
432 0 : return aNames;
433 : }
434 :
435 : // -----------------------------------------------------------------------------
436 : // XAccessible
437 : // -----------------------------------------------------------------------------
438 :
439 0 : Reference< XAccessibleContext > AccessibleTabBarPageList::getAccessibleContext( ) throw (RuntimeException)
440 : {
441 0 : OExternalLockGuard aGuard( this );
442 :
443 0 : return this;
444 : }
445 :
446 : // -----------------------------------------------------------------------------
447 : // XAccessibleContext
448 : // -----------------------------------------------------------------------------
449 :
450 0 : sal_Int32 AccessibleTabBarPageList::getAccessibleChildCount() throw (RuntimeException)
451 : {
452 0 : OExternalLockGuard aGuard( this );
453 :
454 0 : return m_aAccessibleChildren.size();
455 : }
456 :
457 : // -----------------------------------------------------------------------------
458 :
459 0 : Reference< XAccessible > AccessibleTabBarPageList::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException)
460 : {
461 0 : OExternalLockGuard aGuard( this );
462 :
463 0 : if ( i < 0 || i >= getAccessibleChildCount() )
464 0 : throw IndexOutOfBoundsException();
465 :
466 0 : Reference< XAccessible > xChild = m_aAccessibleChildren[i];
467 0 : if ( !xChild.is() )
468 : {
469 0 : if ( m_pTabBar )
470 : {
471 0 : sal_uInt16 nPageId = m_pTabBar->GetPageId( (sal_uInt16)i );
472 :
473 0 : xChild = new AccessibleTabBarPage( m_pTabBar, nPageId, this );
474 :
475 : // insert into child list
476 0 : m_aAccessibleChildren[i] = xChild;
477 : }
478 : }
479 :
480 0 : return xChild;
481 : }
482 :
483 : // -----------------------------------------------------------------------------
484 :
485 0 : Reference< XAccessible > AccessibleTabBarPageList::getAccessibleParent( ) throw (RuntimeException)
486 : {
487 0 : OExternalLockGuard aGuard( this );
488 :
489 0 : Reference< XAccessible > xParent;
490 0 : if ( m_pTabBar )
491 0 : xParent = m_pTabBar->GetAccessible();
492 :
493 0 : return xParent;
494 : }
495 :
496 : // -----------------------------------------------------------------------------
497 :
498 0 : sal_Int32 AccessibleTabBarPageList::getAccessibleIndexInParent( ) throw (RuntimeException)
499 : {
500 0 : OExternalLockGuard aGuard( this );
501 :
502 0 : return m_nIndexInParent;
503 : }
504 :
505 : // -----------------------------------------------------------------------------
506 :
507 0 : sal_Int16 AccessibleTabBarPageList::getAccessibleRole( ) throw (RuntimeException)
508 : {
509 0 : OExternalLockGuard aGuard( this );
510 :
511 0 : return AccessibleRole::PAGE_TAB_LIST;
512 : }
513 :
514 : // -----------------------------------------------------------------------------
515 :
516 0 : OUString AccessibleTabBarPageList::getAccessibleDescription( ) throw (RuntimeException)
517 : {
518 0 : OExternalLockGuard aGuard( this );
519 :
520 0 : return OUString();
521 : }
522 :
523 : // -----------------------------------------------------------------------------
524 :
525 0 : OUString AccessibleTabBarPageList::getAccessibleName( ) throw (RuntimeException)
526 : {
527 0 : OExternalLockGuard aGuard( this );
528 :
529 0 : return OUString();
530 : }
531 :
532 : // -----------------------------------------------------------------------------
533 :
534 0 : Reference< XAccessibleRelationSet > AccessibleTabBarPageList::getAccessibleRelationSet( ) throw (RuntimeException)
535 : {
536 0 : OExternalLockGuard aGuard( this );
537 :
538 0 : utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
539 0 : Reference< XAccessibleRelationSet > xSet = pRelationSetHelper;
540 0 : return xSet;
541 : }
542 :
543 : // -----------------------------------------------------------------------------
544 :
545 0 : Reference< XAccessibleStateSet > AccessibleTabBarPageList::getAccessibleStateSet( ) throw (RuntimeException)
546 : {
547 0 : OExternalLockGuard aGuard( this );
548 :
549 0 : utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
550 0 : Reference< XAccessibleStateSet > xSet = pStateSetHelper;
551 :
552 0 : if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
553 : {
554 0 : FillAccessibleStateSet( *pStateSetHelper );
555 : }
556 : else
557 : {
558 0 : pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
559 : }
560 :
561 0 : return xSet;
562 : }
563 :
564 : // -----------------------------------------------------------------------------
565 :
566 0 : Locale AccessibleTabBarPageList::getLocale( ) throw (IllegalAccessibleComponentStateException, RuntimeException)
567 : {
568 0 : OExternalLockGuard aGuard( this );
569 :
570 0 : return Application::GetSettings().GetLanguageTag().getLocale();
571 : }
572 :
573 : // -----------------------------------------------------------------------------
574 : // XAccessibleComponent
575 : // -----------------------------------------------------------------------------
576 :
577 0 : Reference< XAccessible > AccessibleTabBarPageList::getAccessibleAtPoint( const awt::Point& rPoint ) throw (RuntimeException)
578 : {
579 0 : OExternalLockGuard aGuard( this );
580 :
581 0 : Reference< XAccessible > xChild;
582 0 : for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
583 : {
584 0 : Reference< XAccessible > xAcc = getAccessibleChild( i );
585 0 : if ( xAcc.is() )
586 : {
587 0 : Reference< XAccessibleComponent > xComp( xAcc->getAccessibleContext(), UNO_QUERY );
588 0 : if ( xComp.is() )
589 : {
590 0 : Rectangle aRect = VCLRectangle( xComp->getBounds() );
591 0 : Point aPos = VCLPoint( rPoint );
592 0 : if ( aRect.IsInside( aPos ) )
593 : {
594 0 : xChild = xAcc;
595 : break;
596 : }
597 0 : }
598 : }
599 0 : }
600 :
601 0 : return xChild;
602 : }
603 :
604 : // -----------------------------------------------------------------------------
605 :
606 0 : void AccessibleTabBarPageList::grabFocus( ) throw (RuntimeException)
607 : {
608 : // no focus
609 0 : }
610 :
611 : // -----------------------------------------------------------------------------
612 :
613 0 : sal_Int32 AccessibleTabBarPageList::getForeground( ) throw (RuntimeException)
614 : {
615 0 : OExternalLockGuard aGuard( this );
616 :
617 0 : sal_Int32 nColor = 0;
618 0 : Reference< XAccessible > xParent = getAccessibleParent();
619 0 : if ( xParent.is() )
620 : {
621 0 : Reference< XAccessibleComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
622 0 : if ( xParentComp.is() )
623 0 : nColor = xParentComp->getForeground();
624 : }
625 :
626 0 : return nColor;
627 : }
628 :
629 : // -----------------------------------------------------------------------------
630 :
631 0 : sal_Int32 AccessibleTabBarPageList::getBackground( ) throw (RuntimeException)
632 : {
633 0 : OExternalLockGuard aGuard( this );
634 :
635 0 : sal_Int32 nColor = 0;
636 0 : Reference< XAccessible > xParent = getAccessibleParent();
637 0 : if ( xParent.is() )
638 : {
639 0 : Reference< XAccessibleComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
640 0 : if ( xParentComp.is() )
641 0 : nColor = xParentComp->getBackground();
642 : }
643 :
644 0 : return nColor;
645 : }
646 :
647 : // -----------------------------------------------------------------------------
648 : // XAccessibleExtendedComponent
649 : // -----------------------------------------------------------------------------
650 :
651 0 : Reference< awt::XFont > AccessibleTabBarPageList::getFont( ) throw (RuntimeException)
652 : {
653 0 : OExternalLockGuard aGuard( this );
654 :
655 0 : Reference< awt::XFont > xFont;
656 0 : Reference< XAccessible > xParent = getAccessibleParent();
657 0 : if ( xParent.is() )
658 : {
659 0 : Reference< XAccessibleExtendedComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
660 0 : if ( xParentComp.is() )
661 0 : xFont = xParentComp->getFont();
662 : }
663 :
664 0 : return xFont;
665 : }
666 :
667 : // -----------------------------------------------------------------------------
668 :
669 0 : OUString AccessibleTabBarPageList::getTitledBorderText( ) throw (RuntimeException)
670 : {
671 0 : OExternalLockGuard aGuard( this );
672 :
673 0 : return OUString();
674 : }
675 :
676 : // -----------------------------------------------------------------------------
677 :
678 0 : OUString AccessibleTabBarPageList::getToolTipText( ) throw (RuntimeException)
679 : {
680 0 : OExternalLockGuard aGuard( this );
681 :
682 0 : return OUString();
683 : }
684 :
685 : // -----------------------------------------------------------------------------
686 : // XAccessibleSelection
687 : // -----------------------------------------------------------------------------
688 :
689 0 : void AccessibleTabBarPageList::selectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
690 : {
691 0 : OExternalLockGuard aGuard( this );
692 :
693 0 : if ( nChildIndex < 0 || nChildIndex >= getAccessibleChildCount() )
694 0 : throw IndexOutOfBoundsException();
695 :
696 0 : if ( m_pTabBar )
697 : {
698 0 : m_pTabBar->SetCurPageId( m_pTabBar->GetPageId( (sal_uInt16)nChildIndex ) );
699 0 : m_pTabBar->Update();
700 0 : m_pTabBar->ActivatePage();
701 0 : m_pTabBar->Select();
702 0 : }
703 0 : }
704 :
705 : // -----------------------------------------------------------------------------
706 :
707 0 : sal_Bool AccessibleTabBarPageList::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
708 : {
709 0 : OExternalLockGuard aGuard( this );
710 :
711 0 : if ( nChildIndex < 0 || nChildIndex >= getAccessibleChildCount() )
712 0 : throw IndexOutOfBoundsException();
713 :
714 0 : sal_Bool bSelected = sal_False;
715 0 : if ( m_pTabBar && m_pTabBar->GetCurPageId() == m_pTabBar->GetPageId( (sal_uInt16)nChildIndex ) )
716 0 : bSelected = sal_True;
717 :
718 0 : return bSelected;
719 : }
720 :
721 : // -----------------------------------------------------------------------------
722 :
723 0 : void AccessibleTabBarPageList::clearAccessibleSelection( ) throw (RuntimeException)
724 : {
725 : // This method makes no sense in a TabBar, and so does nothing.
726 0 : }
727 :
728 : // -----------------------------------------------------------------------------
729 :
730 0 : void AccessibleTabBarPageList::selectAllAccessibleChildren( ) throw (RuntimeException)
731 : {
732 0 : OExternalLockGuard aGuard( this );
733 :
734 0 : selectAccessibleChild( 0 );
735 0 : }
736 :
737 : // -----------------------------------------------------------------------------
738 :
739 0 : sal_Int32 AccessibleTabBarPageList::getSelectedAccessibleChildCount( ) throw (RuntimeException)
740 : {
741 0 : OExternalLockGuard aGuard( this );
742 :
743 0 : return 1;
744 : }
745 :
746 : // -----------------------------------------------------------------------------
747 :
748 0 : Reference< XAccessible > AccessibleTabBarPageList::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
749 : {
750 0 : OExternalLockGuard aGuard( this );
751 :
752 0 : if ( nSelectedChildIndex < 0 || nSelectedChildIndex >= getSelectedAccessibleChildCount() )
753 0 : throw IndexOutOfBoundsException();
754 :
755 0 : Reference< XAccessible > xChild;
756 :
757 0 : for ( sal_Int32 i = 0, j = 0, nCount = getAccessibleChildCount(); i < nCount; i++ )
758 : {
759 0 : if ( isAccessibleChildSelected( i ) && ( j++ == nSelectedChildIndex ) )
760 : {
761 0 : xChild = getAccessibleChild( i );
762 0 : break;
763 : }
764 : }
765 :
766 0 : return xChild;
767 : }
768 :
769 : // -----------------------------------------------------------------------------
770 :
771 0 : void AccessibleTabBarPageList::deselectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
772 : {
773 0 : OExternalLockGuard aGuard( this );
774 :
775 0 : if ( nChildIndex < 0 || nChildIndex >= getAccessibleChildCount() )
776 0 : throw IndexOutOfBoundsException();
777 :
778 : // This method makes no sense in a TabBar, and so does nothing.
779 0 : }
780 :
781 : // -----------------------------------------------------------------------------
782 :
783 : //.........................................................................
784 : } // namespace accessibility
785 : //.........................................................................
786 :
787 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|