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