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