1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_comphelper.hxx"
26*b1cdbd2cSJim Jagielski #include <comphelper/accessibleselectionhelper.hxx>
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski //.........................................................................
29*b1cdbd2cSJim Jagielski namespace comphelper
30*b1cdbd2cSJim Jagielski {
31*b1cdbd2cSJim Jagielski //.........................................................................
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::uno;
34*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::awt;
35*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::lang;
36*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::accessibility;
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski 	//=====================================================================
39*b1cdbd2cSJim Jagielski 	//= OCommonAccessibleSelection
40*b1cdbd2cSJim Jagielski 	//=====================================================================
41*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
OCommonAccessibleSelection()42*b1cdbd2cSJim Jagielski 	OCommonAccessibleSelection::OCommonAccessibleSelection( )
43*b1cdbd2cSJim Jagielski 	{
44*b1cdbd2cSJim Jagielski 	}
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
selectAccessibleChild(sal_Int32 nChildIndex)47*b1cdbd2cSJim Jagielski     void SAL_CALL OCommonAccessibleSelection::selectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
48*b1cdbd2cSJim Jagielski 	{
49*b1cdbd2cSJim Jagielski         implSelect( nChildIndex, sal_True );
50*b1cdbd2cSJim Jagielski 	}
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
isAccessibleChildSelected(sal_Int32 nChildIndex)53*b1cdbd2cSJim Jagielski 	sal_Bool SAL_CALL OCommonAccessibleSelection::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
54*b1cdbd2cSJim Jagielski 	{
55*b1cdbd2cSJim Jagielski         return( implIsSelected( nChildIndex ) );
56*b1cdbd2cSJim Jagielski 	}
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
clearAccessibleSelection()59*b1cdbd2cSJim Jagielski 	void SAL_CALL OCommonAccessibleSelection::clearAccessibleSelection(  ) throw (RuntimeException)
60*b1cdbd2cSJim Jagielski     {
61*b1cdbd2cSJim Jagielski         implSelect( ACCESSIBLE_SELECTION_CHILD_ALL, sal_False );
62*b1cdbd2cSJim Jagielski     }
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
selectAllAccessibleChildren()65*b1cdbd2cSJim Jagielski 	void SAL_CALL OCommonAccessibleSelection::selectAllAccessibleChildren(  ) throw (RuntimeException)
66*b1cdbd2cSJim Jagielski     {
67*b1cdbd2cSJim Jagielski         implSelect( ACCESSIBLE_SELECTION_CHILD_ALL, sal_True );
68*b1cdbd2cSJim Jagielski     }
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
getSelectedAccessibleChildCount()71*b1cdbd2cSJim Jagielski 	sal_Int32 SAL_CALL OCommonAccessibleSelection::getSelectedAccessibleChildCount(  ) throw (RuntimeException)
72*b1cdbd2cSJim Jagielski     {
73*b1cdbd2cSJim Jagielski         sal_Int32                       nRet = 0;
74*b1cdbd2cSJim Jagielski         Reference< XAccessibleContext > xParentContext( implGetAccessibleContext() );
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski 		OSL_ENSURE( xParentContext.is(), "OCommonAccessibleSelection::getSelectedAccessibleChildCount: no parent context!" );
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski         if( xParentContext.is() )
79*b1cdbd2cSJim Jagielski         {
80*b1cdbd2cSJim Jagielski             for( sal_Int32 i = 0, nChildCount = xParentContext->getAccessibleChildCount(); i < nChildCount; i++ )
81*b1cdbd2cSJim Jagielski                 if( implIsSelected( i ) )
82*b1cdbd2cSJim Jagielski                     ++nRet;
83*b1cdbd2cSJim Jagielski         }
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski         return( nRet );
86*b1cdbd2cSJim Jagielski     }
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
getSelectedAccessibleChild(sal_Int32 nSelectedChildIndex)89*b1cdbd2cSJim Jagielski 	Reference< XAccessible > SAL_CALL OCommonAccessibleSelection::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
90*b1cdbd2cSJim Jagielski     {
91*b1cdbd2cSJim Jagielski         Reference< XAccessible >        xRet;
92*b1cdbd2cSJim Jagielski         Reference< XAccessibleContext > xParentContext( implGetAccessibleContext() );
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 		OSL_ENSURE( xParentContext.is(), "OCommonAccessibleSelection::getSelectedAccessibleChildCount: no parent context!" );
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski         if( xParentContext.is() )
97*b1cdbd2cSJim Jagielski         {
98*b1cdbd2cSJim Jagielski             for( sal_Int32 i = 0, nChildCount = xParentContext->getAccessibleChildCount(), nPos = 0; ( i < nChildCount ) && !xRet.is(); i++ )
99*b1cdbd2cSJim Jagielski                 if( implIsSelected( i ) && ( nPos++ == nSelectedChildIndex ) )
100*b1cdbd2cSJim Jagielski                     xRet = xParentContext->getAccessibleChild( i );
101*b1cdbd2cSJim Jagielski         }
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski         return( xRet );
104*b1cdbd2cSJim Jagielski     }
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
deselectAccessibleChild(sal_Int32 nSelectedChildIndex)107*b1cdbd2cSJim Jagielski 	void SAL_CALL OCommonAccessibleSelection::deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
108*b1cdbd2cSJim Jagielski     {
109*b1cdbd2cSJim Jagielski         implSelect( nSelectedChildIndex, sal_False );
110*b1cdbd2cSJim Jagielski     }
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 	//=====================================================================
113*b1cdbd2cSJim Jagielski 	//= OAccessibleSelectionHelper
114*b1cdbd2cSJim Jagielski 	//=====================================================================
115*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
OAccessibleSelectionHelper()116*b1cdbd2cSJim Jagielski 	OAccessibleSelectionHelper::OAccessibleSelectionHelper( )
117*b1cdbd2cSJim Jagielski 	{
118*b1cdbd2cSJim Jagielski 	}
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
OAccessibleSelectionHelper(IMutex * _pExternalLock)121*b1cdbd2cSJim Jagielski 	OAccessibleSelectionHelper::OAccessibleSelectionHelper( IMutex* _pExternalLock ) : OAccessibleComponentHelper(_pExternalLock)
122*b1cdbd2cSJim Jagielski 	{
123*b1cdbd2cSJim Jagielski 	}
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
IMPLEMENT_FORWARD_XINTERFACE2(OAccessibleSelectionHelper,OAccessibleComponentHelper,OAccessibleSelectionHelper_Base)126*b1cdbd2cSJim Jagielski 	IMPLEMENT_FORWARD_XINTERFACE2( OAccessibleSelectionHelper, OAccessibleComponentHelper, OAccessibleSelectionHelper_Base )
127*b1cdbd2cSJim Jagielski 	IMPLEMENT_FORWARD_XTYPEPROVIDER2( OAccessibleSelectionHelper, OAccessibleComponentHelper, OAccessibleSelectionHelper_Base )
128*b1cdbd2cSJim Jagielski 	// (order matters: the first is the class name, the second is the class doing the ref counting)
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
131*b1cdbd2cSJim Jagielski     Reference< XAccessibleContext > OAccessibleSelectionHelper::implGetAccessibleContext() throw ( RuntimeException )
132*b1cdbd2cSJim Jagielski     {
133*b1cdbd2cSJim Jagielski         return( this );
134*b1cdbd2cSJim Jagielski     }
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
selectAccessibleChild(sal_Int32 nChildIndex)137*b1cdbd2cSJim Jagielski     void SAL_CALL OAccessibleSelectionHelper::selectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
138*b1cdbd2cSJim Jagielski 	{
139*b1cdbd2cSJim Jagielski 		OExternalLockGuard aGuard( this );
140*b1cdbd2cSJim Jagielski         OCommonAccessibleSelection::selectAccessibleChild( nChildIndex );
141*b1cdbd2cSJim Jagielski 	}
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
isAccessibleChildSelected(sal_Int32 nChildIndex)144*b1cdbd2cSJim Jagielski 	sal_Bool SAL_CALL OAccessibleSelectionHelper::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
145*b1cdbd2cSJim Jagielski 	{
146*b1cdbd2cSJim Jagielski 		OExternalLockGuard aGuard( this );
147*b1cdbd2cSJim Jagielski         return( OCommonAccessibleSelection::isAccessibleChildSelected( nChildIndex ) );
148*b1cdbd2cSJim Jagielski 	}
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
clearAccessibleSelection()151*b1cdbd2cSJim Jagielski 	void SAL_CALL OAccessibleSelectionHelper::clearAccessibleSelection(  ) throw (RuntimeException)
152*b1cdbd2cSJim Jagielski     {
153*b1cdbd2cSJim Jagielski 		OExternalLockGuard aGuard( this );
154*b1cdbd2cSJim Jagielski         OCommonAccessibleSelection::clearAccessibleSelection();
155*b1cdbd2cSJim Jagielski     }
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
selectAllAccessibleChildren()158*b1cdbd2cSJim Jagielski 	void SAL_CALL OAccessibleSelectionHelper::selectAllAccessibleChildren(  ) throw (RuntimeException)
159*b1cdbd2cSJim Jagielski     {
160*b1cdbd2cSJim Jagielski 		OExternalLockGuard aGuard( this );
161*b1cdbd2cSJim Jagielski         OCommonAccessibleSelection::selectAllAccessibleChildren();
162*b1cdbd2cSJim Jagielski     }
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
getSelectedAccessibleChildCount()165*b1cdbd2cSJim Jagielski 	sal_Int32 SAL_CALL OAccessibleSelectionHelper::getSelectedAccessibleChildCount(  ) throw (RuntimeException)
166*b1cdbd2cSJim Jagielski     {
167*b1cdbd2cSJim Jagielski 		OExternalLockGuard aGuard( this );
168*b1cdbd2cSJim Jagielski         return( OCommonAccessibleSelection::getSelectedAccessibleChildCount() );
169*b1cdbd2cSJim Jagielski     }
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
getSelectedAccessibleChild(sal_Int32 nSelectedChildIndex)172*b1cdbd2cSJim Jagielski 	Reference< XAccessible > SAL_CALL OAccessibleSelectionHelper::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
173*b1cdbd2cSJim Jagielski     {
174*b1cdbd2cSJim Jagielski 		OExternalLockGuard aGuard( this );
175*b1cdbd2cSJim Jagielski         return( OCommonAccessibleSelection::getSelectedAccessibleChild( nSelectedChildIndex ) );
176*b1cdbd2cSJim Jagielski     }
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
deselectAccessibleChild(sal_Int32 nSelectedChildIndex)179*b1cdbd2cSJim Jagielski 	void SAL_CALL OAccessibleSelectionHelper::deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
180*b1cdbd2cSJim Jagielski     {
181*b1cdbd2cSJim Jagielski 		OExternalLockGuard aGuard( this );
182*b1cdbd2cSJim Jagielski         OCommonAccessibleSelection::deselectAccessibleChild( nSelectedChildIndex );
183*b1cdbd2cSJim Jagielski     }
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski //.........................................................................
186*b1cdbd2cSJim Jagielski }	// namespace comphelper
187*b1cdbd2cSJim Jagielski //.........................................................................
188*b1cdbd2cSJim Jagielski 
189