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 #include <accessibility/extended/accessibletabbarpagelist.hxx>
27cdf0e10cSrcweir #include <svtools/tabbar.hxx>
28cdf0e10cSrcweir #include <accessibility/extended/accessibletabbarpage.hxx>
29cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleEventId.hpp>
30cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleRole.hpp>
31cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleStateType.hpp>
32cdf0e10cSrcweir #include <unotools/accessiblestatesethelper.hxx>
33cdf0e10cSrcweir #include <unotools/accessiblerelationsethelper.hxx>
34cdf0e10cSrcweir #include <tools/debug.hxx>
35cdf0e10cSrcweir #include <vcl/svapp.hxx>
36cdf0e10cSrcweir #include <toolkit/helper/convert.hxx>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir 
39cdf0e10cSrcweir //.........................................................................
40cdf0e10cSrcweir namespace accessibility
41cdf0e10cSrcweir {
42cdf0e10cSrcweir //.........................................................................
43cdf0e10cSrcweir 
44cdf0e10cSrcweir 	using namespace ::com::sun::star::accessibility;
45cdf0e10cSrcweir 	using namespace ::com::sun::star::uno;
46cdf0e10cSrcweir 	using namespace ::com::sun::star::lang;
47cdf0e10cSrcweir 	using namespace ::com::sun::star;
48cdf0e10cSrcweir 	using namespace ::comphelper;
49cdf0e10cSrcweir 
DBG_NAME(AccessibleTabBarPageList)50cdf0e10cSrcweir 	DBG_NAME( AccessibleTabBarPageList )
51cdf0e10cSrcweir 
52cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
53cdf0e10cSrcweir 	// class AccessibleTabBarPageList
54cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
55cdf0e10cSrcweir 
56cdf0e10cSrcweir 	AccessibleTabBarPageList::AccessibleTabBarPageList( TabBar* pTabBar, sal_Int32 nIndexInParent )
57cdf0e10cSrcweir         :AccessibleTabBarBase( pTabBar )
58cdf0e10cSrcweir 		,m_nIndexInParent( nIndexInParent )
59cdf0e10cSrcweir 	{
60cdf0e10cSrcweir 	    DBG_CTOR( AccessibleTabBarPageList, NULL );
61cdf0e10cSrcweir 		if ( m_pTabBar )
62cdf0e10cSrcweir 			m_aAccessibleChildren.assign( m_pTabBar->GetPageCount(), Reference< XAccessible >() );
63cdf0e10cSrcweir 	}
64cdf0e10cSrcweir 
65cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
66cdf0e10cSrcweir 
~AccessibleTabBarPageList()67cdf0e10cSrcweir 	AccessibleTabBarPageList::~AccessibleTabBarPageList()
68cdf0e10cSrcweir 	{
69cdf0e10cSrcweir 	    DBG_DTOR( AccessibleTabBarPageList, NULL );
70cdf0e10cSrcweir 	}
71cdf0e10cSrcweir 
72cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
73cdf0e10cSrcweir 
UpdateEnabled(sal_Int32 i,sal_Bool bEnabled)74cdf0e10cSrcweir 	void AccessibleTabBarPageList::UpdateEnabled( sal_Int32 i, sal_Bool bEnabled )
75cdf0e10cSrcweir 	{
76cdf0e10cSrcweir 		if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
77cdf0e10cSrcweir 		{
78cdf0e10cSrcweir 			Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
79cdf0e10cSrcweir 			if ( xChild.is() )
80cdf0e10cSrcweir 			{
81cdf0e10cSrcweir 				AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
82cdf0e10cSrcweir 				if ( pAccessibleTabBarPage )
83cdf0e10cSrcweir 					pAccessibleTabBarPage->SetEnabled( bEnabled );
84cdf0e10cSrcweir 			}
85cdf0e10cSrcweir 		}
86cdf0e10cSrcweir 	}
87cdf0e10cSrcweir 
88cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
89cdf0e10cSrcweir 
UpdateShowing(sal_Bool bShowing)90cdf0e10cSrcweir 	void AccessibleTabBarPageList::UpdateShowing( sal_Bool bShowing )
91cdf0e10cSrcweir 	{
92cdf0e10cSrcweir 		for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
93cdf0e10cSrcweir 		{
94cdf0e10cSrcweir 			Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
95cdf0e10cSrcweir 			if ( xChild.is() )
96cdf0e10cSrcweir 			{
97cdf0e10cSrcweir 				AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
98cdf0e10cSrcweir 				if ( pAccessibleTabBarPage )
99cdf0e10cSrcweir 					pAccessibleTabBarPage->SetShowing( bShowing );
100cdf0e10cSrcweir 			}
101cdf0e10cSrcweir 		}
102cdf0e10cSrcweir 	}
103cdf0e10cSrcweir 
104cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
105cdf0e10cSrcweir 
UpdateSelected(sal_Int32 i,sal_Bool bSelected)106cdf0e10cSrcweir 	void AccessibleTabBarPageList::UpdateSelected( sal_Int32 i, sal_Bool bSelected )
107cdf0e10cSrcweir 	{
108cdf0e10cSrcweir 		NotifyAccessibleEvent( AccessibleEventId::SELECTION_CHANGED, Any(), Any() );
109cdf0e10cSrcweir 
110cdf0e10cSrcweir 		if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
111cdf0e10cSrcweir 		{
112cdf0e10cSrcweir 			Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
113cdf0e10cSrcweir 			if ( xChild.is() )
114cdf0e10cSrcweir 			{
115cdf0e10cSrcweir 				AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
116cdf0e10cSrcweir 				if ( pAccessibleTabBarPage )
117cdf0e10cSrcweir 					pAccessibleTabBarPage->SetSelected( bSelected );
118cdf0e10cSrcweir 			}
119cdf0e10cSrcweir 		}
120cdf0e10cSrcweir 	}
121cdf0e10cSrcweir 
122cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
123cdf0e10cSrcweir 
UpdatePageText(sal_Int32 i)124cdf0e10cSrcweir 	void AccessibleTabBarPageList::UpdatePageText( sal_Int32 i )
125cdf0e10cSrcweir 	{
126cdf0e10cSrcweir 		if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
127cdf0e10cSrcweir 		{
128cdf0e10cSrcweir 			Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
129cdf0e10cSrcweir 			if ( xChild.is() )
130cdf0e10cSrcweir 			{
131cdf0e10cSrcweir 				AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
132cdf0e10cSrcweir 				if ( pAccessibleTabBarPage )
133cdf0e10cSrcweir 				{
134cdf0e10cSrcweir 					if ( m_pTabBar )
135cdf0e10cSrcweir 					{
136cdf0e10cSrcweir 						::rtl::OUString sPageText = m_pTabBar->GetPageText( m_pTabBar->GetPageId( (sal_uInt16)i ) );
137cdf0e10cSrcweir 						pAccessibleTabBarPage->SetPageText( sPageText );
138cdf0e10cSrcweir 					}
139cdf0e10cSrcweir 				}
140cdf0e10cSrcweir 			}
141cdf0e10cSrcweir 		}
142cdf0e10cSrcweir 	}
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
145cdf0e10cSrcweir 
InsertChild(sal_Int32 i)146cdf0e10cSrcweir 	void AccessibleTabBarPageList::InsertChild( sal_Int32 i )
147cdf0e10cSrcweir 	{
148cdf0e10cSrcweir 		if ( i >= 0 && i <= (sal_Int32)m_aAccessibleChildren.size() )
149cdf0e10cSrcweir 		{
150cdf0e10cSrcweir 			// insert entry in child list
151cdf0e10cSrcweir 			m_aAccessibleChildren.insert( m_aAccessibleChildren.begin() + i, Reference< XAccessible >() );
152cdf0e10cSrcweir 
153cdf0e10cSrcweir 			// send accessible child event
154cdf0e10cSrcweir 			Reference< XAccessible > xChild( getAccessibleChild( i ) );
155cdf0e10cSrcweir 			if ( xChild.is() )
156cdf0e10cSrcweir 			{
157cdf0e10cSrcweir 				Any aOldValue, aNewValue;
158cdf0e10cSrcweir 				aNewValue <<= xChild;
159cdf0e10cSrcweir 				NotifyAccessibleEvent( AccessibleEventId::CHILD, aOldValue, aNewValue );
160cdf0e10cSrcweir 			}
161cdf0e10cSrcweir 		}
162cdf0e10cSrcweir 	}
163cdf0e10cSrcweir 
164cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
165cdf0e10cSrcweir 
RemoveChild(sal_Int32 i)166cdf0e10cSrcweir 	void AccessibleTabBarPageList::RemoveChild( sal_Int32 i )
167cdf0e10cSrcweir 	{
168cdf0e10cSrcweir 		if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
169cdf0e10cSrcweir 		{
170cdf0e10cSrcweir 			// get the accessible of the removed page
171cdf0e10cSrcweir 			Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
172cdf0e10cSrcweir 
173cdf0e10cSrcweir 			// remove entry in child list
174cdf0e10cSrcweir 			m_aAccessibleChildren.erase( m_aAccessibleChildren.begin() + i );
175cdf0e10cSrcweir 
176cdf0e10cSrcweir 			// send accessible child event
177cdf0e10cSrcweir 			if ( xChild.is() )
178cdf0e10cSrcweir 			{
179cdf0e10cSrcweir 				Any aOldValue, aNewValue;
180cdf0e10cSrcweir 				aOldValue <<= xChild;
181cdf0e10cSrcweir 				NotifyAccessibleEvent( AccessibleEventId::CHILD, aOldValue, aNewValue );
182cdf0e10cSrcweir 
183cdf0e10cSrcweir 				Reference< XComponent > xComponent( xChild, UNO_QUERY );
184cdf0e10cSrcweir 				if ( xComponent.is() )
185cdf0e10cSrcweir 					xComponent->dispose();
186cdf0e10cSrcweir 			}
187cdf0e10cSrcweir 		}
188cdf0e10cSrcweir 	}
189cdf0e10cSrcweir 
190cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
191cdf0e10cSrcweir 
MoveChild(sal_Int32 i,sal_Int32 j)192cdf0e10cSrcweir 	void AccessibleTabBarPageList::MoveChild( sal_Int32 i, sal_Int32 j )
193cdf0e10cSrcweir 	{
194cdf0e10cSrcweir 		if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() &&
195cdf0e10cSrcweir 			 j >= 0 && j <= (sal_Int32)m_aAccessibleChildren.size() )
196cdf0e10cSrcweir 		{
197cdf0e10cSrcweir 			if ( i < j )
198cdf0e10cSrcweir 				--j;
199cdf0e10cSrcweir 
200cdf0e10cSrcweir 			// get the accessible of the moved page
201cdf0e10cSrcweir 			Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
202cdf0e10cSrcweir 
203cdf0e10cSrcweir 			// remove entry in child list at old position
204cdf0e10cSrcweir 			m_aAccessibleChildren.erase( m_aAccessibleChildren.begin() + i );
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 			// insert entry in child list at new position
207cdf0e10cSrcweir 			m_aAccessibleChildren.insert( m_aAccessibleChildren.begin() + j, xChild );
208cdf0e10cSrcweir 		}
209cdf0e10cSrcweir 	}
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
212cdf0e10cSrcweir 
ProcessWindowEvent(const VclWindowEvent & rVclWindowEvent)213cdf0e10cSrcweir 	void AccessibleTabBarPageList::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
214cdf0e10cSrcweir 	{
215cdf0e10cSrcweir          switch ( rVclWindowEvent.GetId() )
216cdf0e10cSrcweir          {
217cdf0e10cSrcweir             case VCLEVENT_WINDOW_ENABLED:
218cdf0e10cSrcweir             {
219cdf0e10cSrcweir                Any aNewValue;
220cdf0e10cSrcweir                 aNewValue <<= AccessibleStateType::SENSITIVE;
221cdf0e10cSrcweir                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, Any(), aNewValue );
222cdf0e10cSrcweir                 aNewValue <<= AccessibleStateType::ENABLED;
223cdf0e10cSrcweir                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, Any(), aNewValue );
224cdf0e10cSrcweir             }
225cdf0e10cSrcweir             break;
226cdf0e10cSrcweir             case VCLEVENT_WINDOW_DISABLED:
227cdf0e10cSrcweir             {
228cdf0e10cSrcweir                Any aOldValue;
229cdf0e10cSrcweir                 aOldValue <<= AccessibleStateType::ENABLED;
230cdf0e10cSrcweir                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, Any() );
231cdf0e10cSrcweir                 aOldValue <<= AccessibleStateType::SENSITIVE;
232cdf0e10cSrcweir                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, Any() );
233cdf0e10cSrcweir             }
234cdf0e10cSrcweir             break;
235cdf0e10cSrcweir 			case VCLEVENT_WINDOW_SHOW:
236cdf0e10cSrcweir 			{
237cdf0e10cSrcweir 				Any aOldValue, aNewValue;
238cdf0e10cSrcweir 				aNewValue <<= AccessibleStateType::SHOWING;
239cdf0e10cSrcweir 				NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
240cdf0e10cSrcweir 				UpdateShowing( sal_True );
241cdf0e10cSrcweir 			}
242cdf0e10cSrcweir 			break;
243cdf0e10cSrcweir 			case VCLEVENT_WINDOW_HIDE:
244cdf0e10cSrcweir 			{
245cdf0e10cSrcweir 				Any aOldValue, aNewValue;
246cdf0e10cSrcweir 				aOldValue <<= AccessibleStateType::SHOWING;
247cdf0e10cSrcweir 				NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
248cdf0e10cSrcweir 				UpdateShowing( sal_False );
249cdf0e10cSrcweir 			}
250cdf0e10cSrcweir 			break;
251cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGEENABLED:
252cdf0e10cSrcweir 			{
253cdf0e10cSrcweir 				if ( m_pTabBar )
254cdf0e10cSrcweir 				{
255cdf0e10cSrcweir                     sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
256cdf0e10cSrcweir 					sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
257cdf0e10cSrcweir 					UpdateEnabled( nPagePos, sal_True );
258cdf0e10cSrcweir 				}
259cdf0e10cSrcweir 			}
260cdf0e10cSrcweir 			break;
261cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGEDISABLED:
262cdf0e10cSrcweir 			{
263cdf0e10cSrcweir 				if ( m_pTabBar )
264cdf0e10cSrcweir 				{
265cdf0e10cSrcweir                     sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
266cdf0e10cSrcweir 					sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
267cdf0e10cSrcweir 					UpdateEnabled( nPagePos, sal_False );
268cdf0e10cSrcweir 				}
269cdf0e10cSrcweir 			}
270cdf0e10cSrcweir 			break;
271cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGESELECTED:
272cdf0e10cSrcweir 			{
273cdf0e10cSrcweir 				// do nothing
274cdf0e10cSrcweir 			}
275cdf0e10cSrcweir 			break;
276cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGEACTIVATED:
277cdf0e10cSrcweir 			{
278cdf0e10cSrcweir 				if ( m_pTabBar )
279cdf0e10cSrcweir 				{
280cdf0e10cSrcweir                     sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
281cdf0e10cSrcweir 					sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
282cdf0e10cSrcweir 					UpdateSelected( nPagePos, sal_True );
283cdf0e10cSrcweir 				}
284cdf0e10cSrcweir 			}
285cdf0e10cSrcweir 			break;
286cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGEDEACTIVATED:
287cdf0e10cSrcweir 			{
288cdf0e10cSrcweir 				if ( m_pTabBar )
289cdf0e10cSrcweir 				{
290cdf0e10cSrcweir                     sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
291cdf0e10cSrcweir 					sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
292cdf0e10cSrcweir 					UpdateSelected( nPagePos, sal_False );
293cdf0e10cSrcweir 				}
294cdf0e10cSrcweir 			}
295cdf0e10cSrcweir 			break;
296cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGEINSERTED:
297cdf0e10cSrcweir 			{
298cdf0e10cSrcweir 				if ( m_pTabBar )
299cdf0e10cSrcweir 				{
300cdf0e10cSrcweir                     sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
301cdf0e10cSrcweir 					sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
302cdf0e10cSrcweir 					InsertChild( nPagePos );
303cdf0e10cSrcweir 				}
304cdf0e10cSrcweir 			}
305cdf0e10cSrcweir 			break;
306cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGEREMOVED:
307cdf0e10cSrcweir 			{
308cdf0e10cSrcweir 				if ( m_pTabBar )
309cdf0e10cSrcweir 				{
310cdf0e10cSrcweir                     sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
311cdf0e10cSrcweir 
312cdf0e10cSrcweir                     if ( nPageId == TabBar::PAGE_NOT_FOUND )
313cdf0e10cSrcweir 					{
314cdf0e10cSrcweir 						for ( sal_Int32 i = m_aAccessibleChildren.size() - 1; i >= 0; --i )
315cdf0e10cSrcweir 							RemoveChild( i );
316cdf0e10cSrcweir 					}
317cdf0e10cSrcweir 					else
318cdf0e10cSrcweir 					{
319cdf0e10cSrcweir 						for ( sal_Int32 i = 0, nCount = getAccessibleChildCount(); i < nCount; ++i )
320cdf0e10cSrcweir 						{
321cdf0e10cSrcweir 							Reference< XAccessible > xChild( getAccessibleChild( i ) );
322cdf0e10cSrcweir 							if ( xChild.is() )
323cdf0e10cSrcweir 							{
324cdf0e10cSrcweir 								AccessibleTabBarPage* pAccessibleTabBarPage = static_cast< AccessibleTabBarPage* >( xChild.get() );
325cdf0e10cSrcweir 								if ( pAccessibleTabBarPage && pAccessibleTabBarPage->GetPageId() == nPageId )
326cdf0e10cSrcweir 								{
327cdf0e10cSrcweir 									RemoveChild( i );
328cdf0e10cSrcweir 									break;
329cdf0e10cSrcweir 								}
330cdf0e10cSrcweir 							}
331cdf0e10cSrcweir 						}
332cdf0e10cSrcweir 					}
333cdf0e10cSrcweir 				}
334cdf0e10cSrcweir 			}
335cdf0e10cSrcweir 			break;
336cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGEMOVED:
337cdf0e10cSrcweir 			{
338cdf0e10cSrcweir 			    Pair* pPair = (Pair*) rVclWindowEvent.GetData();
339cdf0e10cSrcweir 				if ( pPair )
340cdf0e10cSrcweir 					MoveChild( pPair->A(), pPair->B() );
341cdf0e10cSrcweir 			}
342cdf0e10cSrcweir 			break;
343cdf0e10cSrcweir 			case VCLEVENT_TABBAR_PAGETEXTCHANGED:
344cdf0e10cSrcweir 			{
345cdf0e10cSrcweir                 sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
346cdf0e10cSrcweir 				sal_uInt16 nPagePos = m_pTabBar->GetPagePos( nPageId );
347cdf0e10cSrcweir 				UpdatePageText( nPagePos );
348cdf0e10cSrcweir 			}
349cdf0e10cSrcweir 			break;
350cdf0e10cSrcweir 			default:
351cdf0e10cSrcweir 			{
352cdf0e10cSrcweir                 AccessibleTabBarBase::ProcessWindowEvent( rVclWindowEvent );
353cdf0e10cSrcweir 			}
354cdf0e10cSrcweir 			break;
355cdf0e10cSrcweir 		}
356cdf0e10cSrcweir 	}
357cdf0e10cSrcweir 
358cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
359cdf0e10cSrcweir 
FillAccessibleStateSet(utl::AccessibleStateSetHelper & rStateSet)360cdf0e10cSrcweir 	void AccessibleTabBarPageList::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
361cdf0e10cSrcweir 	{
362cdf0e10cSrcweir 		if ( m_pTabBar )
363cdf0e10cSrcweir 		{
364cdf0e10cSrcweir 			if ( m_pTabBar->IsEnabled() )
365cdf0e10cSrcweir             {
366cdf0e10cSrcweir                 rStateSet.AddState( AccessibleStateType::ENABLED );
367cdf0e10cSrcweir                 rStateSet.AddState( AccessibleStateType::SENSITIVE );
368cdf0e10cSrcweir             }
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 			rStateSet.AddState( AccessibleStateType::VISIBLE );
371cdf0e10cSrcweir 
372cdf0e10cSrcweir 			if ( m_pTabBar->IsVisible() )
373cdf0e10cSrcweir 				rStateSet.AddState( AccessibleStateType::SHOWING );
374cdf0e10cSrcweir 		}
375cdf0e10cSrcweir 	}
376cdf0e10cSrcweir 
377cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
378cdf0e10cSrcweir 	// OCommonAccessibleComponent
379cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
380cdf0e10cSrcweir 
implGetBounds()381cdf0e10cSrcweir 	awt::Rectangle AccessibleTabBarPageList::implGetBounds() throw (RuntimeException)
382cdf0e10cSrcweir 	{
383cdf0e10cSrcweir 		awt::Rectangle aBounds;
384cdf0e10cSrcweir 		if ( m_pTabBar )
385cdf0e10cSrcweir 			aBounds = AWTRectangle( m_pTabBar->GetPageArea() );
386cdf0e10cSrcweir 
387cdf0e10cSrcweir 		return aBounds;
388cdf0e10cSrcweir 	}
389cdf0e10cSrcweir 
390cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
391cdf0e10cSrcweir 	// XInterface
392cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
393cdf0e10cSrcweir 
IMPLEMENT_FORWARD_XINTERFACE2(AccessibleTabBarPageList,AccessibleExtendedComponentHelper_BASE,AccessibleTabBarPageList_BASE)394cdf0e10cSrcweir 	IMPLEMENT_FORWARD_XINTERFACE2( AccessibleTabBarPageList, AccessibleExtendedComponentHelper_BASE, AccessibleTabBarPageList_BASE )
395cdf0e10cSrcweir 
396cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
397cdf0e10cSrcweir 	// XTypeProvider
398cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
399cdf0e10cSrcweir 
400cdf0e10cSrcweir 	IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccessibleTabBarPageList, AccessibleExtendedComponentHelper_BASE, AccessibleTabBarPageList_BASE )
401cdf0e10cSrcweir 
402cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
403cdf0e10cSrcweir 	// XComponent
404cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
405cdf0e10cSrcweir 
406cdf0e10cSrcweir 	void AccessibleTabBarPageList::disposing()
407cdf0e10cSrcweir 	{
408cdf0e10cSrcweir         AccessibleTabBarBase::disposing();
409cdf0e10cSrcweir 
410cdf0e10cSrcweir         // dispose all children
411cdf0e10cSrcweir         for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
412cdf0e10cSrcweir         {
413cdf0e10cSrcweir             Reference< XComponent > xComponent( m_aAccessibleChildren[i], UNO_QUERY );
414cdf0e10cSrcweir             if ( xComponent.is() )
415cdf0e10cSrcweir                 xComponent->dispose();
416cdf0e10cSrcweir         }
417cdf0e10cSrcweir         m_aAccessibleChildren.clear();
418cdf0e10cSrcweir 	}
419cdf0e10cSrcweir 
420cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
421cdf0e10cSrcweir 	// XServiceInfo
422cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
423cdf0e10cSrcweir 
getImplementationName()424cdf0e10cSrcweir 	::rtl::OUString AccessibleTabBarPageList::getImplementationName() throw (RuntimeException)
425cdf0e10cSrcweir 	{
426cdf0e10cSrcweir 		return ::rtl::OUString::createFromAscii( "com.sun.star.comp.svtools.AccessibleTabBarPageList" );
427cdf0e10cSrcweir 	}
428cdf0e10cSrcweir 
429cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
430cdf0e10cSrcweir 
supportsService(const::rtl::OUString & rServiceName)431cdf0e10cSrcweir 	sal_Bool AccessibleTabBarPageList::supportsService( const ::rtl::OUString& rServiceName ) throw (RuntimeException)
432cdf0e10cSrcweir 	{
433cdf0e10cSrcweir 		Sequence< ::rtl::OUString > aNames( getSupportedServiceNames() );
434cdf0e10cSrcweir 		const ::rtl::OUString* pNames = aNames.getConstArray();
435cdf0e10cSrcweir 		const ::rtl::OUString* pEnd = pNames + aNames.getLength();
436cdf0e10cSrcweir 		for ( ; pNames != pEnd && !pNames->equals( rServiceName ); ++pNames )
437cdf0e10cSrcweir 			;
438cdf0e10cSrcweir 
439cdf0e10cSrcweir 		return pNames != pEnd;
440cdf0e10cSrcweir 	}
441cdf0e10cSrcweir 
442cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
443cdf0e10cSrcweir 
getSupportedServiceNames()444cdf0e10cSrcweir 	Sequence< ::rtl::OUString > AccessibleTabBarPageList::getSupportedServiceNames() throw (RuntimeException)
445cdf0e10cSrcweir 	{
446cdf0e10cSrcweir 		Sequence< ::rtl::OUString > aNames(1);
447cdf0e10cSrcweir 		aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.AccessibleTabBarPageList" );
448cdf0e10cSrcweir 		return aNames;
449cdf0e10cSrcweir 	}
450cdf0e10cSrcweir 
451cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
452cdf0e10cSrcweir 	// XAccessible
453cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
454cdf0e10cSrcweir 
getAccessibleContext()455cdf0e10cSrcweir 	Reference< XAccessibleContext > AccessibleTabBarPageList::getAccessibleContext(  ) throw (RuntimeException)
456cdf0e10cSrcweir 	{
457cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
458cdf0e10cSrcweir 
459cdf0e10cSrcweir 		return this;
460cdf0e10cSrcweir 	}
461cdf0e10cSrcweir 
462cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
463cdf0e10cSrcweir 	// XAccessibleContext
464cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
465cdf0e10cSrcweir 
getAccessibleChildCount()466cdf0e10cSrcweir 	sal_Int32 AccessibleTabBarPageList::getAccessibleChildCount() throw (RuntimeException)
467cdf0e10cSrcweir 	{
468cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
469cdf0e10cSrcweir 
470cdf0e10cSrcweir 		return m_aAccessibleChildren.size();
471cdf0e10cSrcweir 	}
472cdf0e10cSrcweir 
473cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
474cdf0e10cSrcweir 
getAccessibleChild(sal_Int32 i)475cdf0e10cSrcweir 	Reference< XAccessible > AccessibleTabBarPageList::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException)
476cdf0e10cSrcweir 	{
477cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
478cdf0e10cSrcweir 
479cdf0e10cSrcweir 		if ( i < 0 || i >= getAccessibleChildCount() )
480cdf0e10cSrcweir 			throw IndexOutOfBoundsException();
481cdf0e10cSrcweir 
482cdf0e10cSrcweir 		Reference< XAccessible > xChild = m_aAccessibleChildren[i];
483cdf0e10cSrcweir 		if ( !xChild.is() )
484cdf0e10cSrcweir 		{
485cdf0e10cSrcweir 			if ( m_pTabBar )
486cdf0e10cSrcweir 			{
487cdf0e10cSrcweir 				sal_uInt16 nPageId = m_pTabBar->GetPageId( (sal_uInt16)i );
488cdf0e10cSrcweir 
489cdf0e10cSrcweir 				xChild = new AccessibleTabBarPage( m_pTabBar, nPageId, this );
490cdf0e10cSrcweir 
491cdf0e10cSrcweir 				// insert into child list
492cdf0e10cSrcweir 				m_aAccessibleChildren[i] = xChild;
493cdf0e10cSrcweir 			}
494cdf0e10cSrcweir 		}
495cdf0e10cSrcweir 
496cdf0e10cSrcweir 		return xChild;
497cdf0e10cSrcweir 	}
498cdf0e10cSrcweir 
499cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
500cdf0e10cSrcweir 
getAccessibleParent()501cdf0e10cSrcweir 	Reference< XAccessible > AccessibleTabBarPageList::getAccessibleParent(  ) throw (RuntimeException)
502cdf0e10cSrcweir 	{
503cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
504cdf0e10cSrcweir 
505cdf0e10cSrcweir 		Reference< XAccessible > xParent;
506cdf0e10cSrcweir 		if ( m_pTabBar )
507cdf0e10cSrcweir 			xParent = m_pTabBar->GetAccessible();
508cdf0e10cSrcweir 
509cdf0e10cSrcweir 		return xParent;
510cdf0e10cSrcweir 	}
511cdf0e10cSrcweir 
512cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
513cdf0e10cSrcweir 
getAccessibleIndexInParent()514cdf0e10cSrcweir 	sal_Int32 AccessibleTabBarPageList::getAccessibleIndexInParent(  ) throw (RuntimeException)
515cdf0e10cSrcweir 	{
516cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
517cdf0e10cSrcweir 
518cdf0e10cSrcweir 		return m_nIndexInParent;
519cdf0e10cSrcweir 	}
520cdf0e10cSrcweir 
521cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
522cdf0e10cSrcweir 
getAccessibleRole()523cdf0e10cSrcweir 	sal_Int16 AccessibleTabBarPageList::getAccessibleRole(  ) throw (RuntimeException)
524cdf0e10cSrcweir 	{
525cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
526cdf0e10cSrcweir 
527cdf0e10cSrcweir 		return AccessibleRole::PAGE_TAB_LIST;
528cdf0e10cSrcweir 	}
529cdf0e10cSrcweir 
530cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
531cdf0e10cSrcweir 
getAccessibleDescription()532cdf0e10cSrcweir 	::rtl::OUString AccessibleTabBarPageList::getAccessibleDescription(	) throw (RuntimeException)
533cdf0e10cSrcweir 	{
534cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
535cdf0e10cSrcweir 
536cdf0e10cSrcweir 		return ::rtl::OUString();
537cdf0e10cSrcweir 	}
538cdf0e10cSrcweir 
539cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
540cdf0e10cSrcweir 
getAccessibleName()541cdf0e10cSrcweir 	::rtl::OUString AccessibleTabBarPageList::getAccessibleName(  ) throw (RuntimeException)
542cdf0e10cSrcweir 	{
543cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
544cdf0e10cSrcweir 
545cdf0e10cSrcweir 		return ::rtl::OUString();
546cdf0e10cSrcweir 	}
547cdf0e10cSrcweir 
548cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
549cdf0e10cSrcweir 
getAccessibleRelationSet()550cdf0e10cSrcweir 	Reference< XAccessibleRelationSet > AccessibleTabBarPageList::getAccessibleRelationSet(  ) throw (RuntimeException)
551cdf0e10cSrcweir 	{
552cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
553cdf0e10cSrcweir 
554cdf0e10cSrcweir 		utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
555cdf0e10cSrcweir 		Reference< XAccessibleRelationSet > xSet = pRelationSetHelper;
556cdf0e10cSrcweir 		return xSet;
557cdf0e10cSrcweir 	}
558cdf0e10cSrcweir 
559cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
560cdf0e10cSrcweir 
getAccessibleStateSet()561cdf0e10cSrcweir 	Reference< XAccessibleStateSet > AccessibleTabBarPageList::getAccessibleStateSet(  ) throw (RuntimeException)
562cdf0e10cSrcweir 	{
563cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
564cdf0e10cSrcweir 
565cdf0e10cSrcweir 		utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
566cdf0e10cSrcweir 		Reference< XAccessibleStateSet > xSet = pStateSetHelper;
567cdf0e10cSrcweir 
568cdf0e10cSrcweir 		if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
569cdf0e10cSrcweir 		{
570cdf0e10cSrcweir 			FillAccessibleStateSet( *pStateSetHelper );
571cdf0e10cSrcweir 		}
572cdf0e10cSrcweir 		else
573cdf0e10cSrcweir 		{
574cdf0e10cSrcweir 			pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
575cdf0e10cSrcweir 		}
576cdf0e10cSrcweir 
577cdf0e10cSrcweir 		return xSet;
578cdf0e10cSrcweir 	}
579cdf0e10cSrcweir 
580cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
581cdf0e10cSrcweir 
getLocale()582cdf0e10cSrcweir 	Locale AccessibleTabBarPageList::getLocale(  ) throw (IllegalAccessibleComponentStateException, RuntimeException)
583cdf0e10cSrcweir 	{
584cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
585cdf0e10cSrcweir 
586cdf0e10cSrcweir 		return Application::GetSettings().GetLocale();
587cdf0e10cSrcweir 	}
588cdf0e10cSrcweir 
589cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
590cdf0e10cSrcweir 	// XAccessibleComponent
591cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
592cdf0e10cSrcweir 
getAccessibleAtPoint(const awt::Point & rPoint)593cdf0e10cSrcweir 	Reference< XAccessible > AccessibleTabBarPageList::getAccessibleAtPoint( const awt::Point& rPoint ) throw (RuntimeException)
594cdf0e10cSrcweir 	{
595cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
596cdf0e10cSrcweir 
597cdf0e10cSrcweir 		Reference< XAccessible > xChild;
598cdf0e10cSrcweir 		for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
599cdf0e10cSrcweir 		{
600cdf0e10cSrcweir 			Reference< XAccessible > xAcc = getAccessibleChild( i );
601cdf0e10cSrcweir 			if ( xAcc.is() )
602cdf0e10cSrcweir 			{
603cdf0e10cSrcweir 				Reference< XAccessibleComponent > xComp( xAcc->getAccessibleContext(), UNO_QUERY );
604cdf0e10cSrcweir 				if ( xComp.is() )
605cdf0e10cSrcweir 				{
606cdf0e10cSrcweir 					Rectangle aRect = VCLRectangle( xComp->getBounds() );
607cdf0e10cSrcweir 					Point aPos = VCLPoint( rPoint );
608cdf0e10cSrcweir 					if ( aRect.IsInside( aPos ) )
609cdf0e10cSrcweir 					{
610cdf0e10cSrcweir 						xChild = xAcc;
611cdf0e10cSrcweir 						break;
612cdf0e10cSrcweir 					}
613cdf0e10cSrcweir 				}
614cdf0e10cSrcweir 			}
615cdf0e10cSrcweir 		}
616cdf0e10cSrcweir 
617cdf0e10cSrcweir 		return xChild;
618cdf0e10cSrcweir 	}
619cdf0e10cSrcweir 
620cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
621cdf0e10cSrcweir 
grabFocus()622cdf0e10cSrcweir 	void AccessibleTabBarPageList::grabFocus(  ) throw (RuntimeException)
623cdf0e10cSrcweir 	{
624cdf0e10cSrcweir 		// no focus
625cdf0e10cSrcweir 	}
626cdf0e10cSrcweir 
627cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
628cdf0e10cSrcweir 
getForeground()629cdf0e10cSrcweir 	sal_Int32 AccessibleTabBarPageList::getForeground(	) throw (RuntimeException)
630cdf0e10cSrcweir 	{
631cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
632cdf0e10cSrcweir 
633cdf0e10cSrcweir 		sal_Int32 nColor = 0;
634cdf0e10cSrcweir 		Reference< XAccessible > xParent = getAccessibleParent();
635cdf0e10cSrcweir 		if ( xParent.is() )
636cdf0e10cSrcweir 		{
637cdf0e10cSrcweir 			Reference< XAccessibleComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
638cdf0e10cSrcweir 			if ( xParentComp.is() )
639cdf0e10cSrcweir 				nColor = xParentComp->getForeground();
640cdf0e10cSrcweir 		}
641cdf0e10cSrcweir 
642cdf0e10cSrcweir 		return nColor;
643cdf0e10cSrcweir 	}
644cdf0e10cSrcweir 
645cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
646cdf0e10cSrcweir 
getBackground()647cdf0e10cSrcweir 	sal_Int32 AccessibleTabBarPageList::getBackground(  ) throw (RuntimeException)
648cdf0e10cSrcweir 	{
649cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
650cdf0e10cSrcweir 
651cdf0e10cSrcweir 		sal_Int32 nColor = 0;
652cdf0e10cSrcweir 		Reference< XAccessible > xParent = getAccessibleParent();
653cdf0e10cSrcweir 		if ( xParent.is() )
654cdf0e10cSrcweir 		{
655cdf0e10cSrcweir 			Reference< XAccessibleComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
656cdf0e10cSrcweir 			if ( xParentComp.is() )
657cdf0e10cSrcweir 				nColor = xParentComp->getBackground();
658cdf0e10cSrcweir 		}
659cdf0e10cSrcweir 
660cdf0e10cSrcweir 		return nColor;
661cdf0e10cSrcweir 	}
662cdf0e10cSrcweir 
663cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
664cdf0e10cSrcweir 	// XAccessibleExtendedComponent
665cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
666cdf0e10cSrcweir 
getFont()667cdf0e10cSrcweir 	Reference< awt::XFont > AccessibleTabBarPageList::getFont(  ) throw (RuntimeException)
668cdf0e10cSrcweir 	{
669cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
670cdf0e10cSrcweir 
671cdf0e10cSrcweir 		Reference< awt::XFont > xFont;
672cdf0e10cSrcweir 		Reference< XAccessible > xParent = getAccessibleParent();
673cdf0e10cSrcweir 		if ( xParent.is() )
674cdf0e10cSrcweir 		{
675cdf0e10cSrcweir 			Reference< XAccessibleExtendedComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY );
676cdf0e10cSrcweir 			if ( xParentComp.is() )
677cdf0e10cSrcweir 				xFont = xParentComp->getFont();
678cdf0e10cSrcweir 		}
679cdf0e10cSrcweir 
680cdf0e10cSrcweir 		return xFont;
681cdf0e10cSrcweir 	}
682cdf0e10cSrcweir 
683cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
684cdf0e10cSrcweir 
getTitledBorderText()685cdf0e10cSrcweir 	::rtl::OUString AccessibleTabBarPageList::getTitledBorderText(  ) throw (RuntimeException)
686cdf0e10cSrcweir 	{
687cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
688cdf0e10cSrcweir 
689cdf0e10cSrcweir 		return ::rtl::OUString();
690cdf0e10cSrcweir 	}
691cdf0e10cSrcweir 
692cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
693cdf0e10cSrcweir 
getToolTipText()694cdf0e10cSrcweir 	::rtl::OUString AccessibleTabBarPageList::getToolTipText(  ) throw (RuntimeException)
695cdf0e10cSrcweir 	{
696cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
697cdf0e10cSrcweir 
698cdf0e10cSrcweir 		return ::rtl::OUString();
699cdf0e10cSrcweir 	}
700cdf0e10cSrcweir 
701cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
702cdf0e10cSrcweir 	// XAccessibleSelection
703cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
704cdf0e10cSrcweir 
selectAccessibleChild(sal_Int32 nChildIndex)705cdf0e10cSrcweir 	void AccessibleTabBarPageList::selectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
706cdf0e10cSrcweir 	{
707cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
708cdf0e10cSrcweir 
709cdf0e10cSrcweir 		if ( nChildIndex < 0 || nChildIndex >= getAccessibleChildCount() )
710cdf0e10cSrcweir 			throw IndexOutOfBoundsException();
711cdf0e10cSrcweir 
712cdf0e10cSrcweir 		if ( m_pTabBar )
713cdf0e10cSrcweir 		{
714cdf0e10cSrcweir 			m_pTabBar->SetCurPageId( m_pTabBar->GetPageId( (sal_uInt16)nChildIndex ) );
715cdf0e10cSrcweir 			m_pTabBar->Update();
716cdf0e10cSrcweir 			m_pTabBar->ActivatePage();
717cdf0e10cSrcweir 			m_pTabBar->Select();
718cdf0e10cSrcweir 		}
719cdf0e10cSrcweir 	}
720cdf0e10cSrcweir 
721cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
722cdf0e10cSrcweir 
isAccessibleChildSelected(sal_Int32 nChildIndex)723cdf0e10cSrcweir 	sal_Bool AccessibleTabBarPageList::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
724cdf0e10cSrcweir 	{
725cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
726cdf0e10cSrcweir 
727cdf0e10cSrcweir 		if ( nChildIndex < 0 || nChildIndex >= getAccessibleChildCount() )
728cdf0e10cSrcweir 			throw IndexOutOfBoundsException();
729cdf0e10cSrcweir 
730cdf0e10cSrcweir 		sal_Bool bSelected = sal_False;
731cdf0e10cSrcweir 		if ( m_pTabBar && m_pTabBar->GetCurPageId() == m_pTabBar->GetPageId( (sal_uInt16)nChildIndex ) )
732cdf0e10cSrcweir 			bSelected = sal_True;
733cdf0e10cSrcweir 
734cdf0e10cSrcweir 		return bSelected;
735cdf0e10cSrcweir 	}
736cdf0e10cSrcweir 
737cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
738cdf0e10cSrcweir 
clearAccessibleSelection()739cdf0e10cSrcweir 	void AccessibleTabBarPageList::clearAccessibleSelection(  ) throw (RuntimeException)
740cdf0e10cSrcweir 	{
741cdf0e10cSrcweir 		// This method makes no sense in a TabBar, and so does nothing.
742cdf0e10cSrcweir 	}
743cdf0e10cSrcweir 
744cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
745cdf0e10cSrcweir 
selectAllAccessibleChildren()746cdf0e10cSrcweir 	void AccessibleTabBarPageList::selectAllAccessibleChildren(  ) throw (RuntimeException)
747cdf0e10cSrcweir 	{
748cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
749cdf0e10cSrcweir 
750cdf0e10cSrcweir 		selectAccessibleChild( 0 );
751cdf0e10cSrcweir 	}
752cdf0e10cSrcweir 
753cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
754cdf0e10cSrcweir 
getSelectedAccessibleChildCount()755cdf0e10cSrcweir 	sal_Int32 AccessibleTabBarPageList::getSelectedAccessibleChildCount(  ) throw (RuntimeException)
756cdf0e10cSrcweir 	{
757cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
758cdf0e10cSrcweir 
759cdf0e10cSrcweir 		return 1;
760cdf0e10cSrcweir 	}
761cdf0e10cSrcweir 
762cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
763cdf0e10cSrcweir 
getSelectedAccessibleChild(sal_Int32 nSelectedChildIndex)764cdf0e10cSrcweir 	Reference< XAccessible > AccessibleTabBarPageList::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
765cdf0e10cSrcweir 	{
766cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
767cdf0e10cSrcweir 
768cdf0e10cSrcweir 		if ( nSelectedChildIndex < 0 || nSelectedChildIndex >= getSelectedAccessibleChildCount() )
769cdf0e10cSrcweir 			throw IndexOutOfBoundsException();
770cdf0e10cSrcweir 
771cdf0e10cSrcweir 		Reference< XAccessible > xChild;
772cdf0e10cSrcweir 
773cdf0e10cSrcweir 		for ( sal_Int32 i = 0, j = 0, nCount = getAccessibleChildCount(); i < nCount; i++ )
774cdf0e10cSrcweir 		{
775cdf0e10cSrcweir 			if ( isAccessibleChildSelected( i ) && ( j++ == nSelectedChildIndex ) )
776cdf0e10cSrcweir 			{
777cdf0e10cSrcweir 				xChild = getAccessibleChild( i );
778cdf0e10cSrcweir 				break;
779cdf0e10cSrcweir 			}
780cdf0e10cSrcweir 		}
781cdf0e10cSrcweir 
782cdf0e10cSrcweir 		return xChild;
783cdf0e10cSrcweir 	}
784cdf0e10cSrcweir 
785cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
786cdf0e10cSrcweir 
deselectAccessibleChild(sal_Int32 nChildIndex)787cdf0e10cSrcweir 	void AccessibleTabBarPageList::deselectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException)
788cdf0e10cSrcweir 	{
789cdf0e10cSrcweir 		OExternalLockGuard aGuard( this );
790cdf0e10cSrcweir 
791cdf0e10cSrcweir 		if ( nChildIndex < 0 || nChildIndex >= getAccessibleChildCount() )
792cdf0e10cSrcweir 			throw IndexOutOfBoundsException();
793cdf0e10cSrcweir 
794cdf0e10cSrcweir 		// This method makes no sense in a TabBar, and so does nothing.
795cdf0e10cSrcweir 	}
796cdf0e10cSrcweir 
797cdf0e10cSrcweir 	// -----------------------------------------------------------------------------
798cdf0e10cSrcweir 
799cdf0e10cSrcweir //.........................................................................
800cdf0e10cSrcweir }	// namespace accessibility
801cdf0e10cSrcweir //.........................................................................
802