10841af79SAndrew Rist /**************************************************************
2*d69df039Smseidel  *
30841af79SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
40841af79SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
50841af79SAndrew Rist  * distributed with this work for additional information
60841af79SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
70841af79SAndrew Rist  * to you under the Apache License, Version 2.0 (the
80841af79SAndrew Rist  * "License"); you may not use this file except in compliance
90841af79SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*d69df039Smseidel  *
110841af79SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*d69df039Smseidel  *
130841af79SAndrew Rist  * Unless required by applicable law or agreed to in writing,
140841af79SAndrew Rist  * software distributed under the License is distributed on an
150841af79SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
160841af79SAndrew Rist  * KIND, either express or implied.  See the License for the
170841af79SAndrew Rist  * specific language governing permissions and limitations
180841af79SAndrew Rist  * under the License.
19*d69df039Smseidel  *
200841af79SAndrew Rist  *************************************************************/
210841af79SAndrew Rist 
220841af79SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_accessibility.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include "accessibility/extended/AccessibleBrowseBoxTableBase.hxx"
29cdf0e10cSrcweir #include <svtools/accessibletableprovider.hxx>
30cdf0e10cSrcweir #include <tools/multisel.hxx>
31cdf0e10cSrcweir #include <comphelper/sequence.hxx>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir // ============================================================================
34cdf0e10cSrcweir 
35cdf0e10cSrcweir using ::rtl::OUString;
36cdf0e10cSrcweir 
37cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
38cdf0e10cSrcweir using ::com::sun::star::uno::Sequence;
39cdf0e10cSrcweir using ::com::sun::star::uno::Any;
40cdf0e10cSrcweir 
41cdf0e10cSrcweir using namespace ::com::sun::star;
42cdf0e10cSrcweir using namespace ::com::sun::star::accessibility;
43cdf0e10cSrcweir using namespace ::svt;
44cdf0e10cSrcweir 
45cdf0e10cSrcweir // ============================================================================
46cdf0e10cSrcweir 
47cdf0e10cSrcweir namespace accessibility {
48cdf0e10cSrcweir 
49cdf0e10cSrcweir // ============================================================================
50cdf0e10cSrcweir 
51cdf0e10cSrcweir // Ctor/Dtor/disposing --------------------------------------------------------
52cdf0e10cSrcweir 
DBG_NAME(AccessibleBrowseBoxTableBase)53cdf0e10cSrcweir DBG_NAME( AccessibleBrowseBoxTableBase )
54cdf0e10cSrcweir 
55cdf0e10cSrcweir AccessibleBrowseBoxTableBase::AccessibleBrowseBoxTableBase(
56*d69df039Smseidel 		const Reference< XAccessible >& rxParent,
57*d69df039Smseidel 		IAccessibleTableProvider& rBrowseBox,
58*d69df039Smseidel 		AccessibleBrowseBoxObjType eObjType ) :
59*d69df039Smseidel 	BrowseBoxAccessibleElement( rxParent, rBrowseBox,NULL, eObjType )
60cdf0e10cSrcweir {
61*d69df039Smseidel 	DBG_CTOR( AccessibleBrowseBoxTableBase, NULL );
62cdf0e10cSrcweir }
63cdf0e10cSrcweir 
~AccessibleBrowseBoxTableBase()64cdf0e10cSrcweir AccessibleBrowseBoxTableBase::~AccessibleBrowseBoxTableBase()
65cdf0e10cSrcweir {
66*d69df039Smseidel 	DBG_DTOR( AccessibleBrowseBoxTableBase, NULL );
67cdf0e10cSrcweir }
68cdf0e10cSrcweir 
69cdf0e10cSrcweir // XAccessibleContext ---------------------------------------------------------
70cdf0e10cSrcweir 
getAccessibleChildCount()71cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleChildCount()
72*d69df039Smseidel 	throw ( uno::RuntimeException )
73cdf0e10cSrcweir {
74*d69df039Smseidel 	BBSolarGuard aSolarGuard;
75*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslMutex() );
76*d69df039Smseidel 	ensureIsAlive();
77*d69df039Smseidel 	return implGetChildCount();
78cdf0e10cSrcweir }
79cdf0e10cSrcweir 
getAccessibleRole()80cdf0e10cSrcweir sal_Int16 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleRole()
81*d69df039Smseidel 	throw ( uno::RuntimeException )
82cdf0e10cSrcweir {
83*d69df039Smseidel 	ensureIsAlive();
84*d69df039Smseidel 	return AccessibleRole::TABLE;
85cdf0e10cSrcweir }
86cdf0e10cSrcweir 
87cdf0e10cSrcweir // XAccessibleTable -----------------------------------------------------------
88cdf0e10cSrcweir 
getAccessibleRowCount()89cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleRowCount()
90*d69df039Smseidel 	throw ( uno::RuntimeException )
91cdf0e10cSrcweir {
92*d69df039Smseidel 	BBSolarGuard aSolarGuard;
93*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslMutex() );
94*d69df039Smseidel 	ensureIsAlive();
95*d69df039Smseidel 	return implGetRowCount();
96cdf0e10cSrcweir }
97cdf0e10cSrcweir 
getAccessibleColumnCount()98cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleColumnCount()
99*d69df039Smseidel 	throw ( uno::RuntimeException )
100cdf0e10cSrcweir {
101*d69df039Smseidel 	BBSolarGuard aSolarGuard;
102*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslMutex() );
103*d69df039Smseidel 	ensureIsAlive();
104*d69df039Smseidel 	return implGetColumnCount();
105cdf0e10cSrcweir }
106cdf0e10cSrcweir 
getAccessibleRowExtentAt(sal_Int32 nRow,sal_Int32 nColumn)107cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleRowExtentAt(
108*d69df039Smseidel 		sal_Int32 nRow, sal_Int32 nColumn )
109*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
110cdf0e10cSrcweir {
111*d69df039Smseidel 	BBSolarGuard aSolarGuard;
112*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslMutex() );
113*d69df039Smseidel 	ensureIsAlive();
114*d69df039Smseidel 	ensureIsValidAddress( nRow, nColumn );
115*d69df039Smseidel 	return 1; // merged cells not supported
116cdf0e10cSrcweir }
117cdf0e10cSrcweir 
getAccessibleColumnExtentAt(sal_Int32 nRow,sal_Int32 nColumn)118cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleColumnExtentAt(
119*d69df039Smseidel 		sal_Int32 nRow, sal_Int32 nColumn )
120*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
121cdf0e10cSrcweir {
122*d69df039Smseidel 	BBSolarGuard aSolarGuard;
123*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslMutex() );
124*d69df039Smseidel 	ensureIsAlive();
125*d69df039Smseidel 	ensureIsValidAddress( nRow, nColumn );
126*d69df039Smseidel 	return 1; // merged cells not supported
127cdf0e10cSrcweir }
128cdf0e10cSrcweir 
getAccessibleCaption()129cdf0e10cSrcweir Reference< XAccessible > SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleCaption()
130*d69df039Smseidel 	throw ( uno::RuntimeException )
131cdf0e10cSrcweir {
132*d69df039Smseidel 	ensureIsAlive();
133*d69df039Smseidel 	return NULL; // not supported
134cdf0e10cSrcweir }
135cdf0e10cSrcweir 
getAccessibleSummary()136cdf0e10cSrcweir Reference< XAccessible > SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleSummary()
137*d69df039Smseidel 	throw ( uno::RuntimeException )
138cdf0e10cSrcweir {
139*d69df039Smseidel 	ensureIsAlive();
140*d69df039Smseidel 	return NULL; // not supported
141cdf0e10cSrcweir }
142cdf0e10cSrcweir 
getAccessibleIndex(sal_Int32 nRow,sal_Int32 nColumn)143cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleIndex(
144*d69df039Smseidel 		sal_Int32 nRow, sal_Int32 nColumn )
145*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
146cdf0e10cSrcweir {
147*d69df039Smseidel 	BBSolarGuard aSolarGuard;
148*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslMutex() );
149*d69df039Smseidel 	ensureIsAlive();
150*d69df039Smseidel 	ensureIsValidAddress( nRow, nColumn );
151*d69df039Smseidel 	return implGetChildIndex( nRow, nColumn );
152cdf0e10cSrcweir }
153cdf0e10cSrcweir 
getAccessibleRow(sal_Int32 nChildIndex)154cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleRow( sal_Int32 nChildIndex )
155*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
156cdf0e10cSrcweir {
157*d69df039Smseidel 	BBSolarGuard aSolarGuard;
158*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslMutex() );
159*d69df039Smseidel 	ensureIsAlive();
160*d69df039Smseidel 	ensureIsValidIndex( nChildIndex );
161*d69df039Smseidel 	return implGetRow( nChildIndex );
162cdf0e10cSrcweir }
163cdf0e10cSrcweir 
getAccessibleColumn(sal_Int32 nChildIndex)164cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleBrowseBoxTableBase::getAccessibleColumn( sal_Int32 nChildIndex )
165*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
166cdf0e10cSrcweir {
167*d69df039Smseidel 	BBSolarGuard aSolarGuard;
168*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslMutex() );
169*d69df039Smseidel 	ensureIsAlive();
170*d69df039Smseidel 	ensureIsValidIndex( nChildIndex );
171*d69df039Smseidel 	return implGetColumn( nChildIndex );
172cdf0e10cSrcweir }
173cdf0e10cSrcweir 
174cdf0e10cSrcweir // XInterface -----------------------------------------------------------------
175cdf0e10cSrcweir 
queryInterface(const uno::Type & rType)176cdf0e10cSrcweir Any SAL_CALL AccessibleBrowseBoxTableBase::queryInterface( const uno::Type& rType )
177*d69df039Smseidel 	throw ( uno::RuntimeException )
178cdf0e10cSrcweir {
179*d69df039Smseidel 	Any aAny( BrowseBoxAccessibleElement::queryInterface( rType ) );
180*d69df039Smseidel 	return aAny.hasValue() ?
181*d69df039Smseidel 		aAny : AccessibleBrowseBoxTableImplHelper::queryInterface( rType );
182cdf0e10cSrcweir }
183cdf0e10cSrcweir 
acquire()184cdf0e10cSrcweir void SAL_CALL AccessibleBrowseBoxTableBase::acquire() throw ()
185cdf0e10cSrcweir {
186*d69df039Smseidel 	BrowseBoxAccessibleElement::acquire();
187cdf0e10cSrcweir }
188cdf0e10cSrcweir 
release()189cdf0e10cSrcweir void SAL_CALL AccessibleBrowseBoxTableBase::release() throw ()
190cdf0e10cSrcweir {
191*d69df039Smseidel 	BrowseBoxAccessibleElement::release();
192cdf0e10cSrcweir }
193cdf0e10cSrcweir 
194cdf0e10cSrcweir // XTypeProvider --------------------------------------------------------------
195cdf0e10cSrcweir 
getTypes()196cdf0e10cSrcweir Sequence< uno::Type > SAL_CALL AccessibleBrowseBoxTableBase::getTypes()
197*d69df039Smseidel 	throw ( uno::RuntimeException )
198cdf0e10cSrcweir {
199*d69df039Smseidel 	return ::comphelper::concatSequences(
200*d69df039Smseidel 		BrowseBoxAccessibleElement::getTypes(),
201*d69df039Smseidel 		AccessibleBrowseBoxTableImplHelper::getTypes() );
202cdf0e10cSrcweir }
203cdf0e10cSrcweir 
getImplementationId()204cdf0e10cSrcweir Sequence< sal_Int8 > SAL_CALL AccessibleBrowseBoxTableBase::getImplementationId()
205*d69df039Smseidel 	throw ( uno::RuntimeException )
206cdf0e10cSrcweir {
207*d69df039Smseidel 	::osl::MutexGuard aGuard( getOslGlobalMutex() );
208*d69df039Smseidel 	static Sequence< sal_Int8 > aId;
209*d69df039Smseidel 	implCreateUuid( aId );
210cdf0e10cSrcweir 	return aId;
211cdf0e10cSrcweir }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir // internal virtual methods ---------------------------------------------------
214cdf0e10cSrcweir 
implGetRowCount() const215cdf0e10cSrcweir sal_Int32 AccessibleBrowseBoxTableBase::implGetRowCount() const
216cdf0e10cSrcweir {
217*d69df039Smseidel 	return mpBrowseBox->GetRowCount();
218cdf0e10cSrcweir }
219cdf0e10cSrcweir 
implGetColumnCount() const220cdf0e10cSrcweir sal_Int32 AccessibleBrowseBoxTableBase::implGetColumnCount() const
221cdf0e10cSrcweir {
222*d69df039Smseidel 	sal_uInt16 nColumns = mpBrowseBox->GetColumnCount();
223*d69df039Smseidel 	// do not count the "handle column"
224*d69df039Smseidel 	if( nColumns && implHasHandleColumn() )
225*d69df039Smseidel 		--nColumns;
226*d69df039Smseidel 	return nColumns;
227cdf0e10cSrcweir }
228cdf0e10cSrcweir 
229cdf0e10cSrcweir // internal helper methods ----------------------------------------------------
230cdf0e10cSrcweir 
implHasHandleColumn() const231cdf0e10cSrcweir sal_Bool AccessibleBrowseBoxTableBase::implHasHandleColumn() const
232cdf0e10cSrcweir {
233*d69df039Smseidel 	return mpBrowseBox->HasRowHeader();
234cdf0e10cSrcweir }
235cdf0e10cSrcweir 
implToVCLColumnPos(sal_Int32 nColumn) const236cdf0e10cSrcweir sal_uInt16 AccessibleBrowseBoxTableBase::implToVCLColumnPos( sal_Int32 nColumn ) const
237cdf0e10cSrcweir {
238*d69df039Smseidel 	sal_uInt16 nVCLPos = 0;
239*d69df039Smseidel 	if( (0 <= nColumn) && (nColumn < implGetColumnCount()) )
240*d69df039Smseidel 	{
241*d69df039Smseidel 		// regard "handle column"
242*d69df039Smseidel 		if( implHasHandleColumn() )
243*d69df039Smseidel 			++nColumn;
244*d69df039Smseidel 		nVCLPos = static_cast< sal_uInt16 >( nColumn );
245*d69df039Smseidel 	}
246*d69df039Smseidel 	return nVCLPos;
247cdf0e10cSrcweir }
248cdf0e10cSrcweir 
implGetChildCount() const249cdf0e10cSrcweir sal_Int32 AccessibleBrowseBoxTableBase::implGetChildCount() const
250cdf0e10cSrcweir {
251*d69df039Smseidel 	return implGetRowCount() * implGetColumnCount();
252cdf0e10cSrcweir }
253cdf0e10cSrcweir 
implGetRow(sal_Int32 nChildIndex) const254cdf0e10cSrcweir sal_Int32 AccessibleBrowseBoxTableBase::implGetRow( sal_Int32 nChildIndex ) const
255cdf0e10cSrcweir {
256*d69df039Smseidel 	sal_Int32 nColumns = implGetColumnCount();
257*d69df039Smseidel 	return nColumns ? (nChildIndex / nColumns) : 0;
258cdf0e10cSrcweir }
259cdf0e10cSrcweir 
implGetColumn(sal_Int32 nChildIndex) const260cdf0e10cSrcweir sal_Int32 AccessibleBrowseBoxTableBase::implGetColumn( sal_Int32 nChildIndex ) const
261cdf0e10cSrcweir {
262*d69df039Smseidel 	sal_Int32 nColumns = implGetColumnCount();
263*d69df039Smseidel 	return nColumns ? (nChildIndex % nColumns) : 0;
264cdf0e10cSrcweir }
265cdf0e10cSrcweir 
implGetChildIndex(sal_Int32 nRow,sal_Int32 nColumn) const266cdf0e10cSrcweir sal_Int32 AccessibleBrowseBoxTableBase::implGetChildIndex(
267*d69df039Smseidel 		sal_Int32 nRow, sal_Int32 nColumn ) const
268cdf0e10cSrcweir {
269*d69df039Smseidel 	return nRow * implGetColumnCount() + nColumn;
270cdf0e10cSrcweir }
271cdf0e10cSrcweir 
implIsRowSelected(sal_Int32 nRow) const272cdf0e10cSrcweir sal_Bool AccessibleBrowseBoxTableBase::implIsRowSelected( sal_Int32 nRow ) const
273cdf0e10cSrcweir {
274*d69df039Smseidel 	return mpBrowseBox->IsRowSelected( nRow );
275cdf0e10cSrcweir }
276cdf0e10cSrcweir 
implIsColumnSelected(sal_Int32 nColumn) const277cdf0e10cSrcweir sal_Bool AccessibleBrowseBoxTableBase::implIsColumnSelected( sal_Int32 nColumn ) const
278cdf0e10cSrcweir {
279*d69df039Smseidel 	if( implHasHandleColumn() )
280*d69df039Smseidel 		--nColumn;
281*d69df039Smseidel 	return mpBrowseBox->IsColumnSelected( nColumn );
282cdf0e10cSrcweir }
283cdf0e10cSrcweir 
implSelectRow(sal_Int32 nRow,sal_Bool bSelect)284cdf0e10cSrcweir void AccessibleBrowseBoxTableBase::implSelectRow( sal_Int32 nRow, sal_Bool bSelect )
285cdf0e10cSrcweir {
286*d69df039Smseidel 	mpBrowseBox->SelectRow( nRow, bSelect, sal_True );
287cdf0e10cSrcweir }
288cdf0e10cSrcweir 
implSelectColumn(sal_Int32 nColumnPos,sal_Bool bSelect)289cdf0e10cSrcweir void AccessibleBrowseBoxTableBase::implSelectColumn( sal_Int32 nColumnPos, sal_Bool bSelect )
290cdf0e10cSrcweir {
291*d69df039Smseidel 	mpBrowseBox->SelectColumn( (sal_uInt16)nColumnPos, bSelect );
292cdf0e10cSrcweir }
293cdf0e10cSrcweir 
implGetSelectedRowCount() const294cdf0e10cSrcweir sal_Int32 AccessibleBrowseBoxTableBase::implGetSelectedRowCount() const
295cdf0e10cSrcweir {
296*d69df039Smseidel 	return mpBrowseBox->GetSelectedRowCount();
297cdf0e10cSrcweir }
298cdf0e10cSrcweir 
implGetSelectedColumnCount() const299cdf0e10cSrcweir sal_Int32 AccessibleBrowseBoxTableBase::implGetSelectedColumnCount() const
300cdf0e10cSrcweir {
301*d69df039Smseidel 	return mpBrowseBox->GetSelectedColumnCount();
302cdf0e10cSrcweir }
303cdf0e10cSrcweir 
implGetSelectedRows(Sequence<sal_Int32> & rSeq)304cdf0e10cSrcweir void AccessibleBrowseBoxTableBase::implGetSelectedRows( Sequence< sal_Int32 >& rSeq )
305cdf0e10cSrcweir {
306*d69df039Smseidel 	mpBrowseBox->GetAllSelectedRows( rSeq );
307cdf0e10cSrcweir }
308cdf0e10cSrcweir 
implGetSelectedColumns(Sequence<sal_Int32> & rSeq)309cdf0e10cSrcweir void AccessibleBrowseBoxTableBase::implGetSelectedColumns( Sequence< sal_Int32 >& rSeq )
310cdf0e10cSrcweir {
311cdf0e10cSrcweir 	mpBrowseBox->GetAllSelectedColumns( rSeq );
312cdf0e10cSrcweir }
313cdf0e10cSrcweir 
ensureIsValidRow(sal_Int32 nRow)314cdf0e10cSrcweir void AccessibleBrowseBoxTableBase::ensureIsValidRow( sal_Int32 nRow )
315*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException )
316cdf0e10cSrcweir {
317*d69df039Smseidel 	if( nRow >= implGetRowCount() )
318*d69df039Smseidel 		throw lang::IndexOutOfBoundsException(
319*d69df039Smseidel 			OUString( RTL_CONSTASCII_USTRINGPARAM( "row index is invalid" ) ), *this );
320cdf0e10cSrcweir }
321cdf0e10cSrcweir 
ensureIsValidColumn(sal_Int32 nColumn)322cdf0e10cSrcweir void AccessibleBrowseBoxTableBase::ensureIsValidColumn( sal_Int32 nColumn )
323*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException )
324cdf0e10cSrcweir {
325*d69df039Smseidel 	if( nColumn >= implGetColumnCount() )
326*d69df039Smseidel 		throw lang::IndexOutOfBoundsException(
327*d69df039Smseidel 			OUString( RTL_CONSTASCII_USTRINGPARAM("column index is invalid") ), *this );
328cdf0e10cSrcweir }
329cdf0e10cSrcweir 
ensureIsValidAddress(sal_Int32 nRow,sal_Int32 nColumn)330cdf0e10cSrcweir void AccessibleBrowseBoxTableBase::ensureIsValidAddress(
331*d69df039Smseidel 		sal_Int32 nRow, sal_Int32 nColumn )
332*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException )
333cdf0e10cSrcweir {
334*d69df039Smseidel 	ensureIsValidRow( nRow );
335*d69df039Smseidel 	ensureIsValidColumn( nColumn );
336cdf0e10cSrcweir }
337cdf0e10cSrcweir 
ensureIsValidIndex(sal_Int32 nChildIndex)338cdf0e10cSrcweir void AccessibleBrowseBoxTableBase::ensureIsValidIndex( sal_Int32 nChildIndex )
339*d69df039Smseidel 	throw ( lang::IndexOutOfBoundsException )
340cdf0e10cSrcweir {
341*d69df039Smseidel 	if( nChildIndex >= implGetChildCount() )
342*d69df039Smseidel 		throw lang::IndexOutOfBoundsException(
343*d69df039Smseidel 			OUString( RTL_CONSTASCII_USTRINGPARAM("child index is invalid") ), *this );
344cdf0e10cSrcweir }
345cdf0e10cSrcweir 
346cdf0e10cSrcweir // ============================================================================
347*d69df039Smseidel }	// namespace accessibility
348cdf0e10cSrcweir // ============================================================================
349