xref: /AOO41X/main/svtools/source/control/vclxaccessibleheaderbar.cxx (revision 2bfcd321e2172336182a43e6d401b533c4283ceb)
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