xref: /trunk/main/svtools/source/control/vclxaccessibleheaderbaritem.cxx (revision a0d53b35b9c5a6bd9856ab272d521493ba628169)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 //IAccessibility2 Implementation 2009-----
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svtools.hxx"
26 
27 #ifndef _SVTOOLS_VCLXACCESSIBLEHEADERBAR_HXX_
28 #include <svtools/vclxaccessibleheaderbaritem.hxx>
29 #endif
30 
31 #ifndef _HEADBAR_HXX
32 #include <svtools/headbar.hxx>
33 #endif
34 
35 #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_
36 #include <com/sun/star/accessibility/AccessibleEventId.hpp>
37 #endif
38 #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_
39 #include <com/sun/star/accessibility/AccessibleRole.hpp>
40 #endif
41 #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_
42 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
43 #endif
44 
45 #ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX_
46 #include <unotools/accessiblestatesethelper.hxx>
47 #endif
48 #ifndef _UTL_ACCESSIBLERELATIONSETHELPER_HXX_
49 #include <unotools/accessiblerelationsethelper.hxx>
50 #endif
51 #ifndef _SV_SVAPP_HXX
52 #include <vcl/svapp.hxx>
53 #endif
54 #ifndef _TOOLKIT_AWT_VCLXFONT_HXX_
55 #include <toolkit/awt/vclxfont.hxx>
56 #endif
57 #ifndef _TOOLKIT_HELPER_EXTERNALLOCK_HXX_
58 #include <toolkit/helper/externallock.hxx>
59 #endif
60 #ifndef _TOOLKIT_HELPER_CONVERT_HXX_
61 #include <toolkit/helper/convert.hxx>
62 #endif
63 
64 #include <vector>
65 
66 
67 using namespace ::com::sun::star;
68 using namespace ::com::sun::star::uno;
69 using namespace ::com::sun::star::lang;
70 using namespace ::com::sun::star::accessibility;
71 using namespace ::comphelper;
72 
73 DBG_NAME( VCLXAccessibleHeaderBarItem )
74 
75 //  ----------------------------------------------------
76 //  class AccessibleTabBar
77 //  ----------------------------------------------------
78 
79 VCLXAccessibleHeaderBarItem::VCLXAccessibleHeaderBarItem( HeaderBar*    pHeadBar, sal_Int32 _nIndexInParent )
80     :AccessibleExtendedComponentHelper_BASE( new VCLExternalSolarLock() )
81     ,m_pHeadBar( pHeadBar )
82     ,m_nIndexInParent(_nIndexInParent + 1)
83 
84 {
85     DBG_CTOR( VCLXAccessibleHeaderBarItem, NULL );
86     m_pExternalLock = static_cast< VCLExternalSolarLock* >( getExternalLock() );
87 }
88 
89 // -----------------------------------------------------------------------------
90 
91 VCLXAccessibleHeaderBarItem::~VCLXAccessibleHeaderBarItem()
92 {
93     delete m_pExternalLock;
94     m_pExternalLock = NULL;
95 }
96 
97 // -----------------------------------------------------------------------------
98 
99 IMPL_LINK( VCLXAccessibleHeaderBarItem, WindowEventListener, VclSimpleEvent*, pEvent )
100 {
101     DBG_CHKTHIS( VCLXAccessibleHeaderBarItem, 0 );
102     DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "VCLXAccessibleHeaderBarItem::WindowEventListener: unknown window event!" );
103 
104     if ( pEvent && pEvent->ISA( VclWindowEvent ) )
105     {
106         DBG_ASSERT( ((VclWindowEvent*)pEvent)->GetWindow(), "VCLXAccessibleHeaderBarItem::WindowEventListener: no window!" );
107         if ( !((VclWindowEvent*)pEvent)->GetWindow()->IsAccessibilityEventsSuppressed() || ( pEvent->GetId() == VCLEVENT_OBJECT_DYING ) )
108         {
109             ProcessWindowEvent( *(VclWindowEvent*)pEvent );
110         }
111     }
112 
113     return 0;
114 }
115 
116 // -----------------------------------------------------------------------------
117 
118 void VCLXAccessibleHeaderBarItem::ProcessWindowEvent( const VclWindowEvent& )
119 {
120     Any aOldValue, aNewValue;
121 }
122 
123 // -----------------------------------------------------------------------------
124 
125 void VCLXAccessibleHeaderBarItem::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
126 {
127     if ( m_pHeadBar )
128     {
129         if ( m_pHeadBar->IsEnabled() )
130             rStateSet.AddState( AccessibleStateType::ENABLED );
131 
132         if ( m_pHeadBar->IsVisible() )
133         {
134             rStateSet.AddState( AccessibleStateType::VISIBLE );
135         }
136         rStateSet.AddState( AccessibleStateType::SELECTABLE );
137         rStateSet.AddState( AccessibleStateType::RESIZABLE );
138     }
139 }
140 
141 // -----------------------------------------------------------------------------
142 // OCommonAccessibleComponent
143 // -----------------------------------------------------------------------------
144 
145 awt::Rectangle VCLXAccessibleHeaderBarItem::implGetBounds() throw (RuntimeException)
146 {
147     awt::Rectangle aBounds;
148     OExternalLockGuard aGuard( this );
149 
150     ::com::sun::star::awt::Size aSize;
151 
152     if ( m_pHeadBar )
153         aBounds = AWTRectangle( m_pHeadBar->GetItemRect( sal_uInt16( m_nIndexInParent ) ) );
154 
155     return aBounds;
156 }
157 
158 // -----------------------------------------------------------------------------
159 // XInterface
160 // -----------------------------------------------------------------------------
161 
162 IMPLEMENT_FORWARD_XINTERFACE2( VCLXAccessibleHeaderBarItem, AccessibleExtendedComponentHelper_BASE, VCLXAccessibleHeaderBarItem_BASE )
163 
164 // -----------------------------------------------------------------------------
165 // XTypeProvider
166 // -----------------------------------------------------------------------------
167 
168 IMPLEMENT_FORWARD_XTYPEPROVIDER2( VCLXAccessibleHeaderBarItem, AccessibleExtendedComponentHelper_BASE, VCLXAccessibleHeaderBarItem_BASE )
169 
170 // -----------------------------------------------------------------------------
171 // XComponent
172 // -----------------------------------------------------------------------------
173 
174 void VCLXAccessibleHeaderBarItem::disposing()
175 {
176     AccessibleExtendedComponentHelper_BASE::disposing();
177 }
178 
179 // -----------------------------------------------------------------------------
180 // XServiceInfo
181 // -----------------------------------------------------------------------------
182 
183 ::rtl::OUString VCLXAccessibleHeaderBarItem::getImplementationName() throw (RuntimeException)
184 {
185     return ::rtl::OUString::createFromAscii( "com.sun.star.comp.svtools.AccessibleHeaderBarItem" );
186 }
187 
188 // -----------------------------------------------------------------------------
189 
190 sal_Bool VCLXAccessibleHeaderBarItem::supportsService( const ::rtl::OUString& rServiceName ) throw (RuntimeException)
191 {
192     Sequence< ::rtl::OUString > aNames( getSupportedServiceNames() );
193     const ::rtl::OUString* pNames = aNames.getConstArray();
194     const ::rtl::OUString* pEnd = pNames + aNames.getLength();
195     for ( ; pNames != pEnd && !pNames->equals( rServiceName ); ++pNames )
196         ;
197 
198     return pNames != pEnd;
199 }
200 
201 // -----------------------------------------------------------------------------
202 
203 Sequence< ::rtl::OUString > VCLXAccessibleHeaderBarItem::getSupportedServiceNames() throw (RuntimeException)
204 {
205     Sequence< ::rtl::OUString > aNames(1);
206     aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.AccessibleHeaderBarItem" );
207     return aNames;
208 }
209 
210 // -----------------------------------------------------------------------------
211 // XAccessible
212 // -----------------------------------------------------------------------------
213 
214 Reference< XAccessibleContext > VCLXAccessibleHeaderBarItem::getAccessibleContext() throw (RuntimeException)
215 {
216     OExternalLockGuard aGuard( this );
217 
218     return this;
219 }
220 
221 // -----------------------------------------------------------------------------
222 // XAccessibleContext
223 // -----------------------------------------------------------------------------
224 
225 sal_Int32 VCLXAccessibleHeaderBarItem::getAccessibleChildCount() throw (RuntimeException)
226 {
227     OExternalLockGuard aGuard( this );
228 
229     return 0;
230 }
231 
232 // -----------------------------------------------------------------------------
233 
234 Reference< XAccessible > VCLXAccessibleHeaderBarItem::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException)
235 {
236     OExternalLockGuard aGuard( this );
237 
238     if ( i < 0 || i >= getAccessibleChildCount() )
239         throw IndexOutOfBoundsException();
240 
241     return Reference< XAccessible >();
242 }
243 
244 // -----------------------------------------------------------------------------
245 
246 Reference< XAccessible > VCLXAccessibleHeaderBarItem::getAccessibleParent() throw (RuntimeException)
247 {
248     OExternalLockGuard aGuard( this );
249 
250     Reference< XAccessible > xParent;
251     if ( m_pHeadBar )
252     {
253         xParent = m_pHeadBar->GetAccessible();
254     }
255 
256     return xParent;
257 }
258 
259 // -----------------------------------------------------------------------------
260 
261 sal_Int32 VCLXAccessibleHeaderBarItem::getAccessibleIndexInParent() throw (RuntimeException)
262 {
263     OExternalLockGuard aGuard( this );
264     return m_nIndexInParent - 1;
265 }
266 
267 // -----------------------------------------------------------------------------
268 
269 sal_Int16 VCLXAccessibleHeaderBarItem::getAccessibleRole() throw (RuntimeException)
270 {
271     OExternalLockGuard aGuard( this );
272 
273     return AccessibleRole::COLUMN_HEADER;
274 }
275 
276 // -----------------------------------------------------------------------------
277 
278 ::rtl::OUString VCLXAccessibleHeaderBarItem::getAccessibleDescription() throw (RuntimeException)
279 {
280     OExternalLockGuard aGuard( this );
281     ::rtl::OUString sDescription;
282     return sDescription;
283 }
284 
285 // -----------------------------------------------------------------------------
286 
287 ::rtl::OUString VCLXAccessibleHeaderBarItem::getAccessibleName() throw (RuntimeException)
288 {
289     OExternalLockGuard aGuard( this );
290 
291     ::rtl::OUString sName;
292     if(m_pHeadBar)
293         sName = m_pHeadBar->GetItemText( sal_uInt16( m_nIndexInParent ) );
294     return sName;
295 }
296 
297 // -----------------------------------------------------------------------------
298 
299 Reference< XAccessibleRelationSet > VCLXAccessibleHeaderBarItem::getAccessibleRelationSet(  ) throw (RuntimeException)
300 {
301     OExternalLockGuard aGuard( this );
302 
303     utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
304     Reference< XAccessibleRelationSet > xSet = pRelationSetHelper;
305     return xSet;
306 }
307 
308 // -----------------------------------------------------------------------------
309 
310 Reference< XAccessibleStateSet > VCLXAccessibleHeaderBarItem::getAccessibleStateSet(  ) throw (RuntimeException)
311 {
312     OExternalLockGuard aGuard( this );
313 
314     utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
315     Reference< XAccessibleStateSet > xSet = pStateSetHelper;
316 
317     if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
318     {
319         FillAccessibleStateSet( *pStateSetHelper );
320     }
321     else
322     {
323         pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
324     }
325 
326     return xSet;
327 }
328 
329 // -----------------------------------------------------------------------------
330 
331 com::sun::star::lang::Locale VCLXAccessibleHeaderBarItem::getLocale() throw (IllegalAccessibleComponentStateException, RuntimeException)
332 {
333     OExternalLockGuard aGuard( this );
334 
335     return Application::GetSettings().GetLocale();
336 }
337 
338 // -----------------------------------------------------------------------------
339 // XAccessibleComponent
340 // -----------------------------------------------------------------------------
341 
342 Reference< XAccessible > VCLXAccessibleHeaderBarItem::getAccessibleAtPoint( const awt::Point& ) throw (RuntimeException)
343 {
344     OExternalLockGuard aGuard( this );
345 
346     return Reference< XAccessible >();
347 }
348 
349 // -----------------------------------------------------------------------------
350 
351 sal_Int32 VCLXAccessibleHeaderBarItem::getForeground() throw (RuntimeException)
352 {
353     OExternalLockGuard aGuard( this );
354 
355     sal_Int32 nColor = 0;
356     return nColor;
357 }
358 
359 // -----------------------------------------------------------------------------
360 
361 sal_Int32 VCLXAccessibleHeaderBarItem::getBackground() throw (RuntimeException)
362 {
363     OExternalLockGuard aGuard( this );
364 
365     sal_Int32 nColor = 0;
366     return nColor;
367 }
368 
369 // -----------------------------------------------------------------------------
370 // XAccessibleExtendedComponent
371 // -----------------------------------------------------------------------------
372 
373 Reference< awt::XFont > VCLXAccessibleHeaderBarItem::getFont() throw (RuntimeException)
374 {
375     OExternalLockGuard aGuard( this );
376 
377     Reference< awt::XFont > xFont;
378     return xFont;
379 }
380 
381 // -----------------------------------------------------------------------------
382 
383 ::rtl::OUString VCLXAccessibleHeaderBarItem::getTitledBorderText() throw (RuntimeException)
384 {
385     OExternalLockGuard aGuard( this );
386 
387     ::rtl::OUString sText;
388     return sText;
389 }
390 
391 // -----------------------------------------------------------------------------
392 
393 ::rtl::OUString VCLXAccessibleHeaderBarItem::getToolTipText() throw (RuntimeException)
394 {
395     OExternalLockGuard aGuard( this );
396 
397     ::rtl::OUString sText;
398     if ( m_pHeadBar )
399         sText = m_pHeadBar->GetQuickHelpText();
400 
401     return sText;
402 }
403 //-----IAccessibility2 Implementation 2009
404