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 // MARKER(update_precomp.py): autogen include statement, do not remove
24*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_
27*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp>
28*b1cdbd2cSJim Jagielski #endif
29*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_
30*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp>
31*b1cdbd2cSJim Jagielski #endif
32*b1cdbd2cSJim Jagielski #ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX_
33*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx>
34*b1cdbd2cSJim Jagielski #endif
35*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_
36*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp>
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski #ifndef	_COM_SUN_STAR_BEANS_PROPERTYCHANGEEVENT_HPP_
40*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyChangeEvent.hpp>
41*b1cdbd2cSJim Jagielski #endif
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_AWT_XWINDOW_HPP_
44*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindow.hpp>
45*b1cdbd2cSJim Jagielski #endif
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
48*b1cdbd2cSJim Jagielski #include <cppuhelper/typeprovider.hxx>
49*b1cdbd2cSJim Jagielski #endif
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
52*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
53*b1cdbd2cSJim Jagielski #endif
54*b1cdbd2cSJim Jagielski #ifndef _TOOLKIT_HELPER_CONVERT_HXX_
55*b1cdbd2cSJim Jagielski #include <toolkit/helper/convert.hxx>
56*b1cdbd2cSJim Jagielski #endif
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski #ifndef _SV_SVAPP_HXX
59*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
60*b1cdbd2cSJim Jagielski #endif
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski #ifndef _OSL_MUTEX_HXX_
63*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
64*b1cdbd2cSJim Jagielski #endif
65*b1cdbd2cSJim Jagielski #ifndef _RTL_UUID_H_
66*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
67*b1cdbd2cSJim Jagielski #endif
68*b1cdbd2cSJim Jagielski #ifndef _TOOLS_DEBUG_HXX
69*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
70*b1cdbd2cSJim Jagielski #endif
71*b1cdbd2cSJim Jagielski #ifndef _SV_GEN_HXX
72*b1cdbd2cSJim Jagielski #include <tools/gen.hxx>
73*b1cdbd2cSJim Jagielski #endif
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
76*b1cdbd2cSJim Jagielski #include "accessibility.hrc"
77*b1cdbd2cSJim Jagielski #include <svx/dlgctrl.hxx>
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski #ifndef _SVX_DIALMGR_HXX
80*b1cdbd2cSJim Jagielski #include <svx/dialmgr.hxx>
81*b1cdbd2cSJim Jagielski #endif
82*b1cdbd2cSJim Jagielski #ifndef COMPHELPER_ACCESSIBLE_EVENT_NOTIFIER
83*b1cdbd2cSJim Jagielski #include <comphelper/accessibleeventnotifier.hxx>
84*b1cdbd2cSJim Jagielski #endif
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski #include <unotools/accessiblerelationsethelper.hxx>
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski #ifndef _SVXPIXELACCESSIBLECONTEXT_HXX
89*b1cdbd2cSJim Jagielski #include "svxpixelctlaccessiblecontext.hxx"
90*b1cdbd2cSJim Jagielski #endif
91*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLERELATIONTYPE_HPP_
92*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
93*b1cdbd2cSJim Jagielski #endif
94*b1cdbd2cSJim Jagielski using namespace ::cppu;
95*b1cdbd2cSJim Jagielski using namespace ::osl;
96*b1cdbd2cSJim Jagielski using namespace	::rtl;
97*b1cdbd2cSJim Jagielski using namespace	::com::sun::star;
98*b1cdbd2cSJim Jagielski using namespace	::com::sun::star::uno;
99*b1cdbd2cSJim Jagielski using namespace	::com::sun::star::accessibility;
100*b1cdbd2cSJim Jagielski 
SvxPixelCtlAccessible(SvxPixelCtl & rControl)101*b1cdbd2cSJim Jagielski SvxPixelCtlAccessible::SvxPixelCtlAccessible( SvxPixelCtl& rControl) :
102*b1cdbd2cSJim Jagielski 	SvxPixelCtlAccessible_BASE(m_aMutex),
103*b1cdbd2cSJim Jagielski     pPixelCtl(&rControl),
104*b1cdbd2cSJim Jagielski     mnClientId(0)
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski     //FreeResource();
107*b1cdbd2cSJim Jagielski }
108*b1cdbd2cSJim Jagielski 
~SvxPixelCtlAccessible()109*b1cdbd2cSJim Jagielski SvxPixelCtlAccessible::~SvxPixelCtlAccessible()
110*b1cdbd2cSJim Jagielski {
111*b1cdbd2cSJim Jagielski //	DBG_DTOR( SvxPixelCtlAccessible, NULL );
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 	if( IsAlive() )
114*b1cdbd2cSJim Jagielski 	{
115*b1cdbd2cSJim Jagielski 		osl_incrementInterlockedCount( &m_refCount );
116*b1cdbd2cSJim Jagielski 		dispose();		// set mpRepr = NULL & release all childs
117*b1cdbd2cSJim Jagielski 	}
118*b1cdbd2cSJim Jagielski }
119*b1cdbd2cSJim Jagielski /*-- 04.02.2002 14:11:55---------------------------------------------------
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
getAccessibleContext()122*b1cdbd2cSJim Jagielski uno::Reference< XAccessibleContext > SvxPixelCtlAccessible::getAccessibleContext(  )
123*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski     return this;
126*b1cdbd2cSJim Jagielski }
127*b1cdbd2cSJim Jagielski 
getAccessibleChildCount()128*b1cdbd2cSJim Jagielski sal_Int32 SvxPixelCtlAccessible::getAccessibleChildCount(  ) throw (uno::RuntimeException)
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
131*b1cdbd2cSJim Jagielski     IsValid();
132*b1cdbd2cSJim Jagielski 	if(pPixelCtl)
133*b1cdbd2cSJim Jagielski 	{
134*b1cdbd2cSJim Jagielski 	    return pPixelCtl->GetSquares();
135*b1cdbd2cSJim Jagielski 	}
136*b1cdbd2cSJim Jagielski 	else
137*b1cdbd2cSJim Jagielski 		return 0;
138*b1cdbd2cSJim Jagielski }
139*b1cdbd2cSJim Jagielski /*-- 04.02.2002 14:11:56---------------------------------------------------
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
getAccessibleChild(sal_Int32 i)142*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SvxPixelCtlAccessible::getAccessibleChild( sal_Int32 i )
143*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
144*b1cdbd2cSJim Jagielski {
145*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
146*b1cdbd2cSJim Jagielski     IsValid();
147*b1cdbd2cSJim Jagielski     if ( i < 0 || i >= getAccessibleChildCount())
148*b1cdbd2cSJim Jagielski 	throw lang::IndexOutOfBoundsException();
149*b1cdbd2cSJim Jagielski     uno::Reference <XAccessible> xAcc;
150*b1cdbd2cSJim Jagielski     if(pPixelCtl)
151*b1cdbd2cSJim Jagielski 	{
152*b1cdbd2cSJim Jagielski 		return CreateChild(i, pPixelCtl->IndexToPoint(i));
153*b1cdbd2cSJim Jagielski 	}
154*b1cdbd2cSJim Jagielski     else
155*b1cdbd2cSJim Jagielski 		return xAcc;
156*b1cdbd2cSJim Jagielski     /*
157*b1cdbd2cSJim Jagielski     throw lang::IndexOutOfBoundsException (
158*b1cdbd2cSJim Jagielski         ::rtl::OUString::createFromAscii ("no child with index " + i),
159*b1cdbd2cSJim Jagielski 		NULL);
160*b1cdbd2cSJim Jagielski     */
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 
getAccessibleParent()165*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SvxPixelCtlAccessible::getAccessibleParent(  )
166*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
169*b1cdbd2cSJim Jagielski     IsValid();
170*b1cdbd2cSJim Jagielski     uno::Reference< XAccessible > xRet;
171*b1cdbd2cSJim Jagielski     if(pPixelCtl)
172*b1cdbd2cSJim Jagielski 	    xRet = pPixelCtl->GetParent()->GetAccessible( sal_True );
173*b1cdbd2cSJim Jagielski     return xRet;
174*b1cdbd2cSJim Jagielski }
175*b1cdbd2cSJim Jagielski 
getAccessibleIndexInParent()176*b1cdbd2cSJim Jagielski sal_Int32 SvxPixelCtlAccessible::getAccessibleIndexInParent(  )
177*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
178*b1cdbd2cSJim Jagielski {
179*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
180*b1cdbd2cSJim Jagielski     IsValid();
181*b1cdbd2cSJim Jagielski     sal_uInt16 nIdx = 0;
182*b1cdbd2cSJim Jagielski     if(pPixelCtl)
183*b1cdbd2cSJim Jagielski     {
184*b1cdbd2cSJim Jagielski         Window* pTabPage = pPixelCtl->GetParent();
185*b1cdbd2cSJim Jagielski         sal_uInt16 nChildren = pTabPage->GetChildCount();
186*b1cdbd2cSJim Jagielski         for(nIdx = 0; nIdx < nChildren; nIdx++)
187*b1cdbd2cSJim Jagielski             if(pTabPage->GetChild( nIdx ) == pPixelCtl)
188*b1cdbd2cSJim Jagielski                 break;
189*b1cdbd2cSJim Jagielski     }
190*b1cdbd2cSJim Jagielski     return nIdx;
191*b1cdbd2cSJim Jagielski }
192*b1cdbd2cSJim Jagielski /*-- 04.02.2002 14:11:57---------------------------------------------------
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
getAccessibleRole()195*b1cdbd2cSJim Jagielski sal_Int16 SvxPixelCtlAccessible::getAccessibleRole(  ) throw (uno::RuntimeException)
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski     return AccessibleRole::LIST;
198*b1cdbd2cSJim Jagielski }
199*b1cdbd2cSJim Jagielski 
getAccessibleDescription()200*b1cdbd2cSJim Jagielski ::rtl::OUString SvxPixelCtlAccessible::getAccessibleDescription(  )
201*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
202*b1cdbd2cSJim Jagielski {
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
205*b1cdbd2cSJim Jagielski     IsValid();
206*b1cdbd2cSJim Jagielski     if(pPixelCtl)
207*b1cdbd2cSJim Jagielski 	return pPixelCtl->GetAccessibleDescription();
208*b1cdbd2cSJim Jagielski     else
209*b1cdbd2cSJim Jagielski 	return String();
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski }
212*b1cdbd2cSJim Jagielski 
getAccessibleName()213*b1cdbd2cSJim Jagielski ::rtl::OUString SvxPixelCtlAccessible::getAccessibleName(  )
214*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
215*b1cdbd2cSJim Jagielski {
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
218*b1cdbd2cSJim Jagielski     IsValid();
219*b1cdbd2cSJim Jagielski     if(pPixelCtl)
220*b1cdbd2cSJim Jagielski 	    return pPixelCtl->GetAccessibleName();
221*b1cdbd2cSJim Jagielski     else
222*b1cdbd2cSJim Jagielski 	    return String();
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski }
225*b1cdbd2cSJim Jagielski 
getAccessibleRelationSet()226*b1cdbd2cSJim Jagielski uno::Reference< XAccessibleRelationSet > SvxPixelCtlAccessible::getAccessibleRelationSet(  )
227*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
230*b1cdbd2cSJim Jagielski     IsValid();
231*b1cdbd2cSJim Jagielski 	Window* pWindow = (Window*)pPixelCtl;
232*b1cdbd2cSJim Jagielski 	utl::AccessibleRelationSetHelper* rRelationSet = new utl::AccessibleRelationSetHelper;
233*b1cdbd2cSJim Jagielski 	uno::Reference< accessibility::XAccessibleRelationSet > rSet = rRelationSet;
234*b1cdbd2cSJim Jagielski 	if ( pWindow )
235*b1cdbd2cSJim Jagielski 	{
236*b1cdbd2cSJim Jagielski 		Window *pLabeledBy = pWindow->GetAccessibleRelationLabeledBy();
237*b1cdbd2cSJim Jagielski 		if ( pLabeledBy && pLabeledBy != pWindow )
238*b1cdbd2cSJim Jagielski 		{
239*b1cdbd2cSJim Jagielski 			uno::Sequence< uno::Reference< uno::XInterface > > aSequence(1);
240*b1cdbd2cSJim Jagielski 			aSequence[0] = pLabeledBy->GetAccessible();
241*b1cdbd2cSJim Jagielski 			rRelationSet->AddRelation( accessibility::AccessibleRelation( accessibility::AccessibleRelationType::LABELED_BY, aSequence ) );
242*b1cdbd2cSJim Jagielski 		}
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski 		Window* pMemberOf = pWindow->GetAccessibleRelationMemberOf();
245*b1cdbd2cSJim Jagielski 		if ( pMemberOf && pMemberOf != pWindow )
246*b1cdbd2cSJim Jagielski 		{
247*b1cdbd2cSJim Jagielski 			uno::Sequence< uno::Reference< uno::XInterface > > aSequence(1);
248*b1cdbd2cSJim Jagielski 			aSequence[0] = pMemberOf->GetAccessible();
249*b1cdbd2cSJim Jagielski 			rRelationSet->AddRelation( accessibility::AccessibleRelation( accessibility::AccessibleRelationType::MEMBER_OF, aSequence ) );
250*b1cdbd2cSJim Jagielski 		}
251*b1cdbd2cSJim Jagielski 		return rSet;
252*b1cdbd2cSJim Jagielski 	}
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski     return new utl::AccessibleRelationSetHelper;
255*b1cdbd2cSJim Jagielski }
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 
getAccessibleStateSet()258*b1cdbd2cSJim Jagielski uno::Reference< XAccessibleStateSet > SvxPixelCtlAccessible::getAccessibleStateSet(  )
259*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
260*b1cdbd2cSJim Jagielski {
261*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
262*b1cdbd2cSJim Jagielski     utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
263*b1cdbd2cSJim Jagielski     uno::Reference< XAccessibleStateSet > xRet = pStateSetHelper;
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski     if(!pPixelCtl)
266*b1cdbd2cSJim Jagielski         pStateSetHelper->AddState(AccessibleStateType::DEFUNC);
267*b1cdbd2cSJim Jagielski     else
268*b1cdbd2cSJim Jagielski     {
269*b1cdbd2cSJim Jagielski         const sal_Int16 aStandardStates[] =
270*b1cdbd2cSJim Jagielski         {
271*b1cdbd2cSJim Jagielski             AccessibleStateType::FOCUSABLE,
272*b1cdbd2cSJim Jagielski 				AccessibleStateType::SELECTABLE,
273*b1cdbd2cSJim Jagielski 				AccessibleStateType::SHOWING,
274*b1cdbd2cSJim Jagielski 				AccessibleStateType::VISIBLE,
275*b1cdbd2cSJim Jagielski 				AccessibleStateType::OPAQUE,
276*b1cdbd2cSJim Jagielski 				0};
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski 			sal_Int16 nState = 0;
279*b1cdbd2cSJim Jagielski 			while(aStandardStates[nState])
280*b1cdbd2cSJim Jagielski 			{
281*b1cdbd2cSJim Jagielski 				pStateSetHelper->AddState(aStandardStates[nState++]);
282*b1cdbd2cSJim Jagielski 			}
283*b1cdbd2cSJim Jagielski 			if(pPixelCtl->IsEnabled())
284*b1cdbd2cSJim Jagielski 				pStateSetHelper->AddState(AccessibleStateType::ENABLED);
285*b1cdbd2cSJim Jagielski 			if(pPixelCtl->HasFocus())
286*b1cdbd2cSJim Jagielski 				pStateSetHelper->AddState(AccessibleStateType::FOCUSED);
287*b1cdbd2cSJim Jagielski 			pStateSetHelper->AddState(AccessibleStateType::MANAGES_DESCENDANTS);
288*b1cdbd2cSJim Jagielski     }
289*b1cdbd2cSJim Jagielski     return xRet;
290*b1cdbd2cSJim Jagielski }
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski 
getLocale()293*b1cdbd2cSJim Jagielski com::sun::star::lang::Locale SvxPixelCtlAccessible::getLocale(  )
294*b1cdbd2cSJim Jagielski     throw (IllegalAccessibleComponentStateException, uno::RuntimeException)
295*b1cdbd2cSJim Jagielski {
296*b1cdbd2cSJim Jagielski 	::osl::MutexGuard	aGuard( m_aMutex );
297*b1cdbd2cSJim Jagielski 	if( getAccessibleParent().is() )
298*b1cdbd2cSJim Jagielski     {
299*b1cdbd2cSJim Jagielski     	uno::Reference< XAccessibleContext >		xParentContext( getAccessibleParent()->getAccessibleContext() );
300*b1cdbd2cSJim Jagielski         if( xParentContext.is() )
301*b1cdbd2cSJim Jagielski 	    	return xParentContext->getLocale();
302*b1cdbd2cSJim Jagielski     }
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski     //	No locale and no parent.  Therefore throw exception to indicate this
305*b1cdbd2cSJim Jagielski     //	cluelessness.
306*b1cdbd2cSJim Jagielski     throw IllegalAccessibleComponentStateException();
307*b1cdbd2cSJim Jagielski }
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski 
containsPoint(const awt::Point & aPt)310*b1cdbd2cSJim Jagielski sal_Bool SvxPixelCtlAccessible::containsPoint( const awt::Point& aPt )
311*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
312*b1cdbd2cSJim Jagielski {
313*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
314*b1cdbd2cSJim Jagielski     IsValid();
315*b1cdbd2cSJim Jagielski     Point aPoint(aPt.X, aPt.Y);
316*b1cdbd2cSJim Jagielski     if(pPixelCtl)
317*b1cdbd2cSJim Jagielski 	    return (aPoint.X() >= 0)
318*b1cdbd2cSJim Jagielski 	        && (aPoint.X() < pPixelCtl->GetSizePixel().getWidth())
319*b1cdbd2cSJim Jagielski 	        && (aPoint.Y() >= 0)
320*b1cdbd2cSJim Jagielski 	        && (aPoint.Y() < pPixelCtl->GetSizePixel().getHeight());
321*b1cdbd2cSJim Jagielski     else
322*b1cdbd2cSJim Jagielski 	    return sal_False;
323*b1cdbd2cSJim Jagielski }
getAccessibleAtPoint(const awt::Point & aPoint)324*b1cdbd2cSJim Jagielski uno::Reference<XAccessible > SAL_CALL SvxPixelCtlAccessible::getAccessibleAtPoint (
325*b1cdbd2cSJim Jagielski         const awt::Point& aPoint)
326*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
327*b1cdbd2cSJim Jagielski {
328*b1cdbd2cSJim Jagielski 	::osl::MutexGuard	aGuard( m_aMutex );
329*b1cdbd2cSJim Jagielski 	ensureIsAlive();
330*b1cdbd2cSJim Jagielski 	uno::Reference <XAccessible> xAcc;
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski 	Point childPoint;
333*b1cdbd2cSJim Jagielski 	childPoint.X() = aPoint.X;
334*b1cdbd2cSJim Jagielski 	childPoint.Y() = aPoint.Y;
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski     if(pPixelCtl)
337*b1cdbd2cSJim Jagielski    	{
338*b1cdbd2cSJim Jagielski 		Point pt= pPixelCtl->PixelToLogic(childPoint);
339*b1cdbd2cSJim Jagielski 		long nIndex = pPixelCtl->PointToIndex(pt);
340*b1cdbd2cSJim Jagielski 	    return CreateChild(nIndex,pPixelCtl->IndexToPoint(nIndex));
341*b1cdbd2cSJim Jagielski     }
342*b1cdbd2cSJim Jagielski     else
343*b1cdbd2cSJim Jagielski 	   return xAcc;
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski }
346*b1cdbd2cSJim Jagielski 
getBounds()347*b1cdbd2cSJim Jagielski awt::Rectangle SvxPixelCtlAccessible::getBounds(  ) throw (uno::RuntimeException)
348*b1cdbd2cSJim Jagielski {
349*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
350*b1cdbd2cSJim Jagielski     IsValid();
351*b1cdbd2cSJim Jagielski     Size aSz;
352*b1cdbd2cSJim Jagielski     Point aPos(0,0);
353*b1cdbd2cSJim Jagielski     awt::Rectangle aRet;
354*b1cdbd2cSJim Jagielski 	if(pPixelCtl)
355*b1cdbd2cSJim Jagielski 	{
356*b1cdbd2cSJim Jagielski 	    aSz = pPixelCtl->GetSizePixel();
357*b1cdbd2cSJim Jagielski 	    aPos = pPixelCtl->GetPosPixel();
358*b1cdbd2cSJim Jagielski 	    aRet.X = aPos.X();
359*b1cdbd2cSJim Jagielski 	    aRet.Y = aPos.Y();
360*b1cdbd2cSJim Jagielski 	    aRet.Width = aSz.Width();
361*b1cdbd2cSJim Jagielski 	    aRet.Height = aSz.Height();
362*b1cdbd2cSJim Jagielski 	}
363*b1cdbd2cSJim Jagielski     return aRet;
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski 
getLocation()366*b1cdbd2cSJim Jagielski awt::Point SvxPixelCtlAccessible::getLocation(  ) throw (uno::RuntimeException)
367*b1cdbd2cSJim Jagielski {
368*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
369*b1cdbd2cSJim Jagielski     IsValid();
370*b1cdbd2cSJim Jagielski     Point aPos;
371*b1cdbd2cSJim Jagielski     aPos = pPixelCtl->GetPosPixel();
372*b1cdbd2cSJim Jagielski     awt::Point aRet(aPos.X(), aPos.Y());
373*b1cdbd2cSJim Jagielski     return aRet;
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski 
getLocationOnScreen()376*b1cdbd2cSJim Jagielski awt::Point SvxPixelCtlAccessible::getLocationOnScreen(  ) throw (uno::RuntimeException)
377*b1cdbd2cSJim Jagielski {
378*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
379*b1cdbd2cSJim Jagielski     IsValid();
380*b1cdbd2cSJim Jagielski     Rectangle rect;
381*b1cdbd2cSJim Jagielski     rect = pPixelCtl->GetWindowExtentsRelative(NULL);
382*b1cdbd2cSJim Jagielski     awt::Point aRet(rect.Left(),rect.Top() );
383*b1cdbd2cSJim Jagielski     return aRet;
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski 
getSize()386*b1cdbd2cSJim Jagielski awt::Size SvxPixelCtlAccessible::getSize(  ) throw (uno::RuntimeException)
387*b1cdbd2cSJim Jagielski {
388*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
389*b1cdbd2cSJim Jagielski     IsValid();
390*b1cdbd2cSJim Jagielski     Size aSz;
391*b1cdbd2cSJim Jagielski     aSz = pPixelCtl->GetSizePixel();
392*b1cdbd2cSJim Jagielski     awt::Size aRet(aSz.Width(),aSz.Height());
393*b1cdbd2cSJim Jagielski     return aRet;
394*b1cdbd2cSJim Jagielski }
grabFocus()395*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::grabFocus(  ) throw (uno::RuntimeException)
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
398*b1cdbd2cSJim Jagielski     IsValid();
399*b1cdbd2cSJim Jagielski     if(pPixelCtl)
400*b1cdbd2cSJim Jagielski 	pPixelCtl->GrabFocus();
401*b1cdbd2cSJim Jagielski }
402*b1cdbd2cSJim Jagielski 
getForeground()403*b1cdbd2cSJim Jagielski sal_Int32 SvxPixelCtlAccessible::getForeground(  )
404*b1cdbd2cSJim Jagielski         throw (::com::sun::star::uno::RuntimeException)
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski     uno::Any aRet;
407*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
408*b1cdbd2cSJim Jagielski     IsValid();
409*b1cdbd2cSJim Jagielski     return pPixelCtl->GetControlForeground().GetColor();
410*b1cdbd2cSJim Jagielski }
411*b1cdbd2cSJim Jagielski 
getBackground()412*b1cdbd2cSJim Jagielski sal_Int32 SvxPixelCtlAccessible::getBackground(  )
413*b1cdbd2cSJim Jagielski         throw (::com::sun::star::uno::RuntimeException)
414*b1cdbd2cSJim Jagielski {
415*b1cdbd2cSJim Jagielski     uno::Any aRet;
416*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
417*b1cdbd2cSJim Jagielski     IsValid();
418*b1cdbd2cSJim Jagielski     return pPixelCtl->GetControlBackground().GetColor();
419*b1cdbd2cSJim Jagielski }
420*b1cdbd2cSJim Jagielski 
getImplementationName()421*b1cdbd2cSJim Jagielski ::rtl::OUString SvxPixelCtlAccessible::getImplementationName(  ) throw (uno::RuntimeException)
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski     return rtl::OUString::createFromAscii("SvxPixelCtlAccessible");
424*b1cdbd2cSJim Jagielski }
425*b1cdbd2cSJim Jagielski /*-- 04.02.2002 14:12:05---------------------------------------------------
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
428*b1cdbd2cSJim Jagielski const sal_Char sAccessible[]          = "Accessible";
429*b1cdbd2cSJim Jagielski const sal_Char sAccessibleContext[]   = "AccessibleContext";
430*b1cdbd2cSJim Jagielski const sal_Char sAccessibleComponent[] = "AccessibleComponent";
431*b1cdbd2cSJim Jagielski //const sal_Char sAccessibleTable[] = "AccessibleTable";
432*b1cdbd2cSJim Jagielski 
supportsService(const::rtl::OUString & rServiceName)433*b1cdbd2cSJim Jagielski sal_Bool SvxPixelCtlAccessible::supportsService( const ::rtl::OUString& rServiceName )
434*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
435*b1cdbd2cSJim Jagielski {
436*b1cdbd2cSJim Jagielski     return  rServiceName.equalsAsciiL( sAccessible         , sizeof(sAccessible         )-1 ) ||
437*b1cdbd2cSJim Jagielski             rServiceName.equalsAsciiL( sAccessibleContext  , sizeof(sAccessibleContext  )-1 ) ||
438*b1cdbd2cSJim Jagielski             rServiceName.equalsAsciiL( sAccessibleComponent, sizeof(sAccessibleComponent)-1 );// ||
439*b1cdbd2cSJim Jagielski //            rServiceName.equalsAsciiL( sAccessibleTable, sizeof(sAccessibleTable)-1 );
440*b1cdbd2cSJim Jagielski }
441*b1cdbd2cSJim Jagielski /*-- 04.02.2002 14:12:05---------------------------------------------------
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
getSupportedServiceNames()444*b1cdbd2cSJim Jagielski uno::Sequence< ::rtl::OUString > SvxPixelCtlAccessible::getSupportedServiceNames(  )
445*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski     uno::Sequence< OUString > aRet(2);
448*b1cdbd2cSJim Jagielski 	OUString* pArray = aRet.getArray();
449*b1cdbd2cSJim Jagielski     pArray[0] = OUString( RTL_CONSTASCII_USTRINGPARAM(sAccessible         ) );
450*b1cdbd2cSJim Jagielski     pArray[1] = OUString( RTL_CONSTASCII_USTRINGPARAM(sAccessibleContext  ) );
451*b1cdbd2cSJim Jagielski     pArray[2] = OUString( RTL_CONSTASCII_USTRINGPARAM(sAccessibleComponent) );
452*b1cdbd2cSJim Jagielski //    pArray[3] = OUString( RTL_CONSTASCII_USTRINGPARAM(sAccessibleTable) );
453*b1cdbd2cSJim Jagielski     return aRet;
454*b1cdbd2cSJim Jagielski }
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
457*b1cdbd2cSJim Jagielski // XAccessibleSelection
458*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
selectAccessibleChild(sal_Int32 nChildIndex)459*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessible::selectAccessibleChild( sal_Int32 nChildIndex ) throw (lang::IndexOutOfBoundsException, RuntimeException)
460*b1cdbd2cSJim Jagielski {
461*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
462*b1cdbd2cSJim Jagielski     IsValid();
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski 	if ( nChildIndex < 0 || nChildIndex >= getAccessibleChildCount())
465*b1cdbd2cSJim Jagielski 		throw lang::IndexOutOfBoundsException();
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski 	long nIndex = pPixelCtl->ShowPosition(pPixelCtl->IndexToPoint(nChildIndex));
468*b1cdbd2cSJim Jagielski 	NotifyChild(nIndex,sal_True,sal_False);
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
isAccessibleChildSelected(sal_Int32 nChildIndex)471*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxPixelCtlAccessible::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (lang::IndexOutOfBoundsException, RuntimeException)
472*b1cdbd2cSJim Jagielski {
473*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski     IsValid();
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 	return pPixelCtl->GetFoucsPosIndex() == nChildIndex;
478*b1cdbd2cSJim Jagielski }
479*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
clearAccessibleSelection()480*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessible::clearAccessibleSelection(  ) throw (RuntimeException)
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
483*b1cdbd2cSJim Jagielski 
484*b1cdbd2cSJim Jagielski     IsValid();
485*b1cdbd2cSJim Jagielski 
486*b1cdbd2cSJim Jagielski }
487*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
selectAllAccessibleChildren()488*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessible::selectAllAccessibleChildren(  ) throw (RuntimeException)
489*b1cdbd2cSJim Jagielski {
490*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski     IsValid();
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski }
495*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getSelectedAccessibleChildCount()496*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessible::getSelectedAccessibleChildCount(  ) throw (RuntimeException)
497*b1cdbd2cSJim Jagielski {
498*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski     IsValid();
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski 	return 1;
503*b1cdbd2cSJim Jagielski }
504*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getSelectedAccessibleChild(sal_Int32 nSelectedChildIndex)505*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessible::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (lang::IndexOutOfBoundsException, RuntimeException)
506*b1cdbd2cSJim Jagielski {
507*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski     IsValid();
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski 	if ( nSelectedChildIndex >= 1)
512*b1cdbd2cSJim Jagielski 		throw lang::IndexOutOfBoundsException();
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 	uno::Reference< XAccessible > xChild;
515*b1cdbd2cSJim Jagielski 	if(pPixelCtl)
516*b1cdbd2cSJim Jagielski 	{
517*b1cdbd2cSJim Jagielski 		if(m_xCurChild.is())
518*b1cdbd2cSJim Jagielski 		{
519*b1cdbd2cSJim Jagielski 			xChild = m_xCurChild;
520*b1cdbd2cSJim Jagielski 		}
521*b1cdbd2cSJim Jagielski 	}
522*b1cdbd2cSJim Jagielski 	return xChild;
523*b1cdbd2cSJim Jagielski }
524*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
deselectAccessibleChild(sal_Int32)525*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessible::deselectAccessibleChild( sal_Int32 ) throw (lang::IndexOutOfBoundsException, RuntimeException)
526*b1cdbd2cSJim Jagielski {
527*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
528*b1cdbd2cSJim Jagielski 
529*b1cdbd2cSJim Jagielski     IsValid();
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski 
532*b1cdbd2cSJim Jagielski }
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski // Added by lq
ensureIsAlive() const535*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::ensureIsAlive() const
536*b1cdbd2cSJim Jagielski     throw ( lang::DisposedException )
537*b1cdbd2cSJim Jagielski {
538*b1cdbd2cSJim Jagielski     if( !IsAlive() )
539*b1cdbd2cSJim Jagielski         throw lang::DisposedException();
540*b1cdbd2cSJim Jagielski }
541*b1cdbd2cSJim Jagielski 
ensureIsValidRow(sal_Int32 nRow)542*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::ensureIsValidRow( sal_Int32 nRow )
543*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException )
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski     if( nRow >= pPixelCtl->GetHeight() || nRow <0)
546*b1cdbd2cSJim Jagielski         throw lang::IndexOutOfBoundsException(
547*b1cdbd2cSJim Jagielski             OUString( RTL_CONSTASCII_USTRINGPARAM( "row index is invalid" ) ), *this );
548*b1cdbd2cSJim Jagielski }
549*b1cdbd2cSJim Jagielski 
ensureIsValidColumn(sal_Int32 nColumn)550*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::ensureIsValidColumn( sal_Int32 nColumn )
551*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException )
552*b1cdbd2cSJim Jagielski {
553*b1cdbd2cSJim Jagielski     if( nColumn >= pPixelCtl->GetWidth() || nColumn <0 )
554*b1cdbd2cSJim Jagielski         throw lang::IndexOutOfBoundsException(
555*b1cdbd2cSJim Jagielski             OUString( RTL_CONSTASCII_USTRINGPARAM("column index is invalid") ), *this );
556*b1cdbd2cSJim Jagielski }
557*b1cdbd2cSJim Jagielski 
ensureIsValidAddress(sal_Int32 nRow,sal_Int32 nColumn)558*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::ensureIsValidAddress(
559*b1cdbd2cSJim Jagielski         sal_Int32 nRow, sal_Int32 nColumn )
560*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException )
561*b1cdbd2cSJim Jagielski {
562*b1cdbd2cSJim Jagielski     ensureIsValidRow( nRow );
563*b1cdbd2cSJim Jagielski     ensureIsValidColumn( nColumn );
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski 
ensureIsValidIndex(sal_Int32 nChildIndex)566*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::ensureIsValidIndex( sal_Int32 nChildIndex )
567*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException )
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski     if( nChildIndex >=  pPixelCtl->GetSquares())
570*b1cdbd2cSJim Jagielski         throw lang::IndexOutOfBoundsException(
571*b1cdbd2cSJim Jagielski             OUString( RTL_CONSTASCII_USTRINGPARAM("child index is invalid") ), *this );
572*b1cdbd2cSJim Jagielski }
573*b1cdbd2cSJim Jagielski 
574*b1cdbd2cSJim Jagielski // XAccessibleTable -----------------------------------------------------------
575*b1cdbd2cSJim Jagielski /*
576*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessible::getAccessibleRowCount()
577*b1cdbd2cSJim Jagielski     throw ( uno::RuntimeException )
578*b1cdbd2cSJim Jagielski {
579*b1cdbd2cSJim Jagielski    ::osl::MutexGuard	aGuard( m_aMutex );
580*b1cdbd2cSJim Jagielski    ensureIsAlive();
581*b1cdbd2cSJim Jagielski     return pPixelCtl->GetLineCount();
582*b1cdbd2cSJim Jagielski }
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessible::getAccessibleColumnCount()
585*b1cdbd2cSJim Jagielski     throw ( uno::RuntimeException )
586*b1cdbd2cSJim Jagielski {
587*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
588*b1cdbd2cSJim Jagielski     ensureIsAlive();
589*b1cdbd2cSJim Jagielski     return pPixelCtl->GetLineCount();
590*b1cdbd2cSJim Jagielski }
591*b1cdbd2cSJim Jagielski 
592*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessible::getAccessibleRowExtentAt(
593*b1cdbd2cSJim Jagielski         sal_Int32 nRow, sal_Int32 nColumn )
594*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
595*b1cdbd2cSJim Jagielski {
596*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
597*b1cdbd2cSJim Jagielski     ensureIsAlive();
598*b1cdbd2cSJim Jagielski     return 1;   // merged cells not supported
599*b1cdbd2cSJim Jagielski }
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessible::getAccessibleColumnExtentAt(
602*b1cdbd2cSJim Jagielski         sal_Int32 nRow, sal_Int32 nColumn )
603*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
604*b1cdbd2cSJim Jagielski {
605*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
606*b1cdbd2cSJim Jagielski     ensureIsAlive();
607*b1cdbd2cSJim Jagielski     return 1;   // merged cells not supported
608*b1cdbd2cSJim Jagielski }
609*b1cdbd2cSJim Jagielski 
610*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessible::getAccessibleCaption()
611*b1cdbd2cSJim Jagielski     throw ( uno::RuntimeException )
612*b1cdbd2cSJim Jagielski {
613*b1cdbd2cSJim Jagielski 	uno::Reference< XAccessible > xAccessble;
614*b1cdbd2cSJim Jagielski     ensureIsAlive();
615*b1cdbd2cSJim Jagielski     return xAccessble;    // not supported
616*b1cdbd2cSJim Jagielski }
617*b1cdbd2cSJim Jagielski 
618*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessible::getAccessibleSummary()
619*b1cdbd2cSJim Jagielski     throw ( uno::RuntimeException )
620*b1cdbd2cSJim Jagielski {
621*b1cdbd2cSJim Jagielski 	uno::Reference< XAccessible > xAccessble;
622*b1cdbd2cSJim Jagielski     ensureIsAlive();
623*b1cdbd2cSJim Jagielski     return xAccessble;    // not supported
624*b1cdbd2cSJim Jagielski }
625*b1cdbd2cSJim Jagielski 
626*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessible::getAccessibleIndex(
627*b1cdbd2cSJim Jagielski         sal_Int32 nRow, sal_Int32 nColumn )
628*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
629*b1cdbd2cSJim Jagielski {
630*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
631*b1cdbd2cSJim Jagielski     ensureIsAlive();
632*b1cdbd2cSJim Jagielski     ensureIsValidAddress(nRow,nColumn);
633*b1cdbd2cSJim Jagielski     return nRow + nColumn * pPixelCtl->GetLineCount() ;
634*b1cdbd2cSJim Jagielski }
635*b1cdbd2cSJim Jagielski 
636*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessible::getAccessibleRow( sal_Int32 nChildIndex )
637*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
638*b1cdbd2cSJim Jagielski {
639*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
640*b1cdbd2cSJim Jagielski     ensureIsAlive();
641*b1cdbd2cSJim Jagielski     ensureIsValidIndex( nChildIndex );
642*b1cdbd2cSJim Jagielski     return nChildIndex/pPixelCtl->GetLineCount();
643*b1cdbd2cSJim Jagielski }
644*b1cdbd2cSJim Jagielski 
645*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessible::getAccessibleColumn( sal_Int32 nChildIndex )
646*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
647*b1cdbd2cSJim Jagielski {
648*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
649*b1cdbd2cSJim Jagielski     ensureIsAlive();
650*b1cdbd2cSJim Jagielski     ensureIsValidIndex( nChildIndex );
651*b1cdbd2cSJim Jagielski     return nChildIndex%pPixelCtl->GetLineCount();
652*b1cdbd2cSJim Jagielski }
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL SvxPixelCtlAccessible::getAccessibleRowDescription( sal_Int32 nRow )
655*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
656*b1cdbd2cSJim Jagielski {
657*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
658*b1cdbd2cSJim Jagielski     ensureIsAlive();
659*b1cdbd2cSJim Jagielski     ensureIsValidRow( nRow );
660*b1cdbd2cSJim Jagielski     return ::rtl::OUString::createFromAscii ("");
661*b1cdbd2cSJim Jagielski }
662*b1cdbd2cSJim Jagielski 
663*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL SvxPixelCtlAccessible::getAccessibleColumnDescription( sal_Int32 nColumn )
664*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
665*b1cdbd2cSJim Jagielski {
666*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
667*b1cdbd2cSJim Jagielski     ensureIsAlive();
668*b1cdbd2cSJim Jagielski     ensureIsValidColumn( nColumn );
669*b1cdbd2cSJim Jagielski     return ::rtl::OUString::createFromAscii ("");
670*b1cdbd2cSJim Jagielski }
671*b1cdbd2cSJim Jagielski 
672*b1cdbd2cSJim Jagielski uno::Reference< XAccessibleTable > SAL_CALL SvxPixelCtlAccessible::getAccessibleRowHeaders()
673*b1cdbd2cSJim Jagielski     throw ( uno::RuntimeException )
674*b1cdbd2cSJim Jagielski {
675*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
676*b1cdbd2cSJim Jagielski     uno::Reference< XAccessibleTable > xAccessble;
677*b1cdbd2cSJim Jagielski     ensureIsAlive();
678*b1cdbd2cSJim Jagielski     return xAccessble;
679*b1cdbd2cSJim Jagielski }
680*b1cdbd2cSJim Jagielski 
681*b1cdbd2cSJim Jagielski uno::Reference< XAccessibleTable > SAL_CALL SvxPixelCtlAccessible::getAccessibleColumnHeaders()
682*b1cdbd2cSJim Jagielski     throw ( uno::RuntimeException )
683*b1cdbd2cSJim Jagielski {
684*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
685*b1cdbd2cSJim Jagielski     uno::Reference< XAccessibleTable > xAccessble;
686*b1cdbd2cSJim Jagielski     ensureIsAlive();
687*b1cdbd2cSJim Jagielski     return xAccessble;
688*b1cdbd2cSJim Jagielski }
689*b1cdbd2cSJim Jagielski 
690*b1cdbd2cSJim Jagielski Sequence< sal_Int32 > SAL_CALL SvxPixelCtlAccessible::getSelectedAccessibleRows()
691*b1cdbd2cSJim Jagielski     throw ( uno::RuntimeException )
692*b1cdbd2cSJim Jagielski {
693*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
694*b1cdbd2cSJim Jagielski     Sequence< sal_Int32 > accRows;
695*b1cdbd2cSJim Jagielski     ensureIsAlive();
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski     return accRows;
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski 
700*b1cdbd2cSJim Jagielski Sequence< sal_Int32 > SAL_CALL SvxPixelCtlAccessible::getSelectedAccessibleColumns()
701*b1cdbd2cSJim Jagielski     throw ( uno::RuntimeException )
702*b1cdbd2cSJim Jagielski {
703*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
704*b1cdbd2cSJim Jagielski     Sequence< sal_Int32 > accColumns;
705*b1cdbd2cSJim Jagielski     ensureIsAlive();
706*b1cdbd2cSJim Jagielski 
707*b1cdbd2cSJim Jagielski     return accColumns;
708*b1cdbd2cSJim Jagielski }
709*b1cdbd2cSJim Jagielski 
710*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxPixelCtlAccessible::isAccessibleRowSelected( sal_Int32 nRow )
711*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
712*b1cdbd2cSJim Jagielski {
713*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
714*b1cdbd2cSJim Jagielski     ensureIsAlive();
715*b1cdbd2cSJim Jagielski     ensureIsValidRow( nRow );
716*b1cdbd2cSJim Jagielski     return sal_False;
717*b1cdbd2cSJim Jagielski }
718*b1cdbd2cSJim Jagielski 
719*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxPixelCtlAccessible::isAccessibleColumnSelected( sal_Int32 nColumn )
720*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
721*b1cdbd2cSJim Jagielski {
722*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
723*b1cdbd2cSJim Jagielski     ensureIsAlive();
724*b1cdbd2cSJim Jagielski     ensureIsValidColumn( nColumn );
725*b1cdbd2cSJim Jagielski     return sal_False;
726*b1cdbd2cSJim Jagielski }
727*b1cdbd2cSJim Jagielski 
728*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessible::getAccessibleCellAt(
729*b1cdbd2cSJim Jagielski         sal_Int32 nRow, sal_Int32 nColumn )
730*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
731*b1cdbd2cSJim Jagielski {
732*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
733*b1cdbd2cSJim Jagielski     ensureIsAlive();
734*b1cdbd2cSJim Jagielski     ensureIsValidAddress( nRow, nColumn );
735*b1cdbd2cSJim Jagielski     return getAccessibleChild(nRow*pPixelCtl->GetLineCount()+nColumn);
736*b1cdbd2cSJim Jagielski }
737*b1cdbd2cSJim Jagielski 
738*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxPixelCtlAccessible::isAccessibleSelected(
739*b1cdbd2cSJim Jagielski         sal_Int32 nRow, sal_Int32 nColumn )
740*b1cdbd2cSJim Jagielski     throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
741*b1cdbd2cSJim Jagielski {
742*b1cdbd2cSJim Jagielski     ::osl::MutexGuard	aGuard( m_aMutex );
743*b1cdbd2cSJim Jagielski     ensureIsAlive();
744*b1cdbd2cSJim Jagielski     ensureIsValidAddress( nRow, nColumn );
745*b1cdbd2cSJim Jagielski     return isAccessibleChildSelected(nRow*pPixelCtl->GetLineCount()+nColumn);
746*b1cdbd2cSJim Jagielski }
747*b1cdbd2cSJim Jagielski // Added by lq end
748*b1cdbd2cSJim Jagielski */
749*b1cdbd2cSJim Jagielski 
750*b1cdbd2cSJim Jagielski //XAccessibleEventBroadcaster
addEventListener(const uno::Reference<XAccessibleEventListener> & xListener)751*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessible::addEventListener( const uno::Reference< XAccessibleEventListener >& xListener )  throw( RuntimeException )
752*b1cdbd2cSJim Jagielski {
753*b1cdbd2cSJim Jagielski 	if (xListener.is())
754*b1cdbd2cSJim Jagielski     {
755*b1cdbd2cSJim Jagielski 		::osl::MutexGuard	aGuard( m_aMutex );
756*b1cdbd2cSJim Jagielski 		if (!mnClientId)
757*b1cdbd2cSJim Jagielski 	            mnClientId = comphelper::AccessibleEventNotifier::registerClient( );
758*b1cdbd2cSJim Jagielski 		comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener );
759*b1cdbd2cSJim Jagielski     }
760*b1cdbd2cSJim Jagielski }
761*b1cdbd2cSJim Jagielski 
removeEventListener(const uno::Reference<XAccessibleEventListener> & xListener)762*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessible::removeEventListener( const uno::Reference< XAccessibleEventListener >& xListener )
763*b1cdbd2cSJim Jagielski     throw( RuntimeException )
764*b1cdbd2cSJim Jagielski {
765*b1cdbd2cSJim Jagielski 	if (xListener.is())
766*b1cdbd2cSJim Jagielski 	{
767*b1cdbd2cSJim Jagielski     	::osl::MutexGuard	aGuard( m_aMutex );
768*b1cdbd2cSJim Jagielski 
769*b1cdbd2cSJim Jagielski         sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener );
770*b1cdbd2cSJim Jagielski 		if ( !nListenerCount )
771*b1cdbd2cSJim Jagielski 		{
772*b1cdbd2cSJim Jagielski 			comphelper::AccessibleEventNotifier::revokeClient( mnClientId );
773*b1cdbd2cSJim Jagielski 			mnClientId = 0;
774*b1cdbd2cSJim Jagielski 		}
775*b1cdbd2cSJim Jagielski 	}
776*b1cdbd2cSJim Jagielski }
CommitChange(const AccessibleEventObject & rEvent)777*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::CommitChange( const AccessibleEventObject& rEvent )
778*b1cdbd2cSJim Jagielski {
779*b1cdbd2cSJim Jagielski 	if (mnClientId)
780*b1cdbd2cSJim Jagielski 		comphelper::AccessibleEventNotifier::addEvent( mnClientId, rEvent );
781*b1cdbd2cSJim Jagielski }
782*b1cdbd2cSJim Jagielski 
783*b1cdbd2cSJim Jagielski //Solution:Add the event handling method
FireAccessibleEvent(short nEventId,const::com::sun::star::uno::Any & rOld,const::com::sun::star::uno::Any & rNew)784*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::FireAccessibleEvent (short nEventId, const ::com::sun::star::uno::Any& rOld, const ::com::sun::star::uno::Any& rNew)
785*b1cdbd2cSJim Jagielski {
786*b1cdbd2cSJim Jagielski 	const uno::Reference< XInterface >	xSource( *this );
787*b1cdbd2cSJim Jagielski 	CommitChange( AccessibleEventObject( xSource, nEventId, rNew,rOld ) );
788*b1cdbd2cSJim Jagielski }
789*b1cdbd2cSJim Jagielski 
disposing()790*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessible::disposing()
791*b1cdbd2cSJim Jagielski {
792*b1cdbd2cSJim Jagielski 	if( !rBHelper.bDisposed )
793*b1cdbd2cSJim Jagielski 	{
794*b1cdbd2cSJim Jagielski 		{
795*b1cdbd2cSJim Jagielski 			::osl::MutexGuard	aGuard( m_aMutex );
796*b1cdbd2cSJim Jagielski 			if ( mnClientId )
797*b1cdbd2cSJim Jagielski 			{
798*b1cdbd2cSJim Jagielski 				comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( mnClientId, *this );
799*b1cdbd2cSJim Jagielski 				mnClientId =  0;
800*b1cdbd2cSJim Jagielski 			}
801*b1cdbd2cSJim Jagielski 		}
802*b1cdbd2cSJim Jagielski 	    //mxParent = uno::Reference< XAccessible >();
803*b1cdbd2cSJim Jagielski 
804*b1cdbd2cSJim Jagielski 	}
805*b1cdbd2cSJim Jagielski }
Invalidate()806*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::Invalidate()
807*b1cdbd2cSJim Jagielski {
808*b1cdbd2cSJim Jagielski 	pPixelCtl = 0;
809*b1cdbd2cSJim Jagielski }
ThrowExceptionIfNotAlive(void)810*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::ThrowExceptionIfNotAlive( void ) throw( lang::DisposedException )
811*b1cdbd2cSJim Jagielski {
812*b1cdbd2cSJim Jagielski 	if( IsNotAlive() )
813*b1cdbd2cSJim Jagielski 		throw lang::DisposedException();
814*b1cdbd2cSJim Jagielski }
IsValid()815*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::IsValid() throw (uno::RuntimeException)
816*b1cdbd2cSJim Jagielski {
817*b1cdbd2cSJim Jagielski     if(!pPixelCtl)
818*b1cdbd2cSJim Jagielski         throw uno::RuntimeException();
819*b1cdbd2cSJim Jagielski }
820*b1cdbd2cSJim Jagielski 
821*b1cdbd2cSJim Jagielski 
NotifyChild(long nIndex,sal_Bool bSelect,sal_Bool bCheck)822*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::NotifyChild(long nIndex,sal_Bool bSelect ,sal_Bool bCheck)
823*b1cdbd2cSJim Jagielski {
824*b1cdbd2cSJim Jagielski 	DBG_ASSERT( !(!bSelect && !bCheck),"" );//non is false
825*b1cdbd2cSJim Jagielski 
826*b1cdbd2cSJim Jagielski 	SvxPixelCtlAccessibleChild *pChild= NULL;
827*b1cdbd2cSJim Jagielski 
828*b1cdbd2cSJim Jagielski 	if (m_xCurChild.is())
829*b1cdbd2cSJim Jagielski 	{
830*b1cdbd2cSJim Jagielski 		pChild= static_cast<SvxPixelCtlAccessibleChild*>(m_xCurChild.get());
831*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pChild,"Child Must be Valid");
832*b1cdbd2cSJim Jagielski 		if (pChild->getAccessibleIndexInParent() == nIndex )
833*b1cdbd2cSJim Jagielski 		{
834*b1cdbd2cSJim Jagielski 			if (bSelect)
835*b1cdbd2cSJim Jagielski 			{
836*b1cdbd2cSJim Jagielski 				pChild->SelectChild(sal_True);
837*b1cdbd2cSJim Jagielski 			}
838*b1cdbd2cSJim Jagielski 			if (bCheck)
839*b1cdbd2cSJim Jagielski 			{
840*b1cdbd2cSJim Jagielski 				pChild->ChangePixelColorOrBG(sal_Bool(pPixelCtl->GetBitmapPixel(sal_uInt16(nIndex))));
841*b1cdbd2cSJim Jagielski 				pChild->CheckChild();
842*b1cdbd2cSJim Jagielski 			}
843*b1cdbd2cSJim Jagielski 			return ;
844*b1cdbd2cSJim Jagielski 		}
845*b1cdbd2cSJim Jagielski 	}
846*b1cdbd2cSJim Jagielski 	uno::Reference <XAccessible> xNewChild =CreateChild(nIndex, pPixelCtl->IndexToPoint(nIndex));
847*b1cdbd2cSJim Jagielski 	SvxPixelCtlAccessibleChild *pNewChild= static_cast<SvxPixelCtlAccessibleChild*>(xNewChild.get());
848*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pNewChild,"Child Must be Valid");
849*b1cdbd2cSJim Jagielski 
850*b1cdbd2cSJim Jagielski 	Any aNewValue,aOldValue;
851*b1cdbd2cSJim Jagielski 	aNewValue<<= xNewChild;
852*b1cdbd2cSJim Jagielski 	FireAccessibleEvent(	AccessibleEventId::ACTIVE_DESCENDANT_CHANGED,
853*b1cdbd2cSJim Jagielski 							aOldValue,
854*b1cdbd2cSJim Jagielski 							aNewValue );
855*b1cdbd2cSJim Jagielski 
856*b1cdbd2cSJim Jagielski 	if (bSelect)
857*b1cdbd2cSJim Jagielski 	{
858*b1cdbd2cSJim Jagielski 		if (pChild)
859*b1cdbd2cSJim Jagielski 		{
860*b1cdbd2cSJim Jagielski 			pChild->SelectChild(sal_False);
861*b1cdbd2cSJim Jagielski 		}
862*b1cdbd2cSJim Jagielski 		pNewChild->SelectChild(sal_True);
863*b1cdbd2cSJim Jagielski 	}
864*b1cdbd2cSJim Jagielski 	if (bCheck)
865*b1cdbd2cSJim Jagielski 	{
866*b1cdbd2cSJim Jagielski 		pNewChild->CheckChild();
867*b1cdbd2cSJim Jagielski 	}
868*b1cdbd2cSJim Jagielski 	m_xCurChild= xNewChild;
869*b1cdbd2cSJim Jagielski 
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski }
872*b1cdbd2cSJim Jagielski 
CreateChild(long nIndex,Point mPoint)873*b1cdbd2cSJim Jagielski uno::Reference<XAccessible> SvxPixelCtlAccessible::CreateChild (long nIndex,Point mPoint)
874*b1cdbd2cSJim Jagielski {
875*b1cdbd2cSJim Jagielski 	long nX = mPoint.X();
876*b1cdbd2cSJim Jagielski 	long nY = mPoint.Y();
877*b1cdbd2cSJim Jagielski 	if( Application::GetSettings().GetLayoutRTL())
878*b1cdbd2cSJim Jagielski 	{
879*b1cdbd2cSJim Jagielski 	    nX = (sal_uInt16) pPixelCtl->GetWidth() - 1 - nX;
880*b1cdbd2cSJim Jagielski 	}
881*b1cdbd2cSJim Jagielski 
882*b1cdbd2cSJim Jagielski 	sal_Bool bPixelColorOrBG= sal_Bool(pPixelCtl->GetBitmapPixel(sal_uInt16(nIndex)));
883*b1cdbd2cSJim Jagielski 	Size size(pPixelCtl->GetWidth() / pPixelCtl->GetLineCount(),pPixelCtl->GetHeight() / pPixelCtl->GetLineCount());
884*b1cdbd2cSJim Jagielski 	uno::Reference<XAccessible> xChild;
885*b1cdbd2cSJim Jagielski 	xChild = new SvxPixelCtlAccessibleChild(pPixelCtl,
886*b1cdbd2cSJim Jagielski 				bPixelColorOrBG,
887*b1cdbd2cSJim Jagielski 				Point(nX,nY),
888*b1cdbd2cSJim Jagielski 				Rectangle(mPoint,size),
889*b1cdbd2cSJim Jagielski 				this,
890*b1cdbd2cSJim Jagielski 				nIndex);
891*b1cdbd2cSJim Jagielski 
892*b1cdbd2cSJim Jagielski 	return xChild;
893*b1cdbd2cSJim Jagielski }
894*b1cdbd2cSJim Jagielski 
895*b1cdbd2cSJim Jagielski 
LoseFocus()896*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessible::LoseFocus()
897*b1cdbd2cSJim Jagielski {
898*b1cdbd2cSJim Jagielski 	m_xCurChild = uno::Reference< XAccessible >() ;
899*b1cdbd2cSJim Jagielski }
900*b1cdbd2cSJim Jagielski 
CheckChild()901*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessibleChild::CheckChild()
902*b1cdbd2cSJim Jagielski {
903*b1cdbd2cSJim Jagielski 	Any aChecked;
904*b1cdbd2cSJim Jagielski 	aChecked <<= AccessibleStateType::CHECKED;
905*b1cdbd2cSJim Jagielski 
906*b1cdbd2cSJim Jagielski 	if (m_bPixelColorOrBG)//Current Child State
907*b1cdbd2cSJim Jagielski 	{
908*b1cdbd2cSJim Jagielski 		FireAccessibleEvent(	AccessibleEventId::STATE_CHANGED,
909*b1cdbd2cSJim Jagielski 								Any(),
910*b1cdbd2cSJim Jagielski 								aChecked);
911*b1cdbd2cSJim Jagielski 	}
912*b1cdbd2cSJim Jagielski 	else
913*b1cdbd2cSJim Jagielski 	{
914*b1cdbd2cSJim Jagielski 		FireAccessibleEvent(	AccessibleEventId::STATE_CHANGED,
915*b1cdbd2cSJim Jagielski 								aChecked,
916*b1cdbd2cSJim Jagielski 								Any() );
917*b1cdbd2cSJim Jagielski 	}
918*b1cdbd2cSJim Jagielski }
919*b1cdbd2cSJim Jagielski 
SelectChild(sal_Bool bSelect)920*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessibleChild::SelectChild( sal_Bool bSelect)
921*b1cdbd2cSJim Jagielski {
922*b1cdbd2cSJim Jagielski 	Any aSelected;
923*b1cdbd2cSJim Jagielski 	aSelected <<= AccessibleStateType::SELECTED;
924*b1cdbd2cSJim Jagielski 
925*b1cdbd2cSJim Jagielski 	if (bSelect)
926*b1cdbd2cSJim Jagielski 	{
927*b1cdbd2cSJim Jagielski 		FireAccessibleEvent(	AccessibleEventId::STATE_CHANGED,
928*b1cdbd2cSJim Jagielski 								Any(),
929*b1cdbd2cSJim Jagielski 								aSelected);
930*b1cdbd2cSJim Jagielski 	}
931*b1cdbd2cSJim Jagielski 	else
932*b1cdbd2cSJim Jagielski 	{
933*b1cdbd2cSJim Jagielski 		FireAccessibleEvent(	AccessibleEventId::STATE_CHANGED,
934*b1cdbd2cSJim Jagielski 								aSelected,
935*b1cdbd2cSJim Jagielski 								Any());
936*b1cdbd2cSJim Jagielski 	}
937*b1cdbd2cSJim Jagielski }
FireAccessibleEvent(short nEventId,const::com::sun::star::uno::Any & rOld,const::com::sun::star::uno::Any & rNew)938*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessibleChild::FireAccessibleEvent (
939*b1cdbd2cSJim Jagielski 	short nEventId,
940*b1cdbd2cSJim Jagielski 	const ::com::sun::star::uno::Any& rOld,
941*b1cdbd2cSJim Jagielski 	const ::com::sun::star::uno::Any& rNew)
942*b1cdbd2cSJim Jagielski {
943*b1cdbd2cSJim Jagielski 	const uno::Reference< XInterface >	xSource( *this );
944*b1cdbd2cSJim Jagielski 	CommitChange( AccessibleEventObject( xSource, nEventId, rNew,rOld ) );
945*b1cdbd2cSJim Jagielski }
946*b1cdbd2cSJim Jagielski 
947*b1cdbd2cSJim Jagielski 
948*b1cdbd2cSJim Jagielski 
DBG_NAME(SvxPixelCtlAccessibleChild)949*b1cdbd2cSJim Jagielski DBG_NAME( SvxPixelCtlAccessibleChild )
950*b1cdbd2cSJim Jagielski 
951*b1cdbd2cSJim Jagielski 
952*b1cdbd2cSJim Jagielski SvxPixelCtlAccessibleChild::SvxPixelCtlAccessibleChild(
953*b1cdbd2cSJim Jagielski 	SvxPixelCtl* rWindow,
954*b1cdbd2cSJim Jagielski 	sal_Bool bPixelColorOrBG,
955*b1cdbd2cSJim Jagielski 	const Point &aPoint,
956*b1cdbd2cSJim Jagielski 	const Rectangle& rBoundingBox,
957*b1cdbd2cSJim Jagielski 	const uno::Reference<XAccessible>&	rxParent,
958*b1cdbd2cSJim Jagielski 	long nIndexInParent ) :
959*b1cdbd2cSJim Jagielski 	SvxPixelCtlAccessibleChild_BASE( m_aMutex ),
960*b1cdbd2cSJim Jagielski 	mrParentWindow( rWindow ),
961*b1cdbd2cSJim Jagielski 	mxParent(rxParent),
962*b1cdbd2cSJim Jagielski 	m_bPixelColorOrBG(bPixelColorOrBG),
963*b1cdbd2cSJim Jagielski 	maPoint(aPoint),
964*b1cdbd2cSJim Jagielski 	mpBoundingBox( new Rectangle( rBoundingBox ) ),
965*b1cdbd2cSJim Jagielski 	mnIndexInParent( nIndexInParent ),
966*b1cdbd2cSJim Jagielski 	mnClientId( 0 )
967*b1cdbd2cSJim Jagielski {
968*b1cdbd2cSJim Jagielski 	DBG_CTOR( SvxPixelCtlAccessibleChild, NULL );
969*b1cdbd2cSJim Jagielski }
970*b1cdbd2cSJim Jagielski 
971*b1cdbd2cSJim Jagielski 
~SvxPixelCtlAccessibleChild()972*b1cdbd2cSJim Jagielski SvxPixelCtlAccessibleChild::~SvxPixelCtlAccessibleChild()
973*b1cdbd2cSJim Jagielski {
974*b1cdbd2cSJim Jagielski 	DBG_DTOR( SvxPixelCtlAccessibleChild, NULL );
975*b1cdbd2cSJim Jagielski 
976*b1cdbd2cSJim Jagielski 	if( IsAlive() )
977*b1cdbd2cSJim Jagielski 	{
978*b1cdbd2cSJim Jagielski 		osl_incrementInterlockedCount( &m_refCount );
979*b1cdbd2cSJim Jagielski 		dispose();		// set mpRepr = NULL & release all childs
980*b1cdbd2cSJim Jagielski 	}
981*b1cdbd2cSJim Jagielski }
982*b1cdbd2cSJim Jagielski 
983*b1cdbd2cSJim Jagielski //=====  XAccessible  =========================================================
984*b1cdbd2cSJim Jagielski 
getAccessibleContext(void)985*b1cdbd2cSJim Jagielski uno::Reference< XAccessibleContext> SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleContext( void ) throw( RuntimeException )
986*b1cdbd2cSJim Jagielski {
987*b1cdbd2cSJim Jagielski 	return this;
988*b1cdbd2cSJim Jagielski }
989*b1cdbd2cSJim Jagielski 
990*b1cdbd2cSJim Jagielski //=====  XAccessibleComponent  ================================================
991*b1cdbd2cSJim Jagielski 
containsPoint(const awt::Point & rPoint)992*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxPixelCtlAccessibleChild::containsPoint( const awt::Point& rPoint ) throw( RuntimeException )
993*b1cdbd2cSJim Jagielski {
994*b1cdbd2cSJim Jagielski 	// no guard -> done in getBounds()
995*b1cdbd2cSJim Jagielski //	return GetBoundingBox().IsInside( VCLPoint( rPoint ) );
996*b1cdbd2cSJim Jagielski 	return Rectangle( Point( 0, 0 ), GetBoundingBox().GetSize() ).IsInside( VCLPoint( rPoint ) );
997*b1cdbd2cSJim Jagielski }
998*b1cdbd2cSJim Jagielski 
getAccessibleAtPoint(const awt::Point &)999*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleAtPoint( const awt::Point& ) throw( RuntimeException )
1000*b1cdbd2cSJim Jagielski {
1001*b1cdbd2cSJim Jagielski 	return uno::Reference< XAccessible >();
1002*b1cdbd2cSJim Jagielski }
1003*b1cdbd2cSJim Jagielski 
getBounds()1004*b1cdbd2cSJim Jagielski awt::Rectangle SAL_CALL SvxPixelCtlAccessibleChild::getBounds() throw( RuntimeException )
1005*b1cdbd2cSJim Jagielski {
1006*b1cdbd2cSJim Jagielski 	// no guard -> done in getBoundingBox()
1007*b1cdbd2cSJim Jagielski 	//Modified by lq, 09/26
1008*b1cdbd2cSJim Jagielski 	//return AWTRectangle( GetBoundingBox() );
1009*b1cdbd2cSJim Jagielski 	awt::Rectangle rect = AWTRectangle( GetBoundingBox() );
1010*b1cdbd2cSJim Jagielski 	rect.X = rect.X + mrParentWindow->GetClientWindowExtentsRelative(NULL).Left()-mrParentWindow->GetWindowExtentsRelative(NULL).Left();
1011*b1cdbd2cSJim Jagielski 	rect.Y = rect.Y + mrParentWindow->GetClientWindowExtentsRelative(NULL).Top()-mrParentWindow->GetWindowExtentsRelative(NULL).Top();
1012*b1cdbd2cSJim Jagielski 	return rect;
1013*b1cdbd2cSJim Jagielski 	// End
1014*b1cdbd2cSJim Jagielski }
1015*b1cdbd2cSJim Jagielski 
getLocation()1016*b1cdbd2cSJim Jagielski awt::Point SAL_CALL SvxPixelCtlAccessibleChild::getLocation() throw( RuntimeException )
1017*b1cdbd2cSJim Jagielski {
1018*b1cdbd2cSJim Jagielski 	// no guard -> done in getBoundingBox()
1019*b1cdbd2cSJim Jagielski 	return AWTPoint( GetBoundingBox().TopLeft() );
1020*b1cdbd2cSJim Jagielski }
1021*b1cdbd2cSJim Jagielski 
getLocationOnScreen()1022*b1cdbd2cSJim Jagielski awt::Point SAL_CALL SvxPixelCtlAccessibleChild::getLocationOnScreen() throw( RuntimeException )
1023*b1cdbd2cSJim Jagielski {
1024*b1cdbd2cSJim Jagielski 	// no guard -> done in getBoundingBoxOnScreen()
1025*b1cdbd2cSJim Jagielski 	return AWTPoint( GetBoundingBoxOnScreen().TopLeft() );
1026*b1cdbd2cSJim Jagielski }
1027*b1cdbd2cSJim Jagielski 
getSize()1028*b1cdbd2cSJim Jagielski awt::Size SAL_CALL SvxPixelCtlAccessibleChild::getSize() throw( RuntimeException )
1029*b1cdbd2cSJim Jagielski {
1030*b1cdbd2cSJim Jagielski 	// no guard -> done in getBoundingBox()
1031*b1cdbd2cSJim Jagielski 	return AWTSize( GetBoundingBox().GetSize() );
1032*b1cdbd2cSJim Jagielski }
1033*b1cdbd2cSJim Jagielski 
grabFocus()1034*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessibleChild::grabFocus() throw( RuntimeException )
1035*b1cdbd2cSJim Jagielski {
1036*b1cdbd2cSJim Jagielski }
1037*b1cdbd2cSJim Jagielski 
getForeground()1038*b1cdbd2cSJim Jagielski sal_Int32 SvxPixelCtlAccessibleChild::getForeground(  )
1039*b1cdbd2cSJim Jagielski         throw (::com::sun::star::uno::RuntimeException)
1040*b1cdbd2cSJim Jagielski {
1041*b1cdbd2cSJim Jagielski     //::vos::OGuard       aSolarGuard( Application::GetSolarMutex() );
1042*b1cdbd2cSJim Jagielski     ::osl::MutexGuard   aGuard( m_aMutex );
1043*b1cdbd2cSJim Jagielski     ThrowExceptionIfNotAlive();
1044*b1cdbd2cSJim Jagielski     return mrParentWindow->GetControlForeground().GetColor();
1045*b1cdbd2cSJim Jagielski }
getBackground()1046*b1cdbd2cSJim Jagielski sal_Int32 SvxPixelCtlAccessibleChild::getBackground(  )
1047*b1cdbd2cSJim Jagielski         throw (::com::sun::star::uno::RuntimeException)
1048*b1cdbd2cSJim Jagielski {
1049*b1cdbd2cSJim Jagielski     //::vos::OGuard       aSolarGuard( Application::GetSolarMutex() );
1050*b1cdbd2cSJim Jagielski     ::osl::MutexGuard   aGuard( m_aMutex );
1051*b1cdbd2cSJim Jagielski 
1052*b1cdbd2cSJim Jagielski     ThrowExceptionIfNotAlive();
1053*b1cdbd2cSJim Jagielski     return mrParentWindow->GetControlBackground().GetColor();
1054*b1cdbd2cSJim Jagielski }
1055*b1cdbd2cSJim Jagielski 
1056*b1cdbd2cSJim Jagielski //=====  XAccessibleContext  ==================================================
1057*b1cdbd2cSJim Jagielski 
getAccessibleChildCount(void)1058*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleChildCount( void ) throw( RuntimeException )
1059*b1cdbd2cSJim Jagielski {
1060*b1cdbd2cSJim Jagielski 	return 0;
1061*b1cdbd2cSJim Jagielski }
1062*b1cdbd2cSJim Jagielski 
getAccessibleChild(sal_Int32)1063*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleChild( sal_Int32 ) throw ( RuntimeException )
1064*b1cdbd2cSJim Jagielski {
1065*b1cdbd2cSJim Jagielski 	throw lang::IndexOutOfBoundsException();
1066*b1cdbd2cSJim Jagielski }
1067*b1cdbd2cSJim Jagielski 
getAccessibleParent(void)1068*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleParent( void ) throw( RuntimeException )
1069*b1cdbd2cSJim Jagielski {
1070*b1cdbd2cSJim Jagielski 	return mxParent;
1071*b1cdbd2cSJim Jagielski }
1072*b1cdbd2cSJim Jagielski 
getAccessibleIndexInParent(void)1073*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleIndexInParent( void ) throw( RuntimeException )
1074*b1cdbd2cSJim Jagielski {
1075*b1cdbd2cSJim Jagielski    return mnIndexInParent;
1076*b1cdbd2cSJim Jagielski }
1077*b1cdbd2cSJim Jagielski 
getAccessibleRole(void)1078*b1cdbd2cSJim Jagielski sal_Int16 SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleRole( void ) throw( RuntimeException )
1079*b1cdbd2cSJim Jagielski {
1080*b1cdbd2cSJim Jagielski 	return AccessibleRole::CHECK_BOX;
1081*b1cdbd2cSJim Jagielski }
1082*b1cdbd2cSJim Jagielski 
getAccessibleDescription(void)1083*b1cdbd2cSJim Jagielski OUString SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleDescription( void ) throw( RuntimeException )
1084*b1cdbd2cSJim Jagielski {
1085*b1cdbd2cSJim Jagielski 	::osl::MutexGuard	aGuard( m_aMutex );
1086*b1cdbd2cSJim Jagielski 
1087*b1cdbd2cSJim Jagielski 	return  GetName();
1088*b1cdbd2cSJim Jagielski }
1089*b1cdbd2cSJim Jagielski 
getAccessibleName(void)1090*b1cdbd2cSJim Jagielski OUString SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleName( void ) throw( RuntimeException )
1091*b1cdbd2cSJim Jagielski {
1092*b1cdbd2cSJim Jagielski 	::osl::MutexGuard	aGuard( m_aMutex );
1093*b1cdbd2cSJim Jagielski 	return  GetName();
1094*b1cdbd2cSJim Jagielski }
1095*b1cdbd2cSJim Jagielski 
1096*b1cdbd2cSJim Jagielski /**	Return empty uno::Reference to indicate that the relation set is not
1097*b1cdbd2cSJim Jagielski 	supported.
1098*b1cdbd2cSJim Jagielski */
getAccessibleRelationSet(void)1099*b1cdbd2cSJim Jagielski uno::Reference<XAccessibleRelationSet> SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleRelationSet( void ) throw( RuntimeException )
1100*b1cdbd2cSJim Jagielski {
1101*b1cdbd2cSJim Jagielski 	return uno::Reference< XAccessibleRelationSet >();
1102*b1cdbd2cSJim Jagielski }
1103*b1cdbd2cSJim Jagielski 
getAccessibleStateSet(void)1104*b1cdbd2cSJim Jagielski uno::Reference< XAccessibleStateSet > SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleStateSet( void ) throw( RuntimeException )
1105*b1cdbd2cSJim Jagielski {
1106*b1cdbd2cSJim Jagielski 	::osl::MutexGuard						aGuard( m_aMutex );
1107*b1cdbd2cSJim Jagielski 	utl::AccessibleStateSetHelper*			pStateSetHelper = new utl::AccessibleStateSetHelper;
1108*b1cdbd2cSJim Jagielski 
1109*b1cdbd2cSJim Jagielski 	if( IsAlive() )
1110*b1cdbd2cSJim Jagielski 	{
1111*b1cdbd2cSJim Jagielski 
1112*b1cdbd2cSJim Jagielski 		pStateSetHelper->AddState( AccessibleStateType::TRANSIENT );
1113*b1cdbd2cSJim Jagielski 		pStateSetHelper->AddState( AccessibleStateType::ENABLED );
1114*b1cdbd2cSJim Jagielski 		pStateSetHelper->AddState( AccessibleStateType::OPAQUE );
1115*b1cdbd2cSJim Jagielski 		pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
1116*b1cdbd2cSJim Jagielski 		pStateSetHelper->AddState( AccessibleStateType::SHOWING );
1117*b1cdbd2cSJim Jagielski 		pStateSetHelper->AddState( AccessibleStateType::VISIBLE );
1118*b1cdbd2cSJim Jagielski 
1119*b1cdbd2cSJim Jagielski 		if (mrParentWindow )
1120*b1cdbd2cSJim Jagielski 		{
1121*b1cdbd2cSJim Jagielski 			long nIndex = mrParentWindow->GetFoucsPosIndex();
1122*b1cdbd2cSJim Jagielski 			if ( nIndex == mnIndexInParent)
1123*b1cdbd2cSJim Jagielski 			{
1124*b1cdbd2cSJim Jagielski 				pStateSetHelper->AddState( AccessibleStateType::SELECTED );
1125*b1cdbd2cSJim Jagielski 			}
1126*b1cdbd2cSJim Jagielski 			if (mrParentWindow->GetBitmapPixel(sal_uInt16(mnIndexInParent)))
1127*b1cdbd2cSJim Jagielski 			{
1128*b1cdbd2cSJim Jagielski 				pStateSetHelper->AddState( AccessibleStateType::CHECKED );
1129*b1cdbd2cSJim Jagielski 			}
1130*b1cdbd2cSJim Jagielski 		}
1131*b1cdbd2cSJim Jagielski 	}
1132*b1cdbd2cSJim Jagielski 	else
1133*b1cdbd2cSJim Jagielski 		pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
1134*b1cdbd2cSJim Jagielski 
1135*b1cdbd2cSJim Jagielski 	return pStateSetHelper;
1136*b1cdbd2cSJim Jagielski }
1137*b1cdbd2cSJim Jagielski 
getLocale(void)1138*b1cdbd2cSJim Jagielski lang::Locale SAL_CALL SvxPixelCtlAccessibleChild::getLocale( void ) throw( IllegalAccessibleComponentStateException, RuntimeException )
1139*b1cdbd2cSJim Jagielski {
1140*b1cdbd2cSJim Jagielski 	::osl::MutexGuard						aGuard( m_aMutex );
1141*b1cdbd2cSJim Jagielski 	if( mxParent.is() )
1142*b1cdbd2cSJim Jagielski     {
1143*b1cdbd2cSJim Jagielski     	uno::Reference< XAccessibleContext >		xParentContext( mxParent->getAccessibleContext() );
1144*b1cdbd2cSJim Jagielski         if( xParentContext.is() )
1145*b1cdbd2cSJim Jagielski 	    	return xParentContext->getLocale();
1146*b1cdbd2cSJim Jagielski     }
1147*b1cdbd2cSJim Jagielski 
1148*b1cdbd2cSJim Jagielski     //	No locale and no parent.  Therefore throw exception to indicate this
1149*b1cdbd2cSJim Jagielski     //	cluelessness.
1150*b1cdbd2cSJim Jagielski     throw IllegalAccessibleComponentStateException();
1151*b1cdbd2cSJim Jagielski }
1152*b1cdbd2cSJim Jagielski 
addEventListener(const uno::Reference<XAccessibleEventListener> & xListener)1153*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessibleChild::addEventListener( const uno::Reference< XAccessibleEventListener >& xListener )
1154*b1cdbd2cSJim Jagielski     throw( RuntimeException )
1155*b1cdbd2cSJim Jagielski {
1156*b1cdbd2cSJim Jagielski 	if (xListener.is())
1157*b1cdbd2cSJim Jagielski     {
1158*b1cdbd2cSJim Jagielski     	::osl::MutexGuard	aGuard( m_aMutex );
1159*b1cdbd2cSJim Jagielski 		if (!mnClientId)
1160*b1cdbd2cSJim Jagielski             mnClientId = comphelper::AccessibleEventNotifier::registerClient( );
1161*b1cdbd2cSJim Jagielski 		comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener );
1162*b1cdbd2cSJim Jagielski     }
1163*b1cdbd2cSJim Jagielski }
1164*b1cdbd2cSJim Jagielski 
1165*b1cdbd2cSJim Jagielski 
1166*b1cdbd2cSJim Jagielski 
1167*b1cdbd2cSJim Jagielski 
removeEventListener(const uno::Reference<XAccessibleEventListener> & xListener)1168*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessibleChild::removeEventListener( const uno::Reference< XAccessibleEventListener >& xListener )
1169*b1cdbd2cSJim Jagielski     throw( RuntimeException )
1170*b1cdbd2cSJim Jagielski {
1171*b1cdbd2cSJim Jagielski 	if (xListener.is())
1172*b1cdbd2cSJim Jagielski 	{
1173*b1cdbd2cSJim Jagielski     	::osl::MutexGuard	aGuard( m_aMutex );
1174*b1cdbd2cSJim Jagielski 
1175*b1cdbd2cSJim Jagielski         sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener );
1176*b1cdbd2cSJim Jagielski 		if ( !nListenerCount )
1177*b1cdbd2cSJim Jagielski 		{
1178*b1cdbd2cSJim Jagielski 			// no listeners anymore
1179*b1cdbd2cSJim Jagielski 			// -> revoke ourself. This may lead to the notifier thread dying (if we were the last client),
1180*b1cdbd2cSJim Jagielski 			// and at least to us not firing any events anymore, in case somebody calls
1181*b1cdbd2cSJim Jagielski 			// NotifyAccessibleEvent, again
1182*b1cdbd2cSJim Jagielski 			comphelper::AccessibleEventNotifier::revokeClient( mnClientId );
1183*b1cdbd2cSJim Jagielski 			mnClientId = 0;
1184*b1cdbd2cSJim Jagielski 		}
1185*b1cdbd2cSJim Jagielski 	}
1186*b1cdbd2cSJim Jagielski }
1187*b1cdbd2cSJim Jagielski 
1188*b1cdbd2cSJim Jagielski 
1189*b1cdbd2cSJim Jagielski //=====  XServiceInfo  ========================================================
1190*b1cdbd2cSJim Jagielski 
getImplementationName(void)1191*b1cdbd2cSJim Jagielski OUString SAL_CALL SvxPixelCtlAccessibleChild::getImplementationName( void ) throw( RuntimeException )
1192*b1cdbd2cSJim Jagielski {
1193*b1cdbd2cSJim Jagielski 	return OUString( RTL_CONSTASCII_USTRINGPARAM( "SvxPixelCtlAccessibleChild" ) );
1194*b1cdbd2cSJim Jagielski }
1195*b1cdbd2cSJim Jagielski 
supportsService(const OUString & rServiceName)1196*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxPixelCtlAccessibleChild::supportsService( const OUString& rServiceName ) throw( RuntimeException )
1197*b1cdbd2cSJim Jagielski {
1198*b1cdbd2cSJim Jagielski     return  rServiceName.equalsAsciiL( sAccessible         , sizeof(sAccessible         )-1 ) ||
1199*b1cdbd2cSJim Jagielski             rServiceName.equalsAsciiL( sAccessibleContext  , sizeof(sAccessibleContext  )-1 ) ||
1200*b1cdbd2cSJim Jagielski             rServiceName.equalsAsciiL( sAccessibleComponent, sizeof(sAccessibleComponent)-1 );
1201*b1cdbd2cSJim Jagielski 
1202*b1cdbd2cSJim Jagielski }
1203*b1cdbd2cSJim Jagielski 
getSupportedServiceNames(void)1204*b1cdbd2cSJim Jagielski Sequence< OUString > SAL_CALL SvxPixelCtlAccessibleChild::getSupportedServiceNames( void ) throw( RuntimeException )
1205*b1cdbd2cSJim Jagielski {
1206*b1cdbd2cSJim Jagielski     uno::Sequence< OUString > aRet(3);
1207*b1cdbd2cSJim Jagielski 	OUString* pArray = aRet.getArray();
1208*b1cdbd2cSJim Jagielski     pArray[0] = OUString( RTL_CONSTASCII_USTRINGPARAM(sAccessible         ) );
1209*b1cdbd2cSJim Jagielski     pArray[1] = OUString( RTL_CONSTASCII_USTRINGPARAM(sAccessibleContext  ) );
1210*b1cdbd2cSJim Jagielski     pArray[2] = OUString( RTL_CONSTASCII_USTRINGPARAM(sAccessibleComponent) );
1211*b1cdbd2cSJim Jagielski     return aRet;
1212*b1cdbd2cSJim Jagielski }
1213*b1cdbd2cSJim Jagielski 
1214*b1cdbd2cSJim Jagielski //=====  internal  ============================================================
1215*b1cdbd2cSJim Jagielski 
CommitChange(const AccessibleEventObject & rEvent)1216*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessibleChild::CommitChange( const AccessibleEventObject& rEvent )
1217*b1cdbd2cSJim Jagielski {
1218*b1cdbd2cSJim Jagielski 	if (mnClientId)
1219*b1cdbd2cSJim Jagielski 		comphelper::AccessibleEventNotifier::addEvent( mnClientId, rEvent );
1220*b1cdbd2cSJim Jagielski }
1221*b1cdbd2cSJim Jagielski 
disposing()1222*b1cdbd2cSJim Jagielski void SAL_CALL SvxPixelCtlAccessibleChild::disposing()
1223*b1cdbd2cSJim Jagielski {
1224*b1cdbd2cSJim Jagielski 	if( !rBHelper.bDisposed )
1225*b1cdbd2cSJim Jagielski 	{
1226*b1cdbd2cSJim Jagielski 		::osl::MutexGuard	aGuard( m_aMutex );
1227*b1cdbd2cSJim Jagielski 
1228*b1cdbd2cSJim Jagielski         // Send a disposing to all listeners.
1229*b1cdbd2cSJim Jagielski 	    if ( mnClientId )
1230*b1cdbd2cSJim Jagielski 	    {
1231*b1cdbd2cSJim Jagielski             comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( mnClientId, *this );
1232*b1cdbd2cSJim Jagielski 		    mnClientId =  0;
1233*b1cdbd2cSJim Jagielski 	    }
1234*b1cdbd2cSJim Jagielski 
1235*b1cdbd2cSJim Jagielski 		mxParent = uno::Reference< XAccessible >();
1236*b1cdbd2cSJim Jagielski 
1237*b1cdbd2cSJim Jagielski 	    delete mpBoundingBox;
1238*b1cdbd2cSJim Jagielski 	}
1239*b1cdbd2cSJim Jagielski }
1240*b1cdbd2cSJim Jagielski 
ThrowExceptionIfNotAlive(void)1241*b1cdbd2cSJim Jagielski void SvxPixelCtlAccessibleChild::ThrowExceptionIfNotAlive( void ) throw( lang::DisposedException )
1242*b1cdbd2cSJim Jagielski {
1243*b1cdbd2cSJim Jagielski 	if( IsNotAlive() )
1244*b1cdbd2cSJim Jagielski 		throw lang::DisposedException();
1245*b1cdbd2cSJim Jagielski }
1246*b1cdbd2cSJim Jagielski 
GetBoundingBoxOnScreen(void)1247*b1cdbd2cSJim Jagielski Rectangle SvxPixelCtlAccessibleChild::GetBoundingBoxOnScreen( void ) throw( RuntimeException )
1248*b1cdbd2cSJim Jagielski {
1249*b1cdbd2cSJim Jagielski 	::osl::MutexGuard	aGuard( m_aMutex );
1250*b1cdbd2cSJim Jagielski 
1251*b1cdbd2cSJim Jagielski 	// no ThrowExceptionIfNotAlive() because its done in GetBoundingBox()
1252*b1cdbd2cSJim Jagielski 	Rectangle			aRect( GetBoundingBox() );
1253*b1cdbd2cSJim Jagielski 
1254*b1cdbd2cSJim Jagielski 	return Rectangle( mrParentWindow->OutputToAbsoluteScreenPixel( aRect.TopLeft() ), aRect.GetSize() );
1255*b1cdbd2cSJim Jagielski }
1256*b1cdbd2cSJim Jagielski 
GetBoundingBox(void)1257*b1cdbd2cSJim Jagielski Rectangle SvxPixelCtlAccessibleChild::GetBoundingBox( void ) throw( RuntimeException )
1258*b1cdbd2cSJim Jagielski {
1259*b1cdbd2cSJim Jagielski 	// no guard neccessary, because no one changes mpBoundingBox after creating it
1260*b1cdbd2cSJim Jagielski 	ThrowExceptionIfNotAlive();
1261*b1cdbd2cSJim Jagielski 
1262*b1cdbd2cSJim Jagielski 	return *mpBoundingBox;
1263*b1cdbd2cSJim Jagielski }
1264*b1cdbd2cSJim Jagielski 
GetName()1265*b1cdbd2cSJim Jagielski ::rtl::OUString SvxPixelCtlAccessibleChild::GetName()
1266*b1cdbd2cSJim Jagielski {
1267*b1cdbd2cSJim Jagielski 	sal_Int32 nXIndex = mnIndexInParent % mrParentWindow->GetLineCount();
1268*b1cdbd2cSJim Jagielski 	sal_Int32 nYIndex = mnIndexInParent / mrParentWindow->GetLineCount();
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski 	OUString str;
1271*b1cdbd2cSJim Jagielski 	str += OUString::createFromAscii("(");
1272*b1cdbd2cSJim Jagielski 	str += OUString::valueOf(nXIndex);
1273*b1cdbd2cSJim Jagielski 	str += OUString::createFromAscii(",");
1274*b1cdbd2cSJim Jagielski 	str += OUString::valueOf(nYIndex);
1275*b1cdbd2cSJim Jagielski // 	str += OUString::createFromAscii(",");
1276*b1cdbd2cSJim Jagielski // 	str += OUString::valueOf(m_bPixelColorOrBG);
1277*b1cdbd2cSJim Jagielski 	str += OUString::createFromAscii(")");
1278*b1cdbd2cSJim Jagielski 	return str;
1279*b1cdbd2cSJim Jagielski }
1280