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