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/extended/AccessibleBrowseBoxBase.hxx" 27 #include <svtools/accessibletableprovider.hxx> 28 #include <rtl/uuid.h> 29 // 30 #include <com/sun/star/accessibility/AccessibleEventId.hpp> 31 #include <com/sun/star/accessibility/AccessibleStateType.hpp> 32 #include <unotools/accessiblerelationsethelper.hxx> 33 34 // ============================================================================ 35 36 using ::rtl::OUString; 37 38 using ::com::sun::star::uno::Reference; 39 using ::com::sun::star::uno::Sequence; 40 using ::com::sun::star::uno::Any; 41 42 using namespace ::com::sun::star; 43 using namespace ::com::sun::star::accessibility; 44 using namespace ::comphelper; 45 using namespace ::svt; 46 47 48 // ============================================================================ 49 50 namespace accessibility { 51 52 using namespace com::sun::star::accessibility::AccessibleStateType; 53 // ============================================================================ 54 55 // Ctor/Dtor/disposing -------------------------------------------------------- 56 57 DBG_NAME( AccessibleBrowseBoxBase ) 58 59 AccessibleBrowseBoxBase::AccessibleBrowseBoxBase( 60 const Reference< XAccessible >& rxParent, 61 IAccessibleTableProvider& rBrowseBox, 62 const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >& _xFocusWindow, 63 AccessibleBrowseBoxObjType eObjType ) : 64 AccessibleBrowseBoxImplHelper( m_aMutex ), 65 mxParent( rxParent ), 66 mpBrowseBox( &rBrowseBox ), 67 m_xFocusWindow(_xFocusWindow), 68 maName( rBrowseBox.GetAccessibleObjectName( eObjType ) ), 69 maDescription( rBrowseBox.GetAccessibleObjectDescription( eObjType ) ), 70 meObjType( eObjType ), 71 m_aClientId(0) 72 { 73 DBG_CTOR( AccessibleBrowseBoxBase, NULL ); 74 if ( m_xFocusWindow.is() ) 75 m_xFocusWindow->addFocusListener( this ); 76 } 77 78 AccessibleBrowseBoxBase::AccessibleBrowseBoxBase( 79 const Reference< XAccessible >& rxParent, 80 IAccessibleTableProvider& rBrowseBox, 81 const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >& _xFocusWindow, 82 AccessibleBrowseBoxObjType eObjType, 83 const ::rtl::OUString& rName, 84 const ::rtl::OUString& rDescription ) : 85 AccessibleBrowseBoxImplHelper( m_aMutex ), 86 mxParent( rxParent ), 87 mpBrowseBox( &rBrowseBox ), 88 m_xFocusWindow(_xFocusWindow), 89 maName( rName ), 90 maDescription( rDescription ), 91 meObjType( eObjType ), 92 m_aClientId(0) 93 { 94 DBG_CTOR( AccessibleBrowseBoxBase, NULL ); 95 if ( m_xFocusWindow.is() ) 96 m_xFocusWindow->addFocusListener( this ); 97 } 98 99 AccessibleBrowseBoxBase::~AccessibleBrowseBoxBase() 100 { 101 DBG_DTOR( AccessibleBrowseBoxBase, NULL ); 102 103 if( isAlive() ) 104 { 105 // increment ref count to prevent double call of Dtor 106 osl_incrementInterlockedCount( &m_refCount ); 107 dispose(); 108 } 109 } 110 111 void SAL_CALL AccessibleBrowseBoxBase::disposing() 112 { 113 ::osl::MutexGuard aGuard( getOslMutex() ); 114 if ( m_xFocusWindow.is() ) 115 { 116 BBSolarGuard aSolarGuard; 117 m_xFocusWindow->removeFocusListener( this ); 118 } 119 120 if ( getClientId( ) ) 121 { 122 AccessibleEventNotifier::TClientId nId( getClientId( ) ); 123 setClientId( 0 ); 124 AccessibleEventNotifier::revokeClientNotifyDisposing( nId, *this ); 125 } 126 127 mxParent = NULL; 128 mpBrowseBox = NULL; 129 } 130 131 // XAccessibleContext --------------------------------------------------------- 132 133 Reference< XAccessible > SAL_CALL AccessibleBrowseBoxBase::getAccessibleParent() 134 throw ( uno::RuntimeException ) 135 { 136 ::osl::MutexGuard aGuard( getOslMutex() ); 137 ensureIsAlive(); 138 return mxParent; 139 } 140 141 sal_Int32 SAL_CALL AccessibleBrowseBoxBase::getAccessibleIndexInParent() 142 throw ( uno::RuntimeException ) 143 { 144 ::osl::MutexGuard aGuard( getOslMutex() ); 145 ensureIsAlive(); 146 147 // -1 for child not found/no parent (according to specification) 148 sal_Int32 nRet = -1; 149 150 Reference< uno::XInterface > xMeMyselfAndI( static_cast< XAccessibleContext* >( this ), uno::UNO_QUERY ); 151 152 // iterate over parent's children and search for this object 153 if( mxParent.is() ) 154 { 155 Reference< XAccessibleContext > 156 xParentContext( mxParent->getAccessibleContext() ); 157 if( xParentContext.is() ) 158 { 159 Reference< uno::XInterface > xChild; 160 161 sal_Int32 nChildCount = xParentContext->getAccessibleChildCount(); 162 for( sal_Int32 nChild = 0; nChild < nChildCount; ++nChild ) 163 { 164 xChild = xChild.query( xParentContext->getAccessibleChild( nChild ) ); 165 166 if ( xMeMyselfAndI.get() == xChild.get() ) 167 { 168 nRet = nChild; 169 break; 170 } 171 } 172 } 173 } 174 return nRet; 175 } 176 177 OUString SAL_CALL AccessibleBrowseBoxBase::getAccessibleDescription() 178 throw ( uno::RuntimeException ) 179 { 180 ::osl::MutexGuard aGuard( getOslMutex() ); 181 ensureIsAlive(); 182 return maDescription; 183 } 184 185 OUString SAL_CALL AccessibleBrowseBoxBase::getAccessibleName() 186 throw ( uno::RuntimeException ) 187 { 188 ::osl::MutexGuard aGuard( getOslMutex() ); 189 ensureIsAlive(); 190 return maName; 191 } 192 193 Reference< XAccessibleRelationSet > SAL_CALL 194 AccessibleBrowseBoxBase::getAccessibleRelationSet() 195 throw ( uno::RuntimeException ) 196 { 197 ensureIsAlive(); 198 // BrowseBox does not have relations. 199 return new utl::AccessibleRelationSetHelper; 200 } 201 202 Reference< XAccessibleStateSet > SAL_CALL 203 AccessibleBrowseBoxBase::getAccessibleStateSet() 204 throw ( uno::RuntimeException ) 205 { 206 BBSolarGuard aSolarGuard; 207 ::osl::MutexGuard aGuard( getOslMutex() ); 208 // don't check whether alive -> StateSet may contain DEFUNC 209 return implCreateStateSetHelper(); 210 } 211 212 lang::Locale SAL_CALL AccessibleBrowseBoxBase::getLocale() 213 throw ( IllegalAccessibleComponentStateException, uno::RuntimeException ) 214 { 215 ::osl::MutexGuard aGuard( getOslMutex() ); 216 ensureIsAlive(); 217 if( mxParent.is() ) 218 { 219 Reference< XAccessibleContext > 220 xParentContext( mxParent->getAccessibleContext() ); 221 if( xParentContext.is() ) 222 return xParentContext->getLocale(); 223 } 224 throw IllegalAccessibleComponentStateException(); 225 } 226 227 // XAccessibleComponent ------------------------------------------------------- 228 229 sal_Bool SAL_CALL AccessibleBrowseBoxBase::containsPoint( const awt::Point& rPoint ) 230 throw ( uno::RuntimeException ) 231 { 232 return Rectangle( Point(), getBoundingBox().GetSize() ).IsInside( VCLPoint( rPoint ) ); 233 } 234 235 awt::Rectangle SAL_CALL AccessibleBrowseBoxBase::getBounds() 236 throw ( uno::RuntimeException ) 237 { 238 return AWTRectangle( getBoundingBox() ); 239 } 240 241 awt::Point SAL_CALL AccessibleBrowseBoxBase::getLocation() 242 throw ( uno::RuntimeException ) 243 { 244 return AWTPoint( getBoundingBox().TopLeft() ); 245 } 246 247 awt::Point SAL_CALL AccessibleBrowseBoxBase::getLocationOnScreen() 248 throw ( uno::RuntimeException ) 249 { 250 return AWTPoint( getBoundingBoxOnScreen().TopLeft() ); 251 } 252 253 awt::Size SAL_CALL AccessibleBrowseBoxBase::getSize() 254 throw ( uno::RuntimeException ) 255 { 256 return AWTSize( getBoundingBox().GetSize() ); 257 } 258 259 sal_Bool SAL_CALL AccessibleBrowseBoxBase::isShowing() 260 throw ( uno::RuntimeException ) 261 { 262 BBSolarGuard aSolarGuard; 263 ::osl::MutexGuard aGuard( getOslMutex() ); 264 ensureIsAlive(); 265 return implIsShowing(); 266 } 267 268 sal_Bool SAL_CALL AccessibleBrowseBoxBase::isVisible() 269 throw ( uno::RuntimeException ) 270 { 271 Reference< XAccessibleStateSet > xStateSet = getAccessibleStateSet(); 272 return xStateSet.is() ? 273 xStateSet->contains( AccessibleStateType::VISIBLE ) : sal_False; 274 } 275 276 sal_Bool SAL_CALL AccessibleBrowseBoxBase::isFocusTraversable() 277 throw ( uno::RuntimeException ) 278 { 279 Reference< XAccessibleStateSet > xStateSet = getAccessibleStateSet(); 280 return xStateSet.is() ? 281 xStateSet->contains( AccessibleStateType::FOCUSABLE ) : sal_False; 282 } 283 284 void SAL_CALL AccessibleBrowseBoxBase::focusGained( const ::com::sun::star::awt::FocusEvent& ) throw (::com::sun::star::uno::RuntimeException) 285 { 286 com::sun::star::uno::Any aFocused; 287 com::sun::star::uno::Any aEmpty; 288 aFocused <<= FOCUSED; 289 290 commitEvent(AccessibleEventId::STATE_CHANGED,aFocused,aEmpty); 291 } 292 // ----------------------------------------------------------------------------- 293 294 void SAL_CALL AccessibleBrowseBoxBase::focusLost( const ::com::sun::star::awt::FocusEvent& ) throw (::com::sun::star::uno::RuntimeException) 295 { 296 com::sun::star::uno::Any aFocused; 297 com::sun::star::uno::Any aEmpty; 298 aFocused <<= FOCUSED; 299 300 commitEvent(AccessibleEventId::STATE_CHANGED,aEmpty,aFocused); 301 } 302 // XAccessibleEventBroadcaster ------------------------------------------------ 303 304 void SAL_CALL AccessibleBrowseBoxBase::addEventListener( 305 const Reference< XAccessibleEventListener>& _rxListener ) 306 throw ( uno::RuntimeException ) 307 { 308 if ( _rxListener.is() ) 309 { 310 ::osl::MutexGuard aGuard( getOslMutex() ); 311 if ( !getClientId( ) ) 312 setClientId( AccessibleEventNotifier::registerClient( ) ); 313 314 AccessibleEventNotifier::addEventListener( getClientId( ), _rxListener ); 315 } 316 } 317 318 void SAL_CALL AccessibleBrowseBoxBase::removeEventListener( 319 const Reference< XAccessibleEventListener>& _rxListener ) 320 throw ( uno::RuntimeException ) 321 { 322 if( _rxListener.is() && getClientId( ) ) 323 { 324 ::osl::MutexGuard aGuard( getOslMutex() ); 325 sal_Int32 nListenerCount = AccessibleEventNotifier::removeEventListener( getClientId( ), _rxListener ); 326 if ( !nListenerCount ) 327 { 328 // no listeners anymore 329 // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client), 330 // and at least to us not firing any events anymore, in case somebody calls 331 // NotifyAccessibleEvent, again 332 333 AccessibleEventNotifier::TClientId nId( getClientId( ) ); 334 setClientId( 0 ); 335 AccessibleEventNotifier::revokeClient( nId ); 336 } 337 } 338 } 339 340 // XTypeProvider -------------------------------------------------------------- 341 342 Sequence< sal_Int8 > SAL_CALL AccessibleBrowseBoxBase::getImplementationId() 343 throw ( uno::RuntimeException ) 344 { 345 ::osl::MutexGuard aGuard( getOslGlobalMutex() ); 346 static Sequence< sal_Int8 > aId; 347 implCreateUuid( aId ); 348 return aId; 349 } 350 351 // XServiceInfo --------------------------------------------------------------- 352 353 sal_Bool SAL_CALL AccessibleBrowseBoxBase::supportsService( 354 const OUString& rServiceName ) 355 throw ( uno::RuntimeException ) 356 { 357 ::osl::MutexGuard aGuard( getOslMutex() ); 358 359 Sequence< OUString > aSupportedServices( getSupportedServiceNames() ); 360 const OUString* pArrBegin = aSupportedServices.getConstArray(); 361 const OUString* pArrEnd = pArrBegin + aSupportedServices.getLength(); 362 const OUString* pString = pArrBegin; 363 364 for( ; ( pString != pArrEnd ) && ( rServiceName != *pString ); ++pString ) 365 ; 366 367 return pString != pArrEnd; 368 } 369 370 Sequence< OUString > SAL_CALL AccessibleBrowseBoxBase::getSupportedServiceNames() 371 throw ( uno::RuntimeException ) 372 { 373 const OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.accessibility.AccessibleContext" ) ); 374 return Sequence< OUString >( &aServiceName, 1 ); 375 } 376 377 // other public methods ------------------------------------------------------- 378 379 void AccessibleBrowseBoxBase::setAccessibleName( const OUString& rName ) 380 { 381 ::osl::ClearableMutexGuard aGuard( getOslMutex() ); 382 Any aOld; 383 aOld <<= maName; 384 maName = rName; 385 386 aGuard.clear(); 387 388 commitEvent( 389 AccessibleEventId::NAME_CHANGED, 390 uno::makeAny( maName ), 391 aOld ); 392 } 393 394 void AccessibleBrowseBoxBase::setAccessibleDescription( const OUString& rDescription ) 395 { 396 ::osl::ClearableMutexGuard aGuard( getOslMutex() ); 397 Any aOld; 398 aOld <<= maDescription; 399 maDescription = rDescription; 400 401 aGuard.clear(); 402 403 commitEvent( 404 AccessibleEventId::DESCRIPTION_CHANGED, 405 uno::makeAny( maDescription ), 406 aOld ); 407 } 408 409 // internal virtual methods --------------------------------------------------- 410 411 sal_Bool AccessibleBrowseBoxBase::implIsShowing() 412 { 413 sal_Bool bShowing = sal_False; 414 if( mxParent.is() ) 415 { 416 Reference< XAccessibleComponent > 417 xParentComp( mxParent->getAccessibleContext(), uno::UNO_QUERY ); 418 if( xParentComp.is() ) 419 bShowing = implGetBoundingBox().IsOver( 420 VCLRectangle( xParentComp->getBounds() ) ); 421 } 422 return bShowing; 423 } 424 425 ::utl::AccessibleStateSetHelper* AccessibleBrowseBoxBase::implCreateStateSetHelper() 426 { 427 ::utl::AccessibleStateSetHelper* 428 pStateSetHelper = new ::utl::AccessibleStateSetHelper; 429 430 if( isAlive() ) 431 { 432 // SHOWING done with mxParent 433 if( implIsShowing() ) 434 pStateSetHelper->AddState( AccessibleStateType::SHOWING ); 435 // BrowseBox fills StateSet with states depending on object type 436 mpBrowseBox->FillAccessibleStateSet( *pStateSetHelper, getType() ); 437 } 438 else 439 pStateSetHelper->AddState( AccessibleStateType::DEFUNC ); 440 441 return pStateSetHelper; 442 } 443 444 // internal helper methods ---------------------------------------------------- 445 446 sal_Bool AccessibleBrowseBoxBase::isAlive() const 447 { 448 return !rBHelper.bDisposed && !rBHelper.bInDispose && mpBrowseBox; 449 } 450 451 void AccessibleBrowseBoxBase::ensureIsAlive() const 452 throw ( lang::DisposedException ) 453 { 454 if( !isAlive() ) 455 throw lang::DisposedException(); 456 } 457 458 Rectangle AccessibleBrowseBoxBase::getBoundingBox() 459 throw ( lang::DisposedException ) 460 { 461 BBSolarGuard aSolarGuard; 462 ::osl::MutexGuard aGuard( getOslMutex() ); 463 ensureIsAlive(); 464 Rectangle aRect = implGetBoundingBox(); 465 if ( 0 == aRect.Left() && 0 == aRect.Top() && 0 == aRect.Right() && 0 == aRect.Bottom() ) 466 { 467 DBG_ERRORFILE( "shit" ); 468 } 469 return aRect; 470 } 471 472 Rectangle AccessibleBrowseBoxBase::getBoundingBoxOnScreen() 473 throw ( lang::DisposedException ) 474 { 475 BBSolarGuard aSolarGuard; 476 ::osl::MutexGuard aGuard( getOslMutex() ); 477 ensureIsAlive(); 478 Rectangle aRect = implGetBoundingBoxOnScreen(); 479 if ( 0 == aRect.Left() && 0 == aRect.Top() && 0 == aRect.Right() && 0 == aRect.Bottom() ) 480 { 481 DBG_ERRORFILE( "shit" ); 482 } 483 return aRect; 484 } 485 486 void AccessibleBrowseBoxBase::commitEvent( 487 sal_Int16 _nEventId, const Any& _rNewValue, const Any& _rOldValue ) 488 { 489 ::osl::ClearableMutexGuard aGuard( getOslMutex() ); 490 if ( !getClientId( ) ) 491 // if we don't have a client id for the notifier, then we don't have listeners, then 492 // we don't need to notify anything 493 return; 494 495 // build an event object 496 AccessibleEventObject aEvent; 497 aEvent.Source = *this; 498 aEvent.EventId = _nEventId; 499 aEvent.OldValue = _rOldValue; 500 aEvent.NewValue = _rNewValue; 501 502 // let the notifier handle this event 503 504 AccessibleEventNotifier::addEvent( getClientId( ), aEvent ); 505 } 506 // ----------------------------------------------------------------------------- 507 508 void AccessibleBrowseBoxBase::implCreateUuid( Sequence< sal_Int8 >& rId ) 509 { 510 if( !rId.hasElements() ) 511 { 512 rId.realloc( 16 ); 513 rtl_createUuid( reinterpret_cast< sal_uInt8* >( rId.getArray() ), 0, sal_True ); 514 } 515 } 516 // ----------------------------------------------------------------------------- 517 sal_Int16 SAL_CALL AccessibleBrowseBoxBase::getAccessibleRole() 518 throw ( uno::RuntimeException ) 519 { 520 ensureIsAlive(); 521 sal_Int16 nRole = AccessibleRole::UNKNOWN; 522 switch ( meObjType ) 523 { 524 case BBTYPE_ROWHEADERCELL: 525 nRole = AccessibleRole::ROW_HEADER; 526 break; 527 case BBTYPE_COLUMNHEADERCELL: 528 nRole = AccessibleRole::COLUMN_HEADER; 529 break; 530 case BBTYPE_COLUMNHEADERBAR: 531 case BBTYPE_ROWHEADERBAR: 532 case BBTYPE_TABLE: 533 nRole = AccessibleRole::TABLE; 534 break; 535 case BBTYPE_TABLECELL: 536 nRole = AccessibleRole::TABLE_CELL; 537 break; 538 case BBTYPE_BROWSEBOX: 539 nRole = AccessibleRole::PANEL; 540 break; 541 case BBTYPE_CHECKBOXCELL: 542 nRole = AccessibleRole::CHECK_BOX; 543 break; 544 } 545 return nRole; 546 } 547 // ----------------------------------------------------------------------------- 548 Any SAL_CALL AccessibleBrowseBoxBase::getAccessibleKeyBinding() 549 throw ( uno::RuntimeException ) 550 { 551 return Any(); 552 } 553 // ----------------------------------------------------------------------------- 554 Reference<XAccessible > SAL_CALL AccessibleBrowseBoxBase::getAccessibleAtPoint( const ::com::sun::star::awt::Point& ) 555 throw ( uno::RuntimeException ) 556 { 557 return NULL; 558 } 559 // ----------------------------------------------------------------------------- 560 void SAL_CALL AccessibleBrowseBoxBase::disposing( const ::com::sun::star::lang::EventObject& ) throw (::com::sun::star::uno::RuntimeException) 561 { 562 m_xFocusWindow = NULL; 563 } 564 // ----------------------------------------------------------------------------- 565 sal_Int32 SAL_CALL AccessibleBrowseBoxBase::getForeground( ) throw (::com::sun::star::uno::RuntimeException) 566 { 567 BBSolarGuard aSolarGuard; 568 ::osl::MutexGuard aGuard( getOslMutex() ); 569 ensureIsAlive(); 570 571 sal_Int32 nColor = 0; 572 Window* pInst = mpBrowseBox->GetWindowInstance(); 573 if ( pInst ) 574 { 575 if ( pInst->IsControlForeground() ) 576 nColor = pInst->GetControlForeground().GetColor(); 577 else 578 { 579 Font aFont; 580 if ( pInst->IsControlFont() ) 581 aFont = pInst->GetControlFont(); 582 else 583 aFont = pInst->GetFont(); 584 nColor = aFont.GetColor().GetColor(); 585 } 586 } 587 588 return nColor; 589 } 590 // ----------------------------------------------------------------------------- 591 sal_Int32 SAL_CALL AccessibleBrowseBoxBase::getBackground( ) throw (::com::sun::star::uno::RuntimeException) 592 { 593 BBSolarGuard aSolarGuard; 594 ::osl::MutexGuard aGuard( getOslMutex() ); 595 ensureIsAlive(); 596 sal_Int32 nColor = 0; 597 Window* pInst = mpBrowseBox->GetWindowInstance(); 598 if ( pInst ) 599 { 600 if ( pInst->IsControlBackground() ) 601 nColor = pInst->GetControlBackground().GetColor(); 602 else 603 nColor = pInst->GetBackground().GetColor().GetColor(); 604 } 605 606 return nColor; 607 } 608 609 // ============================================================================ 610 DBG_NAME( BrowseBoxAccessibleElement ) 611 612 // XInterface ----------------------------------------------------------------- 613 IMPLEMENT_FORWARD_XINTERFACE2( BrowseBoxAccessibleElement, AccessibleBrowseBoxBase, BrowseBoxAccessibleElement_Base ) 614 615 // XTypeProvider -------------------------------------------------------------- 616 IMPLEMENT_FORWARD_XTYPEPROVIDER2( BrowseBoxAccessibleElement, AccessibleBrowseBoxBase, BrowseBoxAccessibleElement_Base ) 617 618 // XAccessible ---------------------------------------------------------------- 619 620 Reference< XAccessibleContext > SAL_CALL BrowseBoxAccessibleElement::getAccessibleContext() throw ( uno::RuntimeException ) 621 { 622 ensureIsAlive(); 623 return this; 624 } 625 626 // ---------------------------------------------------------------------------- 627 BrowseBoxAccessibleElement::BrowseBoxAccessibleElement( const Reference< XAccessible >& rxParent, IAccessibleTableProvider& rBrowseBox, 628 const Reference< awt::XWindow >& _xFocusWindow, AccessibleBrowseBoxObjType eObjType ) 629 :AccessibleBrowseBoxBase( rxParent, rBrowseBox, _xFocusWindow, eObjType ) 630 { 631 DBG_CTOR( BrowseBoxAccessibleElement, NULL ); 632 } 633 634 // ---------------------------------------------------------------------------- 635 BrowseBoxAccessibleElement::BrowseBoxAccessibleElement( const Reference< XAccessible >& rxParent, IAccessibleTableProvider& rBrowseBox, 636 const Reference< awt::XWindow >& _xFocusWindow, AccessibleBrowseBoxObjType eObjType, 637 const ::rtl::OUString& rName, const ::rtl::OUString& rDescription ) 638 :AccessibleBrowseBoxBase( rxParent, rBrowseBox, _xFocusWindow, eObjType, rName, rDescription ) 639 { 640 DBG_CTOR( BrowseBoxAccessibleElement, NULL ); 641 } 642 643 // ---------------------------------------------------------------------------- 644 BrowseBoxAccessibleElement::~BrowseBoxAccessibleElement( ) 645 { 646 DBG_DTOR( BrowseBoxAccessibleElement, NULL ); 647 } 648 649 // ============================================================================ 650 651 } // namespace accessibility 652 653 // ============================================================================ 654 655