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