xref: /trunk/main/comphelper/source/misc/accessibleselectionhelper.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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_comphelper.hxx"
30 #include <comphelper/accessibleselectionhelper.hxx>
31 
32 //.........................................................................
33 namespace comphelper
34 {
35 //.........................................................................
36 
37     using namespace ::com::sun::star::uno;
38     using namespace ::com::sun::star::awt;
39     using namespace ::com::sun::star::lang;
40     using namespace ::com::sun::star::accessibility;
41 
42     //=====================================================================
43     //= OCommonAccessibleSelection
44     //=====================================================================
45     //---------------------------------------------------------------------
46     OCommonAccessibleSelection::OCommonAccessibleSelection( )
47     {
48     }
49 
50     //--------------------------------------------------------------------
51     void SAL_CALL OCommonAccessibleSelection::selectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
52     {
53         implSelect( nChildIndex, sal_True );
54     }
55 
56     //--------------------------------------------------------------------
57     sal_Bool SAL_CALL OCommonAccessibleSelection::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
58     {
59         return( implIsSelected( nChildIndex ) );
60     }
61 
62     //--------------------------------------------------------------------
63     void SAL_CALL OCommonAccessibleSelection::clearAccessibleSelection(  ) throw (RuntimeException)
64     {
65         implSelect( ACCESSIBLE_SELECTION_CHILD_ALL, sal_False );
66     }
67 
68     //--------------------------------------------------------------------
69     void SAL_CALL OCommonAccessibleSelection::selectAllAccessibleChildren(  ) throw (RuntimeException)
70     {
71         implSelect( ACCESSIBLE_SELECTION_CHILD_ALL, sal_True );
72     }
73 
74     //--------------------------------------------------------------------
75     sal_Int32 SAL_CALL OCommonAccessibleSelection::getSelectedAccessibleChildCount(  ) throw (RuntimeException)
76     {
77         sal_Int32                       nRet = 0;
78         Reference< XAccessibleContext > xParentContext( implGetAccessibleContext() );
79 
80         OSL_ENSURE( xParentContext.is(), "OCommonAccessibleSelection::getSelectedAccessibleChildCount: no parent context!" );
81 
82         if( xParentContext.is() )
83         {
84             for( sal_Int32 i = 0, nChildCount = xParentContext->getAccessibleChildCount(); i < nChildCount; i++ )
85                 if( implIsSelected( i ) )
86                     ++nRet;
87         }
88 
89         return( nRet );
90     }
91 
92     //--------------------------------------------------------------------
93     Reference< XAccessible > SAL_CALL OCommonAccessibleSelection::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
94     {
95         Reference< XAccessible >        xRet;
96         Reference< XAccessibleContext > xParentContext( implGetAccessibleContext() );
97 
98         OSL_ENSURE( xParentContext.is(), "OCommonAccessibleSelection::getSelectedAccessibleChildCount: no parent context!" );
99 
100         if( xParentContext.is() )
101         {
102             for( sal_Int32 i = 0, nChildCount = xParentContext->getAccessibleChildCount(), nPos = 0; ( i < nChildCount ) && !xRet.is(); i++ )
103                 if( implIsSelected( i ) && ( nPos++ == nSelectedChildIndex ) )
104                     xRet = xParentContext->getAccessibleChild( i );
105         }
106 
107         return( xRet );
108     }
109 
110     //--------------------------------------------------------------------
111     void SAL_CALL OCommonAccessibleSelection::deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
112     {
113         implSelect( nSelectedChildIndex, sal_False );
114     }
115 
116     //=====================================================================
117     //= OAccessibleSelectionHelper
118     //=====================================================================
119     //---------------------------------------------------------------------
120     OAccessibleSelectionHelper::OAccessibleSelectionHelper( )
121     {
122     }
123 
124     //--------------------------------------------------------------------
125     OAccessibleSelectionHelper::OAccessibleSelectionHelper( IMutex* _pExternalLock ) : OAccessibleComponentHelper(_pExternalLock)
126     {
127     }
128 
129     //--------------------------------------------------------------------
130     IMPLEMENT_FORWARD_XINTERFACE2( OAccessibleSelectionHelper, OAccessibleComponentHelper, OAccessibleSelectionHelper_Base )
131     IMPLEMENT_FORWARD_XTYPEPROVIDER2( OAccessibleSelectionHelper, OAccessibleComponentHelper, OAccessibleSelectionHelper_Base )
132     // (order matters: the first is the class name, the second is the class doing the ref counting)
133 
134     //--------------------------------------------------------------------
135     Reference< XAccessibleContext > OAccessibleSelectionHelper::implGetAccessibleContext() throw ( RuntimeException )
136     {
137         return( this );
138     }
139 
140     //--------------------------------------------------------------------
141     void SAL_CALL OAccessibleSelectionHelper::selectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
142     {
143         OExternalLockGuard aGuard( this );
144         OCommonAccessibleSelection::selectAccessibleChild( nChildIndex );
145     }
146 
147     //--------------------------------------------------------------------
148     sal_Bool SAL_CALL OAccessibleSelectionHelper::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
149     {
150         OExternalLockGuard aGuard( this );
151         return( OCommonAccessibleSelection::isAccessibleChildSelected( nChildIndex ) );
152     }
153 
154     //--------------------------------------------------------------------
155     void SAL_CALL OAccessibleSelectionHelper::clearAccessibleSelection(  ) throw (RuntimeException)
156     {
157         OExternalLockGuard aGuard( this );
158         OCommonAccessibleSelection::clearAccessibleSelection();
159     }
160 
161     //--------------------------------------------------------------------
162     void SAL_CALL OAccessibleSelectionHelper::selectAllAccessibleChildren(  ) throw (RuntimeException)
163     {
164         OExternalLockGuard aGuard( this );
165         OCommonAccessibleSelection::selectAllAccessibleChildren();
166     }
167 
168     //--------------------------------------------------------------------
169     sal_Int32 SAL_CALL OAccessibleSelectionHelper::getSelectedAccessibleChildCount(  ) throw (RuntimeException)
170     {
171         OExternalLockGuard aGuard( this );
172         return( OCommonAccessibleSelection::getSelectedAccessibleChildCount() );
173     }
174 
175     //--------------------------------------------------------------------
176     Reference< XAccessible > SAL_CALL OAccessibleSelectionHelper::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
177     {
178         OExternalLockGuard aGuard( this );
179         return( OCommonAccessibleSelection::getSelectedAccessibleChild( nSelectedChildIndex ) );
180     }
181 
182     //--------------------------------------------------------------------
183     void SAL_CALL OAccessibleSelectionHelper::deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
184     {
185         OExternalLockGuard aGuard( this );
186         OCommonAccessibleSelection::deselectAccessibleChild( nSelectedChildIndex );
187     }
188 
189 //.........................................................................
190 }   // namespace comphelper
191 //.........................................................................
192 
193