xref: /trunk/main/basctl/source/accessibility/accessibledialogcontrolshape.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1*31598a22SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*31598a22SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*31598a22SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*31598a22SAndrew Rist  * distributed with this work for additional information
6*31598a22SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*31598a22SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*31598a22SAndrew Rist  * "License"); you may not use this file except in compliance
9*31598a22SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*31598a22SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*31598a22SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*31598a22SAndrew Rist  * software distributed under the License is distributed on an
15*31598a22SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*31598a22SAndrew Rist  * KIND, either express or implied.  See the License for the
17*31598a22SAndrew Rist  * specific language governing permissions and limitations
18*31598a22SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*31598a22SAndrew Rist  *************************************************************/
21*31598a22SAndrew Rist 
22*31598a22SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_basctl.hxx"
26cdf0e10cSrcweir #include <accessibledialogcontrolshape.hxx>
27cdf0e10cSrcweir #include <baside3.hxx>
28cdf0e10cSrcweir #include <dlgeddef.hxx>
29cdf0e10cSrcweir #include <dlgedview.hxx>
30cdf0e10cSrcweir #include <dlgedobj.hxx>
31cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleEventId.hpp>
32cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleRole.hpp>
33cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleStateType.hpp>
34cdf0e10cSrcweir #include <unotools/accessiblestatesethelper.hxx>
35cdf0e10cSrcweir #include <unotools/accessiblerelationsethelper.hxx>
36cdf0e10cSrcweir #include <toolkit/awt/vclxfont.hxx>
37cdf0e10cSrcweir #include <toolkit/helper/externallock.hxx>
38cdf0e10cSrcweir #include <toolkit/helper/convert.hxx>
39cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
40cdf0e10cSrcweir #include <vcl/svapp.hxx>
41cdf0e10cSrcweir 
42cdf0e10cSrcweir using namespace ::com::sun::star;
43cdf0e10cSrcweir using namespace ::com::sun::star::uno;
44cdf0e10cSrcweir using namespace ::com::sun::star::lang;
45cdf0e10cSrcweir using namespace ::com::sun::star::beans;
46cdf0e10cSrcweir using namespace ::com::sun::star::accessibility;
47cdf0e10cSrcweir using namespace ::comphelper;
48cdf0e10cSrcweir 
49cdf0e10cSrcweir 
50cdf0e10cSrcweir // -----------------------------------------------------------------------------
51cdf0e10cSrcweir // class AccessibleDialogControlShape
52cdf0e10cSrcweir // -----------------------------------------------------------------------------
53cdf0e10cSrcweir 
AccessibleDialogControlShape(DialogWindow * pDialogWindow,DlgEdObj * pDlgEdObj)54cdf0e10cSrcweir AccessibleDialogControlShape::AccessibleDialogControlShape( DialogWindow* pDialogWindow, DlgEdObj* pDlgEdObj )
55cdf0e10cSrcweir     :AccessibleExtendedComponentHelper_BASE( new VCLExternalSolarLock() )
56cdf0e10cSrcweir     ,m_pDialogWindow( pDialogWindow )
57cdf0e10cSrcweir     ,m_pDlgEdObj( pDlgEdObj )
58cdf0e10cSrcweir {
59cdf0e10cSrcweir     m_pExternalLock = static_cast< VCLExternalSolarLock* >( getExternalLock() );
60cdf0e10cSrcweir 
61cdf0e10cSrcweir     if ( m_pDlgEdObj )
62cdf0e10cSrcweir         m_xControlModel = Reference< XPropertySet >( m_pDlgEdObj->GetUnoControlModel(), UNO_QUERY );
63cdf0e10cSrcweir 
64cdf0e10cSrcweir     if ( m_xControlModel.is() )
65cdf0e10cSrcweir         m_xControlModel->addPropertyChangeListener( ::rtl::OUString(), static_cast< beans::XPropertyChangeListener* >( this ) );
66cdf0e10cSrcweir 
67cdf0e10cSrcweir     m_bFocused = IsFocused();
68cdf0e10cSrcweir     m_bSelected = IsSelected();
69cdf0e10cSrcweir     m_aBounds = GetBounds();
70cdf0e10cSrcweir }
71cdf0e10cSrcweir 
72cdf0e10cSrcweir // -----------------------------------------------------------------------------
73cdf0e10cSrcweir 
~AccessibleDialogControlShape()74cdf0e10cSrcweir AccessibleDialogControlShape::~AccessibleDialogControlShape()
75cdf0e10cSrcweir {
76cdf0e10cSrcweir     if ( m_xControlModel.is() )
77cdf0e10cSrcweir         m_xControlModel->removePropertyChangeListener( ::rtl::OUString(), static_cast< beans::XPropertyChangeListener* >( this ) );
78cdf0e10cSrcweir 
79cdf0e10cSrcweir     delete m_pExternalLock;
80cdf0e10cSrcweir     m_pExternalLock = NULL;
81cdf0e10cSrcweir }
82cdf0e10cSrcweir 
83cdf0e10cSrcweir // -----------------------------------------------------------------------------
84cdf0e10cSrcweir 
IsFocused()85cdf0e10cSrcweir sal_Bool AccessibleDialogControlShape::IsFocused()
86cdf0e10cSrcweir {
87cdf0e10cSrcweir     sal_Bool bFocused = sal_False;
88cdf0e10cSrcweir     if ( m_pDialogWindow )
89cdf0e10cSrcweir     {
90cdf0e10cSrcweir         SdrView* pSdrView = m_pDialogWindow->GetView();
91cdf0e10cSrcweir         if ( pSdrView && pSdrView->IsObjMarked( m_pDlgEdObj ) && pSdrView->GetMarkedObjectList().GetMarkCount() == 1 )
92cdf0e10cSrcweir             bFocused = sal_True;
93cdf0e10cSrcweir     }
94cdf0e10cSrcweir 
95cdf0e10cSrcweir     return bFocused;
96cdf0e10cSrcweir }
97cdf0e10cSrcweir 
98cdf0e10cSrcweir // -----------------------------------------------------------------------------
99cdf0e10cSrcweir 
IsSelected()100cdf0e10cSrcweir sal_Bool AccessibleDialogControlShape::IsSelected()
101cdf0e10cSrcweir {
102cdf0e10cSrcweir     sal_Bool bSelected = sal_False;
103cdf0e10cSrcweir     if ( m_pDialogWindow )
104cdf0e10cSrcweir     {
105cdf0e10cSrcweir         SdrView* pSdrView = m_pDialogWindow->GetView();
106cdf0e10cSrcweir         if ( pSdrView )
107cdf0e10cSrcweir             bSelected = pSdrView->IsObjMarked( m_pDlgEdObj );
108cdf0e10cSrcweir     }
109cdf0e10cSrcweir 
110cdf0e10cSrcweir     return bSelected;
111cdf0e10cSrcweir }
112cdf0e10cSrcweir 
113cdf0e10cSrcweir // -----------------------------------------------------------------------------
114cdf0e10cSrcweir 
SetFocused(sal_Bool bFocused)115cdf0e10cSrcweir void AccessibleDialogControlShape::SetFocused( sal_Bool bFocused )
116cdf0e10cSrcweir {
117cdf0e10cSrcweir     if ( m_bFocused != bFocused )
118cdf0e10cSrcweir     {
119cdf0e10cSrcweir         Any aOldValue, aNewValue;
120cdf0e10cSrcweir         if ( m_bFocused )
121cdf0e10cSrcweir             aOldValue <<= AccessibleStateType::FOCUSED;
122cdf0e10cSrcweir         else
123cdf0e10cSrcweir             aNewValue <<= AccessibleStateType::FOCUSED;
124cdf0e10cSrcweir         m_bFocused = bFocused;
125cdf0e10cSrcweir         NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
126cdf0e10cSrcweir     }
127cdf0e10cSrcweir }
128cdf0e10cSrcweir 
129cdf0e10cSrcweir // -----------------------------------------------------------------------------
130cdf0e10cSrcweir 
SetSelected(sal_Bool bSelected)131cdf0e10cSrcweir void AccessibleDialogControlShape::SetSelected( sal_Bool bSelected )
132cdf0e10cSrcweir {
133cdf0e10cSrcweir     if ( m_bSelected != bSelected )
134cdf0e10cSrcweir     {
135cdf0e10cSrcweir         Any aOldValue, aNewValue;
136cdf0e10cSrcweir         if ( m_bSelected )
137cdf0e10cSrcweir             aOldValue <<= AccessibleStateType::SELECTED;
138cdf0e10cSrcweir         else
139cdf0e10cSrcweir             aNewValue <<= AccessibleStateType::SELECTED;
140cdf0e10cSrcweir         m_bSelected = bSelected;
141cdf0e10cSrcweir         NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
142cdf0e10cSrcweir     }
143cdf0e10cSrcweir }
144cdf0e10cSrcweir 
145cdf0e10cSrcweir // -----------------------------------------------------------------------------
146cdf0e10cSrcweir 
GetBounds()147cdf0e10cSrcweir awt::Rectangle AccessibleDialogControlShape::GetBounds()
148cdf0e10cSrcweir {
149cdf0e10cSrcweir     awt::Rectangle aBounds( 0, 0, 0, 0 );
150cdf0e10cSrcweir     if ( m_pDlgEdObj )
151cdf0e10cSrcweir     {
152cdf0e10cSrcweir         // get the bounding box of the shape in logic units
153cdf0e10cSrcweir         Rectangle aRect = m_pDlgEdObj->GetSnapRect();
154cdf0e10cSrcweir 
155cdf0e10cSrcweir         if ( m_pDialogWindow )
156cdf0e10cSrcweir         {
157cdf0e10cSrcweir             // transform coordinates relative to the parent
158cdf0e10cSrcweir             MapMode aMap = m_pDialogWindow->GetMapMode();
159cdf0e10cSrcweir             Point aOrg = aMap.GetOrigin();
160cdf0e10cSrcweir             aRect.Move( aOrg.X(), aOrg.Y() );
161cdf0e10cSrcweir 
162cdf0e10cSrcweir             // convert logic units to pixel
163cdf0e10cSrcweir             aRect = m_pDialogWindow->LogicToPixel( aRect, MapMode(MAP_100TH_MM) );
164cdf0e10cSrcweir 
165cdf0e10cSrcweir             // clip the shape's bounding box with the bounding box of its parent
166cdf0e10cSrcweir             Rectangle aParentRect( Point( 0, 0 ), m_pDialogWindow->GetSizePixel() );
167cdf0e10cSrcweir             aRect = aRect.GetIntersection( aParentRect );
168cdf0e10cSrcweir             aBounds = AWTRectangle( aRect );
169cdf0e10cSrcweir         }
170cdf0e10cSrcweir     }
171cdf0e10cSrcweir 
172cdf0e10cSrcweir     return aBounds;
173cdf0e10cSrcweir }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir // -----------------------------------------------------------------------------
176cdf0e10cSrcweir 
SetBounds(const awt::Rectangle & aBounds)177cdf0e10cSrcweir void AccessibleDialogControlShape::SetBounds( const awt::Rectangle& aBounds )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir     if ( m_aBounds.X != aBounds.X || m_aBounds.Y != aBounds.Y || m_aBounds.Width != aBounds.Width || m_aBounds.Height != aBounds.Height )
180cdf0e10cSrcweir     {
181cdf0e10cSrcweir         m_aBounds = aBounds;
182cdf0e10cSrcweir         NotifyAccessibleEvent( AccessibleEventId::BOUNDRECT_CHANGED, Any(), Any() );
183cdf0e10cSrcweir     }
184cdf0e10cSrcweir }
185cdf0e10cSrcweir 
186cdf0e10cSrcweir // -----------------------------------------------------------------------------
187cdf0e10cSrcweir 
GetWindow() const188cdf0e10cSrcweir Window* AccessibleDialogControlShape::GetWindow() const
189cdf0e10cSrcweir {
190cdf0e10cSrcweir     Window* pWindow = NULL;
191cdf0e10cSrcweir     if ( m_pDlgEdObj )
192cdf0e10cSrcweir     {
193cdf0e10cSrcweir         Reference< awt::XControl > xControl( m_pDlgEdObj->GetControl(), UNO_QUERY );
194cdf0e10cSrcweir         if ( xControl.is() )
195cdf0e10cSrcweir             pWindow = VCLUnoHelper::GetWindow( xControl->getPeer() );
196cdf0e10cSrcweir     }
197cdf0e10cSrcweir 
198cdf0e10cSrcweir     return pWindow;
199cdf0e10cSrcweir }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir // -----------------------------------------------------------------------------
202cdf0e10cSrcweir 
GetModelStringProperty(const sal_Char * pPropertyName)203cdf0e10cSrcweir ::rtl::OUString AccessibleDialogControlShape::GetModelStringProperty( const sal_Char* pPropertyName )
204cdf0e10cSrcweir {
205cdf0e10cSrcweir     ::rtl::OUString sReturn;
206cdf0e10cSrcweir 
207cdf0e10cSrcweir     try
208cdf0e10cSrcweir     {
209cdf0e10cSrcweir         if ( m_xControlModel.is() )
210cdf0e10cSrcweir         {
211cdf0e10cSrcweir             ::rtl::OUString sPropertyName( ::rtl::OUString::createFromAscii( pPropertyName ) );
212cdf0e10cSrcweir             Reference< XPropertySetInfo > xInfo = m_xControlModel->getPropertySetInfo();
213cdf0e10cSrcweir             if ( xInfo.is() && xInfo->hasPropertyByName( sPropertyName ) )
214cdf0e10cSrcweir                 m_xControlModel->getPropertyValue( sPropertyName ) >>= sReturn;
215cdf0e10cSrcweir         }
216cdf0e10cSrcweir     }
217cdf0e10cSrcweir     catch ( const Exception& )
218cdf0e10cSrcweir     {
219cdf0e10cSrcweir         OSL_ENSURE( sal_False, "AccessibleDialogControlShape::GetModelStringProperty: caught an exception!" );
220cdf0e10cSrcweir     }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir     return sReturn;
223cdf0e10cSrcweir }
224cdf0e10cSrcweir 
225cdf0e10cSrcweir // -----------------------------------------------------------------------------
226cdf0e10cSrcweir 
FillAccessibleStateSet(utl::AccessibleStateSetHelper & rStateSet)227cdf0e10cSrcweir void AccessibleDialogControlShape::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
228cdf0e10cSrcweir {
229cdf0e10cSrcweir     rStateSet.AddState( AccessibleStateType::ENABLED );
230cdf0e10cSrcweir 
231cdf0e10cSrcweir     rStateSet.AddState( AccessibleStateType::VISIBLE );
232cdf0e10cSrcweir 
233cdf0e10cSrcweir     rStateSet.AddState( AccessibleStateType::SHOWING );
234cdf0e10cSrcweir 
235cdf0e10cSrcweir     rStateSet.AddState( AccessibleStateType::FOCUSABLE );
236cdf0e10cSrcweir 
237cdf0e10cSrcweir     if ( IsFocused() )
238cdf0e10cSrcweir         rStateSet.AddState( AccessibleStateType::FOCUSED );
239cdf0e10cSrcweir 
240cdf0e10cSrcweir     rStateSet.AddState( AccessibleStateType::SELECTABLE );
241cdf0e10cSrcweir 
242cdf0e10cSrcweir     if ( IsSelected() )
243cdf0e10cSrcweir         rStateSet.AddState( AccessibleStateType::SELECTED );
244cdf0e10cSrcweir 
245cdf0e10cSrcweir     rStateSet.AddState( AccessibleStateType::RESIZABLE );
246cdf0e10cSrcweir }
247cdf0e10cSrcweir 
248cdf0e10cSrcweir // -----------------------------------------------------------------------------
249cdf0e10cSrcweir // OCommonAccessibleComponent
250cdf0e10cSrcweir // -----------------------------------------------------------------------------
251cdf0e10cSrcweir 
implGetBounds()252cdf0e10cSrcweir awt::Rectangle AccessibleDialogControlShape::implGetBounds() throw (RuntimeException)
253cdf0e10cSrcweir {
254cdf0e10cSrcweir     return GetBounds();
255cdf0e10cSrcweir }
256cdf0e10cSrcweir 
257cdf0e10cSrcweir // -----------------------------------------------------------------------------
258cdf0e10cSrcweir // XInterface
259cdf0e10cSrcweir // -----------------------------------------------------------------------------
260cdf0e10cSrcweir 
IMPLEMENT_FORWARD_XINTERFACE2(AccessibleDialogControlShape,AccessibleExtendedComponentHelper_BASE,AccessibleDialogControlShape_BASE)261cdf0e10cSrcweir IMPLEMENT_FORWARD_XINTERFACE2( AccessibleDialogControlShape, AccessibleExtendedComponentHelper_BASE, AccessibleDialogControlShape_BASE )
262cdf0e10cSrcweir 
263cdf0e10cSrcweir // -----------------------------------------------------------------------------
264cdf0e10cSrcweir // XTypeProvider
265cdf0e10cSrcweir // -----------------------------------------------------------------------------
266cdf0e10cSrcweir 
267cdf0e10cSrcweir IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccessibleDialogControlShape, AccessibleExtendedComponentHelper_BASE, AccessibleDialogControlShape_BASE )
268cdf0e10cSrcweir 
269cdf0e10cSrcweir // -----------------------------------------------------------------------------
270cdf0e10cSrcweir // XComponent
271cdf0e10cSrcweir // -----------------------------------------------------------------------------
272cdf0e10cSrcweir 
273cdf0e10cSrcweir void AccessibleDialogControlShape::disposing()
274cdf0e10cSrcweir {
275cdf0e10cSrcweir     AccessibleExtendedComponentHelper_BASE::disposing();
276cdf0e10cSrcweir 
277cdf0e10cSrcweir     m_pDialogWindow = NULL;
278cdf0e10cSrcweir     m_pDlgEdObj = NULL;
279cdf0e10cSrcweir 
280cdf0e10cSrcweir     if ( m_xControlModel.is() )
281cdf0e10cSrcweir         m_xControlModel->removePropertyChangeListener( ::rtl::OUString(), static_cast< beans::XPropertyChangeListener* >( this ) );
282cdf0e10cSrcweir     m_xControlModel.clear();
283cdf0e10cSrcweir }
284cdf0e10cSrcweir 
285cdf0e10cSrcweir // -----------------------------------------------------------------------------
286cdf0e10cSrcweir // XEventListener
287cdf0e10cSrcweir // -----------------------------------------------------------------------------
288cdf0e10cSrcweir 
disposing(const lang::EventObject &)289cdf0e10cSrcweir void AccessibleDialogControlShape::disposing( const lang::EventObject& ) throw (RuntimeException)
290cdf0e10cSrcweir {
291cdf0e10cSrcweir     if ( m_xControlModel.is() )
292cdf0e10cSrcweir         m_xControlModel->removePropertyChangeListener( ::rtl::OUString(), static_cast< beans::XPropertyChangeListener* >( this ) );
293cdf0e10cSrcweir     m_xControlModel.clear();
294cdf0e10cSrcweir }
295cdf0e10cSrcweir 
296cdf0e10cSrcweir // -----------------------------------------------------------------------------
297cdf0e10cSrcweir // XPropertyChangeListener
298cdf0e10cSrcweir // -----------------------------------------------------------------------------
299cdf0e10cSrcweir 
propertyChange(const beans::PropertyChangeEvent & rEvent)300cdf0e10cSrcweir void AccessibleDialogControlShape::propertyChange( const beans::PropertyChangeEvent& rEvent ) throw (RuntimeException)
301cdf0e10cSrcweir {
302cdf0e10cSrcweir     if ( rEvent.PropertyName == DLGED_PROP_NAME )
303cdf0e10cSrcweir     {
304cdf0e10cSrcweir         NotifyAccessibleEvent( AccessibleEventId::NAME_CHANGED, rEvent.OldValue, rEvent.NewValue );
305cdf0e10cSrcweir     }
306cdf0e10cSrcweir     else if ( rEvent.PropertyName == DLGED_PROP_POSITIONX ||
307cdf0e10cSrcweir               rEvent.PropertyName == DLGED_PROP_POSITIONY ||
308cdf0e10cSrcweir               rEvent.PropertyName == DLGED_PROP_WIDTH ||
309cdf0e10cSrcweir               rEvent.PropertyName == DLGED_PROP_HEIGHT )
310cdf0e10cSrcweir     {
311cdf0e10cSrcweir         SetBounds( GetBounds() );
312cdf0e10cSrcweir     }
313cdf0e10cSrcweir     else if ( rEvent.PropertyName == DLGED_PROP_BACKGROUNDCOLOR ||
314cdf0e10cSrcweir               rEvent.PropertyName == DLGED_PROP_TEXTCOLOR ||
315cdf0e10cSrcweir               rEvent.PropertyName == DLGED_PROP_TEXTLINECOLOR )
316cdf0e10cSrcweir     {
317cdf0e10cSrcweir         NotifyAccessibleEvent( AccessibleEventId::VISIBLE_DATA_CHANGED, Any(), Any() );
318cdf0e10cSrcweir     }
319cdf0e10cSrcweir }
320cdf0e10cSrcweir 
321cdf0e10cSrcweir // -----------------------------------------------------------------------------
322cdf0e10cSrcweir // XServiceInfo
323cdf0e10cSrcweir // -----------------------------------------------------------------------------
324cdf0e10cSrcweir 
getImplementationName()325cdf0e10cSrcweir ::rtl::OUString AccessibleDialogControlShape::getImplementationName() throw (RuntimeException)
326cdf0e10cSrcweir {
327cdf0e10cSrcweir     return ::rtl::OUString::createFromAscii( "com.sun.star.comp.basctl.AccessibleShape" );
328cdf0e10cSrcweir }
329cdf0e10cSrcweir 
330cdf0e10cSrcweir // -----------------------------------------------------------------------------
331cdf0e10cSrcweir 
supportsService(const::rtl::OUString & rServiceName)332cdf0e10cSrcweir sal_Bool AccessibleDialogControlShape::supportsService( const ::rtl::OUString& rServiceName ) throw (RuntimeException)
333cdf0e10cSrcweir {
334cdf0e10cSrcweir     Sequence< ::rtl::OUString > aNames( getSupportedServiceNames() );
335cdf0e10cSrcweir     const ::rtl::OUString* pNames = aNames.getConstArray();
336cdf0e10cSrcweir     const ::rtl::OUString* pEnd = pNames + aNames.getLength();
337cdf0e10cSrcweir     for ( ; pNames != pEnd && !pNames->equals( rServiceName ); ++pNames )
338cdf0e10cSrcweir         ;
339cdf0e10cSrcweir 
340cdf0e10cSrcweir     return pNames != pEnd;
341cdf0e10cSrcweir }
342cdf0e10cSrcweir 
343cdf0e10cSrcweir // -----------------------------------------------------------------------------
344cdf0e10cSrcweir 
getSupportedServiceNames()345cdf0e10cSrcweir Sequence< ::rtl::OUString > AccessibleDialogControlShape::getSupportedServiceNames() throw (RuntimeException)
346cdf0e10cSrcweir {
347cdf0e10cSrcweir     Sequence< ::rtl::OUString > aNames(1);
348cdf0e10cSrcweir     aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.drawing.AccessibleShape" );
349cdf0e10cSrcweir     return aNames;
350cdf0e10cSrcweir }
351cdf0e10cSrcweir 
352cdf0e10cSrcweir // -----------------------------------------------------------------------------
353cdf0e10cSrcweir // XAccessible
354cdf0e10cSrcweir // -----------------------------------------------------------------------------
355cdf0e10cSrcweir 
getAccessibleContext()356cdf0e10cSrcweir Reference< XAccessibleContext > AccessibleDialogControlShape::getAccessibleContext(  ) throw (RuntimeException)
357cdf0e10cSrcweir {
358cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
359cdf0e10cSrcweir 
360cdf0e10cSrcweir     return this;
361cdf0e10cSrcweir }
362cdf0e10cSrcweir 
363cdf0e10cSrcweir // -----------------------------------------------------------------------------
364cdf0e10cSrcweir // XAccessibleContext
365cdf0e10cSrcweir // -----------------------------------------------------------------------------
366cdf0e10cSrcweir 
getAccessibleChildCount()367cdf0e10cSrcweir sal_Int32 AccessibleDialogControlShape::getAccessibleChildCount() throw (RuntimeException)
368cdf0e10cSrcweir {
369cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
370cdf0e10cSrcweir 
371cdf0e10cSrcweir     return 0;
372cdf0e10cSrcweir }
373cdf0e10cSrcweir 
374cdf0e10cSrcweir // -----------------------------------------------------------------------------
375cdf0e10cSrcweir 
getAccessibleChild(sal_Int32 i)376cdf0e10cSrcweir Reference< XAccessible > AccessibleDialogControlShape::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException)
377cdf0e10cSrcweir {
378cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
379cdf0e10cSrcweir 
380cdf0e10cSrcweir     if ( i < 0 || i >= getAccessibleChildCount() )
381cdf0e10cSrcweir         throw IndexOutOfBoundsException();
382cdf0e10cSrcweir 
383cdf0e10cSrcweir     return Reference< XAccessible >();
384cdf0e10cSrcweir }
385cdf0e10cSrcweir 
386cdf0e10cSrcweir // -----------------------------------------------------------------------------
387cdf0e10cSrcweir 
getAccessibleParent()388cdf0e10cSrcweir Reference< XAccessible > AccessibleDialogControlShape::getAccessibleParent(  ) throw (RuntimeException)
389cdf0e10cSrcweir {
390cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
391cdf0e10cSrcweir 
392cdf0e10cSrcweir     Reference< XAccessible > xParent;
393cdf0e10cSrcweir     if ( m_pDialogWindow )
394cdf0e10cSrcweir         xParent = m_pDialogWindow->GetAccessible();
395cdf0e10cSrcweir 
396cdf0e10cSrcweir     return xParent;
397cdf0e10cSrcweir }
398cdf0e10cSrcweir 
399cdf0e10cSrcweir // -----------------------------------------------------------------------------
400cdf0e10cSrcweir 
getAccessibleIndexInParent()401cdf0e10cSrcweir sal_Int32 AccessibleDialogControlShape::getAccessibleIndexInParent(  ) throw (RuntimeException)
402cdf0e10cSrcweir {
403cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
404cdf0e10cSrcweir 
405cdf0e10cSrcweir     sal_Int32 nIndexInParent = -1;
406cdf0e10cSrcweir     Reference< XAccessible > xParent( getAccessibleParent() );
407cdf0e10cSrcweir     if ( xParent.is() )
408cdf0e10cSrcweir     {
409cdf0e10cSrcweir         Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
410cdf0e10cSrcweir         if ( xParentContext.is() )
411cdf0e10cSrcweir         {
412cdf0e10cSrcweir             for ( sal_Int32 i = 0, nCount = xParentContext->getAccessibleChildCount(); i < nCount; ++i )
413cdf0e10cSrcweir             {
414cdf0e10cSrcweir                 Reference< XAccessible > xChild( xParentContext->getAccessibleChild( i ) );
415cdf0e10cSrcweir                 if ( xChild.is() )
416cdf0e10cSrcweir                 {
417cdf0e10cSrcweir                     Reference< XAccessibleContext > xChildContext = xChild->getAccessibleContext();
418cdf0e10cSrcweir                     if ( xChildContext == (XAccessibleContext*)this )
419cdf0e10cSrcweir                     {
420cdf0e10cSrcweir                         nIndexInParent = i;
421cdf0e10cSrcweir                         break;
422cdf0e10cSrcweir                     }
423cdf0e10cSrcweir                 }
424cdf0e10cSrcweir             }
425cdf0e10cSrcweir         }
426cdf0e10cSrcweir     }
427cdf0e10cSrcweir 
428cdf0e10cSrcweir     return nIndexInParent;
429cdf0e10cSrcweir }
430cdf0e10cSrcweir 
431cdf0e10cSrcweir // -----------------------------------------------------------------------------
432cdf0e10cSrcweir 
getAccessibleRole()433cdf0e10cSrcweir sal_Int16 AccessibleDialogControlShape::getAccessibleRole(  ) throw (RuntimeException)
434cdf0e10cSrcweir {
435cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
436cdf0e10cSrcweir 
437cdf0e10cSrcweir     return AccessibleRole::SHAPE;
438cdf0e10cSrcweir }
439cdf0e10cSrcweir 
440cdf0e10cSrcweir // -----------------------------------------------------------------------------
441cdf0e10cSrcweir 
getAccessibleDescription()442cdf0e10cSrcweir ::rtl::OUString AccessibleDialogControlShape::getAccessibleDescription( ) throw (RuntimeException)
443cdf0e10cSrcweir {
444cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
445cdf0e10cSrcweir 
446cdf0e10cSrcweir     return GetModelStringProperty( "HelpText" );
447cdf0e10cSrcweir }
448cdf0e10cSrcweir 
449cdf0e10cSrcweir // -----------------------------------------------------------------------------
450cdf0e10cSrcweir 
getAccessibleName()451cdf0e10cSrcweir ::rtl::OUString AccessibleDialogControlShape::getAccessibleName(  ) throw (RuntimeException)
452cdf0e10cSrcweir {
453cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
454cdf0e10cSrcweir 
455cdf0e10cSrcweir     return GetModelStringProperty( "Name" );
456cdf0e10cSrcweir }
457cdf0e10cSrcweir 
458cdf0e10cSrcweir // -----------------------------------------------------------------------------
459cdf0e10cSrcweir 
getAccessibleRelationSet()460cdf0e10cSrcweir Reference< XAccessibleRelationSet > AccessibleDialogControlShape::getAccessibleRelationSet(  ) throw (RuntimeException)
461cdf0e10cSrcweir {
462cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
463cdf0e10cSrcweir 
464cdf0e10cSrcweir     utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
465cdf0e10cSrcweir     Reference< XAccessibleRelationSet > xSet = pRelationSetHelper;
466cdf0e10cSrcweir     return xSet;
467cdf0e10cSrcweir }
468cdf0e10cSrcweir 
469cdf0e10cSrcweir // -----------------------------------------------------------------------------
470cdf0e10cSrcweir 
getAccessibleStateSet()471cdf0e10cSrcweir Reference< XAccessibleStateSet > AccessibleDialogControlShape::getAccessibleStateSet(  ) throw (RuntimeException)
472cdf0e10cSrcweir {
473cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
474cdf0e10cSrcweir 
475cdf0e10cSrcweir     utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
476cdf0e10cSrcweir     Reference< XAccessibleStateSet > xSet = pStateSetHelper;
477cdf0e10cSrcweir 
478cdf0e10cSrcweir     if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
479cdf0e10cSrcweir     {
480cdf0e10cSrcweir         FillAccessibleStateSet( *pStateSetHelper );
481cdf0e10cSrcweir     }
482cdf0e10cSrcweir     else
483cdf0e10cSrcweir     {
484cdf0e10cSrcweir         pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
485cdf0e10cSrcweir     }
486cdf0e10cSrcweir 
487cdf0e10cSrcweir     return xSet;
488cdf0e10cSrcweir }
489cdf0e10cSrcweir 
490cdf0e10cSrcweir // -----------------------------------------------------------------------------
491cdf0e10cSrcweir 
getLocale()492cdf0e10cSrcweir Locale AccessibleDialogControlShape::getLocale(  ) throw (IllegalAccessibleComponentStateException, RuntimeException)
493cdf0e10cSrcweir {
494cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
495cdf0e10cSrcweir 
496cdf0e10cSrcweir     return Application::GetSettings().GetLocale();
497cdf0e10cSrcweir }
498cdf0e10cSrcweir 
499cdf0e10cSrcweir // -----------------------------------------------------------------------------
500cdf0e10cSrcweir // XAccessibleComponent
501cdf0e10cSrcweir // -----------------------------------------------------------------------------
502cdf0e10cSrcweir 
getAccessibleAtPoint(const awt::Point &)503cdf0e10cSrcweir Reference< XAccessible > AccessibleDialogControlShape::getAccessibleAtPoint( const awt::Point& ) throw (RuntimeException)
504cdf0e10cSrcweir {
505cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
506cdf0e10cSrcweir 
507cdf0e10cSrcweir     return Reference< XAccessible >();
508cdf0e10cSrcweir }
509cdf0e10cSrcweir 
510cdf0e10cSrcweir // -----------------------------------------------------------------------------
511cdf0e10cSrcweir 
grabFocus()512cdf0e10cSrcweir void AccessibleDialogControlShape::grabFocus(  ) throw (RuntimeException)
513cdf0e10cSrcweir {
514cdf0e10cSrcweir     // no focus for shapes
515cdf0e10cSrcweir }
516cdf0e10cSrcweir 
517cdf0e10cSrcweir // -----------------------------------------------------------------------------
518cdf0e10cSrcweir 
getForeground()519cdf0e10cSrcweir sal_Int32 AccessibleDialogControlShape::getForeground(  ) throw (RuntimeException)
520cdf0e10cSrcweir {
521cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
522cdf0e10cSrcweir 
523cdf0e10cSrcweir     sal_Int32 nColor = 0;
524cdf0e10cSrcweir     Window* pWindow = GetWindow();
525cdf0e10cSrcweir     if ( pWindow )
526cdf0e10cSrcweir     {
527cdf0e10cSrcweir         if ( pWindow->IsControlForeground() )
528cdf0e10cSrcweir             nColor = pWindow->GetControlForeground().GetColor();
529cdf0e10cSrcweir         else
530cdf0e10cSrcweir         {
531cdf0e10cSrcweir             Font aFont;
532cdf0e10cSrcweir             if ( pWindow->IsControlFont() )
533cdf0e10cSrcweir                 aFont = pWindow->GetControlFont();
534cdf0e10cSrcweir             else
535cdf0e10cSrcweir                 aFont = pWindow->GetFont();
536cdf0e10cSrcweir             nColor = aFont.GetColor().GetColor();
537cdf0e10cSrcweir         }
538cdf0e10cSrcweir     }
539cdf0e10cSrcweir 
540cdf0e10cSrcweir     return nColor;
541cdf0e10cSrcweir }
542cdf0e10cSrcweir 
543cdf0e10cSrcweir // -----------------------------------------------------------------------------
544cdf0e10cSrcweir 
getBackground()545cdf0e10cSrcweir sal_Int32 AccessibleDialogControlShape::getBackground(  ) throw (RuntimeException)
546cdf0e10cSrcweir {
547cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
548cdf0e10cSrcweir 
549cdf0e10cSrcweir     sal_Int32 nColor = 0;
550cdf0e10cSrcweir     Window* pWindow = GetWindow();
551cdf0e10cSrcweir     if ( pWindow )
552cdf0e10cSrcweir     {
553cdf0e10cSrcweir         if ( pWindow->IsControlBackground() )
554cdf0e10cSrcweir             nColor = pWindow->GetControlBackground().GetColor();
555cdf0e10cSrcweir         else
556cdf0e10cSrcweir             nColor = pWindow->GetBackground().GetColor().GetColor();
557cdf0e10cSrcweir     }
558cdf0e10cSrcweir 
559cdf0e10cSrcweir     return nColor;
560cdf0e10cSrcweir }
561cdf0e10cSrcweir 
562cdf0e10cSrcweir // -----------------------------------------------------------------------------
563cdf0e10cSrcweir // XAccessibleExtendedComponent
564cdf0e10cSrcweir // -----------------------------------------------------------------------------
565cdf0e10cSrcweir 
getFont()566cdf0e10cSrcweir Reference< awt::XFont > AccessibleDialogControlShape::getFont(  ) throw (RuntimeException)
567cdf0e10cSrcweir {
568cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
569cdf0e10cSrcweir 
570cdf0e10cSrcweir     Reference< awt::XFont > xFont;
571cdf0e10cSrcweir     Window* pWindow = GetWindow();
572cdf0e10cSrcweir     if ( pWindow )
573cdf0e10cSrcweir     {
574cdf0e10cSrcweir         Reference< awt::XDevice > xDev( pWindow->GetComponentInterface(), UNO_QUERY );
575cdf0e10cSrcweir         if ( xDev.is() )
576cdf0e10cSrcweir         {
577cdf0e10cSrcweir             Font aFont;
578cdf0e10cSrcweir             if ( pWindow->IsControlFont() )
579cdf0e10cSrcweir                 aFont = pWindow->GetControlFont();
580cdf0e10cSrcweir             else
581cdf0e10cSrcweir                 aFont = pWindow->GetFont();
582cdf0e10cSrcweir             VCLXFont* pVCLXFont = new VCLXFont;
583cdf0e10cSrcweir             pVCLXFont->Init( *xDev.get(), aFont );
584cdf0e10cSrcweir             xFont = pVCLXFont;
585cdf0e10cSrcweir         }
586cdf0e10cSrcweir     }
587cdf0e10cSrcweir 
588cdf0e10cSrcweir     return xFont;
589cdf0e10cSrcweir }
590cdf0e10cSrcweir 
591cdf0e10cSrcweir // -----------------------------------------------------------------------------
592cdf0e10cSrcweir 
getTitledBorderText()593cdf0e10cSrcweir ::rtl::OUString AccessibleDialogControlShape::getTitledBorderText(  ) throw (RuntimeException)
594cdf0e10cSrcweir {
595cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
596cdf0e10cSrcweir 
597cdf0e10cSrcweir     return ::rtl::OUString();
598cdf0e10cSrcweir }
599cdf0e10cSrcweir 
600cdf0e10cSrcweir // -----------------------------------------------------------------------------
601cdf0e10cSrcweir 
getToolTipText()602cdf0e10cSrcweir ::rtl::OUString AccessibleDialogControlShape::getToolTipText(  ) throw (RuntimeException)
603cdf0e10cSrcweir {
604cdf0e10cSrcweir     OExternalLockGuard aGuard( this );
605cdf0e10cSrcweir 
606cdf0e10cSrcweir     ::rtl::OUString sText;
607cdf0e10cSrcweir     Window* pWindow = GetWindow();
608cdf0e10cSrcweir     if ( pWindow )
609cdf0e10cSrcweir         sText = pWindow->GetQuickHelpText();
610cdf0e10cSrcweir 
611cdf0e10cSrcweir     return sText;
612cdf0e10cSrcweir }
613cdf0e10cSrcweir 
614cdf0e10cSrcweir // -----------------------------------------------------------------------------
615