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