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 232bfcd321SSteve Yin // MARKER(update_precomp.py): autogen include statement, do not remove 242bfcd321SSteve Yin #include "precompiled_svtools.hxx" 252bfcd321SSteve Yin 262bfcd321SSteve Yin #ifndef _SVTOOLS_VCLXACCESSIBLEHEADERBAR_HXX_ 272bfcd321SSteve Yin #include <svtools/vclxaccessibleheaderbar.hxx> 282bfcd321SSteve Yin #endif 292bfcd321SSteve Yin #ifndef _SVTOOLS_VCLACCESSIBLEHEADBARITEM_HXX_ 302bfcd321SSteve Yin #include <svtools/vclxaccessibleheaderbaritem.hxx> 312bfcd321SSteve Yin #endif 322bfcd321SSteve Yin 332bfcd321SSteve Yin #ifndef _TOOLKIT_AWT_VCLXWINDOWS_HXX_ 342bfcd321SSteve Yin #include <toolkit/awt/vclxwindows.hxx> 352bfcd321SSteve Yin #endif 362bfcd321SSteve Yin #ifndef _HEADBAR_HXX 372bfcd321SSteve Yin #include <headbar.hxx> 382bfcd321SSteve Yin #endif 392bfcd321SSteve Yin #ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX_ 402bfcd321SSteve Yin #include <unotools/accessiblestatesethelper.hxx> 412bfcd321SSteve Yin #endif 422bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_ 432bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleStateType.hpp> 442bfcd321SSteve Yin #endif 452bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_ 462bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleEventId.hpp> 472bfcd321SSteve Yin #endif 482bfcd321SSteve Yin #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_ 492bfcd321SSteve Yin #include <cppuhelper/typeprovider.hxx> 502bfcd321SSteve Yin #endif 512bfcd321SSteve Yin #ifndef _COMPHELPER_SEQUENCE_HXX_ 522bfcd321SSteve Yin #include <comphelper/sequence.hxx> 532bfcd321SSteve Yin #endif 542bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_ 552bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleRole.hpp> 562bfcd321SSteve Yin #endif 572bfcd321SSteve Yin 582bfcd321SSteve Yin using namespace ::com::sun::star; 592bfcd321SSteve Yin using namespace ::com::sun::star::uno; 602bfcd321SSteve Yin using namespace ::com::sun::star::awt; 612bfcd321SSteve Yin using namespace ::com::sun::star::lang; 622bfcd321SSteve Yin using namespace ::com::sun::star::beans; 632bfcd321SSteve Yin using namespace ::com::sun::star::accessibility; 642bfcd321SSteve Yin using namespace ::comphelper; 652bfcd321SSteve Yin VCLXHeaderBar(Window * pHeaderBar)662bfcd321SSteve YinVCLXHeaderBar::VCLXHeaderBar(Window* pHeaderBar) 672bfcd321SSteve Yin { 682bfcd321SSteve Yin SetWindow(pHeaderBar); 692bfcd321SSteve Yin } 702bfcd321SSteve Yin ~VCLXHeaderBar()712bfcd321SSteve YinVCLXHeaderBar::~VCLXHeaderBar() 722bfcd321SSteve Yin { 732bfcd321SSteve Yin } 742bfcd321SSteve Yin CreateAccessibleContext()752bfcd321SSteve Yin::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXHeaderBar::CreateAccessibleContext() 762bfcd321SSteve Yin { 772bfcd321SSteve Yin return new VCLXAccessibleHeaderBar(this); 782bfcd321SSteve Yin } 792bfcd321SSteve Yin 802bfcd321SSteve Yin VCLXAccessibleHeaderBar(VCLXWindow * pVCLWindow)812bfcd321SSteve YinVCLXAccessibleHeaderBar::VCLXAccessibleHeaderBar( VCLXWindow* pVCLWindow ) 822bfcd321SSteve Yin :VCLXAccessibleComponent( pVCLWindow ) 832bfcd321SSteve Yin ,m_pHeadBar(NULL) 842bfcd321SSteve Yin { 852bfcd321SSteve Yin m_pHeadBar = static_cast< HeaderBar* >( GetWindow() ); 862bfcd321SSteve Yin } 872bfcd321SSteve Yin 882bfcd321SSteve Yin // ----------------------------------------------------------------------------- 892bfcd321SSteve Yin ~VCLXAccessibleHeaderBar()902bfcd321SSteve YinVCLXAccessibleHeaderBar::~VCLXAccessibleHeaderBar() 912bfcd321SSteve Yin { 922bfcd321SSteve Yin } 932bfcd321SSteve Yin 942bfcd321SSteve Yin // ----------------------------------------------------------------------------- 952bfcd321SSteve Yin ProcessWindowEvent(const VclWindowEvent & rVclWindowEvent)962bfcd321SSteve Yinvoid VCLXAccessibleHeaderBar::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 972bfcd321SSteve Yin { 982bfcd321SSteve Yin VCLXAccessibleComponent::ProcessWindowEvent( rVclWindowEvent ); 992bfcd321SSteve Yin } 1002bfcd321SSteve Yin 1012bfcd321SSteve Yin // ----------------------------------------------------------------------------- 1022bfcd321SSteve Yin FillAccessibleStateSet(utl::AccessibleStateSetHelper & rStateSet)1032bfcd321SSteve Yinvoid VCLXAccessibleHeaderBar::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet ) 1042bfcd321SSteve Yin { 1052bfcd321SSteve Yin VCLXAccessibleComponent::FillAccessibleStateSet( rStateSet ); 1062bfcd321SSteve Yin } 1072bfcd321SSteve Yin 1082bfcd321SSteve Yin // ----------------------------------------------------------------------------- 1092bfcd321SSteve Yin // XServiceInfo 1102bfcd321SSteve Yin // ----------------------------------------------------------------------------- 1112bfcd321SSteve Yin getImplementationName()1122bfcd321SSteve Yin::rtl::OUString VCLXAccessibleHeaderBar::getImplementationName() throw (RuntimeException) 1132bfcd321SSteve Yin { 1142bfcd321SSteve Yin return ::rtl::OUString::createFromAscii( "com.sun.star.comp.toolkit.AccessibleHeaderBar" ); 1152bfcd321SSteve Yin } 1162bfcd321SSteve Yin 1172bfcd321SSteve Yin // ----------------------------------------------------------------------------- 1182bfcd321SSteve Yin getSupportedServiceNames()1192bfcd321SSteve YinSequence< ::rtl::OUString > VCLXAccessibleHeaderBar::getSupportedServiceNames() throw (RuntimeException) 1202bfcd321SSteve Yin { 1212bfcd321SSteve Yin Sequence< ::rtl::OUString > aNames(1); 1222bfcd321SSteve Yin aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.AccessibleHeaderBar" ); 1232bfcd321SSteve Yin return aNames; 1242bfcd321SSteve Yin } 1252bfcd321SSteve Yin 1262bfcd321SSteve Yin // =======XAccessibleContext======= 1272bfcd321SSteve Yin getAccessibleChildCount()1282bfcd321SSteve Yinsal_Int32 SAL_CALL VCLXAccessibleHeaderBar::getAccessibleChildCount( ) 1292bfcd321SSteve Yin throw (::com::sun::star::uno::RuntimeException) 1302bfcd321SSteve Yin { 1312bfcd321SSteve Yin sal_Int32 nCount = 0; 1322bfcd321SSteve Yin if ( m_pHeadBar ) 1332bfcd321SSteve Yin nCount = m_pHeadBar->GetItemCount(); 1342bfcd321SSteve Yin 1352bfcd321SSteve Yin return nCount; 1362bfcd321SSteve Yin } 1372bfcd321SSteve Yin ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int32 i)1382bfcd321SSteve Yin VCLXAccessibleHeaderBar::getAccessibleChild( sal_Int32 i ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException) 1392bfcd321SSteve Yin { 1402bfcd321SSteve Yin if ( i < 0 || i >= getAccessibleChildCount() ) 1412bfcd321SSteve Yin throw IndexOutOfBoundsException(); 1422bfcd321SSteve Yin 1432bfcd321SSteve Yin Reference< XAccessible > xChild; 1442bfcd321SSteve Yin // search for the child 1452bfcd321SSteve Yin if ( static_cast<sal_uInt16>(i) >= m_aAccessibleChildren.size() ) 1462bfcd321SSteve Yin xChild = CreateChild (i); 1472bfcd321SSteve Yin else 1482bfcd321SSteve Yin { 1492bfcd321SSteve Yin xChild = m_aAccessibleChildren[i]; 1502bfcd321SSteve Yin if ( !xChild.is() ) 1512bfcd321SSteve Yin xChild = CreateChild (i); 1522bfcd321SSteve Yin } 1532bfcd321SSteve Yin return xChild; 1542bfcd321SSteve Yin } 1552bfcd321SSteve Yin getAccessibleRole()1562bfcd321SSteve Yinsal_Int16 SAL_CALL VCLXAccessibleHeaderBar::getAccessibleRole( ) throw (::com::sun::star::uno::RuntimeException) 1572bfcd321SSteve Yin { 1582bfcd321SSteve Yin return com::sun::star::accessibility::AccessibleRole::LIST; 1592bfcd321SSteve Yin } 1602bfcd321SSteve Yin disposing(void)1612bfcd321SSteve Yinvoid SAL_CALL VCLXAccessibleHeaderBar::disposing (void) 1622bfcd321SSteve Yin { 1632bfcd321SSteve Yin ListItems().swap(m_aAccessibleChildren); 1642bfcd321SSteve Yin VCLXAccessibleComponent::disposing(); 1652bfcd321SSteve Yin } 1662bfcd321SSteve Yin CreateChild(sal_Int32 i)1672bfcd321SSteve Yin::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > VCLXAccessibleHeaderBar::CreateChild (sal_Int32 i) 1682bfcd321SSteve Yin { 1692bfcd321SSteve Yin Reference<XAccessible> xChild; 1702bfcd321SSteve Yin 1712bfcd321SSteve Yin sal_uInt16 nPos = static_cast<sal_uInt16>(i); 1722bfcd321SSteve Yin if ( nPos >= m_aAccessibleChildren.size() ) 1732bfcd321SSteve Yin { 1742bfcd321SSteve Yin m_aAccessibleChildren.resize(nPos + 1); 1752bfcd321SSteve Yin 1762bfcd321SSteve Yin // insert into the container 1772bfcd321SSteve Yin xChild = new VCLXAccessibleHeaderBarItem(m_pHeadBar, i); 1782bfcd321SSteve Yin m_aAccessibleChildren[nPos] = xChild; 1792bfcd321SSteve Yin } 1802bfcd321SSteve Yin else 1812bfcd321SSteve Yin { 1822bfcd321SSteve Yin xChild = m_aAccessibleChildren[nPos]; 1832bfcd321SSteve Yin // check if position is empty and can be used else we have to adjust all entries behind this 1842bfcd321SSteve Yin if ( !xChild.is() ) 1852bfcd321SSteve Yin { 1862bfcd321SSteve Yin xChild = new VCLXAccessibleHeaderBarItem(m_pHeadBar, i); 1872bfcd321SSteve Yin m_aAccessibleChildren[nPos] = xChild; 1882bfcd321SSteve Yin } 1892bfcd321SSteve Yin } 1902bfcd321SSteve Yin return xChild; 1912bfcd321SSteve Yin } 192