1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_accessibility.hxx"
26*b1cdbd2cSJim Jagielski #include <accessibility/standard/vclxaccessiblelistitem.hxx>
27*b1cdbd2cSJim Jagielski #include <toolkit/helper/convert.hxx>
28*b1cdbd2cSJim Jagielski #include <accessibility/helper/listboxhelper.hxx>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Point.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Rectangle.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Size.hpp>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp>
38*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
39*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
40*b1cdbd2cSJim Jagielski #include <vcl/controllayout.hxx>
41*b1cdbd2cSJim Jagielski #include <vcl/unohelp2.hxx>
42*b1cdbd2cSJim Jagielski #include <toolkit/awt/vclxwindow.hxx>
43*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx>
44*b1cdbd2cSJim Jagielski #include <unotools/accessiblerelationsethelper.hxx>
45*b1cdbd2cSJim Jagielski #include <cppuhelper/typeprovider.hxx>
46*b1cdbd2cSJim Jagielski #include <comphelper/sequence.hxx>
47*b1cdbd2cSJim Jagielski #include <comphelper/accessibleeventnotifier.hxx>
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski namespace
50*b1cdbd2cSJim Jagielski {
checkIndex_Impl(sal_Int32 _nIndex,const::rtl::OUString & _sText)51*b1cdbd2cSJim Jagielski 	void checkIndex_Impl( sal_Int32 _nIndex, const ::rtl::OUString& _sText ) throw (::com::sun::star::lang::IndexOutOfBoundsException)
52*b1cdbd2cSJim Jagielski 	{
53*b1cdbd2cSJim Jagielski 		if ( _nIndex < 0 || _nIndex > _sText.getLength() )
54*b1cdbd2cSJim Jagielski 			throw ::com::sun::star::lang::IndexOutOfBoundsException();
55*b1cdbd2cSJim Jagielski 	}
56*b1cdbd2cSJim Jagielski }
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski // class VCLXAccessibleListItem ------------------------------------------
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility;
61*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
62*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
63*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
64*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
65*b1cdbd2cSJim Jagielski 
DBG_NAME(VCLXAccessibleListItem)66*b1cdbd2cSJim Jagielski DBG_NAME(VCLXAccessibleListItem)
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
69*b1cdbd2cSJim Jagielski // Ctor() and Dtor()
70*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
71*b1cdbd2cSJim Jagielski VCLXAccessibleListItem::VCLXAccessibleListItem( ::accessibility::IComboListBoxHelper* _pListBoxHelper, sal_Int32 _nIndexInParent, const Reference< XAccessible >& _xParent ) :
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski 	VCLXAccessibleListItem_BASE	( m_aMutex ),
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 	m_nIndexInParent( _nIndexInParent ),
76*b1cdbd2cSJim Jagielski 	m_bSelected		( sal_False ),
77*b1cdbd2cSJim Jagielski 	m_bVisible		( sal_False ),
78*b1cdbd2cSJim Jagielski     m_nClientId     ( 0 ),
79*b1cdbd2cSJim Jagielski 	m_pListBoxHelper( _pListBoxHelper ),
80*b1cdbd2cSJim Jagielski 	m_xParent		( _xParent )
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski 	DBG_CTOR( VCLXAccessibleListItem, NULL );
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 	if ( m_xParent.is() )
86*b1cdbd2cSJim Jagielski 		m_xParentContext = m_xParent->getAccessibleContext();
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
89*b1cdbd2cSJim Jagielski 		m_sEntryText = m_pListBoxHelper->GetEntry( (sal_uInt16)_nIndexInParent );
90*b1cdbd2cSJim Jagielski }
91*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
~VCLXAccessibleListItem()92*b1cdbd2cSJim Jagielski VCLXAccessibleListItem::~VCLXAccessibleListItem()
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski 	DBG_DTOR( VCLXAccessibleListItem, NULL );
95*b1cdbd2cSJim Jagielski }
96*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SetSelected(sal_Bool _bSelected)97*b1cdbd2cSJim Jagielski void VCLXAccessibleListItem::SetSelected( sal_Bool _bSelected )
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski 	if ( m_bSelected != _bSelected )
100*b1cdbd2cSJim Jagielski 	{
101*b1cdbd2cSJim Jagielski 		Any aOldValue;
102*b1cdbd2cSJim Jagielski 		Any aNewValue;
103*b1cdbd2cSJim Jagielski 		if ( m_bSelected )
104*b1cdbd2cSJim Jagielski 			aOldValue <<= AccessibleStateType::SELECTED;
105*b1cdbd2cSJim Jagielski 		else
106*b1cdbd2cSJim Jagielski 			aNewValue <<= AccessibleStateType::SELECTED;
107*b1cdbd2cSJim Jagielski 		m_bSelected = _bSelected;
108*b1cdbd2cSJim Jagielski         NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
109*b1cdbd2cSJim Jagielski 	}
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SetVisible(sal_Bool _bVisible)112*b1cdbd2cSJim Jagielski void VCLXAccessibleListItem::SetVisible( sal_Bool _bVisible )
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski 	if ( m_bVisible != _bVisible )
115*b1cdbd2cSJim Jagielski 	{
116*b1cdbd2cSJim Jagielski 		Any aOldValue, aNewValue;
117*b1cdbd2cSJim Jagielski 		m_bVisible = _bVisible;
118*b1cdbd2cSJim Jagielski 		(_bVisible ? aNewValue : aOldValue ) <<= AccessibleStateType::VISIBLE;
119*b1cdbd2cSJim Jagielski 		NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
120*b1cdbd2cSJim Jagielski 		(_bVisible ? aNewValue : aOldValue ) <<= AccessibleStateType::SHOWING;
121*b1cdbd2cSJim Jagielski 		NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
122*b1cdbd2cSJim Jagielski 	}
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
NotifyAccessibleEvent(sal_Int16 _nEventId,const::com::sun::star::uno::Any & _aOldValue,const::com::sun::star::uno::Any & _aNewValue)125*b1cdbd2cSJim Jagielski void VCLXAccessibleListItem::NotifyAccessibleEvent( sal_Int16 _nEventId,
126*b1cdbd2cSJim Jagielski 													const ::com::sun::star::uno::Any& _aOldValue,
127*b1cdbd2cSJim Jagielski 													const ::com::sun::star::uno::Any& _aNewValue )
128*b1cdbd2cSJim Jagielski {
129*b1cdbd2cSJim Jagielski 	AccessibleEventObject aEvt;
130*b1cdbd2cSJim Jagielski 	aEvt.Source = *this;
131*b1cdbd2cSJim Jagielski 	aEvt.EventId = _nEventId;
132*b1cdbd2cSJim Jagielski     aEvt.OldValue = _aOldValue;
133*b1cdbd2cSJim Jagielski     aEvt.NewValue = _aNewValue;
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 	if (m_nClientId)
136*b1cdbd2cSJim Jagielski 		comphelper::AccessibleEventNotifier::addEvent( m_nClientId, aEvt );
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
139*b1cdbd2cSJim Jagielski // OCommonAccessibleText
140*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
implGetText()141*b1cdbd2cSJim Jagielski ::rtl::OUString VCLXAccessibleListItem::implGetText()
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski 	return m_sEntryText;
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
implGetLocale()146*b1cdbd2cSJim Jagielski Locale VCLXAccessibleListItem::implGetLocale()
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski 	return Application::GetSettings().GetLocale();
149*b1cdbd2cSJim Jagielski }
150*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
implGetSelection(sal_Int32 & nStartIndex,sal_Int32 & nEndIndex)151*b1cdbd2cSJim Jagielski void VCLXAccessibleListItem::implGetSelection( sal_Int32& nStartIndex, sal_Int32& nEndIndex )
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski 	nStartIndex = 0;
154*b1cdbd2cSJim Jagielski 	nEndIndex = 0;
155*b1cdbd2cSJim Jagielski }
156*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
157*b1cdbd2cSJim Jagielski // XInterface
158*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
queryInterface(Type const & rType)159*b1cdbd2cSJim Jagielski Any SAL_CALL VCLXAccessibleListItem::queryInterface( Type const & rType ) throw (RuntimeException)
160*b1cdbd2cSJim Jagielski {
161*b1cdbd2cSJim Jagielski 	return VCLXAccessibleListItem_BASE::queryInterface( rType );
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
acquire()164*b1cdbd2cSJim Jagielski void SAL_CALL VCLXAccessibleListItem::acquire() throw ()
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski 	VCLXAccessibleListItem_BASE::acquire();
167*b1cdbd2cSJim Jagielski }
168*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
release()169*b1cdbd2cSJim Jagielski void SAL_CALL VCLXAccessibleListItem::release() throw ()
170*b1cdbd2cSJim Jagielski {
171*b1cdbd2cSJim Jagielski 	VCLXAccessibleListItem_BASE::release();
172*b1cdbd2cSJim Jagielski }
173*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
174*b1cdbd2cSJim Jagielski // XTypeProvider
175*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getTypes()176*b1cdbd2cSJim Jagielski Sequence< Type > SAL_CALL VCLXAccessibleListItem::getTypes(  ) throw (RuntimeException)
177*b1cdbd2cSJim Jagielski {
178*b1cdbd2cSJim Jagielski 	return VCLXAccessibleListItem_BASE::getTypes();
179*b1cdbd2cSJim Jagielski }
180*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getImplementationId()181*b1cdbd2cSJim Jagielski Sequence< sal_Int8 > VCLXAccessibleListItem::getImplementationId() throw (RuntimeException)
182*b1cdbd2cSJim Jagielski {
183*b1cdbd2cSJim Jagielski 	static ::cppu::OImplementationId* pId = NULL;
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski 	if ( !pId )
186*b1cdbd2cSJim Jagielski 	{
187*b1cdbd2cSJim Jagielski 		::osl::Guard< ::osl::Mutex > aGuard( m_aMutex );
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 		if ( !pId )
190*b1cdbd2cSJim Jagielski 		{
191*b1cdbd2cSJim Jagielski 			static ::cppu::OImplementationId aId;
192*b1cdbd2cSJim Jagielski 			pId = &aId;
193*b1cdbd2cSJim Jagielski 		}
194*b1cdbd2cSJim Jagielski 	}
195*b1cdbd2cSJim Jagielski 	return pId->getImplementationId();
196*b1cdbd2cSJim Jagielski }
197*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
198*b1cdbd2cSJim Jagielski // XComponent
199*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
disposing()200*b1cdbd2cSJim Jagielski void SAL_CALL VCLXAccessibleListItem::disposing()
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski 	comphelper::AccessibleEventNotifier::TClientId nId( 0 );
203*b1cdbd2cSJim Jagielski 	Reference< XInterface > xEventSource;
204*b1cdbd2cSJim Jagielski 	{
205*b1cdbd2cSJim Jagielski 		::osl::MutexGuard aGuard( m_aMutex );
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 		VCLXAccessibleListItem_BASE::disposing();
208*b1cdbd2cSJim Jagielski 		m_sEntryText		= ::rtl::OUString();
209*b1cdbd2cSJim Jagielski 		m_pListBoxHelper	= NULL;
210*b1cdbd2cSJim Jagielski 		m_xParent			= NULL;
211*b1cdbd2cSJim Jagielski 		m_xParentContext	= NULL;
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 		nId = m_nClientId;
214*b1cdbd2cSJim Jagielski 		m_nClientId =  0;
215*b1cdbd2cSJim Jagielski 		if ( nId )
216*b1cdbd2cSJim Jagielski 			xEventSource = *this;
217*b1cdbd2cSJim Jagielski 	}
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski     // Send a disposing to all listeners.
220*b1cdbd2cSJim Jagielski 	if ( nId )
221*b1cdbd2cSJim Jagielski         	comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( nId, *this );
222*b1cdbd2cSJim Jagielski }
223*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
224*b1cdbd2cSJim Jagielski // XServiceInfo
225*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getImplementationName()226*b1cdbd2cSJim Jagielski ::rtl::OUString VCLXAccessibleListItem::getImplementationName() throw (RuntimeException)
227*b1cdbd2cSJim Jagielski {
228*b1cdbd2cSJim Jagielski 	return ::rtl::OUString::createFromAscii( "com.sun.star.comp.toolkit.AccessibleListItem" );
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
supportsService(const::rtl::OUString & rServiceName)231*b1cdbd2cSJim Jagielski sal_Bool VCLXAccessibleListItem::supportsService( const ::rtl::OUString& rServiceName ) throw (RuntimeException)
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski 	Sequence< ::rtl::OUString > aNames( getSupportedServiceNames() );
234*b1cdbd2cSJim Jagielski 	const ::rtl::OUString* pNames = aNames.getConstArray();
235*b1cdbd2cSJim Jagielski 	const ::rtl::OUString* pEnd = pNames + aNames.getLength();
236*b1cdbd2cSJim Jagielski 	for ( ; pNames != pEnd && !pNames->equals( rServiceName ); ++pNames )
237*b1cdbd2cSJim Jagielski 		;
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 	return pNames != pEnd;
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getSupportedServiceNames()242*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > VCLXAccessibleListItem::getSupportedServiceNames() throw (RuntimeException)
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski 	Sequence< ::rtl::OUString > aNames(3);
245*b1cdbd2cSJim Jagielski 	aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.accessibility.AccessibleContext" );
246*b1cdbd2cSJim Jagielski 	aNames[1] = ::rtl::OUString::createFromAscii( "com.sun.star.accessibility.AccessibleComponent" );
247*b1cdbd2cSJim Jagielski 	aNames[2] = ::rtl::OUString::createFromAscii( "com.sun.star.accessibility.AccessibleListItem" );
248*b1cdbd2cSJim Jagielski 	return aNames;
249*b1cdbd2cSJim Jagielski }
250*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
251*b1cdbd2cSJim Jagielski // XAccessible
252*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleContext()253*b1cdbd2cSJim Jagielski Reference< XAccessibleContext > SAL_CALL VCLXAccessibleListItem::getAccessibleContext(  ) throw (RuntimeException)
254*b1cdbd2cSJim Jagielski {
255*b1cdbd2cSJim Jagielski 	return this;
256*b1cdbd2cSJim Jagielski }
257*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
258*b1cdbd2cSJim Jagielski // XAccessibleContext
259*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleChildCount()260*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getAccessibleChildCount(  ) throw (RuntimeException)
261*b1cdbd2cSJim Jagielski {
262*b1cdbd2cSJim Jagielski 	return 0;
263*b1cdbd2cSJim Jagielski }
264*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleChild(sal_Int32)265*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL VCLXAccessibleListItem::getAccessibleChild( sal_Int32 ) throw (RuntimeException)
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski 	return Reference< XAccessible >();
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleParent()270*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL VCLXAccessibleListItem::getAccessibleParent(  ) throw (RuntimeException)
271*b1cdbd2cSJim Jagielski {
272*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 	return m_xParent;
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleIndexInParent()277*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getAccessibleIndexInParent(  ) throw (RuntimeException)
278*b1cdbd2cSJim Jagielski {
279*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
280*b1cdbd2cSJim Jagielski 	return m_nIndexInParent;
281*b1cdbd2cSJim Jagielski }
282*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleRole()283*b1cdbd2cSJim Jagielski sal_Int16 SAL_CALL VCLXAccessibleListItem::getAccessibleRole(  ) throw (RuntimeException)
284*b1cdbd2cSJim Jagielski {
285*b1cdbd2cSJim Jagielski 	return AccessibleRole::LIST_ITEM;
286*b1cdbd2cSJim Jagielski     //	return AccessibleRole::LABEL;
287*b1cdbd2cSJim Jagielski }
288*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleDescription()289*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL VCLXAccessibleListItem::getAccessibleDescription(  ) throw (RuntimeException)
290*b1cdbd2cSJim Jagielski {
291*b1cdbd2cSJim Jagielski 	// no description for every item
292*b1cdbd2cSJim Jagielski 	return ::rtl::OUString();
293*b1cdbd2cSJim Jagielski }
294*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleName()295*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL VCLXAccessibleListItem::getAccessibleName(  ) throw (RuntimeException)
296*b1cdbd2cSJim Jagielski {
297*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski 	// entry text == accessible name
300*b1cdbd2cSJim Jagielski 	return implGetText();
301*b1cdbd2cSJim Jagielski }
302*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleRelationSet()303*b1cdbd2cSJim Jagielski Reference< XAccessibleRelationSet > SAL_CALL VCLXAccessibleListItem::getAccessibleRelationSet(  ) throw (RuntimeException)
304*b1cdbd2cSJim Jagielski {
305*b1cdbd2cSJim Jagielski     utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
306*b1cdbd2cSJim Jagielski 	Reference< XAccessibleRelationSet > xSet = pRelationSetHelper;
307*b1cdbd2cSJim Jagielski     return xSet;
308*b1cdbd2cSJim Jagielski }
309*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleStateSet()310*b1cdbd2cSJim Jagielski Reference< XAccessibleStateSet > SAL_CALL VCLXAccessibleListItem::getAccessibleStateSet(  ) throw (RuntimeException)
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski     utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
315*b1cdbd2cSJim Jagielski 	Reference< XAccessibleStateSet > xStateSet = pStateSetHelper;
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 	if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
318*b1cdbd2cSJim Jagielski 	{
319*b1cdbd2cSJim Jagielski         pStateSetHelper->AddState( AccessibleStateType::TRANSIENT );
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski 		if(m_pListBoxHelper->IsEnabled())
322*b1cdbd2cSJim Jagielski 		{
323*b1cdbd2cSJim Jagielski 	    	pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
324*b1cdbd2cSJim Jagielski 	    	pStateSetHelper->AddState( AccessibleStateType::ENABLED );
325*b1cdbd2cSJim Jagielski 	    	pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
326*b1cdbd2cSJim Jagielski 		}
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski         if ( m_bSelected )
329*b1cdbd2cSJim Jagielski 			pStateSetHelper->AddState( AccessibleStateType::SELECTED );
330*b1cdbd2cSJim Jagielski 		if ( m_bVisible )
331*b1cdbd2cSJim Jagielski 		{
332*b1cdbd2cSJim Jagielski 			pStateSetHelper->AddState( AccessibleStateType::VISIBLE );
333*b1cdbd2cSJim Jagielski 			pStateSetHelper->AddState( AccessibleStateType::SHOWING );
334*b1cdbd2cSJim Jagielski 		}
335*b1cdbd2cSJim Jagielski 	}
336*b1cdbd2cSJim Jagielski 	else
337*b1cdbd2cSJim Jagielski         pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
338*b1cdbd2cSJim Jagielski 
339*b1cdbd2cSJim Jagielski     return xStateSet;
340*b1cdbd2cSJim Jagielski }
341*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getLocale()342*b1cdbd2cSJim Jagielski Locale SAL_CALL VCLXAccessibleListItem::getLocale(  ) throw (IllegalAccessibleComponentStateException, RuntimeException)
343*b1cdbd2cSJim Jagielski {
344*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
345*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski     return implGetLocale();
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
350*b1cdbd2cSJim Jagielski // XAccessibleComponent
351*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
containsPoint(const awt::Point & _aPoint)352*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL VCLXAccessibleListItem::containsPoint( const awt::Point& _aPoint ) throw (RuntimeException)
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
355*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski 	sal_Bool bInside = sal_False;
358*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
359*b1cdbd2cSJim Jagielski 	{
360*b1cdbd2cSJim Jagielski 		Rectangle aRect( m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent ) );
361*b1cdbd2cSJim Jagielski 		aRect.Move(-aRect.TopLeft().X(),-aRect.TopLeft().Y());
362*b1cdbd2cSJim Jagielski 		bInside = aRect.IsInside( VCLPoint( _aPoint ) );
363*b1cdbd2cSJim Jagielski 	}
364*b1cdbd2cSJim Jagielski 	return bInside;
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleAtPoint(const awt::Point &)367*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL VCLXAccessibleListItem::getAccessibleAtPoint( const awt::Point& ) throw (RuntimeException)
368*b1cdbd2cSJim Jagielski {
369*b1cdbd2cSJim Jagielski 	return Reference< XAccessible >();
370*b1cdbd2cSJim Jagielski }
371*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getBounds()372*b1cdbd2cSJim Jagielski awt::Rectangle SAL_CALL VCLXAccessibleListItem::getBounds(  ) throw (RuntimeException)
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
375*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski 	awt::Rectangle aRect;
378*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
379*b1cdbd2cSJim Jagielski 		aRect = AWTRectangle( m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent ) );
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski 	return aRect;
382*b1cdbd2cSJim Jagielski }
383*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getLocation()384*b1cdbd2cSJim Jagielski awt::Point SAL_CALL VCLXAccessibleListItem::getLocation(  ) throw (RuntimeException)
385*b1cdbd2cSJim Jagielski {
386*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
387*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski 	Point aPoint(0,0);
390*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
391*b1cdbd2cSJim Jagielski 	{
392*b1cdbd2cSJim Jagielski 		Rectangle aRect = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent );
393*b1cdbd2cSJim Jagielski 		aPoint = aRect.TopLeft();
394*b1cdbd2cSJim Jagielski 	}
395*b1cdbd2cSJim Jagielski 	return AWTPoint( aPoint );
396*b1cdbd2cSJim Jagielski }
397*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getLocationOnScreen()398*b1cdbd2cSJim Jagielski awt::Point SAL_CALL VCLXAccessibleListItem::getLocationOnScreen(  ) throw (RuntimeException)
399*b1cdbd2cSJim Jagielski {
400*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
401*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski 	Point aPoint(0,0);
404*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
405*b1cdbd2cSJim Jagielski 	{
406*b1cdbd2cSJim Jagielski 		Rectangle aRect = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent );
407*b1cdbd2cSJim Jagielski 		aPoint = aRect.TopLeft();
408*b1cdbd2cSJim Jagielski 		aPoint += m_pListBoxHelper->GetWindowExtentsRelative( NULL ).TopLeft();
409*b1cdbd2cSJim Jagielski 	}
410*b1cdbd2cSJim Jagielski 	return AWTPoint( aPoint );
411*b1cdbd2cSJim Jagielski }
412*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getSize()413*b1cdbd2cSJim Jagielski awt::Size SAL_CALL VCLXAccessibleListItem::getSize(  ) throw (RuntimeException)
414*b1cdbd2cSJim Jagielski {
415*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
416*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski 	Size aSize;
419*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
420*b1cdbd2cSJim Jagielski 		aSize = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent ).GetSize();
421*b1cdbd2cSJim Jagielski 
422*b1cdbd2cSJim Jagielski 	return AWTSize( aSize );
423*b1cdbd2cSJim Jagielski }
424*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
grabFocus()425*b1cdbd2cSJim Jagielski void SAL_CALL VCLXAccessibleListItem::grabFocus(  ) throw (RuntimeException)
426*b1cdbd2cSJim Jagielski {
427*b1cdbd2cSJim Jagielski 	// no focus for each item
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
430*b1cdbd2cSJim Jagielski // XAccessibleText
431*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCaretPosition()432*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getCaretPosition() throw (RuntimeException)
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski 	return -1;
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
setCaretPosition(sal_Int32 nIndex)437*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL VCLXAccessibleListItem::setCaretPosition( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
440*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski     if ( !implIsValidRange( nIndex, nIndex, implGetText().getLength() ) )
443*b1cdbd2cSJim Jagielski         throw IndexOutOfBoundsException();
444*b1cdbd2cSJim Jagielski 
445*b1cdbd2cSJim Jagielski 	return sal_False;
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCharacter(sal_Int32 nIndex)448*b1cdbd2cSJim Jagielski sal_Unicode SAL_CALL VCLXAccessibleListItem::getCharacter( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
449*b1cdbd2cSJim Jagielski {
450*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
451*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getCharacter( nIndex );
454*b1cdbd2cSJim Jagielski }
455*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCharacterAttributes(sal_Int32 nIndex,const Sequence<::rtl::OUString> &)456*b1cdbd2cSJim Jagielski Sequence< PropertyValue > SAL_CALL VCLXAccessibleListItem::getCharacterAttributes( sal_Int32 nIndex, const Sequence< ::rtl::OUString >& ) throw (IndexOutOfBoundsException, RuntimeException)
457*b1cdbd2cSJim Jagielski {
458*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
459*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski 	::rtl::OUString sText( implGetText() );
462*b1cdbd2cSJim Jagielski     if ( !implIsValidIndex( nIndex, sText.getLength() ) )
463*b1cdbd2cSJim Jagielski         throw IndexOutOfBoundsException();
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 	return Sequence< PropertyValue >();
466*b1cdbd2cSJim Jagielski }
467*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCharacterBounds(sal_Int32 nIndex)468*b1cdbd2cSJim Jagielski awt::Rectangle SAL_CALL VCLXAccessibleListItem::getCharacterBounds( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
469*b1cdbd2cSJim Jagielski {
470*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
471*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski 	::rtl::OUString sText( implGetText() );
474*b1cdbd2cSJim Jagielski     if ( !implIsValidIndex( nIndex, sText.getLength() ) )
475*b1cdbd2cSJim Jagielski         throw IndexOutOfBoundsException();
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 	awt::Rectangle aBounds( 0, 0, 0, 0 );
478*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
479*b1cdbd2cSJim Jagielski 	{
480*b1cdbd2cSJim Jagielski 		Rectangle aCharRect = m_pListBoxHelper->GetEntryCharacterBounds( m_nIndexInParent, nIndex );
481*b1cdbd2cSJim Jagielski 		Rectangle aItemRect = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent );
482*b1cdbd2cSJim Jagielski 		aCharRect.Move( -aItemRect.Left(), -aItemRect.Top() );
483*b1cdbd2cSJim Jagielski 		aBounds = AWTRectangle( aCharRect );
484*b1cdbd2cSJim Jagielski 	}
485*b1cdbd2cSJim Jagielski 
486*b1cdbd2cSJim Jagielski 	return aBounds;
487*b1cdbd2cSJim Jagielski }
488*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCharacterCount()489*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getCharacterCount() throw (RuntimeException)
490*b1cdbd2cSJim Jagielski {
491*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
492*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getCharacterCount();
495*b1cdbd2cSJim Jagielski }
496*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getIndexAtPoint(const awt::Point & aPoint)497*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getIndexAtPoint( const awt::Point& aPoint ) throw (RuntimeException)
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
500*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski 	sal_Int32 nIndex = -1;
503*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
504*b1cdbd2cSJim Jagielski 	{
505*b1cdbd2cSJim Jagielski         sal_uInt16 nPos = LISTBOX_ENTRY_NOTFOUND;
506*b1cdbd2cSJim Jagielski         Rectangle aItemRect = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent );
507*b1cdbd2cSJim Jagielski 		Point aPnt( VCLPoint( aPoint ) );
508*b1cdbd2cSJim Jagielski 		aPnt += aItemRect.TopLeft();
509*b1cdbd2cSJim Jagielski         sal_Int32 nI = m_pListBoxHelper->GetIndexForPoint( aPnt, nPos );
510*b1cdbd2cSJim Jagielski         if ( nI != -1 && (sal_uInt16)m_nIndexInParent == nPos )
511*b1cdbd2cSJim Jagielski             nIndex = nI;
512*b1cdbd2cSJim Jagielski 	}
513*b1cdbd2cSJim Jagielski     return nIndex;
514*b1cdbd2cSJim Jagielski }
515*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getSelectedText()516*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL VCLXAccessibleListItem::getSelectedText() throw (RuntimeException)
517*b1cdbd2cSJim Jagielski {
518*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
519*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getSelectedText();
522*b1cdbd2cSJim Jagielski }
523*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getSelectionStart()524*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getSelectionStart() throw (RuntimeException)
525*b1cdbd2cSJim Jagielski {
526*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
527*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
528*b1cdbd2cSJim Jagielski 
529*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getSelectionStart();
530*b1cdbd2cSJim Jagielski }
531*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getSelectionEnd()532*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getSelectionEnd() throw (RuntimeException)
533*b1cdbd2cSJim Jagielski {
534*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
535*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getSelectionEnd();
538*b1cdbd2cSJim Jagielski }
539*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
setSelection(sal_Int32 nStartIndex,sal_Int32 nEndIndex)540*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL VCLXAccessibleListItem::setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException)
541*b1cdbd2cSJim Jagielski {
542*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
543*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski     if ( !implIsValidRange( nStartIndex, nEndIndex, implGetText().getLength() ) )
546*b1cdbd2cSJim Jagielski         throw IndexOutOfBoundsException();
547*b1cdbd2cSJim Jagielski 
548*b1cdbd2cSJim Jagielski 	return sal_False;
549*b1cdbd2cSJim Jagielski }
550*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getText()551*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL VCLXAccessibleListItem::getText() throw (RuntimeException)
552*b1cdbd2cSJim Jagielski {
553*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
554*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
555*b1cdbd2cSJim Jagielski 
556*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getText();
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getTextRange(sal_Int32 nStartIndex,sal_Int32 nEndIndex)559*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL VCLXAccessibleListItem::getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException)
560*b1cdbd2cSJim Jagielski {
561*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
562*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getTextRange( nStartIndex, nEndIndex );
565*b1cdbd2cSJim Jagielski }
566*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getTextAtIndex(sal_Int32 nIndex,sal_Int16 aTextType)567*b1cdbd2cSJim Jagielski ::com::sun::star::accessibility::TextSegment SAL_CALL VCLXAccessibleListItem::getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
570*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
571*b1cdbd2cSJim Jagielski 
572*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getTextAtIndex( nIndex, aTextType );
573*b1cdbd2cSJim Jagielski }
574*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getTextBeforeIndex(sal_Int32 nIndex,sal_Int16 aTextType)575*b1cdbd2cSJim Jagielski ::com::sun::star::accessibility::TextSegment SAL_CALL VCLXAccessibleListItem::getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
576*b1cdbd2cSJim Jagielski {
577*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
578*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getTextBeforeIndex( nIndex, aTextType );
581*b1cdbd2cSJim Jagielski }
582*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getTextBehindIndex(sal_Int32 nIndex,sal_Int16 aTextType)583*b1cdbd2cSJim Jagielski ::com::sun::star::accessibility::TextSegment SAL_CALL VCLXAccessibleListItem::getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
584*b1cdbd2cSJim Jagielski {
585*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
586*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski 	return OCommonAccessibleText::getTextBehindIndex( nIndex, aTextType );
589*b1cdbd2cSJim Jagielski }
590*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
copyText(sal_Int32 nStartIndex,sal_Int32 nEndIndex)591*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL VCLXAccessibleListItem::copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException)
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski 	vos::OGuard aSolarGuard( Application::GetSolarMutex() );
594*b1cdbd2cSJim Jagielski 	::osl::MutexGuard aGuard( m_aMutex );
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski 	checkIndex_Impl( nStartIndex, m_sEntryText );
597*b1cdbd2cSJim Jagielski 	checkIndex_Impl( nEndIndex, m_sEntryText );
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
600*b1cdbd2cSJim Jagielski 	if ( m_pListBoxHelper )
601*b1cdbd2cSJim Jagielski 	{
602*b1cdbd2cSJim Jagielski 		Reference< datatransfer::clipboard::XClipboard > xClipboard = m_pListBoxHelper->GetClipboard();
603*b1cdbd2cSJim Jagielski 		if ( xClipboard.is() )
604*b1cdbd2cSJim Jagielski 		{
605*b1cdbd2cSJim Jagielski 			::rtl::OUString sText( getTextRange( nStartIndex, nEndIndex ) );
606*b1cdbd2cSJim Jagielski 			::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText );
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski 			const sal_uInt32 nRef = Application::ReleaseSolarMutex();
609*b1cdbd2cSJim Jagielski 			xClipboard->setContents( pDataObj, NULL );
610*b1cdbd2cSJim Jagielski 			Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY );
611*b1cdbd2cSJim Jagielski 			if( xFlushableClipboard.is() )
612*b1cdbd2cSJim Jagielski 				xFlushableClipboard->flushClipboard();
613*b1cdbd2cSJim Jagielski 			Application::AcquireSolarMutex( nRef );
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski 			bRet = sal_True;
616*b1cdbd2cSJim Jagielski 		}
617*b1cdbd2cSJim Jagielski 	}
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski     return bRet;
620*b1cdbd2cSJim Jagielski }
621*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
622*b1cdbd2cSJim Jagielski // XAccessibleEventBroadcaster
623*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
addEventListener(const Reference<XAccessibleEventListener> & xListener)624*b1cdbd2cSJim Jagielski void SAL_CALL VCLXAccessibleListItem::addEventListener( const Reference< XAccessibleEventListener >& xListener ) throw (RuntimeException)
625*b1cdbd2cSJim Jagielski {
626*b1cdbd2cSJim Jagielski 	if (xListener.is())
627*b1cdbd2cSJim Jagielski     {
628*b1cdbd2cSJim Jagielski 		if (!m_nClientId)
629*b1cdbd2cSJim Jagielski             m_nClientId = comphelper::AccessibleEventNotifier::registerClient( );
630*b1cdbd2cSJim Jagielski 		comphelper::AccessibleEventNotifier::addEventListener( m_nClientId, xListener );
631*b1cdbd2cSJim Jagielski     }
632*b1cdbd2cSJim Jagielski }
633*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
removeEventListener(const Reference<XAccessibleEventListener> & xListener)634*b1cdbd2cSJim Jagielski void SAL_CALL VCLXAccessibleListItem::removeEventListener( const Reference< XAccessibleEventListener >& xListener ) throw (RuntimeException)
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski 	if ( xListener.is() && m_nClientId )
637*b1cdbd2cSJim Jagielski 	{
638*b1cdbd2cSJim Jagielski         sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( m_nClientId, xListener );
639*b1cdbd2cSJim Jagielski 		if ( !nListenerCount )
640*b1cdbd2cSJim Jagielski 		{
641*b1cdbd2cSJim Jagielski 			// no listeners anymore
642*b1cdbd2cSJim Jagielski 			// -> revoke ourself. This may lead to the notifier thread dying (if we were the last client),
643*b1cdbd2cSJim Jagielski 			// and at least to us not firing any events anymore, in case somebody calls
644*b1cdbd2cSJim Jagielski 			// NotifyAccessibleEvent, again
645*b1cdbd2cSJim Jagielski 			if ( m_nClientId )
646*b1cdbd2cSJim Jagielski 			{
647*b1cdbd2cSJim Jagielski 				comphelper::AccessibleEventNotifier::TClientId nId( m_nClientId );
648*b1cdbd2cSJim Jagielski 				m_nClientId = 0;
649*b1cdbd2cSJim Jagielski 				comphelper::AccessibleEventNotifier::revokeClient( nId );
650*b1cdbd2cSJim Jagielski 			}
651*b1cdbd2cSJim Jagielski 		}
652*b1cdbd2cSJim Jagielski 	}
653*b1cdbd2cSJim Jagielski }
654*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
655*b1cdbd2cSJim Jagielski 
656*b1cdbd2cSJim Jagielski 
657*b1cdbd2cSJim Jagielski 
658*b1cdbd2cSJim Jagielski // AF (Oct. 29 2002): Return black as constant foreground color.  This is an
659*b1cdbd2cSJim Jagielski // initial implementation and has to be substituted by code that determines
660*b1cdbd2cSJim Jagielski // the color that is actually used.
getForeground(void)661*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getForeground (void)
662*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
663*b1cdbd2cSJim Jagielski {
664*b1cdbd2cSJim Jagielski     return COL_BLACK;
665*b1cdbd2cSJim Jagielski }
666*b1cdbd2cSJim Jagielski 
667*b1cdbd2cSJim Jagielski // AF (Oct. 29 2002): Return white as constant background color.  This is an
668*b1cdbd2cSJim Jagielski // initial implementation and has to be substituted by code that determines
669*b1cdbd2cSJim Jagielski // the color that is actually used.
getBackground(void)670*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL VCLXAccessibleListItem::getBackground (void)
671*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
672*b1cdbd2cSJim Jagielski {
673*b1cdbd2cSJim Jagielski     return COL_WHITE;
674*b1cdbd2cSJim Jagielski }
675*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
676