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_svtools.hxx" 26 #include <svtools/brwbox.hxx> 27 #include <svtools/AccessibleBrowseBoxObjType.hxx> 28 #include <tools/debug.hxx> 29 #include <tools/multisel.hxx> 30 #include "datwin.hxx" 31 #include "brwimpl.hxx" 32 #include <com/sun/star/accessibility/AccessibleStateType.hpp> 33 #include <com/sun/star/accessibility/AccessibleRole.hpp> 34 #include <toolkit/helper/vclunohelper.hxx> 35 36 // Accessibility ============================================================== 37 38 using ::rtl::OUString; 39 using namespace ::com::sun::star::uno; 40 using ::com::sun::star::accessibility::XAccessible; 41 using namespace ::com::sun::star::accessibility; 42 43 // ============================================================================ 44 namespace svt 45 { 46 using namespace ::com::sun::star::lang; 47 using namespace utl; 48 49 Reference< XAccessible > getHeaderCell( BrowseBoxImpl::THeaderCellMap& _raHeaderCells, 50 sal_Int32 _nPos, 51 AccessibleBrowseBoxObjType _eType, 52 const Reference< XAccessible >& _rParent, 53 BrowseBox& _rBrowseBox, 54 IAccessibleFactory& rFactory 55 ) 56 { 57 Reference< XAccessible > xRet; 58 BrowseBoxImpl::THeaderCellMap::iterator aFind = _raHeaderCells.find( _nPos ); 59 if ( aFind == _raHeaderCells.end() ) 60 { 61 Reference< XAccessible > xAccessible = rFactory.createAccessibleBrowseBoxHeaderCell( 62 _nPos, 63 _rParent, 64 _rBrowseBox, 65 NULL, 66 _eType 67 ); 68 aFind = _raHeaderCells.insert( BrowseBoxImpl::THeaderCellMap::value_type( _nPos, xAccessible ) ).first; 69 } 70 if ( aFind != _raHeaderCells.end() ) 71 xRet = aFind->second; 72 return xRet; 73 } 74 75 // ============================================================================ 76 // ---------------------------------------------------------------------------- 77 Reference< XAccessible > BrowseBoxImpl::getAccessibleHeaderBar( AccessibleBrowseBoxObjType _eObjType ) 78 { 79 if ( m_pAccessible && m_pAccessible->isAlive() ) 80 return m_pAccessible->getHeaderBar( _eObjType ); 81 return NULL; 82 } 83 84 // ---------------------------------------------------------------------------- 85 Reference< XAccessible > BrowseBoxImpl::getAccessibleTable( ) 86 { 87 if ( m_pAccessible && m_pAccessible->isAlive() ) 88 return m_pAccessible->getTable( ); 89 return NULL; 90 } 91 } 92 93 // ============================================================================ 94 95 Reference< XAccessible > BrowseBox::CreateAccessible() 96 { 97 Window* pParent = GetAccessibleParentWindow(); 98 DBG_ASSERT( pParent, "BrowseBox::CreateAccessible - parent not found" ); 99 100 if( pParent && !m_pImpl->m_pAccessible) 101 { 102 Reference< XAccessible > xAccParent = pParent->GetAccessible(); 103 if( xAccParent.is() ) 104 { 105 m_pImpl->m_pAccessible = getAccessibleFactory().createAccessibleBrowseBox( 106 xAccParent, *this 107 ); 108 } 109 } 110 111 Reference< XAccessible > xAccessible; 112 if ( m_pImpl->m_pAccessible ) 113 xAccessible = m_pImpl->m_pAccessible->getMyself(); 114 115 return xAccessible; 116 } 117 // ----------------------------------------------------------------------------- 118 119 // Children ------------------------------------------------------------------- 120 121 Reference< XAccessible > BrowseBox::CreateAccessibleCell( sal_Int32 _nRow, sal_uInt16 _nColumnPos ) 122 { 123 // BBINDEX_TABLE must be the table 124 OSL_ENSURE(m_pImpl->m_pAccessible,"Invalid call: Accessible is null"); 125 126 return m_pImpl->m_aFactoryAccess.getFactory().createAccessibleBrowseBoxTableCell( 127 m_pImpl->getAccessibleTable(), 128 *this, 129 NULL, 130 _nRow, 131 _nColumnPos, 132 OFFSET_DEFAULT 133 ); 134 } 135 // ----------------------------------------------------------------------------- 136 137 Reference< XAccessible > BrowseBox::CreateAccessibleRowHeader( sal_Int32 _nRow ) 138 { 139 return svt::getHeaderCell( 140 m_pImpl->m_aRowHeaderCellMap, 141 _nRow, 142 svt::BBTYPE_ROWHEADERCELL, 143 m_pImpl->getAccessibleHeaderBar(svt::BBTYPE_ROWHEADERBAR), 144 *this, 145 m_pImpl->m_aFactoryAccess.getFactory() 146 ); 147 } 148 // ----------------------------------------------------------------------------- 149 150 Reference< XAccessible > BrowseBox::CreateAccessibleColumnHeader( sal_uInt16 _nColumnPos ) 151 { 152 return svt::getHeaderCell( 153 m_pImpl->m_aColHeaderCellMap, 154 _nColumnPos, 155 svt::BBTYPE_COLUMNHEADERCELL, 156 m_pImpl->getAccessibleHeaderBar(svt::BBTYPE_COLUMNHEADERBAR), 157 *this, 158 m_pImpl->m_aFactoryAccess.getFactory() 159 ); 160 } 161 // ----------------------------------------------------------------------------- 162 163 sal_Int32 BrowseBox::GetAccessibleControlCount() const 164 { 165 return 0; 166 } 167 // ----------------------------------------------------------------------------- 168 169 Reference< XAccessible > BrowseBox::CreateAccessibleControl( sal_Int32 ) 170 { 171 DBG_ASSERT( sal_False, "BrowseBox::CreateAccessibleControl: to be overwritten!" ); 172 return NULL; 173 } 174 // ----------------------------------------------------------------------------- 175 176 // Conversions ---------------------------------------------------------------- 177 178 sal_Bool BrowseBox::ConvertPointToCellAddress( 179 sal_Int32& rnRow, sal_uInt16& rnColumnPos, const Point& rPoint ) 180 { 181 //! TODO has to be checked 182 rnRow = GetRowAtYPosPixel(rPoint.Y()); 183 rnColumnPos = GetColumnAtXPosPixel(rPoint.X()); 184 return rnRow != BROWSER_INVALIDID && rnColumnPos != BROWSER_INVALIDID; 185 } 186 // ----------------------------------------------------------------------------- 187 188 sal_Bool BrowseBox::ConvertPointToRowHeader( sal_Int32& rnRow, const Point& rPoint ) 189 { 190 rnRow = GetRowAtYPosPixel(rPoint.Y()); 191 // sal_uInt16 nColumnId = GetColumnAtXPosPixel(rPoint.X()); 192 return rnRow != BROWSER_INVALIDID;// && nColumnId == 0; 193 } 194 // ----------------------------------------------------------------------------- 195 196 sal_Bool BrowseBox::ConvertPointToColumnHeader( sal_uInt16& _rnColumnPos, const Point& _rPoint ) 197 { 198 _rnColumnPos = GetColumnAtXPosPixel(_rPoint.X()); 199 return _rnColumnPos != BROWSER_INVALIDID; 200 } 201 // ----------------------------------------------------------------------------- 202 203 sal_Bool BrowseBox::ConvertPointToControlIndex( sal_Int32& _rnIndex, const Point& _rPoint ) 204 { 205 //! TODO has to be checked 206 sal_Int32 nRow = 0; 207 sal_uInt16 nColumn = 0; 208 sal_Bool bRet = ConvertPointToCellAddress(nRow,nColumn,_rPoint); 209 if ( bRet ) 210 _rnIndex = nRow * ColCount() + nColumn; 211 212 return bRet; 213 } 214 // ----------------------------------------------------------------------------- 215 216 // Object data and state ------------------------------------------------------ 217 218 OUString BrowseBox::GetAccessibleObjectName( ::svt::AccessibleBrowseBoxObjType eObjType,sal_Int32 _nPosition) const 219 { 220 OUString aRetText; 221 switch( eObjType ) 222 { 223 case ::svt::BBTYPE_BROWSEBOX: 224 aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "BrowseBox" ) ); 225 break; 226 case ::svt::BBTYPE_TABLE: 227 aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "Table" ) ); 228 break; 229 case ::svt::BBTYPE_ROWHEADERBAR: 230 aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "RowHeaderBar" ) ); 231 break; 232 case ::svt::BBTYPE_COLUMNHEADERBAR: 233 aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "ColumnHeaderBar" ) ); 234 break; 235 case ::svt::BBTYPE_TABLECELL: 236 if( ColCount() !=0 && GetRowCount()!=0) 237 { 238 239 sal_Int32 columnId = _nPosition % ColCount() +1; 240 aRetText = OUString( GetColumnDescription( sal_Int16( columnId ) ) ); 241 sal_Int32 rowId = _nPosition / GetRowCount() + 1; 242 aRetText += OUString::valueOf(rowId); 243 } 244 else 245 aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "TableCell" ) ); 246 #if OSL_DEBUG_LEVEL > 1 247 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( " [" ) ); 248 aRetText += OUString::valueOf(sal_Int32(GetCurRow())); 249 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( "," ) ); 250 aRetText += OUString::valueOf(sal_Int32(GetCurColumnId())); 251 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( "]" ) ); 252 #endif 253 break; 254 case ::svt::BBTYPE_ROWHEADERCELL: 255 { 256 sal_Int32 rowId = _nPosition + 1; 257 aRetText = OUString::valueOf( rowId ); 258 } 259 //aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "RowHeaderCell" ) ); 260 #if OSL_DEBUG_LEVEL > 1 261 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( " [" ) ); 262 aRetText += OUString::valueOf(sal_Int32(GetCurRow())); 263 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( "," ) ); 264 aRetText += OUString::valueOf(sal_Int32(GetCurColumnId())); 265 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( "]" ) ); 266 #endif 267 break; 268 case ::svt::BBTYPE_COLUMNHEADERCELL: 269 //aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "ColumnHeaderCell" ) ); 270 aRetText = OUString( GetColumnDescription( sal_Int16( _nPosition ) ) ); 271 #if OSL_DEBUG_LEVEL > 1 272 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( " [" ) ); 273 aRetText += OUString::valueOf(sal_Int32(GetCurRow())); 274 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( "," ) ); 275 aRetText += OUString::valueOf(sal_Int32(GetCurColumnId())); 276 aRetText += OUString( RTL_CONSTASCII_USTRINGPARAM( "]" ) ); 277 #endif 278 break; 279 default: 280 OSL_ENSURE(0,"BrowseBox::GetAccessibleName: invalid enum!"); 281 } 282 return aRetText; 283 } 284 // ----------------------------------------------------------------------------- 285 286 OUString BrowseBox::GetAccessibleObjectDescription( ::svt::AccessibleBrowseBoxObjType eObjType,sal_Int32 ) const 287 { 288 OUString aRetText; 289 switch( eObjType ) 290 { 291 case ::svt::BBTYPE_BROWSEBOX: 292 aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "BrowseBox description" ) ); 293 break; 294 case ::svt::BBTYPE_TABLE: 295 // aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "TABLE description" ) ); 296 break; 297 case ::svt::BBTYPE_ROWHEADERBAR: 298 // aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "ROWHEADERBAR description" ) ); 299 break; 300 case ::svt::BBTYPE_COLUMNHEADERBAR: 301 // aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "COLUMNHEADERBAR description" ) ); 302 break; 303 case ::svt::BBTYPE_TABLECELL: 304 // aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "TABLECELL description" ) ); 305 break; 306 case ::svt::BBTYPE_ROWHEADERCELL: 307 // aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "ROWHEADERCELL description" ) ); 308 break; 309 case ::svt::BBTYPE_COLUMNHEADERCELL: 310 // aRetText = OUString( RTL_CONSTASCII_USTRINGPARAM( "COLUMNHEADERCELL description" ) ); 311 break; 312 case ::svt::BBTYPE_CHECKBOXCELL: 313 break; 314 } 315 return aRetText; 316 } 317 // ----------------------------------------------------------------------------- 318 319 OUString BrowseBox::GetRowDescription( sal_Int32 ) const 320 { 321 return OUString(); 322 } 323 // ----------------------------------------------------------------------------- 324 325 OUString BrowseBox::GetColumnDescription( sal_uInt16 _nColumn ) const 326 { 327 return OUString( GetColumnTitle( GetColumnId( _nColumn ) ) ); 328 } 329 330 // ----------------------------------------------------------------------------- 331 332 void BrowseBox::FillAccessibleStateSet( 333 ::utl::AccessibleStateSetHelper& rStateSet, 334 ::svt::AccessibleBrowseBoxObjType eObjType ) const 335 { 336 switch( eObjType ) 337 { 338 case ::svt::BBTYPE_BROWSEBOX: 339 case ::svt::BBTYPE_TABLE: 340 341 rStateSet.AddState( AccessibleStateType::FOCUSABLE ); 342 if ( HasFocus() ) 343 rStateSet.AddState( AccessibleStateType::FOCUSED ); 344 if ( IsActive() ) 345 rStateSet.AddState( AccessibleStateType::ACTIVE ); 346 if ( GetUpdateMode() ) 347 rStateSet.AddState( AccessibleStateType::EDITABLE ); 348 if ( IsEnabled() ) 349 { 350 rStateSet.AddState( AccessibleStateType::ENABLED ); 351 rStateSet.AddState( AccessibleStateType::SENSITIVE ); 352 } 353 if ( IsReallyVisible() ) 354 rStateSet.AddState( AccessibleStateType::VISIBLE ); 355 if ( eObjType == ::svt::BBTYPE_TABLE ) 356 rStateSet.AddState( AccessibleStateType::MANAGES_DESCENDANTS ); 357 358 break; 359 case ::svt::BBTYPE_ROWHEADERBAR: 360 rStateSet.AddState( AccessibleStateType::FOCUSABLE ); 361 rStateSet.AddState( AccessibleStateType::VISIBLE ); 362 if ( GetSelectRowCount() ) 363 rStateSet.AddState( AccessibleStateType::FOCUSED ); 364 rStateSet.AddState( AccessibleStateType::MANAGES_DESCENDANTS ); 365 break; 366 case ::svt::BBTYPE_COLUMNHEADERBAR: 367 rStateSet.AddState( AccessibleStateType::FOCUSABLE ); 368 rStateSet.AddState( AccessibleStateType::VISIBLE ); 369 if ( GetSelectColumnCount() ) 370 rStateSet.AddState( AccessibleStateType::FOCUSED ); 371 rStateSet.AddState( AccessibleStateType::MANAGES_DESCENDANTS ); 372 break; 373 case ::svt::BBTYPE_TABLECELL: 374 { 375 sal_Int32 nRow = GetCurRow(); 376 sal_uInt16 nColumn = GetCurColumnId(); 377 if ( IsFieldVisible(nRow,nColumn) ) 378 rStateSet.AddState( AccessibleStateType::VISIBLE ); 379 if ( !IsFrozen( nColumn ) ) 380 rStateSet.AddState( AccessibleStateType::FOCUSABLE ); 381 rStateSet.AddState( AccessibleStateType::TRANSIENT ); 382 } 383 break; 384 case ::svt::BBTYPE_ROWHEADERCELL: 385 case ::svt::BBTYPE_COLUMNHEADERCELL: 386 case ::svt::BBTYPE_CHECKBOXCELL: 387 OSL_ENSURE(0,"Illegal call here!"); 388 break; 389 } 390 } 391 // ----------------------------------------------------------------------- 392 void BrowseBox::FillAccessibleStateSetForCell( ::utl::AccessibleStateSetHelper& _rStateSet, 393 sal_Int32 _nRow, sal_uInt16 _nColumnPos ) const 394 { 395 //! TODO check if the state is valid for table cells 396 if ( IsCellVisible( _nRow, _nColumnPos ) ) 397 _rStateSet.AddState( AccessibleStateType::VISIBLE ); 398 if ( GetCurrRow() == _nRow && GetCurrColumn() == _nColumnPos ) 399 _rStateSet.AddState( AccessibleStateType::FOCUSED ); 400 else // only transient when column is not focused 401 _rStateSet.AddState( AccessibleStateType::TRANSIENT ); 402 } 403 // ----------------------------------------------------------------------------- 404 405 void BrowseBox::GrabTableFocus() 406 { 407 GrabFocus(); 408 } 409 // ----------------------------------------------------------------------------- 410 String BrowseBox::GetCellText(long, sal_uInt16 ) const 411 { 412 DBG_ASSERT(0,"This method has to be implemented by the derived classes! BUG!!"); 413 return String(); 414 } 415 416 // ----------------------------------------------------------------------------- 417 void BrowseBox::commitHeaderBarEvent(sal_Int16 nEventId, 418 const Any& rNewValue, const Any& rOldValue, sal_Bool _bColumnHeaderBar ) 419 { 420 if ( isAccessibleAlive() ) 421 m_pImpl->m_pAccessible->commitHeaderBarEvent( nEventId, 422 rNewValue, rOldValue, _bColumnHeaderBar ); 423 } 424 425 // ----------------------------------------------------------------------------- 426 void BrowseBox::commitTableEvent( sal_Int16 _nEventId, const Any& _rNewValue, const Any& _rOldValue ) 427 { 428 if ( isAccessibleAlive() ) 429 m_pImpl->m_pAccessible->commitTableEvent( _nEventId, _rNewValue, _rOldValue ); 430 } 431 // ----------------------------------------------------------------------------- 432 void BrowseBox::commitBrowseBoxEvent( sal_Int16 _nEventId, const Any& _rNewValue, const Any& _rOldValue ) 433 { 434 if ( isAccessibleAlive() ) 435 m_pImpl->m_pAccessible->commitEvent( _nEventId, _rNewValue, _rOldValue); 436 } 437 438 // ----------------------------------------------------------------------------- 439 ::svt::IAccessibleFactory& BrowseBox::getAccessibleFactory() 440 { 441 return m_pImpl->m_aFactoryAccess.getFactory(); 442 } 443 444 // ----------------------------------------------------------------------------- 445 sal_Bool BrowseBox::isAccessibleAlive( ) const 446 { 447 return ( NULL != m_pImpl->m_pAccessible ) && m_pImpl->m_pAccessible->isAlive(); 448 } 449 // ----------------------------------------------------------------------------- 450 // IAccessibleTableProvider 451 // ----------------------------------------------------------------------------- 452 sal_Int32 BrowseBox::GetCurrRow() const 453 { 454 return GetCurRow(); 455 } 456 // ----------------------------------------------------------------------------- 457 sal_uInt16 BrowseBox::GetCurrColumn() const 458 { 459 return GetColumnPos( GetCurColumnId() ); 460 } 461 // ----------------------------------------------------------------------------- 462 sal_Bool BrowseBox::HasRowHeader() const 463 { 464 return ( GetColumnId( 0 ) == 0 ); // HandleColumn == RowHeader 465 } 466 // ----------------------------------------------------------------------------- 467 sal_Bool BrowseBox::IsCellFocusable() const 468 { 469 return sal_True; 470 } 471 // ----------------------------------------------------------------------------- 472 sal_Bool BrowseBox::GoToCell( sal_Int32 _nRow, sal_uInt16 _nColumn ) 473 { 474 return GoToRowColumnId( _nRow, GetColumnId( _nColumn ) ); 475 } 476 // ----------------------------------------------------------------------------- 477 void BrowseBox::SelectColumn( sal_uInt16 _nColumn, sal_Bool _bSelect ) 478 { 479 SelectColumnPos( _nColumn, _bSelect ); 480 } 481 // ----------------------------------------------------------------------------- 482 sal_Bool BrowseBox::IsColumnSelected( long _nColumn ) const 483 { 484 return ( pColSel && (0 <= _nColumn) && (_nColumn <= 0xFFF) ) ? 485 pColSel->IsSelected( static_cast< sal_uInt16 >( _nColumn ) ) : 486 sal_False; 487 } 488 // ----------------------------------------------------------------------------- 489 sal_Int32 BrowseBox::GetSelectedRowCount() const 490 { 491 return GetSelectRowCount(); 492 } 493 // ----------------------------------------------------------------------------- 494 sal_Int32 BrowseBox::GetSelectedColumnCount() const 495 { 496 const MultiSelection* pColumnSel = GetColumnSelection(); 497 return pColumnSel ? pColumnSel->GetSelectCount() : 0; 498 } 499 // ----------------------------------------------------------------------------- 500 void BrowseBox::GetAllSelectedRows( ::com::sun::star::uno::Sequence< sal_Int32 >& _rRows ) const 501 { 502 sal_Int32 nCount = GetSelectRowCount(); 503 if( nCount ) 504 { 505 _rRows.realloc( nCount ); 506 _rRows[ 0 ] = const_cast< BrowseBox* >( this )->FirstSelectedRow(); 507 for( sal_Int32 nIndex = 1; nIndex < nCount; ++nIndex ) 508 _rRows[ nIndex ] = const_cast< BrowseBox* >( this )->NextSelectedRow(); 509 DBG_ASSERT( const_cast< BrowseBox* >( this )->NextSelectedRow() == BROWSER_ENDOFSELECTION, 510 "BrowseBox::GetAllSelectedRows - too many selected rows found" ); 511 } 512 } 513 // ----------------------------------------------------------------------------- 514 void BrowseBox::GetAllSelectedColumns( ::com::sun::star::uno::Sequence< sal_Int32 >& _rColumns ) const 515 { 516 const MultiSelection* pColumnSel = GetColumnSelection(); 517 sal_Int32 nCount = GetSelectedColumnCount(); 518 if( pColumnSel && nCount ) 519 { 520 _rColumns.realloc( nCount ); 521 522 sal_Int32 nIndex = 0; 523 sal_uInt32 nRangeCount = pColumnSel->GetRangeCount(); 524 for( sal_uInt32 nRange = 0; nRange < nRangeCount; ++nRange ) 525 { 526 const Range& rRange = pColumnSel->GetRange( nRange ); 527 // loop has to include aRange.Max() 528 for( sal_Int32 nCol = rRange.Min(); nCol <= rRange.Max(); ++nCol ) 529 { 530 DBG_ASSERT( nIndex < nCount, 531 "GetAllSelectedColumns - range overflow" ); 532 _rColumns[ nIndex ] = nCol; 533 ++nIndex; 534 } 535 } 536 } 537 } 538 // ----------------------------------------------------------------------------- 539 sal_Bool BrowseBox::IsCellVisible( sal_Int32 _nRow, sal_uInt16 _nColumnPos ) const 540 { 541 return IsFieldVisible( _nRow, GetColumnId( _nColumnPos ) ); 542 } 543 // ----------------------------------------------------------------------------- 544 String BrowseBox::GetAccessibleCellText(long _nRow, sal_uInt16 _nColPos) const 545 { 546 return GetCellText( _nRow, GetColumnId( _nColPos ) ); 547 } 548 549 // ----------------------------------------------------------------------------- 550 sal_Bool BrowseBox::GetGlyphBoundRects( const Point& rOrigin, const String& rStr, int nIndex, int nLen, int nBase, MetricVector& rVector ) 551 { 552 return Control::GetGlyphBoundRects( rOrigin, rStr, nIndex, nLen, nBase, rVector ); 553 } 554 // ----------------------------------------------------------------------------- 555 Rectangle BrowseBox::GetWindowExtentsRelative( Window *pRelativeWindow ) const 556 { 557 return Control::GetWindowExtentsRelative( pRelativeWindow ); 558 } 559 // ----------------------------------------------------------------------------- 560 void BrowseBox::GrabFocus() 561 { 562 Control::GrabFocus(); 563 } 564 // ----------------------------------------------------------------------------- 565 Reference< XAccessible > BrowseBox::GetAccessible( sal_Bool bCreate ) 566 { 567 return Control::GetAccessible( bCreate ); 568 } 569 // ----------------------------------------------------------------------------- 570 Window* BrowseBox::GetAccessibleParentWindow() const 571 { 572 return Control::GetAccessibleParentWindow(); 573 } 574 // ----------------------------------------------------------------------------- 575 Window* BrowseBox::GetWindowInstance() 576 { 577 return this; 578 } 579