1*2bfcd321SSteve Yin /************************************************************************* 2*2bfcd321SSteve Yin * 3*2bfcd321SSteve Yin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*2bfcd321SSteve Yin * 5*2bfcd321SSteve Yin * Copyright IBM Corporation 2010. 6*2bfcd321SSteve Yin * Copyright 2000, 2010 Oracle and/or its affiliates. 7*2bfcd321SSteve Yin * 8*2bfcd321SSteve Yin * OpenOffice.org - a multi-platform office productivity suite 9*2bfcd321SSteve Yin * 10*2bfcd321SSteve Yin * This file is part of OpenOffice.org. 11*2bfcd321SSteve Yin * 12*2bfcd321SSteve Yin * OpenOffice.org is free software: you can redistribute it and/or modify 13*2bfcd321SSteve Yin * it under the terms of the GNU Lesser General Public License version 3 14*2bfcd321SSteve Yin * only, as published by the Free Software Foundation. 15*2bfcd321SSteve Yin * 16*2bfcd321SSteve Yin * OpenOffice.org is distributed in the hope that it will be useful, 17*2bfcd321SSteve Yin * but WITHOUT ANY WARRANTY; without even the implied warranty of 18*2bfcd321SSteve Yin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19*2bfcd321SSteve Yin * GNU Lesser General Public License version 3 for more details 20*2bfcd321SSteve Yin * (a copy is included in the LICENSE file that accompanied this code). 21*2bfcd321SSteve Yin * 22*2bfcd321SSteve Yin * You should have received a copy of the GNU Lesser General Public License 23*2bfcd321SSteve Yin * version 3 along with OpenOffice.org. If not, see 24*2bfcd321SSteve Yin * <http://www.openoffice.org/license.html> 25*2bfcd321SSteve Yin * for a copy of the LGPLv3 License. 26*2bfcd321SSteve Yin * 27*2bfcd321SSteve Yin ************************************************************************/ 28*2bfcd321SSteve Yin 29*2bfcd321SSteve Yin //IAccessibility2 Implementation 2009----- 30*2bfcd321SSteve Yin 31*2bfcd321SSteve Yin // MARKER(update_precomp.py): autogen include statement, do not remove 32*2bfcd321SSteve Yin #include "precompiled_svtools.hxx" 33*2bfcd321SSteve Yin 34*2bfcd321SSteve Yin #ifndef _SVTOOLS_VCLXACCESSIBLEHEADERBAR_HXX_ 35*2bfcd321SSteve Yin #include <svtools/vclxaccessibleheaderbar.hxx> 36*2bfcd321SSteve Yin #endif 37*2bfcd321SSteve Yin #ifndef _SVTOOLS_VCLACCESSIBLEHEADBARITEM_HXX_ 38*2bfcd321SSteve Yin #include <svtools/vclxaccessibleheaderbaritem.hxx> 39*2bfcd321SSteve Yin #endif 40*2bfcd321SSteve Yin 41*2bfcd321SSteve Yin #ifndef _TOOLKIT_AWT_VCLXWINDOWS_HXX_ 42*2bfcd321SSteve Yin #include <toolkit/awt/vclxwindows.hxx> 43*2bfcd321SSteve Yin #endif 44*2bfcd321SSteve Yin #ifndef _HEADBAR_HXX 45*2bfcd321SSteve Yin #include <headbar.hxx> 46*2bfcd321SSteve Yin #endif 47*2bfcd321SSteve Yin #ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX_ 48*2bfcd321SSteve Yin #include <unotools/accessiblestatesethelper.hxx> 49*2bfcd321SSteve Yin #endif 50*2bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_ 51*2bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleStateType.hpp> 52*2bfcd321SSteve Yin #endif 53*2bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_ 54*2bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleEventId.hpp> 55*2bfcd321SSteve Yin #endif 56*2bfcd321SSteve Yin #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_ 57*2bfcd321SSteve Yin #include <cppuhelper/typeprovider.hxx> 58*2bfcd321SSteve Yin #endif 59*2bfcd321SSteve Yin #ifndef _COMPHELPER_SEQUENCE_HXX_ 60*2bfcd321SSteve Yin #include <comphelper/sequence.hxx> 61*2bfcd321SSteve Yin #endif 62*2bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_ 63*2bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleRole.hpp> 64*2bfcd321SSteve Yin #endif 65*2bfcd321SSteve Yin 66*2bfcd321SSteve Yin using namespace ::com::sun::star; 67*2bfcd321SSteve Yin using namespace ::com::sun::star::uno; 68*2bfcd321SSteve Yin using namespace ::com::sun::star::awt; 69*2bfcd321SSteve Yin using namespace ::com::sun::star::lang; 70*2bfcd321SSteve Yin using namespace ::com::sun::star::beans; 71*2bfcd321SSteve Yin using namespace ::com::sun::star::accessibility; 72*2bfcd321SSteve Yin using namespace ::comphelper; 73*2bfcd321SSteve Yin 74*2bfcd321SSteve Yin VCLXHeaderBar::VCLXHeaderBar(Window* pHeaderBar) 75*2bfcd321SSteve Yin { 76*2bfcd321SSteve Yin SetWindow(pHeaderBar); 77*2bfcd321SSteve Yin } 78*2bfcd321SSteve Yin 79*2bfcd321SSteve Yin VCLXHeaderBar::~VCLXHeaderBar() 80*2bfcd321SSteve Yin { 81*2bfcd321SSteve Yin } 82*2bfcd321SSteve Yin 83*2bfcd321SSteve Yin ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXHeaderBar::CreateAccessibleContext() 84*2bfcd321SSteve Yin { 85*2bfcd321SSteve Yin return new VCLXAccessibleHeaderBar(this); 86*2bfcd321SSteve Yin } 87*2bfcd321SSteve Yin 88*2bfcd321SSteve Yin 89*2bfcd321SSteve Yin VCLXAccessibleHeaderBar::VCLXAccessibleHeaderBar( VCLXWindow* pVCLWindow ) 90*2bfcd321SSteve Yin :VCLXAccessibleComponent( pVCLWindow ) 91*2bfcd321SSteve Yin ,m_pHeadBar(NULL) 92*2bfcd321SSteve Yin { 93*2bfcd321SSteve Yin m_pHeadBar = static_cast< HeaderBar* >( GetWindow() ); 94*2bfcd321SSteve Yin } 95*2bfcd321SSteve Yin 96*2bfcd321SSteve Yin // ----------------------------------------------------------------------------- 97*2bfcd321SSteve Yin 98*2bfcd321SSteve Yin VCLXAccessibleHeaderBar::~VCLXAccessibleHeaderBar() 99*2bfcd321SSteve Yin { 100*2bfcd321SSteve Yin } 101*2bfcd321SSteve Yin 102*2bfcd321SSteve Yin // ----------------------------------------------------------------------------- 103*2bfcd321SSteve Yin 104*2bfcd321SSteve Yin void VCLXAccessibleHeaderBar::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 105*2bfcd321SSteve Yin { 106*2bfcd321SSteve Yin VCLXAccessibleComponent::ProcessWindowEvent( rVclWindowEvent ); 107*2bfcd321SSteve Yin } 108*2bfcd321SSteve Yin 109*2bfcd321SSteve Yin // ----------------------------------------------------------------------------- 110*2bfcd321SSteve Yin 111*2bfcd321SSteve Yin void VCLXAccessibleHeaderBar::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet ) 112*2bfcd321SSteve Yin { 113*2bfcd321SSteve Yin VCLXAccessibleComponent::FillAccessibleStateSet( rStateSet ); 114*2bfcd321SSteve Yin } 115*2bfcd321SSteve Yin 116*2bfcd321SSteve Yin // ----------------------------------------------------------------------------- 117*2bfcd321SSteve Yin // XServiceInfo 118*2bfcd321SSteve Yin // ----------------------------------------------------------------------------- 119*2bfcd321SSteve Yin 120*2bfcd321SSteve Yin ::rtl::OUString VCLXAccessibleHeaderBar::getImplementationName() throw (RuntimeException) 121*2bfcd321SSteve Yin { 122*2bfcd321SSteve Yin return ::rtl::OUString::createFromAscii( "com.sun.star.comp.toolkit.AccessibleHeaderBar" ); 123*2bfcd321SSteve Yin } 124*2bfcd321SSteve Yin 125*2bfcd321SSteve Yin // ----------------------------------------------------------------------------- 126*2bfcd321SSteve Yin 127*2bfcd321SSteve Yin Sequence< ::rtl::OUString > VCLXAccessibleHeaderBar::getSupportedServiceNames() throw (RuntimeException) 128*2bfcd321SSteve Yin { 129*2bfcd321SSteve Yin Sequence< ::rtl::OUString > aNames(1); 130*2bfcd321SSteve Yin aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.AccessibleHeaderBar" ); 131*2bfcd321SSteve Yin return aNames; 132*2bfcd321SSteve Yin } 133*2bfcd321SSteve Yin 134*2bfcd321SSteve Yin // =======XAccessibleContext======= 135*2bfcd321SSteve Yin 136*2bfcd321SSteve Yin sal_Int32 SAL_CALL VCLXAccessibleHeaderBar::getAccessibleChildCount( ) 137*2bfcd321SSteve Yin throw (::com::sun::star::uno::RuntimeException) 138*2bfcd321SSteve Yin { 139*2bfcd321SSteve Yin sal_Int32 nCount = 0; 140*2bfcd321SSteve Yin if ( m_pHeadBar ) 141*2bfcd321SSteve Yin nCount = m_pHeadBar->GetItemCount(); 142*2bfcd321SSteve Yin 143*2bfcd321SSteve Yin return nCount; 144*2bfcd321SSteve Yin } 145*2bfcd321SSteve Yin ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL 146*2bfcd321SSteve Yin VCLXAccessibleHeaderBar::getAccessibleChild( sal_Int32 i ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException) 147*2bfcd321SSteve Yin { 148*2bfcd321SSteve Yin if ( i < 0 || i >= getAccessibleChildCount() ) 149*2bfcd321SSteve Yin throw IndexOutOfBoundsException(); 150*2bfcd321SSteve Yin 151*2bfcd321SSteve Yin Reference< XAccessible > xChild; 152*2bfcd321SSteve Yin // search for the child 153*2bfcd321SSteve Yin if ( static_cast<sal_uInt16>(i) >= m_aAccessibleChildren.size() ) 154*2bfcd321SSteve Yin xChild = CreateChild (i); 155*2bfcd321SSteve Yin else 156*2bfcd321SSteve Yin { 157*2bfcd321SSteve Yin xChild = m_aAccessibleChildren[i]; 158*2bfcd321SSteve Yin if ( !xChild.is() ) 159*2bfcd321SSteve Yin xChild = CreateChild (i); 160*2bfcd321SSteve Yin } 161*2bfcd321SSteve Yin return xChild; 162*2bfcd321SSteve Yin } 163*2bfcd321SSteve Yin 164*2bfcd321SSteve Yin sal_Int16 SAL_CALL VCLXAccessibleHeaderBar::getAccessibleRole( ) throw (::com::sun::star::uno::RuntimeException) 165*2bfcd321SSteve Yin { 166*2bfcd321SSteve Yin return com::sun::star::accessibility::AccessibleRole::LIST; 167*2bfcd321SSteve Yin } 168*2bfcd321SSteve Yin 169*2bfcd321SSteve Yin void SAL_CALL VCLXAccessibleHeaderBar::disposing (void) 170*2bfcd321SSteve Yin { 171*2bfcd321SSteve Yin ListItems().swap(m_aAccessibleChildren); 172*2bfcd321SSteve Yin VCLXAccessibleComponent::disposing(); 173*2bfcd321SSteve Yin } 174*2bfcd321SSteve Yin 175*2bfcd321SSteve Yin ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > VCLXAccessibleHeaderBar::CreateChild (sal_Int32 i) 176*2bfcd321SSteve Yin { 177*2bfcd321SSteve Yin Reference<XAccessible> xChild; 178*2bfcd321SSteve Yin 179*2bfcd321SSteve Yin sal_uInt16 nPos = static_cast<sal_uInt16>(i); 180*2bfcd321SSteve Yin if ( nPos >= m_aAccessibleChildren.size() ) 181*2bfcd321SSteve Yin { 182*2bfcd321SSteve Yin m_aAccessibleChildren.resize(nPos + 1); 183*2bfcd321SSteve Yin 184*2bfcd321SSteve Yin // insert into the container 185*2bfcd321SSteve Yin xChild = new VCLXAccessibleHeaderBarItem(m_pHeadBar, i); 186*2bfcd321SSteve Yin m_aAccessibleChildren[nPos] = xChild; 187*2bfcd321SSteve Yin } 188*2bfcd321SSteve Yin else 189*2bfcd321SSteve Yin { 190*2bfcd321SSteve Yin xChild = m_aAccessibleChildren[nPos]; 191*2bfcd321SSteve Yin // check if position is empty and can be used else we have to adjust all entries behind this 192*2bfcd321SSteve Yin if ( !xChild.is() ) 193*2bfcd321SSteve Yin { 194*2bfcd321SSteve Yin xChild = new VCLXAccessibleHeaderBarItem(m_pHeadBar, i); 195*2bfcd321SSteve Yin m_aAccessibleChildren[nPos] = xChild; 196*2bfcd321SSteve Yin } 197*2bfcd321SSteve Yin } 198*2bfcd321SSteve Yin return xChild; 199*2bfcd321SSteve Yin } 200*2bfcd321SSteve Yin //-----IAccessibility2 Implementation 2009 201