1*d3553c6bSHerbert Dürr /**************************************************************
22bfcd321SSteve Yin  *
3*d3553c6bSHerbert Dürr  * Licensed to the Apache Software Foundation (ASF) under one
4*d3553c6bSHerbert Dürr  * or more contributor license agreements.  See the NOTICE file
5*d3553c6bSHerbert Dürr  * distributed with this work for additional information
6*d3553c6bSHerbert Dürr  * regarding copyright ownership.  The ASF licenses this file
7*d3553c6bSHerbert Dürr  * to you under the Apache License, Version 2.0 (the
8*d3553c6bSHerbert Dürr  * "License"); you may not use this file except in compliance
9*d3553c6bSHerbert Dürr  * with the License.  You may obtain a copy of the License at
10*d3553c6bSHerbert Dürr  *
11*d3553c6bSHerbert Dürr  *   http://www.apache.org/licenses/LICENSE-2.0
12*d3553c6bSHerbert Dürr  *
13*d3553c6bSHerbert Dürr  * Unless required by applicable law or agreed to in writing,
14*d3553c6bSHerbert Dürr  * software distributed under the License is distributed on an
15*d3553c6bSHerbert Dürr  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*d3553c6bSHerbert Dürr  * KIND, either express or implied.  See the License for the
17*d3553c6bSHerbert Dürr  * specific language governing permissions and limitations
18*d3553c6bSHerbert Dürr  * under the License.
19*d3553c6bSHerbert Dürr  *
20*d3553c6bSHerbert Dürr  *************************************************************/
212bfcd321SSteve Yin 
222bfcd321SSteve Yin //IAccessibility2 Implementation 2009-----
232bfcd321SSteve Yin 
242bfcd321SSteve Yin // MARKER(update_precomp.py): autogen include statement, do not remove
252bfcd321SSteve Yin #include "precompiled_svtools.hxx"
262bfcd321SSteve Yin 
272bfcd321SSteve Yin #ifndef _SVTOOLS_VCLXACCESSIBLEHEADERBAR_HXX_
282bfcd321SSteve Yin #include <svtools/vclxaccessibleheaderbar.hxx>
292bfcd321SSteve Yin #endif
302bfcd321SSteve Yin #ifndef _SVTOOLS_VCLACCESSIBLEHEADBARITEM_HXX_
312bfcd321SSteve Yin #include <svtools/vclxaccessibleheaderbaritem.hxx>
322bfcd321SSteve Yin #endif
332bfcd321SSteve Yin 
342bfcd321SSteve Yin #ifndef _TOOLKIT_AWT_VCLXWINDOWS_HXX_
352bfcd321SSteve Yin #include <toolkit/awt/vclxwindows.hxx>
362bfcd321SSteve Yin #endif
372bfcd321SSteve Yin #ifndef _HEADBAR_HXX
382bfcd321SSteve Yin #include <headbar.hxx>
392bfcd321SSteve Yin #endif
402bfcd321SSteve Yin #ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX_
412bfcd321SSteve Yin #include <unotools/accessiblestatesethelper.hxx>
422bfcd321SSteve Yin #endif
432bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_
442bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleStateType.hpp>
452bfcd321SSteve Yin #endif
462bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_
472bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleEventId.hpp>
482bfcd321SSteve Yin #endif
492bfcd321SSteve Yin #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
502bfcd321SSteve Yin #include <cppuhelper/typeprovider.hxx>
512bfcd321SSteve Yin #endif
522bfcd321SSteve Yin #ifndef _COMPHELPER_SEQUENCE_HXX_
532bfcd321SSteve Yin #include <comphelper/sequence.hxx>
542bfcd321SSteve Yin #endif
552bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_
562bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleRole.hpp>
572bfcd321SSteve Yin #endif
582bfcd321SSteve Yin 
592bfcd321SSteve Yin using namespace ::com::sun::star;
602bfcd321SSteve Yin using namespace ::com::sun::star::uno;
612bfcd321SSteve Yin using namespace ::com::sun::star::awt;
622bfcd321SSteve Yin using namespace ::com::sun::star::lang;
632bfcd321SSteve Yin using namespace ::com::sun::star::beans;
642bfcd321SSteve Yin using namespace ::com::sun::star::accessibility;
652bfcd321SSteve Yin using namespace ::comphelper;
662bfcd321SSteve Yin 
672bfcd321SSteve Yin VCLXHeaderBar::VCLXHeaderBar(Window* pHeaderBar)
682bfcd321SSteve Yin {
692bfcd321SSteve Yin 	SetWindow(pHeaderBar);
702bfcd321SSteve Yin }
712bfcd321SSteve Yin 
722bfcd321SSteve Yin VCLXHeaderBar::~VCLXHeaderBar()
732bfcd321SSteve Yin {
742bfcd321SSteve Yin }
752bfcd321SSteve Yin 
762bfcd321SSteve Yin ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXHeaderBar::CreateAccessibleContext()
772bfcd321SSteve Yin {
782bfcd321SSteve Yin 	return new VCLXAccessibleHeaderBar(this);
792bfcd321SSteve Yin }
802bfcd321SSteve Yin 
812bfcd321SSteve Yin 
822bfcd321SSteve Yin VCLXAccessibleHeaderBar::VCLXAccessibleHeaderBar( VCLXWindow* pVCLWindow )
832bfcd321SSteve Yin 	:VCLXAccessibleComponent( pVCLWindow )
842bfcd321SSteve Yin 	,m_pHeadBar(NULL)
852bfcd321SSteve Yin {
862bfcd321SSteve Yin 	m_pHeadBar = static_cast< HeaderBar* >( GetWindow() );
872bfcd321SSteve Yin }
882bfcd321SSteve Yin 
892bfcd321SSteve Yin // -----------------------------------------------------------------------------
902bfcd321SSteve Yin 
912bfcd321SSteve Yin VCLXAccessibleHeaderBar::~VCLXAccessibleHeaderBar()
922bfcd321SSteve Yin {
932bfcd321SSteve Yin }
942bfcd321SSteve Yin 
952bfcd321SSteve Yin // -----------------------------------------------------------------------------
962bfcd321SSteve Yin 
972bfcd321SSteve Yin void VCLXAccessibleHeaderBar::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
982bfcd321SSteve Yin {
992bfcd321SSteve Yin 	VCLXAccessibleComponent::ProcessWindowEvent( rVclWindowEvent );
1002bfcd321SSteve Yin }
1012bfcd321SSteve Yin 
1022bfcd321SSteve Yin // -----------------------------------------------------------------------------
1032bfcd321SSteve Yin 
1042bfcd321SSteve Yin void VCLXAccessibleHeaderBar::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
1052bfcd321SSteve Yin {
1062bfcd321SSteve Yin 	VCLXAccessibleComponent::FillAccessibleStateSet( rStateSet );
1072bfcd321SSteve Yin }
1082bfcd321SSteve Yin 
1092bfcd321SSteve Yin // -----------------------------------------------------------------------------
1102bfcd321SSteve Yin // XServiceInfo
1112bfcd321SSteve Yin // -----------------------------------------------------------------------------
1122bfcd321SSteve Yin 
1132bfcd321SSteve Yin ::rtl::OUString VCLXAccessibleHeaderBar::getImplementationName() throw (RuntimeException)
1142bfcd321SSteve Yin {
1152bfcd321SSteve Yin 	return ::rtl::OUString::createFromAscii( "com.sun.star.comp.toolkit.AccessibleHeaderBar" );
1162bfcd321SSteve Yin }
1172bfcd321SSteve Yin 
1182bfcd321SSteve Yin // -----------------------------------------------------------------------------
1192bfcd321SSteve Yin 
1202bfcd321SSteve Yin Sequence< ::rtl::OUString > VCLXAccessibleHeaderBar::getSupportedServiceNames() throw (RuntimeException)
1212bfcd321SSteve Yin {
1222bfcd321SSteve Yin 	Sequence< ::rtl::OUString > aNames(1);
1232bfcd321SSteve Yin 	aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.AccessibleHeaderBar" );
1242bfcd321SSteve Yin 	return aNames;
1252bfcd321SSteve Yin }
1262bfcd321SSteve Yin 
1272bfcd321SSteve Yin // =======XAccessibleContext=======
1282bfcd321SSteve Yin 
1292bfcd321SSteve Yin sal_Int32 SAL_CALL VCLXAccessibleHeaderBar::getAccessibleChildCount(  )
1302bfcd321SSteve Yin 		throw (::com::sun::star::uno::RuntimeException)
1312bfcd321SSteve Yin {
1322bfcd321SSteve Yin 	sal_Int32 nCount = 0;
1332bfcd321SSteve Yin 	if ( m_pHeadBar )
1342bfcd321SSteve Yin 		nCount = m_pHeadBar->GetItemCount();
1352bfcd321SSteve Yin 
1362bfcd321SSteve Yin     return nCount;
1372bfcd321SSteve Yin }
1382bfcd321SSteve Yin ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
1392bfcd321SSteve Yin 		VCLXAccessibleHeaderBar::getAccessibleChild( sal_Int32 i ) 	throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException)
1402bfcd321SSteve Yin {
1412bfcd321SSteve Yin 	if ( i < 0 || i >= getAccessibleChildCount() )
1422bfcd321SSteve Yin 		throw IndexOutOfBoundsException();
1432bfcd321SSteve Yin 
1442bfcd321SSteve Yin     Reference< XAccessible > xChild;
1452bfcd321SSteve Yin     // search for the child
1462bfcd321SSteve Yin 	if ( static_cast<sal_uInt16>(i) >= m_aAccessibleChildren.size() )
1472bfcd321SSteve Yin 		xChild = CreateChild (i);
1482bfcd321SSteve Yin 	else
1492bfcd321SSteve Yin 	{
1502bfcd321SSteve Yin 		xChild = m_aAccessibleChildren[i];
1512bfcd321SSteve Yin 		if ( !xChild.is() )
1522bfcd321SSteve Yin 			xChild = CreateChild (i);
1532bfcd321SSteve Yin 	}
1542bfcd321SSteve Yin     return xChild;
1552bfcd321SSteve Yin }
1562bfcd321SSteve Yin 
1572bfcd321SSteve Yin sal_Int16 SAL_CALL VCLXAccessibleHeaderBar::getAccessibleRole(  ) throw (::com::sun::star::uno::RuntimeException)
1582bfcd321SSteve Yin {
1592bfcd321SSteve Yin 	return com::sun::star::accessibility::AccessibleRole::LIST;
1602bfcd321SSteve Yin }
1612bfcd321SSteve Yin 
1622bfcd321SSteve Yin void SAL_CALL VCLXAccessibleHeaderBar::disposing (void)
1632bfcd321SSteve Yin {
1642bfcd321SSteve Yin 	ListItems().swap(m_aAccessibleChildren);
1652bfcd321SSteve Yin 	VCLXAccessibleComponent::disposing();
1662bfcd321SSteve Yin }
1672bfcd321SSteve Yin 
1682bfcd321SSteve Yin ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > VCLXAccessibleHeaderBar::CreateChild (sal_Int32 i)
1692bfcd321SSteve Yin {
1702bfcd321SSteve Yin 	Reference<XAccessible> xChild;
1712bfcd321SSteve Yin 
1722bfcd321SSteve Yin 	sal_uInt16 nPos = static_cast<sal_uInt16>(i);
1732bfcd321SSteve Yin 	if ( nPos >= m_aAccessibleChildren.size() )
1742bfcd321SSteve Yin 	{
1752bfcd321SSteve Yin 		m_aAccessibleChildren.resize(nPos + 1);
1762bfcd321SSteve Yin 
1772bfcd321SSteve Yin 		// insert into the container
1782bfcd321SSteve Yin 		xChild = new VCLXAccessibleHeaderBarItem(m_pHeadBar, i);
1792bfcd321SSteve Yin 		m_aAccessibleChildren[nPos] = xChild;
1802bfcd321SSteve Yin 	}
1812bfcd321SSteve Yin 	else
1822bfcd321SSteve Yin 	{
1832bfcd321SSteve Yin 		xChild = m_aAccessibleChildren[nPos];
1842bfcd321SSteve Yin 		// check if position is empty and can be used else we have to adjust all entries behind this
1852bfcd321SSteve Yin 		if ( !xChild.is() )
1862bfcd321SSteve Yin 		{
1872bfcd321SSteve Yin 			xChild = new VCLXAccessibleHeaderBarItem(m_pHeadBar, i);
1882bfcd321SSteve Yin 			m_aAccessibleChildren[nPos] = xChild;
1892bfcd321SSteve Yin 		}
1902bfcd321SSteve Yin 	}
1912bfcd321SSteve Yin     return xChild;
1922bfcd321SSteve Yin }
1932bfcd321SSteve Yin //-----IAccessibility2 Implementation 2009
194