1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/DisposedException.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyChangeEvent.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindow.hpp>
32*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx>
33*b1cdbd2cSJim Jagielski #include <cppuhelper/typeprovider.hxx>
34*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
35*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
36*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
37*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
38*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
39*b1cdbd2cSJim Jagielski #include <tools/gen.hxx>
40*b1cdbd2cSJim Jagielski #include <svl/smplhint.hxx>
41*b1cdbd2cSJim Jagielski #include <toolkit/helper/convert.hxx>
42*b1cdbd2cSJim Jagielski #include <svtools/colorcfg.hxx>
43*b1cdbd2cSJim Jagielski #include <comphelper/accessibleeventnotifier.hxx>
44*b1cdbd2cSJim Jagielski #include <svx/sdrpaintwindow.hxx>
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski //===== local includes ========================================================
47*b1cdbd2cSJim Jagielski #include <svx/ShapeTypeHandler.hxx>
48*b1cdbd2cSJim Jagielski #include <svx/AccessibleShapeInfo.hxx>
49*b1cdbd2cSJim Jagielski #include "GraphCtlAccessibleContext.hxx"
50*b1cdbd2cSJim Jagielski #include <svx/graphctl.hxx>
51*b1cdbd2cSJim Jagielski #ifndef _SVX_DIALOGS_HRC
52*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
53*b1cdbd2cSJim Jagielski #endif
54*b1cdbd2cSJim Jagielski #ifndef _SVX_ACCESSIBILITY_HRC
55*b1cdbd2cSJim Jagielski #include "accessibility.hrc"
56*b1cdbd2cSJim Jagielski #endif
57*b1cdbd2cSJim Jagielski #include <svx/svdpage.hxx>
58*b1cdbd2cSJim Jagielski #include <svx/unomod.hxx>
59*b1cdbd2cSJim Jagielski #include <svx/dialmgr.hxx>
60*b1cdbd2cSJim Jagielski #include <svx/svdetc.hxx>
61*b1cdbd2cSJim Jagielski #include <svx/sdrhittesthelper.hxx>
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski //===== namespaces ===========================================================
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski using namespace ::vos;
66*b1cdbd2cSJim Jagielski using namespace ::cppu;
67*b1cdbd2cSJim Jagielski using namespace ::osl;
68*b1cdbd2cSJim Jagielski using ::rtl::OUString;
69*b1cdbd2cSJim Jagielski using namespace ::accessibility;
70*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
71*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
72*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::drawing;
73*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
74*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility;
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski //===== internal ============================================================
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski /** initialize this component and set default values */
SvxGraphCtrlAccessibleContext(const Reference<XAccessible> & rxParent,GraphCtrl & rRepr,const OUString * pName,const OUString * pDesc)79*b1cdbd2cSJim Jagielski SvxGraphCtrlAccessibleContext::SvxGraphCtrlAccessibleContext(
80*b1cdbd2cSJim Jagielski const Reference< XAccessible >& rxParent,
81*b1cdbd2cSJim Jagielski GraphCtrl& rRepr,
82*b1cdbd2cSJim Jagielski const OUString* pName,
83*b1cdbd2cSJim Jagielski const OUString* pDesc ) :
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski SvxGraphCtrlAccessibleContext_Base( m_aMutex ),
86*b1cdbd2cSJim Jagielski mxParent( rxParent ),
87*b1cdbd2cSJim Jagielski mpControl( &rRepr ),
88*b1cdbd2cSJim Jagielski mpModel (NULL),
89*b1cdbd2cSJim Jagielski mpPage (NULL),
90*b1cdbd2cSJim Jagielski mpView (NULL),
91*b1cdbd2cSJim Jagielski mnClientId( 0 ),
92*b1cdbd2cSJim Jagielski mbDisposed( sal_False )
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski if (mpControl != NULL)
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski mpModel = mpControl->GetSdrModel();
97*b1cdbd2cSJim Jagielski if (mpModel != NULL)
98*b1cdbd2cSJim Jagielski mpPage = (SdrPage*)mpModel->GetPage( 0 );
99*b1cdbd2cSJim Jagielski mpView = mpControl->GetSdrView();
100*b1cdbd2cSJim Jagielski
101*b1cdbd2cSJim Jagielski if( mpModel == NULL || mpPage == NULL || mpView == NULL )
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski mbDisposed = true;
104*b1cdbd2cSJim Jagielski // Set all the pointers to NULL just in case they are used as
105*b1cdbd2cSJim Jagielski // a disposed flag.
106*b1cdbd2cSJim Jagielski mpModel = NULL;
107*b1cdbd2cSJim Jagielski mpPage = NULL;
108*b1cdbd2cSJim Jagielski mpView = NULL;
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski if( pName )
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski msName = *pName;
115*b1cdbd2cSJim Jagielski }
116*b1cdbd2cSJim Jagielski else
117*b1cdbd2cSJim Jagielski {
118*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
119*b1cdbd2cSJim Jagielski msName = SVX_RESSTR( RID_SVXSTR_GRAPHCTRL_ACC_NAME );
120*b1cdbd2cSJim Jagielski }
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski if( pDesc )
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski msDescription = *pDesc;
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski else
127*b1cdbd2cSJim Jagielski {
128*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
129*b1cdbd2cSJim Jagielski msDescription = SVX_RESSTR( RID_SVXSTR_GRAPHCTRL_ACC_DESCRIPTION );
130*b1cdbd2cSJim Jagielski }
131*b1cdbd2cSJim Jagielski
132*b1cdbd2cSJim Jagielski maTreeInfo.SetSdrView( mpView );
133*b1cdbd2cSJim Jagielski maTreeInfo.SetWindow( mpControl );
134*b1cdbd2cSJim Jagielski maTreeInfo.SetViewForwarder( const_cast<SvxGraphCtrlAccessibleContext*>(this) );
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski /** on destruction, this component is disposed and all dispose listeners
140*b1cdbd2cSJim Jagielski are called, except if this component was already disposed */
~SvxGraphCtrlAccessibleContext()141*b1cdbd2cSJim Jagielski SvxGraphCtrlAccessibleContext::~SvxGraphCtrlAccessibleContext()
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski disposing();
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
147*b1cdbd2cSJim Jagielski
148*b1cdbd2cSJim Jagielski /** returns the XAccessible interface for a given SdrObject.
149*b1cdbd2cSJim Jagielski Multiple calls for the same SdrObject return the same XAccessible.
150*b1cdbd2cSJim Jagielski */
getAccessible(const SdrObject * pObj)151*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessible( const SdrObject* pObj )
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski Reference<XAccessible> xAccessibleShape;
154*b1cdbd2cSJim Jagielski
155*b1cdbd2cSJim Jagielski if( pObj )
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski // see if we already created an XAccessible for the given SdrObject
158*b1cdbd2cSJim Jagielski ShapesMapType::iterator iter = mxShapes.find( pObj );
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski if( iter != mxShapes.end() )
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski // if we already have one, return it
163*b1cdbd2cSJim Jagielski xAccessibleShape = (*iter).second;
164*b1cdbd2cSJim Jagielski }
165*b1cdbd2cSJim Jagielski else
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski // create a new one and remember in our internal map
168*b1cdbd2cSJim Jagielski Reference< XShape > xShape( Reference< XShape >::query( (const_cast<SdrObject*>(pObj))->getUnoShape() ) );
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski AccessibleShapeInfo aShapeInfo (xShape,mxParent);
171*b1cdbd2cSJim Jagielski // Create accessible object that corresponds to the descriptor's shape.
172*b1cdbd2cSJim Jagielski AccessibleShape* pAcc = ShapeTypeHandler::Instance().CreateAccessibleObject(
173*b1cdbd2cSJim Jagielski aShapeInfo, maTreeInfo);
174*b1cdbd2cSJim Jagielski xAccessibleShape = pAcc;
175*b1cdbd2cSJim Jagielski if (pAcc != NULL)
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski pAcc->acquire();
178*b1cdbd2cSJim Jagielski // Now that we acquired the new accessible shape we can
179*b1cdbd2cSJim Jagielski // safely call its Init() method.
180*b1cdbd2cSJim Jagielski pAcc->Init ();
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski mxShapes[pObj] = pAcc;
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski // Create event and inform listeners of the object creation.
185*b1cdbd2cSJim Jagielski CommitChange( AccessibleEventId::CHILD, makeAny( xAccessibleShape ), makeAny( Reference<XAccessible>() ) );
186*b1cdbd2cSJim Jagielski }
187*b1cdbd2cSJim Jagielski }
188*b1cdbd2cSJim Jagielski
189*b1cdbd2cSJim Jagielski return xAccessibleShape;
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski
192*b1cdbd2cSJim Jagielski //===== XAccessible =========================================================
193*b1cdbd2cSJim Jagielski
getAccessibleContext(void)194*b1cdbd2cSJim Jagielski Reference< XAccessibleContext > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleContext( void ) throw( RuntimeException )
195*b1cdbd2cSJim Jagielski {
196*b1cdbd2cSJim Jagielski return this;
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski
199*b1cdbd2cSJim Jagielski //===== XAccessibleComponent ================================================
200*b1cdbd2cSJim Jagielski
containsPoint(const awt::Point & rPoint)201*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxGraphCtrlAccessibleContext::containsPoint( const awt::Point& rPoint ) throw( RuntimeException )
202*b1cdbd2cSJim Jagielski {
203*b1cdbd2cSJim Jagielski // no guard -> done in getSize()
204*b1cdbd2cSJim Jagielski awt::Size aSize (getSize());
205*b1cdbd2cSJim Jagielski return (rPoint.X >= 0)
206*b1cdbd2cSJim Jagielski && (rPoint.X < aSize.Width)
207*b1cdbd2cSJim Jagielski && (rPoint.Y >= 0)
208*b1cdbd2cSJim Jagielski && (rPoint.Y < aSize.Height);
209*b1cdbd2cSJim Jagielski }
210*b1cdbd2cSJim Jagielski
211*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
212*b1cdbd2cSJim Jagielski
getAccessibleAtPoint(const awt::Point & rPoint)213*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleAtPoint( const awt::Point& rPoint ) throw( RuntimeException )
214*b1cdbd2cSJim Jagielski {
215*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex );
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski Reference< XAccessible > xAccessible;
218*b1cdbd2cSJim Jagielski
219*b1cdbd2cSJim Jagielski if( mpControl )
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski Point aPnt( rPoint.X, rPoint.Y );
222*b1cdbd2cSJim Jagielski mpControl->PixelToLogic( aPnt );
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski SdrObject* pObj = 0;
225*b1cdbd2cSJim Jagielski
226*b1cdbd2cSJim Jagielski if(mpView && mpView->GetSdrPageView())
227*b1cdbd2cSJim Jagielski {
228*b1cdbd2cSJim Jagielski pObj = SdrObjListPrimitiveHit(*mpPage, aPnt, 1, *mpView->GetSdrPageView(), 0, false);
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski
231*b1cdbd2cSJim Jagielski if( pObj )
232*b1cdbd2cSJim Jagielski xAccessible = getAccessible( pObj );
233*b1cdbd2cSJim Jagielski }
234*b1cdbd2cSJim Jagielski else
235*b1cdbd2cSJim Jagielski {
236*b1cdbd2cSJim Jagielski throw DisposedException();
237*b1cdbd2cSJim Jagielski }
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski return xAccessible;
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
243*b1cdbd2cSJim Jagielski
getBounds()244*b1cdbd2cSJim Jagielski awt::Rectangle SAL_CALL SvxGraphCtrlAccessibleContext::getBounds() throw( RuntimeException )
245*b1cdbd2cSJim Jagielski {
246*b1cdbd2cSJim Jagielski // no guard -> done in GetBoundingBox()
247*b1cdbd2cSJim Jagielski Rectangle aCoreBounds( GetBoundingBox() );
248*b1cdbd2cSJim Jagielski awt::Rectangle aBounds;
249*b1cdbd2cSJim Jagielski aBounds.X = aCoreBounds.getX();
250*b1cdbd2cSJim Jagielski aBounds.Y = aCoreBounds.getY();
251*b1cdbd2cSJim Jagielski aBounds.Width = aCoreBounds.getWidth();
252*b1cdbd2cSJim Jagielski aBounds.Height = aCoreBounds.getHeight();
253*b1cdbd2cSJim Jagielski return aBounds;
254*b1cdbd2cSJim Jagielski }
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
257*b1cdbd2cSJim Jagielski
getLocation()258*b1cdbd2cSJim Jagielski awt::Point SAL_CALL SvxGraphCtrlAccessibleContext::getLocation() throw( RuntimeException )
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski // no guard -> done in GetBoundingBox()
261*b1cdbd2cSJim Jagielski Rectangle aRect( GetBoundingBox() );
262*b1cdbd2cSJim Jagielski return awt::Point( aRect.getX(), aRect.getY() );
263*b1cdbd2cSJim Jagielski }
264*b1cdbd2cSJim Jagielski
265*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
266*b1cdbd2cSJim Jagielski
getLocationOnScreen()267*b1cdbd2cSJim Jagielski awt::Point SAL_CALL SvxGraphCtrlAccessibleContext::getLocationOnScreen() throw( RuntimeException )
268*b1cdbd2cSJim Jagielski {
269*b1cdbd2cSJim Jagielski // no guard -> done in GetBoundingBoxOnScreen()
270*b1cdbd2cSJim Jagielski Rectangle aRect( GetBoundingBoxOnScreen() );
271*b1cdbd2cSJim Jagielski return awt::Point( aRect.getX(), aRect.getY() );
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski
274*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
275*b1cdbd2cSJim Jagielski
getSize()276*b1cdbd2cSJim Jagielski awt::Size SAL_CALL SvxGraphCtrlAccessibleContext::getSize() throw( RuntimeException )
277*b1cdbd2cSJim Jagielski {
278*b1cdbd2cSJim Jagielski // no guard -> done in GetBoundingBox()
279*b1cdbd2cSJim Jagielski Rectangle aRect( GetBoundingBox() );
280*b1cdbd2cSJim Jagielski return awt::Size( aRect.getWidth(), aRect.getHeight() );
281*b1cdbd2cSJim Jagielski }
282*b1cdbd2cSJim Jagielski
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski //===== XAccessibleContext ==================================================
285*b1cdbd2cSJim Jagielski
getAccessibleChildCount(void)286*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleChildCount( void ) throw( RuntimeException )
287*b1cdbd2cSJim Jagielski {
288*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
289*b1cdbd2cSJim Jagielski
290*b1cdbd2cSJim Jagielski if( NULL == mpPage )
291*b1cdbd2cSJim Jagielski throw DisposedException();
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski return mpPage->GetObjCount();
294*b1cdbd2cSJim Jagielski }
295*b1cdbd2cSJim Jagielski
296*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski /** returns the SdrObject at index nIndex from the model of this graph */
getSdrObject(sal_Int32 nIndex)299*b1cdbd2cSJim Jagielski SdrObject* SvxGraphCtrlAccessibleContext::getSdrObject( sal_Int32 nIndex )
300*b1cdbd2cSJim Jagielski throw( RuntimeException, lang::IndexOutOfBoundsException )
301*b1cdbd2cSJim Jagielski {
302*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielski if( NULL == mpPage )
305*b1cdbd2cSJim Jagielski throw DisposedException();
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielski if( (nIndex < 0) || ( static_cast<sal_uInt32>(nIndex) >= mpPage->GetObjCount() ) )
308*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
309*b1cdbd2cSJim Jagielski
310*b1cdbd2cSJim Jagielski return mpPage->GetObj( nIndex );
311*b1cdbd2cSJim Jagielski }
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
314*b1cdbd2cSJim Jagielski
315*b1cdbd2cSJim Jagielski /** sends an AccessibleEventObject to all added XAccessibleEventListeners */
CommitChange(sal_Int16 nEventId,const uno::Any & rNewValue,const uno::Any & rOldValue)316*b1cdbd2cSJim Jagielski void SvxGraphCtrlAccessibleContext::CommitChange (
317*b1cdbd2cSJim Jagielski sal_Int16 nEventId,
318*b1cdbd2cSJim Jagielski const uno::Any& rNewValue,
319*b1cdbd2cSJim Jagielski const uno::Any& rOldValue)
320*b1cdbd2cSJim Jagielski {
321*b1cdbd2cSJim Jagielski AccessibleEventObject aEvent (
322*b1cdbd2cSJim Jagielski static_cast<uno::XWeak*>(this),
323*b1cdbd2cSJim Jagielski nEventId,
324*b1cdbd2cSJim Jagielski rNewValue,
325*b1cdbd2cSJim Jagielski rOldValue);
326*b1cdbd2cSJim Jagielski
327*b1cdbd2cSJim Jagielski FireEvent (aEvent);
328*b1cdbd2cSJim Jagielski }
329*b1cdbd2cSJim Jagielski
330*b1cdbd2cSJim Jagielski /** sends an AccessibleEventObject to all added XAccessibleEventListeners */
FireEvent(const AccessibleEventObject & aEvent)331*b1cdbd2cSJim Jagielski void SvxGraphCtrlAccessibleContext::FireEvent (const AccessibleEventObject& aEvent)
332*b1cdbd2cSJim Jagielski {
333*b1cdbd2cSJim Jagielski if (mnClientId)
334*b1cdbd2cSJim Jagielski comphelper::AccessibleEventNotifier::addEvent( mnClientId, aEvent );
335*b1cdbd2cSJim Jagielski }
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
338*b1cdbd2cSJim Jagielski
getAccessibleChild(sal_Int32 nIndex)339*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleChild( sal_Int32 nIndex )
340*b1cdbd2cSJim Jagielski throw( RuntimeException, lang::IndexOutOfBoundsException )
341*b1cdbd2cSJim Jagielski {
342*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski return getAccessible( getSdrObject( nIndex ) );
345*b1cdbd2cSJim Jagielski }
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
348*b1cdbd2cSJim Jagielski
getAccessibleParent(void)349*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleParent( void ) throw( RuntimeException )
350*b1cdbd2cSJim Jagielski {
351*b1cdbd2cSJim Jagielski return mxParent;
352*b1cdbd2cSJim Jagielski }
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
355*b1cdbd2cSJim Jagielski
getAccessibleIndexInParent(void)356*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleIndexInParent( void ) throw( RuntimeException )
357*b1cdbd2cSJim Jagielski {
358*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
359*b1cdbd2cSJim Jagielski // Use a simple but slow solution for now. Optimize later.
360*b1cdbd2cSJim Jagielski
361*b1cdbd2cSJim Jagielski // Iterate over all the parent's children and search for this object.
362*b1cdbd2cSJim Jagielski if( mxParent.is() )
363*b1cdbd2cSJim Jagielski {
364*b1cdbd2cSJim Jagielski Reference< XAccessibleContext > xParentContext( mxParent->getAccessibleContext() );
365*b1cdbd2cSJim Jagielski if( xParentContext.is() )
366*b1cdbd2cSJim Jagielski {
367*b1cdbd2cSJim Jagielski sal_Int32 nChildCount = xParentContext->getAccessibleChildCount();
368*b1cdbd2cSJim Jagielski for( sal_Int32 i = 0 ; i < nChildCount ; ++i )
369*b1cdbd2cSJim Jagielski {
370*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( xParentContext->getAccessibleChild( i ) );
371*b1cdbd2cSJim Jagielski if( xChild.is() )
372*b1cdbd2cSJim Jagielski {
373*b1cdbd2cSJim Jagielski Reference< XAccessibleContext > xChildContext = xChild->getAccessibleContext();
374*b1cdbd2cSJim Jagielski if( xChildContext == ( XAccessibleContext* ) this )
375*b1cdbd2cSJim Jagielski return i;
376*b1cdbd2cSJim Jagielski }
377*b1cdbd2cSJim Jagielski }
378*b1cdbd2cSJim Jagielski }
379*b1cdbd2cSJim Jagielski }
380*b1cdbd2cSJim Jagielski
381*b1cdbd2cSJim Jagielski // Return -1 to indicate that this object's parent does not know about the
382*b1cdbd2cSJim Jagielski // object.
383*b1cdbd2cSJim Jagielski return -1;
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski
386*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
387*b1cdbd2cSJim Jagielski
getAccessibleRole(void)388*b1cdbd2cSJim Jagielski sal_Int16 SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleRole( void ) throw( RuntimeException )
389*b1cdbd2cSJim Jagielski {
390*b1cdbd2cSJim Jagielski return AccessibleRole::PANEL;
391*b1cdbd2cSJim Jagielski }
392*b1cdbd2cSJim Jagielski
393*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
394*b1cdbd2cSJim Jagielski
getAccessibleDescription(void)395*b1cdbd2cSJim Jagielski OUString SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleDescription( void ) throw( RuntimeException )
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
398*b1cdbd2cSJim Jagielski return msDescription;
399*b1cdbd2cSJim Jagielski }
400*b1cdbd2cSJim Jagielski
401*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
402*b1cdbd2cSJim Jagielski
getAccessibleName(void)403*b1cdbd2cSJim Jagielski OUString SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleName( void ) throw( RuntimeException )
404*b1cdbd2cSJim Jagielski {
405*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
406*b1cdbd2cSJim Jagielski return msName;
407*b1cdbd2cSJim Jagielski }
408*b1cdbd2cSJim Jagielski
409*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
410*b1cdbd2cSJim Jagielski
411*b1cdbd2cSJim Jagielski /** Return empty reference to indicate that the relation set is not
412*b1cdbd2cSJim Jagielski supported.
413*b1cdbd2cSJim Jagielski */
getAccessibleRelationSet(void)414*b1cdbd2cSJim Jagielski Reference< XAccessibleRelationSet > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleRelationSet( void ) throw( RuntimeException )
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski return Reference< XAccessibleRelationSet >();
417*b1cdbd2cSJim Jagielski }
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
420*b1cdbd2cSJim Jagielski
getAccessibleStateSet(void)421*b1cdbd2cSJim Jagielski Reference< XAccessibleStateSet > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleStateSet( void ) throw( RuntimeException )
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
426*b1cdbd2cSJim Jagielski
427*b1cdbd2cSJim Jagielski if ( rBHelper.bDisposed || mbDisposed )
428*b1cdbd2cSJim Jagielski {
429*b1cdbd2cSJim Jagielski pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
430*b1cdbd2cSJim Jagielski }
431*b1cdbd2cSJim Jagielski else
432*b1cdbd2cSJim Jagielski {
433*b1cdbd2cSJim Jagielski // pStateSetHelper->AddState( AccessibleStateType::ENABLED );
434*b1cdbd2cSJim Jagielski // pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
435*b1cdbd2cSJim Jagielski pStateSetHelper->AddState( AccessibleStateType::FOCUSABLE );
436*b1cdbd2cSJim Jagielski if( mpControl->HasFocus() )
437*b1cdbd2cSJim Jagielski pStateSetHelper->AddState( AccessibleStateType::FOCUSED );
438*b1cdbd2cSJim Jagielski pStateSetHelper->AddState( AccessibleStateType::OPAQUE );
439*b1cdbd2cSJim Jagielski pStateSetHelper->AddState( AccessibleStateType::SHOWING );
440*b1cdbd2cSJim Jagielski pStateSetHelper->AddState( AccessibleStateType::VISIBLE );
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski
443*b1cdbd2cSJim Jagielski return pStateSetHelper;
444*b1cdbd2cSJim Jagielski }
445*b1cdbd2cSJim Jagielski
446*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
447*b1cdbd2cSJim Jagielski
getLocale(void)448*b1cdbd2cSJim Jagielski lang::Locale SAL_CALL SvxGraphCtrlAccessibleContext::getLocale( void ) throw( IllegalAccessibleComponentStateException, RuntimeException )
449*b1cdbd2cSJim Jagielski {
450*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
451*b1cdbd2cSJim Jagielski
452*b1cdbd2cSJim Jagielski if( mxParent.is() )
453*b1cdbd2cSJim Jagielski {
454*b1cdbd2cSJim Jagielski Reference< XAccessibleContext > xParentContext( mxParent->getAccessibleContext() );
455*b1cdbd2cSJim Jagielski if( xParentContext.is() )
456*b1cdbd2cSJim Jagielski return xParentContext->getLocale();
457*b1cdbd2cSJim Jagielski }
458*b1cdbd2cSJim Jagielski
459*b1cdbd2cSJim Jagielski // No parent. Therefore throw exception to indicate this cluelessness.
460*b1cdbd2cSJim Jagielski throw IllegalAccessibleComponentStateException();
461*b1cdbd2cSJim Jagielski }
462*b1cdbd2cSJim Jagielski
463*b1cdbd2cSJim Jagielski //===== XAccessibleEventListener ============================================
464*b1cdbd2cSJim Jagielski
addEventListener(const Reference<XAccessibleEventListener> & xListener)465*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::addEventListener( const Reference< XAccessibleEventListener >& xListener )
466*b1cdbd2cSJim Jagielski throw( RuntimeException )
467*b1cdbd2cSJim Jagielski {
468*b1cdbd2cSJim Jagielski if (xListener.is())
469*b1cdbd2cSJim Jagielski {
470*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
471*b1cdbd2cSJim Jagielski if (!mnClientId)
472*b1cdbd2cSJim Jagielski mnClientId = comphelper::AccessibleEventNotifier::registerClient( );
473*b1cdbd2cSJim Jagielski comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener );
474*b1cdbd2cSJim Jagielski }
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski
477*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
478*b1cdbd2cSJim Jagielski
removeEventListener(const Reference<XAccessibleEventListener> & xListener)479*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::removeEventListener( const Reference< XAccessibleEventListener >& xListener )
480*b1cdbd2cSJim Jagielski throw( RuntimeException )
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski if (xListener.is())
483*b1cdbd2cSJim Jagielski {
484*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
485*b1cdbd2cSJim Jagielski
486*b1cdbd2cSJim Jagielski sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener );
487*b1cdbd2cSJim Jagielski if ( !nListenerCount )
488*b1cdbd2cSJim Jagielski {
489*b1cdbd2cSJim Jagielski // no listeners anymore
490*b1cdbd2cSJim Jagielski // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client),
491*b1cdbd2cSJim Jagielski // and at least to us not firing any events anymore, in case somebody calls
492*b1cdbd2cSJim Jagielski // NotifyAccessibleEvent, again
493*b1cdbd2cSJim Jagielski comphelper::AccessibleEventNotifier::revokeClient( mnClientId );
494*b1cdbd2cSJim Jagielski mnClientId = 0;
495*b1cdbd2cSJim Jagielski }
496*b1cdbd2cSJim Jagielski }
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski
499*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
500*b1cdbd2cSJim Jagielski
addFocusListener(const Reference<awt::XFocusListener> & xListener)501*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::addFocusListener( const Reference< awt::XFocusListener >& xListener )
502*b1cdbd2cSJim Jagielski throw( RuntimeException )
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
505*b1cdbd2cSJim Jagielski
506*b1cdbd2cSJim Jagielski if( xListener.is() )
507*b1cdbd2cSJim Jagielski {
508*b1cdbd2cSJim Jagielski Reference< ::com::sun::star::awt::XWindow > xWindow( VCLUnoHelper::GetInterface( mpControl ) );
509*b1cdbd2cSJim Jagielski if( xWindow.is() )
510*b1cdbd2cSJim Jagielski xWindow->addFocusListener( xListener );
511*b1cdbd2cSJim Jagielski }
512*b1cdbd2cSJim Jagielski }
513*b1cdbd2cSJim Jagielski
514*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
515*b1cdbd2cSJim Jagielski
removeFocusListener(const Reference<awt::XFocusListener> & xListener)516*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::removeFocusListener( const Reference< awt::XFocusListener >& xListener )
517*b1cdbd2cSJim Jagielski throw (RuntimeException)
518*b1cdbd2cSJim Jagielski {
519*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
520*b1cdbd2cSJim Jagielski
521*b1cdbd2cSJim Jagielski if( xListener.is() )
522*b1cdbd2cSJim Jagielski {
523*b1cdbd2cSJim Jagielski Reference< ::com::sun::star::awt::XWindow > xWindow = VCLUnoHelper::GetInterface( mpControl );
524*b1cdbd2cSJim Jagielski if( xWindow.is() )
525*b1cdbd2cSJim Jagielski xWindow->removeFocusListener( xListener );
526*b1cdbd2cSJim Jagielski }
527*b1cdbd2cSJim Jagielski }
528*b1cdbd2cSJim Jagielski
529*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
530*b1cdbd2cSJim Jagielski
grabFocus()531*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::grabFocus() throw( RuntimeException )
532*b1cdbd2cSJim Jagielski {
533*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
534*b1cdbd2cSJim Jagielski
535*b1cdbd2cSJim Jagielski if( NULL == mpControl )
536*b1cdbd2cSJim Jagielski throw DisposedException();
537*b1cdbd2cSJim Jagielski
538*b1cdbd2cSJim Jagielski mpControl->GrabFocus();
539*b1cdbd2cSJim Jagielski }
540*b1cdbd2cSJim Jagielski
541*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
542*b1cdbd2cSJim Jagielski
getAccessibleKeyBinding()543*b1cdbd2cSJim Jagielski Any SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleKeyBinding() throw( RuntimeException )
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski // here is no implementation, because here are no KeyBindings for every object
546*b1cdbd2cSJim Jagielski return Any();
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski
549*b1cdbd2cSJim Jagielski
550*b1cdbd2cSJim Jagielski
551*b1cdbd2cSJim Jagielski
552*b1cdbd2cSJim Jagielski
getForeground(void)553*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxGraphCtrlAccessibleContext::getForeground (void)
554*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
555*b1cdbd2cSJim Jagielski {
556*b1cdbd2cSJim Jagielski svtools::ColorConfig aColorConfig;
557*b1cdbd2cSJim Jagielski sal_uInt32 nColor = aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor;
558*b1cdbd2cSJim Jagielski return static_cast<sal_Int32>(nColor);
559*b1cdbd2cSJim Jagielski }
560*b1cdbd2cSJim Jagielski
561*b1cdbd2cSJim Jagielski
562*b1cdbd2cSJim Jagielski
563*b1cdbd2cSJim Jagielski
getBackground(void)564*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxGraphCtrlAccessibleContext::getBackground (void)
565*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
566*b1cdbd2cSJim Jagielski {
567*b1cdbd2cSJim Jagielski sal_uInt32 nColor = Application::GetSettings().GetStyleSettings().GetWindowColor().GetColor();
568*b1cdbd2cSJim Jagielski return static_cast<sal_Int32>(nColor);
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielski
572*b1cdbd2cSJim Jagielski //===== XServiceInfo ========================================================
573*b1cdbd2cSJim Jagielski
getImplementationName(void)574*b1cdbd2cSJim Jagielski OUString SAL_CALL SvxGraphCtrlAccessibleContext::getImplementationName( void ) throw( RuntimeException )
575*b1cdbd2cSJim Jagielski {
576*b1cdbd2cSJim Jagielski return OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.ui.SvxGraphCtrlAccessibleContext" ) );
577*b1cdbd2cSJim Jagielski }
578*b1cdbd2cSJim Jagielski
579*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
580*b1cdbd2cSJim Jagielski
supportsService(const OUString & sServiceName)581*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxGraphCtrlAccessibleContext::supportsService( const OUString& sServiceName ) throw( RuntimeException )
582*b1cdbd2cSJim Jagielski {
583*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
584*b1cdbd2cSJim Jagielski // Iterate over all supported service names and return true if on of them
585*b1cdbd2cSJim Jagielski // matches the given name.
586*b1cdbd2cSJim Jagielski Sequence< OUString > aSupportedServices( getSupportedServiceNames() );
587*b1cdbd2cSJim Jagielski int nLenght = aSupportedServices.getLength();
588*b1cdbd2cSJim Jagielski
589*b1cdbd2cSJim Jagielski for( int i = 0 ; i < nLenght ; ++i )
590*b1cdbd2cSJim Jagielski {
591*b1cdbd2cSJim Jagielski if( sServiceName == aSupportedServices[ i ] )
592*b1cdbd2cSJim Jagielski return sal_True;
593*b1cdbd2cSJim Jagielski }
594*b1cdbd2cSJim Jagielski
595*b1cdbd2cSJim Jagielski return sal_False;
596*b1cdbd2cSJim Jagielski }
597*b1cdbd2cSJim Jagielski
598*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
599*b1cdbd2cSJim Jagielski
getSupportedServiceNames(void)600*b1cdbd2cSJim Jagielski Sequence< OUString > SAL_CALL SvxGraphCtrlAccessibleContext::getSupportedServiceNames( void ) throw( RuntimeException )
601*b1cdbd2cSJim Jagielski {
602*b1cdbd2cSJim Jagielski Sequence< OUString > aSNs( 3 );
603*b1cdbd2cSJim Jagielski
604*b1cdbd2cSJim Jagielski aSNs[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.accessibility.Accessible" ) );
605*b1cdbd2cSJim Jagielski aSNs[1] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.accessibility.AccessibleContext" ) );
606*b1cdbd2cSJim Jagielski aSNs[2] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.AccessibleGraphControl" ) );
607*b1cdbd2cSJim Jagielski
608*b1cdbd2cSJim Jagielski return aSNs;
609*b1cdbd2cSJim Jagielski }
610*b1cdbd2cSJim Jagielski
611*b1cdbd2cSJim Jagielski //===== XTypeProvider =======================================================
612*b1cdbd2cSJim Jagielski
getImplementationId(void)613*b1cdbd2cSJim Jagielski Sequence<sal_Int8> SAL_CALL SvxGraphCtrlAccessibleContext::getImplementationId( void ) throw( RuntimeException )
614*b1cdbd2cSJim Jagielski {
615*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
616*b1cdbd2cSJim Jagielski return getUniqueId();
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski
619*b1cdbd2cSJim Jagielski //===== XServiceName ========================================================
620*b1cdbd2cSJim Jagielski
getServiceName(void)621*b1cdbd2cSJim Jagielski OUString SvxGraphCtrlAccessibleContext::getServiceName( void ) throw( RuntimeException )
622*b1cdbd2cSJim Jagielski {
623*b1cdbd2cSJim Jagielski return OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.accessibility.AccessibleContext" ) );
624*b1cdbd2cSJim Jagielski }
625*b1cdbd2cSJim Jagielski
626*b1cdbd2cSJim Jagielski //===== XAccessibleSelection =============================================
627*b1cdbd2cSJim Jagielski
selectAccessibleChild(sal_Int32 nIndex)628*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::selectAccessibleChild( sal_Int32 nIndex ) throw( lang::IndexOutOfBoundsException, RuntimeException )
629*b1cdbd2cSJim Jagielski {
630*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
631*b1cdbd2cSJim Jagielski
632*b1cdbd2cSJim Jagielski if( NULL == mpView )
633*b1cdbd2cSJim Jagielski throw DisposedException();
634*b1cdbd2cSJim Jagielski
635*b1cdbd2cSJim Jagielski SdrObject* pObj = getSdrObject( nIndex );
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski if( pObj )
638*b1cdbd2cSJim Jagielski mpView->MarkObj( pObj, mpView->GetSdrPageView());
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski
641*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
642*b1cdbd2cSJim Jagielski
isAccessibleChildSelected(sal_Int32 nIndex)643*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvxGraphCtrlAccessibleContext::isAccessibleChildSelected( sal_Int32 nIndex ) throw( lang::IndexOutOfBoundsException, RuntimeException )
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
646*b1cdbd2cSJim Jagielski
647*b1cdbd2cSJim Jagielski if( NULL == mpView )
648*b1cdbd2cSJim Jagielski throw DisposedException();
649*b1cdbd2cSJim Jagielski
650*b1cdbd2cSJim Jagielski return mpView->IsObjMarked( getSdrObject( nIndex ) );
651*b1cdbd2cSJim Jagielski }
652*b1cdbd2cSJim Jagielski
653*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
654*b1cdbd2cSJim Jagielski
clearAccessibleSelection()655*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::clearAccessibleSelection() throw( RuntimeException )
656*b1cdbd2cSJim Jagielski {
657*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
658*b1cdbd2cSJim Jagielski
659*b1cdbd2cSJim Jagielski if( NULL == mpView )
660*b1cdbd2cSJim Jagielski throw DisposedException();
661*b1cdbd2cSJim Jagielski
662*b1cdbd2cSJim Jagielski mpView->UnmarkAllObj();
663*b1cdbd2cSJim Jagielski }
664*b1cdbd2cSJim Jagielski
665*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
666*b1cdbd2cSJim Jagielski
selectAllAccessibleChildren()667*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::selectAllAccessibleChildren() throw( RuntimeException )
668*b1cdbd2cSJim Jagielski {
669*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
670*b1cdbd2cSJim Jagielski
671*b1cdbd2cSJim Jagielski if( NULL == mpView )
672*b1cdbd2cSJim Jagielski throw DisposedException();
673*b1cdbd2cSJim Jagielski
674*b1cdbd2cSJim Jagielski mpView->MarkAllObj();
675*b1cdbd2cSJim Jagielski }
676*b1cdbd2cSJim Jagielski
677*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
678*b1cdbd2cSJim Jagielski
getSelectedAccessibleChildCount()679*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL SvxGraphCtrlAccessibleContext::getSelectedAccessibleChildCount() throw( RuntimeException )
680*b1cdbd2cSJim Jagielski {
681*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
682*b1cdbd2cSJim Jagielski
683*b1cdbd2cSJim Jagielski if( NULL == mpView )
684*b1cdbd2cSJim Jagielski throw DisposedException();
685*b1cdbd2cSJim Jagielski
686*b1cdbd2cSJim Jagielski const SdrMarkList& rList = mpView->GetMarkedObjectList();
687*b1cdbd2cSJim Jagielski return rList.GetMarkCount();
688*b1cdbd2cSJim Jagielski }
689*b1cdbd2cSJim Jagielski
690*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
691*b1cdbd2cSJim Jagielski
getSelectedAccessibleChild(sal_Int32 nIndex)692*b1cdbd2cSJim Jagielski Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getSelectedAccessibleChild( sal_Int32 nIndex )
693*b1cdbd2cSJim Jagielski throw( lang::IndexOutOfBoundsException, RuntimeException )
694*b1cdbd2cSJim Jagielski {
695*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
696*b1cdbd2cSJim Jagielski
697*b1cdbd2cSJim Jagielski checkChildIndexOnSelection( nIndex );
698*b1cdbd2cSJim Jagielski
699*b1cdbd2cSJim Jagielski Reference< XAccessible > xAccessible;
700*b1cdbd2cSJim Jagielski
701*b1cdbd2cSJim Jagielski const SdrMarkList& rList = mpView->GetMarkedObjectList();
702*b1cdbd2cSJim Jagielski SdrObject* pObj = rList.GetMark(nIndex)->GetMarkedSdrObj();
703*b1cdbd2cSJim Jagielski if( pObj )
704*b1cdbd2cSJim Jagielski xAccessible = getAccessible( pObj );
705*b1cdbd2cSJim Jagielski
706*b1cdbd2cSJim Jagielski return xAccessible;
707*b1cdbd2cSJim Jagielski }
708*b1cdbd2cSJim Jagielski
709*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
710*b1cdbd2cSJim Jagielski
deselectAccessibleChild(sal_Int32 nIndex)711*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::deselectAccessibleChild( sal_Int32 nIndex ) throw( lang::IndexOutOfBoundsException, RuntimeException )
712*b1cdbd2cSJim Jagielski {
713*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
714*b1cdbd2cSJim Jagielski
715*b1cdbd2cSJim Jagielski checkChildIndexOnSelection( nIndex );
716*b1cdbd2cSJim Jagielski
717*b1cdbd2cSJim Jagielski if( mpView )
718*b1cdbd2cSJim Jagielski {
719*b1cdbd2cSJim Jagielski const SdrMarkList& rList = mpView->GetMarkedObjectList();
720*b1cdbd2cSJim Jagielski
721*b1cdbd2cSJim Jagielski SdrObject* pObj = getSdrObject( nIndex );
722*b1cdbd2cSJim Jagielski if( pObj )
723*b1cdbd2cSJim Jagielski {
724*b1cdbd2cSJim Jagielski SdrMarkList aRefList( rList );
725*b1cdbd2cSJim Jagielski
726*b1cdbd2cSJim Jagielski SdrPageView* pPV = mpView->GetSdrPageView();
727*b1cdbd2cSJim Jagielski mpView->UnmarkAllObj( pPV );
728*b1cdbd2cSJim Jagielski
729*b1cdbd2cSJim Jagielski sal_uInt32 nCount = aRefList.GetMarkCount();
730*b1cdbd2cSJim Jagielski sal_uInt32 nMark;
731*b1cdbd2cSJim Jagielski for( nMark = 0; nMark < nCount; nMark++ )
732*b1cdbd2cSJim Jagielski {
733*b1cdbd2cSJim Jagielski if( aRefList.GetMark(nMark)->GetMarkedSdrObj() != pObj )
734*b1cdbd2cSJim Jagielski mpView->MarkObj( aRefList.GetMark(nMark)->GetMarkedSdrObj(), pPV );
735*b1cdbd2cSJim Jagielski }
736*b1cdbd2cSJim Jagielski }
737*b1cdbd2cSJim Jagielski }
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski
740*b1cdbd2cSJim Jagielski //===== internals ========================================================
741*b1cdbd2cSJim Jagielski
checkChildIndex(long nIndex)742*b1cdbd2cSJim Jagielski void SvxGraphCtrlAccessibleContext::checkChildIndex( long nIndex ) throw( lang::IndexOutOfBoundsException )
743*b1cdbd2cSJim Jagielski {
744*b1cdbd2cSJim Jagielski if( nIndex < 0 || nIndex >= getAccessibleChildCount() )
745*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
746*b1cdbd2cSJim Jagielski }
747*b1cdbd2cSJim Jagielski
748*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
749*b1cdbd2cSJim Jagielski
checkChildIndexOnSelection(long nIndex)750*b1cdbd2cSJim Jagielski void SvxGraphCtrlAccessibleContext::checkChildIndexOnSelection( long nIndex ) throw( lang::IndexOutOfBoundsException )
751*b1cdbd2cSJim Jagielski {
752*b1cdbd2cSJim Jagielski if( nIndex < 0 || nIndex >= getSelectedAccessibleChildCount() )
753*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
754*b1cdbd2cSJim Jagielski }
755*b1cdbd2cSJim Jagielski
756*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
757*b1cdbd2cSJim Jagielski
setName(const OUString & rName)758*b1cdbd2cSJim Jagielski void SvxGraphCtrlAccessibleContext::setName( const OUString& rName )
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
761*b1cdbd2cSJim Jagielski
762*b1cdbd2cSJim Jagielski msName = rName;
763*b1cdbd2cSJim Jagielski }
764*b1cdbd2cSJim Jagielski
765*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
766*b1cdbd2cSJim Jagielski
setDescription(const OUString & rDescr)767*b1cdbd2cSJim Jagielski void SvxGraphCtrlAccessibleContext::setDescription( const OUString& rDescr )
768*b1cdbd2cSJim Jagielski {
769*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
770*b1cdbd2cSJim Jagielski
771*b1cdbd2cSJim Jagielski msDescription = rDescr;
772*b1cdbd2cSJim Jagielski }
773*b1cdbd2cSJim Jagielski
774*b1cdbd2cSJim Jagielski
775*b1cdbd2cSJim Jagielski
776*b1cdbd2cSJim Jagielski
777*b1cdbd2cSJim Jagielski /** Replace the model, page, and view pointers by the ones provided
778*b1cdbd2cSJim Jagielski (explicitly and implicitly).
779*b1cdbd2cSJim Jagielski */
setModelAndView(SdrModel * pModel,SdrView * pView)780*b1cdbd2cSJim Jagielski void SvxGraphCtrlAccessibleContext::setModelAndView (
781*b1cdbd2cSJim Jagielski SdrModel* pModel,
782*b1cdbd2cSJim Jagielski SdrView* pView)
783*b1cdbd2cSJim Jagielski {
784*b1cdbd2cSJim Jagielski OGuard aGuard (Application::GetSolarMutex());
785*b1cdbd2cSJim Jagielski
786*b1cdbd2cSJim Jagielski mpModel = pModel;
787*b1cdbd2cSJim Jagielski if (mpModel != NULL)
788*b1cdbd2cSJim Jagielski mpPage = (SdrPage*)mpModel->GetPage( 0 );
789*b1cdbd2cSJim Jagielski mpView = pView;
790*b1cdbd2cSJim Jagielski
791*b1cdbd2cSJim Jagielski if (mpModel == NULL || mpPage == NULL || mpView == NULL)
792*b1cdbd2cSJim Jagielski {
793*b1cdbd2cSJim Jagielski mbDisposed = true;
794*b1cdbd2cSJim Jagielski
795*b1cdbd2cSJim Jagielski // Set all the pointers to NULL just in case they are used as
796*b1cdbd2cSJim Jagielski // a disposed flag.
797*b1cdbd2cSJim Jagielski mpModel = NULL;
798*b1cdbd2cSJim Jagielski mpPage = NULL;
799*b1cdbd2cSJim Jagielski mpView = NULL;
800*b1cdbd2cSJim Jagielski }
801*b1cdbd2cSJim Jagielski
802*b1cdbd2cSJim Jagielski maTreeInfo.SetSdrView (mpView);
803*b1cdbd2cSJim Jagielski }
804*b1cdbd2cSJim Jagielski
805*b1cdbd2cSJim Jagielski
806*b1cdbd2cSJim Jagielski
807*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
808*b1cdbd2cSJim Jagielski
disposing()809*b1cdbd2cSJim Jagielski void SAL_CALL SvxGraphCtrlAccessibleContext::disposing()
810*b1cdbd2cSJim Jagielski {
811*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
812*b1cdbd2cSJim Jagielski
813*b1cdbd2cSJim Jagielski if( mbDisposed )
814*b1cdbd2cSJim Jagielski return;
815*b1cdbd2cSJim Jagielski
816*b1cdbd2cSJim Jagielski mbDisposed = sal_True;
817*b1cdbd2cSJim Jagielski
818*b1cdbd2cSJim Jagielski mpControl = NULL; // object dies with representation
819*b1cdbd2cSJim Jagielski mpView = NULL;
820*b1cdbd2cSJim Jagielski mpPage = NULL;
821*b1cdbd2cSJim Jagielski
822*b1cdbd2cSJim Jagielski {
823*b1cdbd2cSJim Jagielski ShapesMapType::iterator I;
824*b1cdbd2cSJim Jagielski
825*b1cdbd2cSJim Jagielski for (I=mxShapes.begin(); I!=mxShapes.end(); I++)
826*b1cdbd2cSJim Jagielski {
827*b1cdbd2cSJim Jagielski XAccessible* pAcc = (*I).second;
828*b1cdbd2cSJim Jagielski Reference< XComponent > xComp( pAcc, UNO_QUERY );
829*b1cdbd2cSJim Jagielski if( xComp.is() )
830*b1cdbd2cSJim Jagielski xComp->dispose();
831*b1cdbd2cSJim Jagielski
832*b1cdbd2cSJim Jagielski (*I).second->release();
833*b1cdbd2cSJim Jagielski }
834*b1cdbd2cSJim Jagielski
835*b1cdbd2cSJim Jagielski mxShapes.clear();
836*b1cdbd2cSJim Jagielski }
837*b1cdbd2cSJim Jagielski
838*b1cdbd2cSJim Jagielski // Send a disposing to all listeners.
839*b1cdbd2cSJim Jagielski if ( mnClientId )
840*b1cdbd2cSJim Jagielski {
841*b1cdbd2cSJim Jagielski comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( mnClientId, *this );
842*b1cdbd2cSJim Jagielski mnClientId = 0;
843*b1cdbd2cSJim Jagielski }
844*b1cdbd2cSJim Jagielski }
845*b1cdbd2cSJim Jagielski
846*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
847*b1cdbd2cSJim Jagielski
GetBoundingBoxOnScreen(void)848*b1cdbd2cSJim Jagielski Rectangle SvxGraphCtrlAccessibleContext::GetBoundingBoxOnScreen( void ) throw( RuntimeException )
849*b1cdbd2cSJim Jagielski {
850*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
851*b1cdbd2cSJim Jagielski
852*b1cdbd2cSJim Jagielski if( NULL == mpControl )
853*b1cdbd2cSJim Jagielski throw DisposedException();
854*b1cdbd2cSJim Jagielski
855*b1cdbd2cSJim Jagielski return Rectangle(
856*b1cdbd2cSJim Jagielski mpControl->GetAccessibleParentWindow()->OutputToAbsoluteScreenPixel(
857*b1cdbd2cSJim Jagielski mpControl->GetPosPixel() ),
858*b1cdbd2cSJim Jagielski mpControl->GetSizePixel() );
859*b1cdbd2cSJim Jagielski }
860*b1cdbd2cSJim Jagielski
861*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
862*b1cdbd2cSJim Jagielski
863*b1cdbd2cSJim Jagielski /** Calculate the relative coordinates of the bounding box as difference
864*b1cdbd2cSJim Jagielski between the absolute coordinates of the bounding boxes of this control
865*b1cdbd2cSJim Jagielski and its parent in the accessibility tree.
866*b1cdbd2cSJim Jagielski */
GetBoundingBox(void)867*b1cdbd2cSJim Jagielski Rectangle SvxGraphCtrlAccessibleContext::GetBoundingBox( void ) throw( RuntimeException )
868*b1cdbd2cSJim Jagielski {
869*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
870*b1cdbd2cSJim Jagielski
871*b1cdbd2cSJim Jagielski Rectangle aBounds ( 0, 0, 0, 0 );
872*b1cdbd2cSJim Jagielski
873*b1cdbd2cSJim Jagielski Window* pWindow = mpControl;
874*b1cdbd2cSJim Jagielski if (pWindow != NULL)
875*b1cdbd2cSJim Jagielski {
876*b1cdbd2cSJim Jagielski aBounds = pWindow->GetWindowExtentsRelative (NULL);
877*b1cdbd2cSJim Jagielski Window* pParent = pWindow->GetAccessibleParentWindow();
878*b1cdbd2cSJim Jagielski if (pParent != NULL)
879*b1cdbd2cSJim Jagielski {
880*b1cdbd2cSJim Jagielski Rectangle aParentRect = pParent->GetWindowExtentsRelative (NULL);
881*b1cdbd2cSJim Jagielski aBounds -= aParentRect.TopLeft();
882*b1cdbd2cSJim Jagielski }
883*b1cdbd2cSJim Jagielski }
884*b1cdbd2cSJim Jagielski else
885*b1cdbd2cSJim Jagielski throw DisposedException();
886*b1cdbd2cSJim Jagielski
887*b1cdbd2cSJim Jagielski return aBounds;
888*b1cdbd2cSJim Jagielski }
889*b1cdbd2cSJim Jagielski
890*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
891*b1cdbd2cSJim Jagielski
getUniqueId(void)892*b1cdbd2cSJim Jagielski Sequence< sal_Int8 > SvxGraphCtrlAccessibleContext::getUniqueId( void )
893*b1cdbd2cSJim Jagielski {
894*b1cdbd2cSJim Jagielski // no guard because it's private -> has to guarded when using it!
895*b1cdbd2cSJim Jagielski static OImplementationId* pId = 0;
896*b1cdbd2cSJim Jagielski if( !pId )
897*b1cdbd2cSJim Jagielski {
898*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
899*b1cdbd2cSJim Jagielski if( !pId)
900*b1cdbd2cSJim Jagielski {
901*b1cdbd2cSJim Jagielski static OImplementationId aId;
902*b1cdbd2cSJim Jagielski pId = &aId;
903*b1cdbd2cSJim Jagielski }
904*b1cdbd2cSJim Jagielski }
905*b1cdbd2cSJim Jagielski return pId->getImplementationId();
906*b1cdbd2cSJim Jagielski }
907*b1cdbd2cSJim Jagielski
908*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
909*b1cdbd2cSJim Jagielski
Notify(SfxBroadcaster &,const SfxHint & rHint)910*b1cdbd2cSJim Jagielski void SvxGraphCtrlAccessibleContext::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
911*b1cdbd2cSJim Jagielski {
912*b1cdbd2cSJim Jagielski const SdrHint* pSdrHint = PTR_CAST( SdrHint, &rHint );
913*b1cdbd2cSJim Jagielski
914*b1cdbd2cSJim Jagielski if( pSdrHint )
915*b1cdbd2cSJim Jagielski {
916*b1cdbd2cSJim Jagielski switch( pSdrHint->GetKind() )
917*b1cdbd2cSJim Jagielski {
918*b1cdbd2cSJim Jagielski case HINT_OBJCHG:
919*b1cdbd2cSJim Jagielski {
920*b1cdbd2cSJim Jagielski ShapesMapType::iterator iter = mxShapes.find( pSdrHint->GetObject() );
921*b1cdbd2cSJim Jagielski
922*b1cdbd2cSJim Jagielski if( iter != mxShapes.end() )
923*b1cdbd2cSJim Jagielski {
924*b1cdbd2cSJim Jagielski // if we already have one, return it
925*b1cdbd2cSJim Jagielski AccessibleShape* pShape = (*iter).second;
926*b1cdbd2cSJim Jagielski
927*b1cdbd2cSJim Jagielski if( NULL != pShape )
928*b1cdbd2cSJim Jagielski pShape->CommitChange( AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any() );
929*b1cdbd2cSJim Jagielski }
930*b1cdbd2cSJim Jagielski }
931*b1cdbd2cSJim Jagielski break;
932*b1cdbd2cSJim Jagielski
933*b1cdbd2cSJim Jagielski case HINT_OBJINSERTED:
934*b1cdbd2cSJim Jagielski CommitChange( AccessibleEventId::CHILD, makeAny( getAccessible( pSdrHint->GetObject() ) ) , uno::Any());
935*b1cdbd2cSJim Jagielski break;
936*b1cdbd2cSJim Jagielski case HINT_OBJREMOVED:
937*b1cdbd2cSJim Jagielski CommitChange( AccessibleEventId::CHILD, uno::Any(), makeAny( getAccessible( pSdrHint->GetObject() ) ) );
938*b1cdbd2cSJim Jagielski break;
939*b1cdbd2cSJim Jagielski case HINT_MODELCLEARED:
940*b1cdbd2cSJim Jagielski dispose();
941*b1cdbd2cSJim Jagielski break;
942*b1cdbd2cSJim Jagielski default:
943*b1cdbd2cSJim Jagielski break;
944*b1cdbd2cSJim Jagielski }
945*b1cdbd2cSJim Jagielski }
946*b1cdbd2cSJim Jagielski else
947*b1cdbd2cSJim Jagielski {
948*b1cdbd2cSJim Jagielski const SfxSimpleHint* pSfxHint = PTR_CAST(SfxSimpleHint, &rHint );
949*b1cdbd2cSJim Jagielski
950*b1cdbd2cSJim Jagielski // ist unser SdDrawDocument gerade gestorben?
951*b1cdbd2cSJim Jagielski if(pSfxHint && pSfxHint->GetId() == SFX_HINT_DYING)
952*b1cdbd2cSJim Jagielski {
953*b1cdbd2cSJim Jagielski dispose();
954*b1cdbd2cSJim Jagielski }
955*b1cdbd2cSJim Jagielski }
956*b1cdbd2cSJim Jagielski }
957*b1cdbd2cSJim Jagielski
958*b1cdbd2cSJim Jagielski //===== IAccessibleViewforwarder ========================================
959*b1cdbd2cSJim Jagielski
IsValid(void) const960*b1cdbd2cSJim Jagielski sal_Bool SvxGraphCtrlAccessibleContext::IsValid (void) const
961*b1cdbd2cSJim Jagielski {
962*b1cdbd2cSJim Jagielski return sal_True;
963*b1cdbd2cSJim Jagielski }
964*b1cdbd2cSJim Jagielski
965*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
966*b1cdbd2cSJim Jagielski
GetVisibleArea(void) const967*b1cdbd2cSJim Jagielski Rectangle SvxGraphCtrlAccessibleContext::GetVisibleArea (void) const
968*b1cdbd2cSJim Jagielski {
969*b1cdbd2cSJim Jagielski Rectangle aVisArea;
970*b1cdbd2cSJim Jagielski
971*b1cdbd2cSJim Jagielski if( mpView && mpView->PaintWindowCount())
972*b1cdbd2cSJim Jagielski {
973*b1cdbd2cSJim Jagielski SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow(0L);
974*b1cdbd2cSJim Jagielski aVisArea = pPaintWindow->GetVisibleArea();
975*b1cdbd2cSJim Jagielski }
976*b1cdbd2cSJim Jagielski
977*b1cdbd2cSJim Jagielski return aVisArea;
978*b1cdbd2cSJim Jagielski }
979*b1cdbd2cSJim Jagielski
980*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
981*b1cdbd2cSJim Jagielski
LogicToPixel(const Point & rPoint) const982*b1cdbd2cSJim Jagielski Point SvxGraphCtrlAccessibleContext::LogicToPixel (const Point& rPoint) const
983*b1cdbd2cSJim Jagielski {
984*b1cdbd2cSJim Jagielski if( mpControl )
985*b1cdbd2cSJim Jagielski {
986*b1cdbd2cSJim Jagielski Rectangle aBBox(mpControl->GetWindowExtentsRelative(NULL));
987*b1cdbd2cSJim Jagielski return mpControl->LogicToPixel (rPoint) + aBBox.TopLeft();
988*b1cdbd2cSJim Jagielski }
989*b1cdbd2cSJim Jagielski else
990*b1cdbd2cSJim Jagielski {
991*b1cdbd2cSJim Jagielski return rPoint;
992*b1cdbd2cSJim Jagielski }
993*b1cdbd2cSJim Jagielski }
994*b1cdbd2cSJim Jagielski
995*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
996*b1cdbd2cSJim Jagielski
LogicToPixel(const Size & rSize) const997*b1cdbd2cSJim Jagielski Size SvxGraphCtrlAccessibleContext::LogicToPixel (const Size& rSize) const
998*b1cdbd2cSJim Jagielski {
999*b1cdbd2cSJim Jagielski if( mpControl )
1000*b1cdbd2cSJim Jagielski return mpControl->LogicToPixel (rSize);
1001*b1cdbd2cSJim Jagielski else
1002*b1cdbd2cSJim Jagielski return rSize;
1003*b1cdbd2cSJim Jagielski }
1004*b1cdbd2cSJim Jagielski
1005*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
1006*b1cdbd2cSJim Jagielski
PixelToLogic(const Point & rPoint) const1007*b1cdbd2cSJim Jagielski Point SvxGraphCtrlAccessibleContext::PixelToLogic (const Point& rPoint) const
1008*b1cdbd2cSJim Jagielski {
1009*b1cdbd2cSJim Jagielski if( mpControl )
1010*b1cdbd2cSJim Jagielski return mpControl->PixelToLogic (rPoint);
1011*b1cdbd2cSJim Jagielski else
1012*b1cdbd2cSJim Jagielski return rPoint;
1013*b1cdbd2cSJim Jagielski }
1014*b1cdbd2cSJim Jagielski
1015*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
1016*b1cdbd2cSJim Jagielski
PixelToLogic(const Size & rSize) const1017*b1cdbd2cSJim Jagielski Size SvxGraphCtrlAccessibleContext::PixelToLogic (const Size& rSize) const
1018*b1cdbd2cSJim Jagielski {
1019*b1cdbd2cSJim Jagielski if( mpControl )
1020*b1cdbd2cSJim Jagielski return mpControl->PixelToLogic (rSize);
1021*b1cdbd2cSJim Jagielski else
1022*b1cdbd2cSJim Jagielski return rSize;
1023*b1cdbd2cSJim Jagielski }
1024