Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <accessibility/standard/vclxaccessiblemenuitem.hxx>
21 : #include <accessibility/helper/accresmgr.hxx>
22 : #include <accessibility/helper/accessiblestrings.hrc>
23 : #include <toolkit/helper/convert.hxx>
24 : #include <accessibility/helper/characterattributeshelper.hxx>
25 : #include <comphelper/accessiblekeybindinghelper.hxx>
26 : #include <com/sun/star/awt/KeyModifier.hpp>
27 :
28 : #include <com/sun/star/accessibility/AccessibleRole.hpp>
29 : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
30 : #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
31 : #include <com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp>
32 : #include <unotools/accessiblestatesethelper.hxx>
33 : #include <comphelper/sequence.hxx>
34 : #include <vcl/svapp.hxx>
35 : #include <vcl/window.hxx>
36 : #include <vcl/menu.hxx>
37 : #include <vcl/unohelp2.hxx>
38 : #include <vcl/settings.hxx>
39 :
40 : using namespace ::com::sun::star::accessibility;
41 : using namespace ::com::sun::star::uno;
42 : using namespace ::com::sun::star::beans;
43 : using namespace ::com::sun::star::lang;
44 : using namespace ::com::sun::star;
45 : using namespace ::comphelper;
46 :
47 :
48 :
49 : // class VCLXAccessibleMenuItem
50 :
51 :
52 3412 : VCLXAccessibleMenuItem::VCLXAccessibleMenuItem( Menu* pParent, sal_uInt16 nItemPos, Menu* pMenu )
53 3412 : :OAccessibleMenuItemComponent( pParent, nItemPos, pMenu )
54 : {
55 3412 : }
56 :
57 :
58 :
59 6298 : VCLXAccessibleMenuItem::~VCLXAccessibleMenuItem()
60 : {
61 6298 : }
62 :
63 :
64 :
65 6174 : bool VCLXAccessibleMenuItem::IsFocused()
66 : {
67 6174 : return IsHighlighted();
68 : }
69 :
70 :
71 :
72 7296 : bool VCLXAccessibleMenuItem::IsSelected()
73 : {
74 7296 : return IsHighlighted();
75 : }
76 :
77 :
78 :
79 7296 : bool VCLXAccessibleMenuItem::IsChecked()
80 : {
81 7296 : bool bChecked = false;
82 :
83 7296 : if ( m_pParent )
84 : {
85 7296 : sal_uInt16 nItemId = m_pParent->GetItemId( m_nItemPos );
86 7296 : if ( m_pParent->IsItemChecked( nItemId ) )
87 32 : bChecked = true;
88 : }
89 :
90 7296 : return bChecked;
91 : }
92 :
93 :
94 :
95 14592 : bool VCLXAccessibleMenuItem::IsHighlighted()
96 : {
97 14592 : bool bHighlighted = false;
98 :
99 14592 : if ( m_pParent && m_pParent->IsHighlighted( m_nItemPos ) )
100 0 : bHighlighted = true;
101 :
102 14592 : return bHighlighted;
103 : }
104 :
105 :
106 :
107 3884 : void VCLXAccessibleMenuItem::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
108 : {
109 3884 : OAccessibleMenuItemComponent::FillAccessibleStateSet( rStateSet );
110 :
111 3884 : rStateSet.AddState( AccessibleStateType::FOCUSABLE );
112 :
113 3884 : if ( IsFocused() )
114 0 : rStateSet.AddState( AccessibleStateType::FOCUSED );
115 :
116 3884 : rStateSet.AddState( AccessibleStateType::SELECTABLE );
117 :
118 3884 : if ( IsSelected() )
119 0 : rStateSet.AddState( AccessibleStateType::SELECTED );
120 :
121 3884 : if ( IsChecked() )
122 16 : rStateSet.AddState( AccessibleStateType::CHECKED );
123 3884 : }
124 :
125 :
126 : // OCommonAccessibleText
127 :
128 :
129 4 : OUString VCLXAccessibleMenuItem::implGetText()
130 : {
131 4 : return m_sItemText;
132 : }
133 :
134 :
135 :
136 0 : Locale VCLXAccessibleMenuItem::implGetLocale()
137 : {
138 0 : return Application::GetSettings().GetLanguageTag().getLocale();
139 : }
140 :
141 :
142 :
143 0 : void VCLXAccessibleMenuItem::implGetSelection( sal_Int32& nStartIndex, sal_Int32& nEndIndex )
144 : {
145 0 : nStartIndex = 0;
146 0 : nEndIndex = 0;
147 0 : }
148 :
149 :
150 : // XInterface
151 :
152 :
153 131930 : IMPLEMENT_FORWARD_XINTERFACE2( VCLXAccessibleMenuItem, OAccessibleMenuItemComponent, VCLXAccessibleMenuItem_BASE )
154 :
155 :
156 : // XTypeProvider
157 :
158 :
159 0 : IMPLEMENT_FORWARD_XTYPEPROVIDER2( VCLXAccessibleMenuItem, OAccessibleMenuItemComponent, VCLXAccessibleMenuItem_BASE )
160 :
161 :
162 : // XServiceInfo
163 :
164 :
165 30 : OUString VCLXAccessibleMenuItem::getImplementationName() throw (RuntimeException, std::exception)
166 : {
167 30 : return OUString( "com.sun.star.comp.toolkit.AccessibleMenuItem" );
168 : }
169 :
170 :
171 :
172 0 : Sequence< OUString > VCLXAccessibleMenuItem::getSupportedServiceNames() throw (RuntimeException, std::exception)
173 : {
174 0 : Sequence< OUString > aNames(1);
175 0 : aNames[0] = "com.sun.star.awt.AccessibleMenuItem";
176 0 : return aNames;
177 : }
178 :
179 :
180 : // XAccessibleContext
181 :
182 :
183 3378 : sal_Int16 VCLXAccessibleMenuItem::getAccessibleRole( ) throw (RuntimeException, std::exception)
184 : {
185 3378 : OExternalLockGuard aGuard( this );
186 : // IA2 CWS. MT: We had the aditional roles in UAA for ever, but never used them anywhere.
187 : // Looks reasonable, but need to verify in Orca and VoiceOver.
188 3378 : sal_Int16 nRole = AccessibleRole::MENU_ITEM;
189 3378 : if ( m_pParent )
190 : {
191 3378 : sal_uInt16 nItemId = m_pParent->GetItemId( m_nItemPos );
192 3378 : MenuItemBits nItemBits = m_pParent->GetItemBits(nItemId);
193 3378 : if( nItemBits & MenuItemBits::RADIOCHECK)
194 166 : nRole = AccessibleRole::RADIO_MENU_ITEM;
195 3212 : else if( nItemBits & MenuItemBits::CHECKABLE)
196 66 : nRole = AccessibleRole::CHECK_MENU_ITEM;
197 : }
198 3378 : return nRole;
199 : }
200 :
201 :
202 : // XAccessibleText
203 :
204 :
205 0 : sal_Int32 VCLXAccessibleMenuItem::getCaretPosition() throw (RuntimeException, std::exception)
206 : {
207 0 : OExternalLockGuard aGuard( this );
208 :
209 0 : return -1;
210 : }
211 :
212 :
213 :
214 0 : sal_Bool VCLXAccessibleMenuItem::setCaretPosition( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
215 : {
216 :
217 0 : OExternalLockGuard aGuard( this );
218 :
219 0 : if ( !implIsValidRange( nIndex, nIndex, implGetText().getLength() ) )
220 0 : throw IndexOutOfBoundsException();
221 :
222 0 : return false;
223 : }
224 :
225 :
226 :
227 0 : sal_Unicode VCLXAccessibleMenuItem::getCharacter( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
228 : {
229 0 : OExternalLockGuard aGuard( this );
230 :
231 0 : return OCommonAccessibleText::getCharacter( nIndex );
232 : }
233 :
234 :
235 :
236 0 : Sequence< PropertyValue > VCLXAccessibleMenuItem::getCharacterAttributes( sal_Int32 nIndex, const Sequence< OUString >& aRequestedAttributes ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
237 : {
238 0 : OExternalLockGuard aGuard( this );
239 :
240 0 : OUString sText( implGetText() );
241 :
242 0 : if ( !implIsValidIndex( nIndex, sText.getLength() ) )
243 0 : throw IndexOutOfBoundsException();
244 :
245 0 : vcl::Font aFont = Application::GetSettings().GetStyleSettings().GetMenuFont();
246 0 : sal_Int32 nBackColor = getBackground();
247 0 : sal_Int32 nColor = getForeground();
248 : return CharacterAttributesHelper( aFont, nBackColor, nColor )
249 0 : .GetCharacterAttributes( aRequestedAttributes );
250 : }
251 :
252 :
253 :
254 0 : awt::Rectangle VCLXAccessibleMenuItem::getCharacterBounds( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
255 : {
256 0 : OExternalLockGuard aGuard( this );
257 :
258 0 : if ( !implIsValidIndex( nIndex, implGetText().getLength() ) )
259 0 : throw IndexOutOfBoundsException();
260 :
261 0 : awt::Rectangle aBounds( 0, 0, 0, 0 );
262 0 : if ( m_pParent )
263 : {
264 0 : sal_uInt16 nItemId = m_pParent->GetItemId( m_nItemPos );
265 0 : Rectangle aItemRect = m_pParent->GetBoundingRectangle( m_nItemPos );
266 0 : Rectangle aCharRect = m_pParent->GetCharacterBounds( nItemId, nIndex );
267 0 : aCharRect.Move( -aItemRect.Left(), -aItemRect.Top() );
268 0 : aBounds = AWTRectangle( aCharRect );
269 : }
270 :
271 0 : return aBounds;
272 : }
273 :
274 :
275 :
276 0 : sal_Int32 VCLXAccessibleMenuItem::getCharacterCount() throw (RuntimeException, std::exception)
277 : {
278 0 : OExternalLockGuard aGuard( this );
279 :
280 0 : return OCommonAccessibleText::getCharacterCount();
281 : }
282 :
283 :
284 :
285 0 : sal_Int32 VCLXAccessibleMenuItem::getIndexAtPoint( const awt::Point& aPoint ) throw (RuntimeException, std::exception)
286 : {
287 0 : OExternalLockGuard aGuard( this );
288 :
289 0 : sal_Int32 nIndex = -1;
290 0 : if ( m_pParent )
291 : {
292 0 : sal_uInt16 nItemId = 0;
293 0 : Rectangle aItemRect = m_pParent->GetBoundingRectangle( m_nItemPos );
294 0 : Point aPnt( VCLPoint( aPoint ) );
295 0 : aPnt += aItemRect.TopLeft();
296 0 : sal_Int32 nI = m_pParent->GetIndexForPoint( aPnt, nItemId );
297 0 : if ( nI != -1 && m_pParent->GetItemId( m_nItemPos ) == nItemId )
298 0 : nIndex = nI;
299 : }
300 :
301 0 : return nIndex;
302 : }
303 :
304 :
305 :
306 0 : OUString VCLXAccessibleMenuItem::getSelectedText() throw (RuntimeException, std::exception)
307 : {
308 0 : OExternalLockGuard aGuard( this );
309 :
310 0 : return OCommonAccessibleText::getSelectedText();
311 : }
312 :
313 :
314 :
315 0 : sal_Int32 VCLXAccessibleMenuItem::getSelectionStart() throw (RuntimeException, std::exception)
316 : {
317 0 : OExternalLockGuard aGuard( this );
318 :
319 0 : return OCommonAccessibleText::getSelectionStart();
320 : }
321 :
322 :
323 :
324 0 : sal_Int32 VCLXAccessibleMenuItem::getSelectionEnd() throw (RuntimeException, std::exception)
325 : {
326 0 : OExternalLockGuard aGuard( this );
327 :
328 0 : return OCommonAccessibleText::getSelectionEnd();
329 : }
330 :
331 :
332 :
333 0 : sal_Bool VCLXAccessibleMenuItem::setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
334 : {
335 0 : OExternalLockGuard aGuard( this );
336 :
337 0 : if ( !implIsValidRange( nStartIndex, nEndIndex, implGetText().getLength() ) )
338 0 : throw IndexOutOfBoundsException();
339 :
340 0 : return false;
341 : }
342 :
343 :
344 :
345 4 : OUString VCLXAccessibleMenuItem::getText() throw (RuntimeException, std::exception)
346 : {
347 4 : OExternalLockGuard aGuard( this );
348 :
349 4 : return OCommonAccessibleText::getText();
350 : }
351 :
352 :
353 :
354 0 : OUString VCLXAccessibleMenuItem::getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
355 : {
356 0 : OExternalLockGuard aGuard( this );
357 :
358 0 : return OCommonAccessibleText::getTextRange( nStartIndex, nEndIndex );
359 : }
360 :
361 :
362 :
363 0 : ::com::sun::star::accessibility::TextSegment VCLXAccessibleMenuItem::getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception)
364 : {
365 0 : OExternalLockGuard aGuard( this );
366 :
367 0 : return OCommonAccessibleText::getTextAtIndex( nIndex, aTextType );
368 : }
369 :
370 :
371 :
372 0 : ::com::sun::star::accessibility::TextSegment VCLXAccessibleMenuItem::getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception)
373 : {
374 0 : OExternalLockGuard aGuard( this );
375 :
376 0 : return OCommonAccessibleText::getTextBeforeIndex( nIndex, aTextType );
377 : }
378 :
379 :
380 :
381 0 : ::com::sun::star::accessibility::TextSegment VCLXAccessibleMenuItem::getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception)
382 : {
383 0 : OExternalLockGuard aGuard( this );
384 :
385 0 : return OCommonAccessibleText::getTextBehindIndex( nIndex, aTextType );
386 : }
387 :
388 :
389 :
390 0 : sal_Bool VCLXAccessibleMenuItem::copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
391 : {
392 0 : OExternalLockGuard aGuard( this );
393 :
394 0 : bool bReturn = false;
395 :
396 0 : if ( m_pParent )
397 : {
398 0 : vcl::Window* pWindow = m_pParent->GetWindow();
399 0 : if ( pWindow )
400 : {
401 0 : Reference< datatransfer::clipboard::XClipboard > xClipboard = pWindow->GetClipboard();
402 0 : if ( xClipboard.is() )
403 : {
404 0 : OUString sText( getTextRange( nStartIndex, nEndIndex ) );
405 :
406 0 : ::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText );
407 0 : const sal_uInt32 nRef = Application::ReleaseSolarMutex();
408 0 : xClipboard->setContents( pDataObj, NULL );
409 :
410 0 : Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY );
411 0 : if( xFlushableClipboard.is() )
412 0 : xFlushableClipboard->flushClipboard();
413 :
414 0 : Application::AcquireSolarMutex( nRef );
415 :
416 0 : bReturn = true;
417 0 : }
418 : }
419 : }
420 :
421 0 : return bReturn;
422 : }
423 :
424 :
425 : // XAccessibleAction
426 :
427 :
428 30 : sal_Int32 VCLXAccessibleMenuItem::getAccessibleActionCount( ) throw (RuntimeException, std::exception)
429 : {
430 30 : OExternalLockGuard aGuard( this );
431 :
432 30 : return 1;
433 : }
434 :
435 :
436 :
437 18 : sal_Bool VCLXAccessibleMenuItem::doAccessibleAction ( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
438 : {
439 18 : OExternalLockGuard aGuard( this );
440 :
441 18 : if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
442 2 : throw IndexOutOfBoundsException();
443 :
444 16 : Click();
445 :
446 18 : return true;
447 : }
448 :
449 :
450 :
451 0 : OUString VCLXAccessibleMenuItem::getAccessibleActionDescription ( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
452 : {
453 0 : OExternalLockGuard aGuard( this );
454 :
455 0 : if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
456 0 : throw IndexOutOfBoundsException();
457 :
458 0 : return TK_RES_STRING( RID_STR_ACC_ACTION_SELECT );
459 : }
460 :
461 :
462 :
463 4 : Reference< XAccessibleKeyBinding > VCLXAccessibleMenuItem::getAccessibleActionKeyBinding( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
464 : {
465 4 : OExternalLockGuard aGuard( this );
466 :
467 4 : if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
468 2 : throw IndexOutOfBoundsException();
469 :
470 2 : OAccessibleKeyBindingHelper* pKeyBindingHelper = new OAccessibleKeyBindingHelper();
471 2 : Reference< XAccessibleKeyBinding > xKeyBinding = pKeyBindingHelper;
472 :
473 2 : if ( m_pParent )
474 : {
475 : // create auto mnemonics
476 2 : if ( Application::GetSettings().GetStyleSettings().GetAutoMnemonic() && !( m_pParent->GetMenuFlags() & MENU_FLAG_NOAUTOMNEMONICS ) )
477 2 : m_pParent->CreateAutoMnemonics();
478 :
479 : // activation key
480 2 : KeyEvent aKeyEvent = m_pParent->GetActivationKey( m_pParent->GetItemId( m_nItemPos ) );
481 2 : vcl::KeyCode aKeyCode = aKeyEvent.GetKeyCode();
482 2 : Sequence< awt::KeyStroke > aSeq1(1);
483 2 : aSeq1[0].Modifiers = 0;
484 4 : Reference< XAccessible > xParent( getAccessibleParent() );
485 2 : if ( xParent.is() )
486 : {
487 2 : Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
488 2 : if ( xParentContext.is() && xParentContext->getAccessibleRole() == AccessibleRole::MENU_BAR )
489 2 : aSeq1[0].Modifiers |= awt::KeyModifier::MOD2;
490 : }
491 2 : aSeq1[0].KeyCode = aKeyCode.GetCode();
492 2 : aSeq1[0].KeyChar = aKeyEvent.GetCharCode();
493 2 : aSeq1[0].KeyFunc = static_cast< sal_Int16 >( aKeyCode.GetFunction() );
494 2 : pKeyBindingHelper->AddKeyBinding( aSeq1 );
495 :
496 : // complete menu activation key sequence
497 4 : Sequence< awt::KeyStroke > aSeq;
498 2 : if ( xParent.is() )
499 : {
500 2 : Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
501 2 : if ( xParentContext.is() && xParentContext->getAccessibleRole() == AccessibleRole::MENU )
502 : {
503 0 : Reference< XAccessibleAction > xAction( xParentContext, UNO_QUERY );
504 0 : if ( xAction.is() && xAction->getAccessibleActionCount() > 0 )
505 : {
506 0 : Reference< XAccessibleKeyBinding > xKeyB( xAction->getAccessibleActionKeyBinding( 0 ) );
507 0 : if ( xKeyB.is() && xKeyB->getAccessibleKeyBindingCount() > 1 )
508 0 : aSeq = xKeyB->getAccessibleKeyBinding( 1 );
509 0 : }
510 2 : }
511 : }
512 4 : Sequence< awt::KeyStroke > aSeq2 = ::comphelper::concatSequences( aSeq, aSeq1 );
513 2 : pKeyBindingHelper->AddKeyBinding( aSeq2 );
514 :
515 : // accelerator key
516 2 : vcl::KeyCode aAccelKeyCode = m_pParent->GetAccelKey( m_pParent->GetItemId( m_nItemPos ) );
517 2 : if ( aAccelKeyCode.GetCode() != 0 )
518 : {
519 0 : Sequence< awt::KeyStroke > aSeq3(1);
520 0 : aSeq3[0].Modifiers = 0;
521 0 : if ( aAccelKeyCode.IsShift() )
522 0 : aSeq3[0].Modifiers |= awt::KeyModifier::SHIFT;
523 0 : if ( aAccelKeyCode.IsMod1() )
524 0 : aSeq3[0].Modifiers |= awt::KeyModifier::MOD1;
525 0 : if ( aAccelKeyCode.IsMod2() )
526 0 : aSeq3[0].Modifiers |= awt::KeyModifier::MOD2;
527 0 : if ( aAccelKeyCode.IsMod3() )
528 0 : aSeq3[0].Modifiers |= awt::KeyModifier::MOD3;
529 0 : aSeq3[0].KeyCode = aAccelKeyCode.GetCode();
530 0 : aSeq3[0].KeyFunc = static_cast< sal_Int16 >( aAccelKeyCode.GetFunction() );
531 0 : pKeyBindingHelper->AddKeyBinding( aSeq3 );
532 2 : }
533 : }
534 :
535 4 : return xKeyBinding;
536 : }
537 :
538 :
539 : // XAccessibleValue
540 :
541 :
542 0 : Any VCLXAccessibleMenuItem::getCurrentValue( ) throw (RuntimeException, std::exception)
543 : {
544 0 : OExternalLockGuard aGuard( this );
545 :
546 0 : Any aValue;
547 0 : if ( IsSelected() )
548 0 : aValue <<= (sal_Int32) 1;
549 : else
550 0 : aValue <<= (sal_Int32) 0;
551 :
552 0 : return aValue;
553 : }
554 :
555 :
556 :
557 0 : sal_Bool VCLXAccessibleMenuItem::setCurrentValue( const Any& aNumber ) throw (RuntimeException, std::exception)
558 : {
559 0 : OExternalLockGuard aGuard( this );
560 :
561 0 : bool bReturn = false;
562 0 : sal_Int32 nValue = 0;
563 0 : OSL_VERIFY( aNumber >>= nValue );
564 :
565 0 : if ( nValue <= 0 )
566 : {
567 0 : DeSelect();
568 0 : bReturn = true;
569 : }
570 0 : else if ( nValue >= 1 )
571 : {
572 0 : Select();
573 0 : bReturn = true;
574 : }
575 :
576 0 : return bReturn;
577 : }
578 :
579 :
580 :
581 0 : Any VCLXAccessibleMenuItem::getMaximumValue( ) throw (RuntimeException, std::exception)
582 : {
583 0 : OExternalLockGuard aGuard( this );
584 :
585 0 : Any aValue;
586 0 : aValue <<= (sal_Int32) 1;
587 :
588 0 : return aValue;
589 : }
590 :
591 :
592 :
593 0 : Any VCLXAccessibleMenuItem::getMinimumValue( ) throw (RuntimeException, std::exception)
594 : {
595 0 : OExternalLockGuard aGuard( this );
596 :
597 0 : Any aValue;
598 0 : aValue <<= (sal_Int32) 0;
599 :
600 0 : return aValue;
601 60 : }
602 :
603 :
604 :
605 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|