xref: /trunk/main/accessibility/source/extended/accessibletabbarpage.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
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.
14  *
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).
20  *
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.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_accessibility.hxx"
30 #include <accessibility/extended/accessibletabbarpage.hxx>
31 #include <svtools/tabbar.hxx>
32 #include <com/sun/star/accessibility/AccessibleEventId.hpp>
33 #include <com/sun/star/accessibility/AccessibleRole.hpp>
34 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
35 #include <unotools/accessiblestatesethelper.hxx>
36 #include <unotools/accessiblerelationsethelper.hxx>
37 #include <vcl/svapp.hxx>
38 #include <toolkit/helper/convert.hxx>
39 
40 
41 //.........................................................................
42 namespace accessibility
43 {
44 //.........................................................................
45 
46     using namespace ::com::sun::star::accessibility;
47     using namespace ::com::sun::star::uno;
48     using namespace ::com::sun::star::lang;
49     using namespace ::com::sun::star;
50     using namespace ::comphelper;
51 
52     // -----------------------------------------------------------------------------
53     // class AccessibleTabBarPage
54     // -----------------------------------------------------------------------------
55 
56     AccessibleTabBarPage::AccessibleTabBarPage( TabBar* pTabBar, sal_uInt16 nPageId, const Reference< XAccessible >& rxParent )
57         :AccessibleTabBarBase( pTabBar )
58         ,m_nPageId( nPageId )
59         ,m_xParent( rxParent )
60     {
61         m_bEnabled  = IsEnabled();
62         m_bShowing  = IsShowing();
63         m_bSelected = IsSelected();
64 
65         if ( m_pTabBar )
66             m_sPageText = m_pTabBar->GetPageText( m_nPageId );
67     }
68 
69     // -----------------------------------------------------------------------------
70 
71     AccessibleTabBarPage::~AccessibleTabBarPage()
72     {
73     }
74 
75     // -----------------------------------------------------------------------------
76 
77     sal_Bool AccessibleTabBarPage::IsEnabled()
78     {
79         OExternalLockGuard aGuard( this );
80 
81         sal_Bool bEnabled = sal_False;
82         if ( m_pTabBar )
83             bEnabled = m_pTabBar->IsPageEnabled( m_nPageId );
84 
85         return bEnabled;
86     }
87 
88     // -----------------------------------------------------------------------------
89 
90     sal_Bool AccessibleTabBarPage::IsShowing()
91     {
92         sal_Bool bShowing = sal_False;
93 
94         if ( m_pTabBar && m_pTabBar->IsVisible() )
95             bShowing = sal_True;
96 
97         return bShowing;
98     }
99 
100     // -----------------------------------------------------------------------------
101 
102     sal_Bool AccessibleTabBarPage::IsSelected()
103     {
104         sal_Bool bSelected = sal_False;
105 
106         if ( m_pTabBar && m_pTabBar->GetCurPageId() == m_nPageId )
107             bSelected = sal_True;
108 
109         return bSelected;
110     }
111 
112     // -----------------------------------------------------------------------------
113 
114     void AccessibleTabBarPage::SetEnabled( sal_Bool bEnabled )
115     {
116         if ( m_bEnabled != bEnabled )
117         {
118             Any aOldValue[2], aNewValue[2];
119             if ( m_bEnabled )
120             {
121                 aOldValue[0] <<= AccessibleStateType::SENSITIVE;
122                 aOldValue[1] <<= AccessibleStateType::ENABLED;
123             }
124             else
125             {
126 
127                 aNewValue[0] <<= AccessibleStateType::ENABLED;
128                 aNewValue[1] <<= AccessibleStateType::SENSITIVE;
129             }
130             m_bEnabled = bEnabled;
131             NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[0], aNewValue[0] );
132             NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[1], aNewValue[1] );
133         }
134     }
135 
136     // -----------------------------------------------------------------------------
137 
138     void AccessibleTabBarPage::SetShowing( sal_Bool bShowing )
139     {
140         if ( m_bShowing != bShowing )
141         {
142             Any aOldValue, aNewValue;
143             if ( m_bShowing )
144                 aOldValue <<= AccessibleStateType::SHOWING;
145             else
146                 aNewValue <<= AccessibleStateType::SHOWING;
147             m_bShowing = bShowing;
148             NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
149         }
150     }
151 
152     // -----------------------------------------------------------------------------
153 
154     void AccessibleTabBarPage::SetSelected( sal_Bool bSelected )
155     {
156         if ( m_bSelected != bSelected )
157         {
158             Any aOldValue, aNewValue;
159             if ( m_bSelected )
160                 aOldValue <<= AccessibleStateType::SELECTED;
161             else
162                 aNewValue <<= AccessibleStateType::SELECTED;
163             m_bSelected = bSelected;
164             NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
165         }
166     }
167 
168     // -----------------------------------------------------------------------------
169 
170     void AccessibleTabBarPage::SetPageText( const ::rtl::OUString& sPageText )
171     {
172         if ( !m_sPageText.equals( sPageText ) )
173         {
174             Any aOldValue, aNewValue;
175             aOldValue <<= m_sPageText;
176             aNewValue <<= sPageText;
177             m_sPageText = sPageText;
178             NotifyAccessibleEvent( AccessibleEventId::NAME_CHANGED, aOldValue, aNewValue );
179         }
180     }
181 
182     // -----------------------------------------------------------------------------
183 
184     void AccessibleTabBarPage::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
185     {
186         if ( IsEnabled() )
187         {
188             rStateSet.AddState( AccessibleStateType::ENABLED );
189             rStateSet.AddState( AccessibleStateType::SENSITIVE );
190         }
191 
192         rStateSet.AddState( AccessibleStateType::VISIBLE );
193 
194         if ( IsShowing() )
195             rStateSet.AddState( AccessibleStateType::SHOWING );
196 
197         rStateSet.AddState( AccessibleStateType::SELECTABLE );
198 
199         if ( IsSelected() )
200             rStateSet.AddState( AccessibleStateType::SELECTED );
201     }
202 
203     // -----------------------------------------------------------------------------
204     // OCommonAccessibleComponent
205     // -----------------------------------------------------------------------------
206 
207     awt::Rectangle AccessibleTabBarPage::implGetBounds() throw (RuntimeException)
208     {
209         awt::Rectangle aBounds;
210         if ( m_pTabBar )
211         {
212             // get bounding rectangle relative to the AccessibleTabBar
213             aBounds = AWTRectangle( m_pTabBar->GetPageRect( m_nPageId ) );
214 
215             // get position of the AccessibleTabBarPageList relative to the AccessibleTabBar
216             Reference< XAccessible > xParent = getAccessibleParent();
217             if ( xParent.is() )
218             {
219                 Reference< XAccessibleComponent > xParentComponent( xParent->getAccessibleContext(), UNO_QUERY );
220                 if ( xParentComponent.is() )
221                 {
222                     awt::Point aParentLoc = xParentComponent->getLocation();
223 
224                     // calculate bounding rectangle relative to the AccessibleTabBarPageList
225                     aBounds.X -= aParentLoc.X;
226                     aBounds.Y -= aParentLoc.Y;
227                 }
228             }
229         }
230 
231         return aBounds;
232     }
233 
234     // -----------------------------------------------------------------------------
235     // XInterface
236     // -----------------------------------------------------------------------------
237 
238     IMPLEMENT_FORWARD_XINTERFACE2( AccessibleTabBarPage, AccessibleExtendedComponentHelper_BASE, AccessibleTabBarPage_BASE )
239 
240     // -----------------------------------------------------------------------------
241     // XTypeProvider
242     // -----------------------------------------------------------------------------
243 
244     IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccessibleTabBarPage, AccessibleExtendedComponentHelper_BASE, AccessibleTabBarPage_BASE )
245 
246     // -----------------------------------------------------------------------------
247     // XComponent
248     // -----------------------------------------------------------------------------
249 
250     void AccessibleTabBarPage::disposing()
251     {
252         AccessibleTabBarBase::disposing();
253         m_sPageText = ::rtl::OUString();
254     }
255 
256     // -----------------------------------------------------------------------------
257     // XServiceInfo
258     // -----------------------------------------------------------------------------
259 
260     ::rtl::OUString AccessibleTabBarPage::getImplementationName() throw (RuntimeException)
261     {
262         return ::rtl::OUString::createFromAscii( "com.sun.star.comp.svtools.AccessibleTabBarPage" );
263     }
264 
265     // -----------------------------------------------------------------------------
266 
267     sal_Bool AccessibleTabBarPage::supportsService( const ::rtl::OUString& rServiceName ) throw (RuntimeException)
268     {
269         Sequence< ::rtl::OUString > aNames( getSupportedServiceNames() );
270         const ::rtl::OUString* pNames = aNames.getConstArray();
271         const ::rtl::OUString* pEnd = pNames + aNames.getLength();
272         for ( ; pNames != pEnd && !pNames->equals( rServiceName ); ++pNames )
273             ;
274 
275         return pNames != pEnd;
276     }
277 
278     // -----------------------------------------------------------------------------
279 
280     Sequence< ::rtl::OUString > AccessibleTabBarPage::getSupportedServiceNames() throw (RuntimeException)
281     {
282         Sequence< ::rtl::OUString > aNames(1);
283         aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.AccessibleTabBarPage" );
284         return aNames;
285     }
286 
287     // -----------------------------------------------------------------------------
288     // XAccessible
289     // -----------------------------------------------------------------------------
290 
291     Reference< XAccessibleContext > AccessibleTabBarPage::getAccessibleContext(  ) throw (RuntimeException)
292     {
293         OExternalLockGuard aGuard( this );
294 
295         return this;
296     }
297 
298     // -----------------------------------------------------------------------------
299     // XAccessibleContext
300     // -----------------------------------------------------------------------------
301 
302     sal_Int32 AccessibleTabBarPage::getAccessibleChildCount() throw (RuntimeException)
303     {
304         OExternalLockGuard aGuard( this );
305 
306         return 0;
307     }
308 
309     // -----------------------------------------------------------------------------
310 
311     Reference< XAccessible > AccessibleTabBarPage::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException)
312     {
313         OExternalLockGuard aGuard( this );
314 
315         if ( i < 0 || i >= getAccessibleChildCount() )
316             throw IndexOutOfBoundsException();
317 
318         return Reference< XAccessible >();
319     }
320 
321     // -----------------------------------------------------------------------------
322 
323     Reference< XAccessible > AccessibleTabBarPage::getAccessibleParent(  ) throw (RuntimeException)
324     {
325         OExternalLockGuard aGuard( this );
326 
327         return m_xParent;
328     }
329 
330     // -----------------------------------------------------------------------------
331 
332     sal_Int32 AccessibleTabBarPage::getAccessibleIndexInParent(  ) throw (RuntimeException)
333     {
334         OExternalLockGuard aGuard( this );
335 
336         sal_Int32 nIndexInParent = -1;
337         if ( m_pTabBar )
338             nIndexInParent = m_pTabBar->GetPagePos( m_nPageId );
339 
340         return nIndexInParent;
341     }
342 
343     // -----------------------------------------------------------------------------
344 
345     sal_Int16 AccessibleTabBarPage::getAccessibleRole(  ) throw (RuntimeException)
346     {
347         OExternalLockGuard aGuard( this );
348 
349         return AccessibleRole::PAGE_TAB;
350     }
351 
352     // -----------------------------------------------------------------------------
353 
354     ::rtl::OUString AccessibleTabBarPage::getAccessibleDescription( ) throw (RuntimeException)
355     {
356         OExternalLockGuard aGuard( this );
357 
358         ::rtl::OUString sDescription;
359         if ( m_pTabBar )
360             sDescription = m_pTabBar->GetHelpText( m_nPageId );
361 
362         return sDescription;
363     }
364 
365     // -----------------------------------------------------------------------------
366 
367     ::rtl::OUString AccessibleTabBarPage::getAccessibleName(  ) throw (RuntimeException)
368     {
369         OExternalLockGuard aGuard( this );
370 
371         return m_sPageText;
372     }
373 
374     // -----------------------------------------------------------------------------
375 
376     Reference< XAccessibleRelationSet > AccessibleTabBarPage::getAccessibleRelationSet(  ) throw (RuntimeException)
377     {
378         OExternalLockGuard aGuard( this );
379 
380         utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
381         Reference< XAccessibleRelationSet > xSet = pRelationSetHelper;
382         return xSet;
383     }
384 
385     // -----------------------------------------------------------------------------
386 
387     Reference< XAccessibleStateSet > AccessibleTabBarPage::getAccessibleStateSet(  ) throw (RuntimeException)
388     {
389         OExternalLockGuard aGuard( this );
390 
391         utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
392         Reference< XAccessibleStateSet > xSet = pStateSetHelper;
393 
394         if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
395         {
396             FillAccessibleStateSet( *pStateSetHelper );
397         }
398         else
399         {
400             pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
401         }
402 
403         return xSet;
404     }
405 
406     // -----------------------------------------------------------------------------
407 
408     Locale AccessibleTabBarPage::getLocale(  ) throw (IllegalAccessibleComponentStateException, RuntimeException)
409     {
410         OExternalLockGuard aGuard( this );
411 
412         return Application::GetSettings().GetLocale();
413     }
414 
415     // -----------------------------------------------------------------------------
416     // XAccessibleComponent
417     // -----------------------------------------------------------------------------
418 
419     Reference< XAccessible > AccessibleTabBarPage::getAccessibleAtPoint( const awt::Point& ) throw (RuntimeException)
420     {
421         OExternalLockGuard aGuard( this );
422 
423         return Reference< XAccessible >();
424     }
425 
426     // -----------------------------------------------------------------------------
427 
428     void AccessibleTabBarPage::grabFocus(  ) throw (RuntimeException)
429     {
430         // no focus
431     }
432 
433     // -----------------------------------------------------------------------------
434 
435     sal_Int32 AccessibleTabBarPage::getForeground(  ) throw (RuntimeException)
436     {
437         OExternalLockGuard aGuard( this );
438 
439         sal_Int32 nColor = 0;
440         Reference< XAccessible > xParent = getAccessibleParent();
441         if ( xParent.is() )
442         {
443             Reference< XAccessibleComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
444             if ( xParentComp.is() )
445                 nColor = xParentComp->getForeground();
446         }
447 
448         return nColor;
449     }
450 
451     // -----------------------------------------------------------------------------
452 
453     sal_Int32 AccessibleTabBarPage::getBackground(  ) throw (RuntimeException)
454     {
455         OExternalLockGuard aGuard( this );
456 
457         sal_Int32 nColor = 0;
458         Reference< XAccessible > xParent = getAccessibleParent();
459         if ( xParent.is() )
460         {
461             Reference< XAccessibleComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
462             if ( xParentComp.is() )
463                 nColor = xParentComp->getBackground();
464         }
465 
466         return nColor;
467     }
468 
469     // -----------------------------------------------------------------------------
470     // XAccessibleExtendedComponent
471     // -----------------------------------------------------------------------------
472 
473     Reference< awt::XFont > AccessibleTabBarPage::getFont(  ) throw (RuntimeException)
474     {
475         OExternalLockGuard aGuard( this );
476 
477         Reference< awt::XFont > xFont;
478         Reference< XAccessible > xParent = getAccessibleParent();
479         if ( xParent.is() )
480         {
481             Reference< XAccessibleExtendedComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
482             if ( xParentComp.is() )
483                 xFont = xParentComp->getFont();
484         }
485 
486         return xFont;
487     }
488 
489     // -----------------------------------------------------------------------------
490 
491     ::rtl::OUString AccessibleTabBarPage::getTitledBorderText(  ) throw (RuntimeException)
492     {
493         OExternalLockGuard aGuard( this );
494 
495         return m_sPageText;
496     }
497 
498     // -----------------------------------------------------------------------------
499 
500     ::rtl::OUString AccessibleTabBarPage::getToolTipText(  ) throw (RuntimeException)
501     {
502         OExternalLockGuard aGuard( this );
503 
504         return ::rtl::OUString();
505     }
506 
507     // -----------------------------------------------------------------------------
508 
509 //.........................................................................
510 }   // namespace accessibility
511 //.........................................................................
512